build
Phase 3 of AI Closed-Loop Programming — the Build phase, and the driver of the whole loop:…
Phase 2 of AI Closed-Loop Programming — Commissioning: prove the project's OWN never-seen-working parts (its board, its wiring, its peers/simulators), so that a failing test means the code and not the setup. The testbench itself is never commissioned by a project — its quality
$ npx -y skills add SensorsIot/Embedded-AI-Harness --skill commission --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/commissionContext preview
The summary Claude sees to decide when to auto-load this skill.
Phase 2 of AI Closed-Loop Programming — Commissioning: prove the project's OWN never-seen-working parts (its board, its wiring, its peers/simulators), so that a failing test means the code and not the setup. The testbench itself is never commissioned by a project — its quality
name: commission description: > Phase 2 of AI Closed-Loop Programming — Commissioning: prove the project's OWN never-seen-working parts (its board, its wiring, its peers/simulators), so that a failing test means the code and not the setup. The testbench itself is never commissioned by a project — its quality is depended on, and fixed in its own repo only when DUT testing disproves it. Use this skill when the user mentions commissioning, bring-up, a new board or peer, wiring or polarity doubts, or wants to burn down the debugging agenda. Exit gate: DUT ready.
A door into the Method skill: **the driver, the chain, and the dispatch map live in `../build/SKILL.md`** — read that first. This door exists so the phase can be entered by its own name; the phase itself is always derived from state. If the debugging agenda is already burned down, say so and continue as `/build` — typing the "wrong" door costs nothing.
**A project depends on the testbench's quality; it never proves it.** The bench is infrastructure, like the compiler — nobody tests gcc before compiling. Its quality is the testbench repo's own responsibility: its FSD, its suite, its acceptance run. A project consumes the bench's declared capabilities at face value, `available: yes` as declared.
**If DUT testing disproves the bench, fix the bench — but only then.** When a red is exonerated of the product by evidence, the bench fault becomes a testbench change request, is fixed at its source, ideally lands as a test in the *testbench's own* suite, and every future project inherits the fix. Attempting to verify the bench upfront — when nothing yet exists that could expose its errors — buys ceremony, not trust. Real work is the only instrument that finds real bench faults.
The debugging agenda (`../build/references/test-design.md` §5, first question) lists every **project-side** part that has never been observed doing its job *here* — whatever its reputation elsewhere:
Until each is seen working, a failing test measures the environment. The testbench's instruments are **not** on this list.
patterns (`0x55` survives inversion detection), make the simulator emit one whole telegram.
plan. The separator: does it discharge a requirement, or interrogate the setup? Setup measurements go on the **capability**, with their consequence ("two bursts in six arrive clean → assert across several cycles").
bench-declared capabilities are trusted by the law above.
the device) is `standard` in kind, ordered ahead of the journey.
unmet precondition — `not done` with the reason, never `failed`.
Observations belong to instruments.** Never design a step where a human reads a measurement by eye. If no instrument can make the observation, that is a testbench change request.
1. **Discover the testbench**; record hostname, last-seen IP and portal version as dated observations. Tests still select by identity — the record is memory, never a hardcoded address. 2. **Find the DUT and verify it is what the project expects** — slot, chip type and revision, flash size, MAC against the FSD's unit. Mismatch = stop: wrong board in the slot. 3. **Project peers**, if any (a meter simulator): present, answers one basic command; record its slot. 4. **Prove the forward path with a trivial known-good program** — CI compiles it, the artifact is flashed to the DUT's slot, and its output is observed. **Print alternating `ON` / `OFF` on serial rather than blinking an LED**: no GPIO need be wired, no camera or eye is required, and the bench observes it directly with a serial pattern match. One pass proves the whole pipeline — toolchain, artifact flow, flash, boot, observation — with code that cannot itself be the problem. When the project's first real build fails later, the pipeline is above suspicion.
Nothing else. Items 1–3 are seconds; item 4 is one CI cycle. Everything beyond this list is bench-side and covered by the law.
Discover the bench, then hold its URL in `$WB` — never write an address into a committed file.
# 1 · testbench: answers, and in the mode the project needs
curl -s $WB/api/info # hostname, slots configured/running
curl -s $WB/api/wifi/mode # wifi-testing, if the project uses WiFi
# 2 · DUT: the right board, in a free slot
curl -s $WB/api/devices # select by detected_chip, not by label
curl -s -X POST $WB/api/chip/info -H 'Content-Type: application/json' \
-d '{"slot":"<SLOT>"}' # chip, revision, flash size, MAC
# Compare with the unit the FSD records. A mismatch stops the phase.
# Check `debugging` as well as `state`: a live OpenOCD session holds the port
# while the slot still reads idle. Every native-USB ESP32 enumerates as
# 303a:1001, so `detected_chip` is only trustworthy if the bench selects the
# board by USB topology; a bench that does not will confidently report one
# slot's chip for another. Verify the MAC, which is per-board.
# 3 · project peers, if any: present, and answering one basic comSpec to silicon, hands off. A horse is strong, fast, and willing — and useless for heavy loads until you harness it. The harness is not a part of the horse and not a part of the cart: it is the coupling that turns raw strength into pulled weight.
Phase 3 of AI Closed-Loop Programming — the Build phase, and the driver of the whole loop:…
Phase 0 of AI Closed-Loop Programming — Definition: engineers the WHAT the loop converges on.…
Complete ESP-IDF lifecycle: project setup, build, flash, monitor, and OTA. Automatically…
PlatformIO lifecycle for ESP32 firmware: platformio.ini, environment selection, build, upload…
Interview the user relentlessly about a plan or design until reaching shared understanding,…
Phase 1 of AI Closed-Loop Programming — harness the AI for a project: the one-time setup that…