Skip to content
Development
Skill

/commission

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 workbench itself is never commissioned by a project — its quality

From plugin
embedded-ai-harness
16118 skills
Install
$ npx -y skills add SensorsIot/Embedded-AI-Harness --skill commission --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/commission

Context 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 workbench itself is never commissioned by a project — its quality

SKILL.md

commission.SKILL.md
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.

Commission — Phase 2 door

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.

The law: no project tests the testbench

**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.

What commissioning is, under the law

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:

  • the DUT board itself — this unit, this slot, first flash, first boot
  • project peers and simulators (an M-Bus simulator feeding telegrams)
  • project-specific wiring and its polarity
  • the project firmware's first contact with each path it uses

Until each is seen working, a failing test measures the environment. The testbench's instruments are **not** on this list.

  • Work the agenda top-down; each item names *what proves it*. Drive known

patterns (`0x55` survives inversion detection), make the simulator emit one whole telegram.

  • **Agenda items are debugging work, not test cases** — they never enter the

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").

  • The `unproven` capability state applies to **project-side equipment only** —

bench-declared capabilities are trusted by the law above.

  • The bring-up work that *is* a test case (it discharges a requirement about

the device) is `standard` in kind, ordered ahead of the journey.

  • The DUT and testbench are not always powered. An unreachable bench is an

unmet precondition — `not done` with the reason, never `failed`.

  • **The operator's hands are for physical acts — plug, wire, power, swap.

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.

The worked shape — a typical ESP32 project on the testbench

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.

Running the four checks

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 com
Read more
Ships withembedded-ai-harness

Spec to silicon, hands off.

Get the whole plugin
Stats
166
Stars
53
Forks
Active
Maintenance
Python
Language
MIT
License
7d ago
Last commit
6mo ago
Created

Repo: SensorsIot/Embedded-AI-Harness

Other skills on embedded-ai-harness.