Skip to content

feat(plugins): every skill says when its own work is done - #781

Closed
blafourcade wants to merge 1 commit into
nextfrom
feat/an-orchestration-says-when-it-is-done
Closed

feat(plugins): every skill says when its own work is done#781
blafourcade wants to merge 1 commit into
nextfrom
feat/an-orchestration-says-when-it-is-done

Conversation

@blafourcade

@blafourcade blafourcade commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

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-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 can fix

The tool_result for a Skill call 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, which step-ends.cjs already 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.

Where it came from Skills
already declared before any of this 1
the three orchestrators, merged separately into next 3
this PR 46
total on next once this lands 50 / 50

Rebased onto next after 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-plan emitted 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.js 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 — as a sweep, so a skill added to this tree is covered without the test being told.

Mutations run, both killed:

Mutation Red
a skill made silent again 1
a marker naming a different skill than its own 2

Two things worth flagging in review

  • 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. Reworded to prose, which says the same and counts as nothing. Caught by the repository suite, not by review.
  • No link out of a skill, deliberately. The tree ships flat and as a marketplace, so no relative path survives both. 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

@blafourcade
blafourcade requested a review from a team as a code owner September 5, 2026 18:41
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
@blafourcade
blafourcade force-pushed the feat/an-orchestration-says-when-it-is-done branch from 3bd6485 to e875226 Compare September 5, 2026 18:51
@blafourcade blafourcade changed the title feat: every skill says when its own work is done feat(plugins): every skill says when its own work is done Sep 5, 2026
@blafourcade

Copy link
Copy Markdown
Contributor Author

Fermée volontairement, pas faute de fonctionner.

Le mécanisme est bon et mesuré : aidd-dev:01-plan a émis son marqueur 4 fois sur 4, et les quatre ont fermé leur intervalle. Ce qui ne va pas est le prix, et il est devenu visible en répondant à une question simple — est-ce que tout skill doit désormais déclarer sa fin ?

Oui, et c'est asymétrique : step_start est écrit par le hook depuis l'appel Skill de l'hôte, sans que le skill sache qu'il existe, tandis que step_end ne peut venir que du skill lui-même. Cette PR ajoute une garde qui l'exige des 50, et rien n'enseigne la règle à aidd-context:04-skill-generate. Le premier skill généré ensuite ferait échouer un test pour une raison que son auteur n'a jamais lue — et le réparer voudrait dire graver dix lignes de télémétrie dans le générateur, donc dans chaque SKILL.md à venir.

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 next par un commit séparé.

@blafourcade blafourcade closed this Sep 6, 2026
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.

1 participant