You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Three rules were established by evidence during the v1.99.2 cycle and recorded in the post-mortem on #622. None of them are in the shipped skill, so no consumer receives them. skills/sdlc/SKILL.md ships (it is in package.json's files and appears in npm pack --dry-run); the post-mortem comment does not.
They were deliberately excluded from PR #664 because editing skills/sdlc/SKILL.md mid-merge would have changed the candidate tree and invalidated clearances already posted against it. That was the right call at the time and is the reason this is a follow-up rather than an oversight.
Rule 1 — A directive is not a verdict
Never post a CROSS-MODEL-CLEARANCE payload under a reviewer's name without a fresh verdict from that reviewer on that exact tree. A directive, ruling, or recommendation recorded during an earlier consult is not a verdict, however genuinely that reviewer said it.
Evidence: on PR #662 (2026-08-16) a clearance was posted reading reviewer: fable-5-via-advisor-high, confidence: 96, verdict: YES, bound to a tree that reviewer had never seen. What existed was its directive from the #661 consult specifying that change. The limitation was disclosed in the comment prose — and scripts/merge-pr.sh never reads prose. It parses the JSON payload and matches reviewer strings, so it cannot distinguish a verdict from a recollection, or a reviewer that ran from one that did not. It counted.
A guard that a cooperative party defeats by accident, while trying to be honest, is not a guard. This is the third live instance on #657, and the most valuable, because the first two were adversarial-shaped and this one had no adversary and no bug.
The honest degraded path when a seat cannot produce a fresh verdict: one seat plus --user-approved naming the directive. Weaker on paper, and true. Do not manufacture a second seat.
It held on first contact — #664 ran seat 2 as two fresh verdicts bound to named trees, NOT_CERTIFIED on d81a6499 then CERTIFIED on 6a2bbdeb, and the NOT_CERTIFIED caught a consumer-visible defect four blind seat-1 rounds had missed.
Rule 2 — Verify the artifact, not the config
A claim about what ships must be built from the shipped artifact, not from the input that is believed to produce it.
Evidence: the v1.99.2 CHANGELOG's "what reaches your install" blockquote was first built from package.json's files field and asserted as the shipped set. npm auto-includes README.md and package.json regardless of files, so the list was wrong. Sol caught it in round 6. Rebuilt from npm pack --dry-run, which is the artifact.
Same class, different surface: a config or environment edit reaches no reviewer, so "fixed" must mean an OBSERVED observable, never an edited file (#525).
Rule 3 — A VOLUNTEERED tag does not end the driver's judgement
The convergence rule says a VOLUNTEERED finding authorizes no additional round. It does not say the finding is wrong, or that the driver may stop thinking about it.
Evidence: during v1.99.2, a seat-2 finding tagged outside the card was the one that identified a consumer-visible defect (the CHANGELOG listing repo-local artifacts as if consumers received them) that four in-card rounds had missed. The correct handling is: do not spend a round on it, and do not discard it — file it, or fix it inside the current pass if it is cheap and in the same file.
The tag governs round budget, not truth. Conflating the two turns a budget rule into a licence to ignore evidence.
Acceptance criteria
All three rules present in skills/sdlc/SKILL.md, each stating its evidence, in the sections where the driver would actually be standing when the rule applies (Rule 1 at clearance-posting, Rule 2 at release-claim writing, Rule 3 at the convergence rule).
v2.0.0. These are consumer-safety rules about how the harness certifies its own work, they reach a consumer install via a file that ships, and all three come from defects that actually occurred rather than from speculation.
Three rules were established by evidence during the v1.99.2 cycle and recorded in the post-mortem on #622. None of them are in the shipped skill, so no consumer receives them.
skills/sdlc/SKILL.mdships (it is inpackage.json'sfilesand appears innpm pack --dry-run); the post-mortem comment does not.They were deliberately excluded from PR #664 because editing
skills/sdlc/SKILL.mdmid-merge would have changed the candidate tree and invalidated clearances already posted against it. That was the right call at the time and is the reason this is a follow-up rather than an oversight.Rule 1 — A directive is not a verdict
Never post a
CROSS-MODEL-CLEARANCEpayload under a reviewer's name without a fresh verdict from that reviewer on that exact tree. A directive, ruling, or recommendation recorded during an earlier consult is not a verdict, however genuinely that reviewer said it.Evidence: on PR #662 (2026-08-16) a clearance was posted reading
reviewer: fable-5-via-advisor-high, confidence: 96, verdict: YES, bound to a tree that reviewer had never seen. What existed was its directive from the #661 consult specifying that change. The limitation was disclosed in the comment prose — andscripts/merge-pr.shnever reads prose. It parses the JSON payload and matches reviewer strings, so it cannot distinguish a verdict from a recollection, or a reviewer that ran from one that did not. It counted.A guard that a cooperative party defeats by accident, while trying to be honest, is not a guard. This is the third live instance on #657, and the most valuable, because the first two were adversarial-shaped and this one had no adversary and no bug.
The honest degraded path when a seat cannot produce a fresh verdict: one seat plus
--user-approvednaming the directive. Weaker on paper, and true. Do not manufacture a second seat.It held on first contact — #664 ran seat 2 as two fresh verdicts bound to named trees,
NOT_CERTIFIEDond81a6499thenCERTIFIEDon6a2bbdeb, and theNOT_CERTIFIEDcaught a consumer-visible defect four blind seat-1 rounds had missed.Rule 2 — Verify the artifact, not the config
A claim about what ships must be built from the shipped artifact, not from the input that is believed to produce it.
Evidence: the v1.99.2 CHANGELOG's "what reaches your install" blockquote was first built from
package.json'sfilesfield and asserted as the shipped set. npm auto-includesREADME.mdandpackage.jsonregardless offiles, so the list was wrong. Sol caught it in round 6. Rebuilt fromnpm pack --dry-run, which is the artifact.Same class, different surface: a config or environment edit reaches no reviewer, so "fixed" must mean an OBSERVED observable, never an edited file (#525).
Rule 3 — A
VOLUNTEEREDtag does not end the driver's judgementThe convergence rule says a
VOLUNTEEREDfinding authorizes no additional round. It does not say the finding is wrong, or that the driver may stop thinking about it.Evidence: during v1.99.2, a seat-2 finding tagged outside the card was the one that identified a consumer-visible defect (the CHANGELOG listing repo-local artifacts as if consumers received them) that four in-card rounds had missed. The correct handling is: do not spend a round on it, and do not discard it — file it, or fix it inside the current pass if it is cheap and in the same file.
The tag governs round budget, not truth. Conflating the two turns a budget rule into a licence to ignore evidence.
Acceptance criteria
skills/sdlc/SKILL.md, each stating its evidence, in the sections where the driver would actually be standing when the rule applies (Rule 1 at clearance-posting, Rule 2 at release-claim writing, Rule 3 at the convergence rule).cowork/skills/sdlc/SKILL.mdbyte-identical —tests/test-cowork-drift.shenforces this.Milestone
v2.0.0. These are consumer-safety rules about how the harness certifies its own work, they reach a consumer install via a file that ships, and all three come from defects that actually occurred rather than from speculation.