Skip to content

skills: the three skills are checked against the tree they describe - #429

Merged
A13xB0 merged 1 commit into
mainfrom
msim-skills-refresh
Sep 1, 2026
Merged

A13xB0 merged 1 commit into
mainfrom
msim-skills-refresh

Conversation

@A13xB0

@A13xB0 A13xB0 commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Every specific claim in .claude/skills/ read against the current tree, and corrected. A skill that states a stale fact is worse than one that says nothing, because an agent acts on it confidently and does not go and look.

Branched from main at #421 so the session.list line is true.

The worst were invented, not stale

The driving skill's workflow section told an agent to run evaluate_link, reception_ledger, find_sites and energy_forecast. None of the four has ever existed anywhere in this repository. They are replaced by what does: meshbench link / profile for a budget, events.recent and events.dump for a miss, coverage.compute for a raster, node.energy and energy.for_selection for a solar budget, validate.fetch / validate.compare for the comparison.

Where a capability is genuinely unreachable from outside, the skill now says so rather than describing a workflow:

  • internal/study/planning (CoverArea, BaselineCoverage) has no caller outside its own tests. Site search is reachable from no verb and no subcommand.
  • link.pair and link.profile compute a budget and return only the endpoints. budget.for_selection answers {budgets: n}. World.Budgets reaches state.Snapshot but no summary and neither client, so the margins cannot be read back over the socket at all.

What moved today

was is
refusals "it answers no by returning a value, never by raising" a parameter it cannot understand is refused with a code from a closed set; Python raises a Refused subclass, Go returns a *Refused. The value-shaped no survives for state refusals such as sim.start
nodes.select_many an unrecognised shape deselected everything and answered as though it worked refuses, names the shapes it takes, lists the nodes that exist; nil still clears
terrain nothing held until terrain.allow, and a held warm does not hang: it ends the links job as failed and marks the session warmed, so a wait returns at once having measured nothing
count-shaped replies "four had that fault, all four fixed" five fixed (resource.list was the fifth); four still have it, named in a table: budget.for_selection, sweep.run, schedule.add, assert.add
miss causes a five-row table of outcomes that did not match the code the eight engine.Class values, with floor no longer the catch-all and what unclassified is for
emulation "only plain ESP32", "only the repeater role", "ESP32-S3 models only spi1" EmulatableBoards() covers plain ESP32, ESP32-S3 and nRF52840 under Renode, and there is no role gate. The skill now points at that function instead of carrying a list
toolchain build QEMU yourself with --enable-gcrypt resource.fetch with kind: "toolchain", with the trap that kind defaults to softdevice
verb counts absent, but the surrounding advice invited one cite tools/verbdoc/verbdoc.py, or ask session.verbs. No number that nothing checks

New surface written down where it saves a cycle: setup.check, job.list, session.list, node.antenna / nodes.antenna / node.aim, and the polarisation charge that the link budget applies and the coverage raster does not.

Interface skill

  • Panel.InWindowMenu and "Show all panels..." no longer exist; every panel names its own Menu and Section and the entries are generated.
  • auditTargets moved to audittargets_test.go, which is what "new panels join auditTargets" now means in practice.
  • The audit waits for a control's effect instead of assuming two frames.
  • The two /tmp scripts it told an agent to use are machine-local and have no committed replacement. Said plainly, with what there is instead, rather than pointing at a path nobody else has.
  • New rules from today: docked readability before popped-out, one table for a legend's colours and words, per-window widget state, bounding a pool that a long run grows, splitting a 500-line file on a seam, and the report-not-wizard rules the Setup panel had to keep.
  • The theme rule is marked as a convention rather than a check, because nothing enforces it and two files in comp/ break it.

Housekeeping

  • The meshcoresim skill's front-matter name said meshbench, matching neither its directory nor anything an agent invokes.
  • No em-dashes anywhere.
  • .claude/skills/README.md now says the mirroring is a manual copy that nothing checks, and links the new docs page.

Checks

Nothing outside .claude/ is touched, so gofmt, go vet and go build have nothing to say about this diff. Facts were established by reading the tree; python3 tools/verbdoc/verbdoc.py was run and left the tree clean.

Not done here

Two em-dashes in shipped copy, out of scope for this PR and worth a separate one: cmd/meshbench/cmd_rf.go prints ONE WAY ONLY - the %s direction fails with an em-dash, and internal/firmware/diff.go:155 carries one in a message. internal/layers_test.go:46's doc comment still says "seven" where the list says nine.

Companion documentation page: MeshBench/docs#27.

A skill that states something no longer true is worse than one that says
nothing, because an agent acts on it with confidence and does not go and look.
Every specific claim in the three was read against the current tree, and a
surprising number had moved.

The worst were not stale but invented: the driving skill's workflows told an
agent to run evaluate_link, reception_ledger, find_sites and energy_forecast,
none of which has ever existed. They are replaced by the verbs and subcommands
that do, and where a capability is genuinely unreachable from outside, the
skill now says so: internal/study/planning has no verb, and a link budget
computed by link.pair reaches no reply, no snapshot and no client.

What else moved. Refusals are the big one: a parameter the workbench cannot
understand is now refused with a code from a closed set rather than quietly
replaced, so "it answers no by returning a value" is only half the story and
the half that is left is where scripts still die. Terrain now waits for
consent, and a held warm does not hang, it finishes the links job as failed
and measures nothing, which is the failure a skill exists to warn about. Five
verbs that answered with a count now return their rows, and four still do not,
so the skill names those four instead of claiming the class was closed. Miss
causes gained collision, receiver-busy and unclassified, and floor stopped
being the catch-all, which changes what code matching on floor now sees. The
emulator toolchain is a download, so the advice that a board cannot be run
locally is gone. ESP32-S3 and nRF52 are emulated, and the claim that only
plain ESP32 and only repeaters could be was two releases out of date.

On counts: verbdoc owns them, so the skills cite the generator rather than
carrying a number nothing checks. Several written-down verb counts have
already gone stale, which is the argument.

In the interface skill, Panel.InWindowMenu and "Show all panels..." are gone,
every panel names its own menu instead; the audit's targets moved to their own
file; and the two /tmp scripts it told an agent to use are machine-local and
have no committed replacement, which is worth saying plainly rather than
pointing at a path nobody else has.

The meshcoresim skill's front-matter name said "meshbench", which matched
neither its directory nor anything an agent invokes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@A13xB0
A13xB0 force-pushed the msim-skills-refresh branch from b67d1ac to 1cc411e Compare September 1, 2026 22:38
@A13xB0
A13xB0 merged commit 1720b19 into main Sep 1, 2026
16 of 17 checks passed
@A13xB0
A13xB0 deleted the msim-skills-refresh branch September 1, 2026 23:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants