Skip to content

Ship the three v1.99.2 post-mortem rules into skills/sdlc/SKILL.md #667

Description

@BaseInfinity

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

  1. 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).
  2. cowork/skills/sdlc/SKILL.md byte-identical — tests/test-cowork-drift.sh enforces this.
  3. Rule 1 must not be phrased so that it reads as a mechanism. Enforcement needs a launcher-produced receipt (run id, resolved model, tree digest) and that is feat: make the second reviewer seat a per-repo declaration — Fable high or Opus 4.8 xhigh #657, still open. The skill states the discipline and names feat: make the second reviewer seat a per-repo declaration — Fable high or Opus 4.8 xhigh #657 as the missing enforcement; it must not imply the gate checks this today, because the gate is identity-blind.
  4. Watch the skill's size. It is already ~42kB and skill listings are budget-clamped, so an oversized skill can degrade to name-only in routing (see Audit: is the SDLC harness a workflow written as a skill? (sequencing and state vs atomic capability) #665). Prefer tightening adjacent prose over net growth.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions