Implement the escalation gate decided in #5: ## Escalation required for acting skills #37

Open
opened 2026-08-29 09:41:38 +00:00 by mathias · 1 comment
Owner

Implements the decision recorded in #5. Not started — filed so the decision does not rot in a comment.

The gate

bin/check-escalation (following bin/check-surfaces and bin/generate-index), wired into task check, with its own test file:

  • A skill in the acting set must have an ## Escalation section naming stop conditions and the hand-back mechanism.
  • Everything else is exempt.

The hard part: defining the acting set

Deliberately not solved here, because the obvious answers are all bad:

  • Hardcoded list in the script — rots the first time someone adds a skill and does not read the gate.
  • Content sniffing ("does the SKILL.md tell you to write/deploy/dispatch") — fragile and unfalsifiable.
  • A new frontmatter flag — #5 rejected new frontmatter, and this would reintroduce it through the back door.

The least-bad candidate is probably deriving it from what a skill tells the model to do: a skill that never instructs a write, a dispatch, or a credential touch is advisory. That needs a real rule, and the rule needs to be checkable, not vibes. Worth solving properly rather than shipping a list.

Starting candidates for the acting set

From a read of the current 41: tdd, atdd, refactoring, gitea-ci, web-shot, playwright, trainer, dream, own-the-task, secret-hygiene, superpowers-executing-plans, superpowers-subagent-driven-development, superpowers-dispatching-parallel-agents.

Read-only or advisory, and should say so explicitly rather than being silently exempt: debug, code-review, cad-babysit, cognitive-load, test-design, grill-me, discovery-framing, stage-gate-review.

Prior art to copy, not reinvent

cad-babysit already has the shape this gate wants — Iron Laws stating what it will never do, plus DECISION NEEDED (question / options / recommendation / blocks) as the named hand-back mechanism. Use it as the reference implementation; every acting skill's section should be as concrete as that one.

Bar

Per #19, each skill's escalation section is per-skill work, not a mechanical edit — a stop condition nobody pressure-tested is a stop condition nobody will hit. Expect one skill at a time, not a batch.

Definition of done

task check fails on an acting skill with no ## Escalation section; every skill in the acting set has one that names both the conditions and the hand-back mechanism; the exempt set says why it is exempt.

Implements the decision recorded in #5. Not started — filed so the decision does not rot in a comment. ## The gate `bin/check-escalation` (following `bin/check-surfaces` and `bin/generate-index`), wired into `task check`, with its own test file: - A skill in the **acting set** must have an `## Escalation` section naming stop conditions *and* the hand-back mechanism. - Everything else is exempt. ## The hard part: defining the acting set Deliberately not solved here, because the obvious answers are all bad: - **Hardcoded list in the script** — rots the first time someone adds a skill and does not read the gate. - **Content sniffing** ("does the SKILL.md tell you to write/deploy/dispatch") — fragile and unfalsifiable. - **A new frontmatter flag** — #5 rejected new frontmatter, and this would reintroduce it through the back door. The least-bad candidate is probably deriving it from what a skill *tells the model to do*: a skill that never instructs a write, a dispatch, or a credential touch is advisory. That needs a real rule, and the rule needs to be checkable, not vibes. Worth solving properly rather than shipping a list. ## Starting candidates for the acting set From a read of the current 41: `tdd`, `atdd`, `refactoring`, `gitea-ci`, `web-shot`, `playwright`, `trainer`, `dream`, `own-the-task`, `secret-hygiene`, `superpowers-executing-plans`, `superpowers-subagent-driven-development`, `superpowers-dispatching-parallel-agents`. Read-only or advisory, and should say so explicitly rather than being silently exempt: `debug`, `code-review`, `cad-babysit`, `cognitive-load`, `test-design`, `grill-me`, `discovery-framing`, `stage-gate-review`. ## Prior art to copy, not reinvent `cad-babysit` already has the shape this gate wants — Iron Laws stating what it will never do, plus `DECISION NEEDED` (question / options / recommendation / blocks) as the named hand-back mechanism. Use it as the reference implementation; every acting skill's section should be as concrete as that one. ## Bar Per #19, each skill's escalation section is per-skill work, not a mechanical edit — a stop condition nobody pressure-tested is a stop condition nobody will hit. Expect one skill at a time, not a batch. ## Definition of done `task check` fails on an acting skill with no `## Escalation` section; every skill in the acting set has one that names both the conditions and the hand-back mechanism; the exempt set says why it is exempt.
Author
Owner

Mechanism shipped in 1d140ec. Issue stays open — 30 of 41 skills still owe a rule, and that is the actual work.

The acting-set problem, solved by deleting it

This issue listed three candidate definitions and rejected all three. The fourth option was not on the list: there is no acting set. Every skill answers the question; a read-only one answers it in a line.

That removes the classification problem entirely, and buys something the gated-subset design could not — "this skill never hands back" stops being an absence and becomes a claim someone can disagree with. Today those two states looked identical.

The ratchet

bin/escalation-pending.txt exempts skills whose rule has not been written yet, because a stop condition nobody thought about is not worth enforcing. It only shrinks, and it is self-cleaning: a listed skill that has a section fails the gate, so an exemption cannot outlive its reason. Mutation-verified — appending a section to tdd while it is still listed turns task check red with "remove it from the list".

Also gated: an entry naming a skill that no longer exists. A stale exemption is how a gate quietly stops covering something.

Eleven written, and they are not rote

The advisory and read-only ones, where the honest answer is short. Worth reading a few, because generic ones would have been worthless:

  • cognitive-load — stop when the measurement disagrees with the reader's lived experience of the code. A metric that says "fine" about code everyone finds hard is evidence about the metric.
  • test-design — stop when the tests are fine and the design under test is what makes them awkward. Hard-to-test is a design finding; rewriting the tests around it hides the thing worth knowing.
  • code-review — stop when the diff is large enough that a review would be a skim, and say so, rather than producing confident coverage of a fraction of it.
  • grill-me — stop when a round produces no new objection. Interrogation past that point manufactures doubt rather than finding it.
  • debug — stop when the report has no failure text and no locator: name the artifact you need. This is item 1 of #36, answered here rather than there, and it now agrees with cad-babysit's read-the-log-first rule as that issue asked.

What remains

The 30 in the list are the ones that write files, dispatch agents, touch credentials or move releases — tdd, atdd, refactoring, gitea-ci, web-shot, playwright, trainer, dream, own-the-task, secret-hygiene, the superpowers-* execution cluster, and the rest.

Per #19, one at a time with a pressure test, not a batch. A stop condition nobody tested is a stop condition nobody will hit — and #14 already demonstrated twice that my prediction of what a model needs told me the wrong thing.

cad-babysit remains the reference implementation: Iron Laws stating what it will never do, plus DECISION NEEDED as the named hand-back mechanism. Every remaining section should be that concrete.

Mechanism shipped in `1d140ec`. Issue stays open — 30 of 41 skills still owe a rule, and that is the actual work. ## The acting-set problem, solved by deleting it This issue listed three candidate definitions and rejected all three. The fourth option was not on the list: **there is no acting set**. Every skill answers the question; a read-only one answers it in a line. That removes the classification problem entirely, and buys something the gated-subset design could not — "this skill never hands back" stops being an absence and becomes a claim someone can disagree with. Today those two states looked identical. ## The ratchet `bin/escalation-pending.txt` exempts skills whose rule has not been written yet, because a stop condition nobody thought about is not worth enforcing. It only shrinks, and it is **self-cleaning**: a listed skill that *has* a section fails the gate, so an exemption cannot outlive its reason. Mutation-verified — appending a section to `tdd` while it is still listed turns `task check` red with "remove it from the list". Also gated: an entry naming a skill that no longer exists. A stale exemption is how a gate quietly stops covering something. ## Eleven written, and they are not rote The advisory and read-only ones, where the honest answer is short. Worth reading a few, because generic ones would have been worthless: - **`cognitive-load`** — stop when the measurement disagrees with the reader's lived experience of the code. A metric that says "fine" about code everyone finds hard is evidence about the metric. - **`test-design`** — stop when the tests are fine and the design under test is what makes them awkward. Hard-to-test is a design finding; rewriting the tests around it hides the thing worth knowing. - **`code-review`** — stop when the diff is large enough that a review would be a skim, and say so, rather than producing confident coverage of a fraction of it. - **`grill-me`** — stop when a round produces no new objection. Interrogation past that point manufactures doubt rather than finding it. - **`debug`** — stop when the report has no failure text and no locator: name the artifact you need. This is item 1 of #36, answered here rather than there, and it now agrees with `cad-babysit`'s read-the-log-first rule as that issue asked. ## What remains The 30 in the list are the ones that write files, dispatch agents, touch credentials or move releases — `tdd`, `atdd`, `refactoring`, `gitea-ci`, `web-shot`, `playwright`, `trainer`, `dream`, `own-the-task`, `secret-hygiene`, the `superpowers-*` execution cluster, and the rest. Per #19, one at a time with a pressure test, not a batch. A stop condition nobody tested is a stop condition nobody will hit — and #14 already demonstrated twice that my prediction of what a model needs told me the wrong thing. `cad-babysit` remains the reference implementation: Iron Laws stating what it will never do, plus `DECISION NEEDED` as the named hand-back mechanism. Every remaining section should be that concrete.
mathias added the risk/lowsize/mtype/feat labels 2026-09-16 22:22:07 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mathias/skills#37