Skip to content

feat: the kit half of Fix 3 — risk-signoff, and the triage that shaped it - #32

Merged
MCKRUZ merged 2 commits into
mainfrom
feat/fix-3-receipts
Jul 31, 2026
Merged

feat: the kit half of Fix 3 — risk-signoff, and the triage that shaped it#32
MCKRUZ merged 2 commits into
mainfrom
feat/fix-3-receipts

Conversation

@MCKRUZ

@MCKRUZ MCKRUZ commented Jul 31, 2026

Copy link
Copy Markdown
Owner

The kit half. The plugin PR carries the twelve required receipts, the eleven optional ones, the
waiver mechanism and the 1.0.0 release.

Merges before the plugin PR — its generated-copy invariant reads the kit from main.

risk-signoff

The standard has always required a named human to accept the risk on a risk:high change — "a
person, by name, accepting the risk. Not a thumbs-up."
It was enforced by nothing: convention in a
PR comment that nothing templated and nothing checked.

Now a required status check fails any risk:high PR with no line of the form:

SIGNED-OFF-BY: Wes Carter — accepted: the carrier retry path is idempotent, verified in spike 0007

The sentence is required. A bare name is exactly the thumbs-up this rung exists to reject.

It is a check rather than a committed receipt on purpose: a file under .sdlc/ would describe a
merge that already happened, and the acceptance has to exist before the merge. Added to
branch-protection.json; existing repos must re-apply the ruleset.

One bug worth reading

The pattern originally used [^—–\n] in a POSIX bracket expression — where \n is a literal
backslash and the letter n, not a newline. It silently excluded every name containing an "n":
Wes Carter passed the gate, Dan Ruiz did not.

Caught by testing eight cases rather than one. grep is line-based, so the newline never needed
excluding in the first place. Now verified against five should-match and three should-not-match
inputs, including a quoted comment, a bullet, lowercase, and both dash forms.

FIX-3-TRIAGE.md

The record of why the 42 were split rather than mechanically converted — and of three things the
triage itself got wrong, caught while building:

  • A5 was not a promotion. Phase 3's walking-skeleton-spec.md is the evidence the skeleton
    was built; the ledger item is Phase 2's definition of what to build. Conflating them would have
    left Phase 3's checkpoint with nothing to verify against. It shipped as a new Phase 2 artifact,
    walking-skeleton-definition.md.
  • A2 could not be a required directory. Requiring spikes/ would force a spike on engagements
    with no unknowns, and a directory cannot carry a waiver. It shipped as spike-findings.md — a
    file that can honestly say "no unverified assumptions, confirmed by ⟨name⟩", which is what the
    punch list's own worked example proposed in the first place.
  • Twelve required files, not eleven — the Phase 7 cold-checkout split in two, and
    runbook-walkthrough.md is required only for service/app, because requiring it of a library
    would have re-created D-3 for the receipt.

Also here

PLUGIN-SYNC.md marks Fix 3 done and records what deliberately remains: the second half of X-7.
Raising cross-reference checks above SHOULD has the same gate-behaviour property, and was held
back rather than bundled — 1.0.0 already asks every mid-flight engagement for twelve new receipts,
and adding newly-blocking consistency failures the same day would make one migration
indistinguishable from the other when something breaks.

docs/build-loop.md documents the new rung where the merge bar is described.

Verification

sync_kit --check in sync at 121 files. The drift check reports 8 required contexts and 8
declared gate jobs, matching
— the consistency checker built two sessions ago catching this new
gate's wiring in both directions, which is the first time it has been exercised on genuinely new
work. 531 plugin tests pass; 37 drift-check tests pass.

Approval

Self-approved under the solo-maintainer carve-out, named here per its terms: internal repo, no
client-identifying content, checks green.

🤖 Generated with Claude Code

https://claude.ai/code/session_014aesqvsMqJpzEdpDXDTjvF

MCKRUZ and others added 2 commits July 31, 2026 10:03
Proposal, not implementation. Fix 3's instruction was "add an artifact spec and a
registry entry for each of the 42". Reading all 42 against what they actually are,
that is wrong for 24 of them.

Four dispositions: 11 required receipts with a HITL gate, 14 optional receipts
surfaced at sign-off, 6 states of the world to verify rather than file, 6 that are
already recorded inside a parent artifact or would be ceremony. Plus one CI
mechanism (the risk:high sign-off belongs at the merge, not in a file) and one
already fixed in the defect sweep.

Six of the eleven required already exist as optional or recommended, so most of the
work is promotion plus a gate, not new authorship.

Four open questions for Matt at the end, including the two entries I am least sure
about (the PO decision and tooling records, which are commercial artifacts that may
belong in the contract rather than in .sdlc/).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aesqvsMqJpzEdpDXDTjvF
…d it

The risk:high named sign-off has always been required by the standard and enforced by
nothing: convention in a PR comment that nothing templated and nothing checked. It is now
a required status check that fails any risk:high PR carrying no

    SIGNED-OFF-BY: <name> — <sentence>

in the body or a comment. The sentence is required; a bare name is the thumbs-up the rung
exists to reject. A check rather than a committed receipt, because a file under .sdlc/
would describe a merge that already happened.

FIX-3-TRIAGE.md records why the 42 unreceipted rituals were split rather than mechanically
converted, including the three things the triage got wrong and how they were caught.

One bug worth noting: the sign-off pattern originally used [^—–\n] in a POSIX bracket
expression, where \n is a literal backslash and the letter n — so it excluded every name
containing an "n". "Wes Carter" passed the gate and "Dan Ruiz" did not.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aesqvsMqJpzEdpDXDTjvF
@MCKRUZ
MCKRUZ merged commit 9d7eb57 into main Jul 31, 2026
1 check passed
@MCKRUZ
MCKRUZ deleted the feat/fix-3-receipts branch July 31, 2026 14:31
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