{"id":53992,"plugin_id":"plugins_6ac9709535408191a8dc938884a91227","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T13:55:40.363Z","digest":"662f864a208e12787cfbc8f28f0115ee393037db162a06ce10066bbe27582eb1","against":null,"payload":{"description":"Validate firmware behavior on real hardware rather than compilation-only checks. Use when running physical acceptance tests, confirming boot markers, validating sensor output, or checking runtime timing/telemetry.","included_files":[],"name":"hardware-in-the-loop-test","skill_md_contents":"---\nname: hardware-in-the-loop-test\ndescription: Validate firmware behavior on real hardware rather than compilation-only checks. Use when running physical acceptance tests, confirming boot markers, validating sensor output, or checking runtime timing/telemetry.\n---\n\n# Hardware-in-the-Loop Test\n\n> **Reading results:** a non-zero exit means look at BOTH streams. An operation\n> that ran but failed (a build with errors) puts `success: false` on **stdout**;\n> one that could not run (bad arguments, policy, a busy port) puts `errorType` on\n> **stderr** with stdout empty. Capture stdout and stderr separately with `--json`. See the\n> `pio-manager` skill for the full contract.\n\n## Purpose\n\nUse this skill to validate firmware behavior on a real device, not just through compilation.\n\n## Safety Rules\n\n- Ask before flashing.\n- Do not assume physical wiring is safe.\n- Do not activate motors, heaters, lasers, relays, pumps, or high-power outputs without explicit user approval.\n- Keep tests bounded by timeout.\n- Save logs and artifacts.\n\n## Workflow\n\n1. Define finite expected markers, rejected patterns, timeout, stability window, and safe physical behavior.\n2. Resolve one project, environment, board, and stable device binding with `pio-agent target-resolve`; stop on ambiguity or replacement.\n3. Validate and build with `pio-agent agent-build-diagnose`.\n4. Ask for an approval scoped to the exact flash workflow and target binding.\n5. Run `pio-agent agent-flash-monitor-verify` after approval.\n6. Check bounded serial markers, timing, or telemetry and retain task/log/artifact references.\n7. Mark build, flash, monitor, and assertions independently as pass, fail, or inconclusive.\n8. Cancel runaway tracked tasks with `pio-agent task-cancel <id>`; confirm cleanup with `pio-agent task-history --project-dir <dir>`, `pio-agent monitor-status`, and `pio-agent lock status`.\n9. Save redacted evidence and summarize the result.\n\nScheduled HIL writes require a pre-existing, exact, expiring `lab_runner` policy. A saved prompt cannot create, approve, or broaden that policy, and default scheduled monitoring must remain read/build/monitor-only.\n\n## Example Test Definition\n\n```yaml\nname: esp32_boot_marker\nboard: esp32dev\nexpected:\n  serial_contains: BOOT_OK\n  timeout_seconds: 15\n```\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}