feat(plugins): every skill says when its own work is done - #781
feat(plugins): every skill says when its own work is done#781blafourcade wants to merge 1 commit into
Conversation
A step that nothing closes runs to wherever the next one begins or, failing that, to the journal's own last witnessed moment — and everything the session did afterwards reads as that skill's work. Measured on the one orchestrated session captured, 2026-09-04: `aidd-dev:01-plan` opened at 06:00:50, closed nothing, and took every one of the 972 records written over the three and a half hours that followed. Nothing any host emits can close it. The `tool_result` for a `Skill` call comes back in about a tenth of a second, which is the dispatch and not the completion, and no skill-scoped end event exists in Claude Code, Codex, Cursor, Copilot or OpenCode — checked in all five. The only party that knows the work is over is the skill, and the only channel it has is a tool call it makes. Four skills of fifty said so before this: `aidd-dev:01-plan`, and the three orchestrators the commit before this one covered. The remaining forty-six now do too, in the one form `step-ends.cjs` reads. The mechanism is not taken on trust — it is measured. In that same session `aidd-dev:01-plan` emitted the marker four times out of the four times it ran, and all four closed their interval. The three orchestrators emitted none, because none carried the marker; that was absence, never unreliability. The guard sweeps rather than lists, so a skill added to this tree is covered without the test being told. It already checked that a skill *declaring* an end declares it in the form the hook reads, and that every orchestrating skill declares one; it now also checks that every skill does. Reworded once after the fact: the block first quoted `step_start` in backticks, which `aidd-telemetry-cost-skill.test.js` counts as a field reference the cost skill names — nineteen expected, twenty found. Prose says the same thing and counts as nothing. No link out of a skill, deliberately: the tree ships flat and as a marketplace, so no relative path survives both, and `aidd-dev:01-plan`'s own block carries one that this does not repeat forty-six times. Mutations run, both killed: a skill made silent again (1 red), and a marker naming a different skill than its own (2 red). 370 repository script tests pass, 0 broken links in 787 files. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VWNxk63AGKkqE8HRqHLjGp AIDD-Session-Id: 2c21d903-3a7e-47ac-83f8-d8b7ae3aa579
3bd6485 to
e875226
Compare
|
Fermée volontairement, pas faute de fonctionner. Le mécanisme est bon et mesuré : Oui, et c'est asymétrique : C'est le point où la mesure déforme ce qu'elle mesure. Le gain ne porte que sur les sessions futures et ne sort pas l'axe de ~30 %. Les trois orchestrateurs qui portent déjà le marqueur restent : ce sont eux qui absorbaient des heures entières, et ils sont sur |
Why
A step that nothing closes runs to wherever the next one begins or, failing that, to the journal's own last witnessed moment — and everything the session did afterwards reads as that skill's work.
Measured on the one orchestrated session captured, 2026-09-04:
aidd-dev:01-planopened at 06:00:50, closed nothing, and took every one of the 972 records written over the three and a half hours that followed.Nothing any host can fix
The
tool_resultfor aSkillcall comes back in about a tenth of a second — the dispatch, not the completion. No skill-scoped end event exists in Claude Code, Codex, Cursor, Copilot or OpenCode; all five documentations were read. The only party that knows the work is over is the skill, and the only channel it has is a tool call it makes, whichstep-ends.cjsalready reads out of the call's own free-form arguments.What changes
Four skills of fifty said so before this:
aidd-dev:01-plan, plus the three orchestrators in the first commit. The remaining 46 now do too.nextnextonce this landsRebased onto
nextafter the orchestrator commit landed there on its own, so this PR now carries the 46 alone.The mechanism is measured, not assumed
In that same session
aidd-dev:01-planemitted the marker 4 times out of the 4 times it ran, and all four closed their interval. The three orchestrators emitted none — because none carried the marker. That was absence, never unreliability, and it is what this PR removes.The guard sweeps, it does not list
aidd-telemetry-step-end.test.jsalready checked that a skill declaring an end declares it in the form the hook reads, and that every orchestrating skill declares one. It now also checks that every skill does — as a sweep, so a skill added to this tree is covered without the test being told.Mutations run, both killed:
Two things worth flagging in review
step_startin backticks, whichaidd-telemetry-cost-skill.test.jscounts as a field reference the cost skill names — nineteen expected, twenty found. Reworded to prose, which says the same and counts as nothing. Caught by the repository suite, not by review.aidd-dev:01-plan's own block carries one; this does not repeat it 46 times.370 repository script tests pass, 0 broken links in 787 files.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VWNxk63AGKkqE8HRqHLjGp