Skip to content
fx-blog

When Something Changes: STALE, Reaffirm and Who May Override

A quiet edit to an approved file leaves the design and plan built on it drifting. In sdlc its hash changes, so its gates go STALE along the dependency graph, with three ways out: reaffirm the diff, re-run, or a named person's override.

Harry4 min readIntermediate
  • Verification
MarkdownSave

Key takeaways

  • A gate log stores the SHA-256 of every file it judged, so an edit to an approved file turns that gate STALE.
  • Staleness follows the dependency graph: a stale design reaches the plan but leaves unrelated gates alone.
  • Reaffirm gives a reviewer only the diff and one question, whether the prior verdict still holds; a gate that is stale only by upstream clears when its origin has a new log.
  • A gate's own artifact may be reaffirmed only for an edit of at most 40 lines with no heading or id change.
  • Only a named person may override a gate or accept a default for an open decision; an agent never can.
Contents

TL;DR An approved document changed, nothing noticed, and the design and plan built on it quietly drifted from the requirement. In sdlc an approval is pinned to the bytes it judged, so the edit turns that gate STALE, and every gate that depends on it. You reaffirm the diff, re-run the stage, or a named person overrides. An agent never can.

Do this: Edit one approved line in your repo, see which gates the board marks STALE, and clear a small edit with /sdlc-gate <slug> <gate> --reaffirm.

Part 2 ended with one line of requirements.md tightened after G2 passed: does the design's approval still count? The board already knows.

This series, in four parts:

  1. Your AI Coding Agent Grades Its Own Homework. Add Gates.: the problem, and the route sdlc takes.
  2. Your First sdlc Run: case-search From Problem to Design: install, then the first three gates and their logs.
  3. When Something Changes: STALE, Reaffirm and Who May Override (you are here).
  4. The Board, the Rules and the Handoff to QA: the agents on screen, the standards, the packet QA starts from.

One edit, three stale gates

Most review checks a document once and trusts it from then on. Someone makes a small, well-meant edit, and nobody re-reads the design that rested on the old wording. Months later the code matches a design that matches a requirement nobody holds any more.

On case-search, the G2 log recorded requirements.md as 0000ade1…. After the edit the file hashes to 974bade1…. G1 reviewed the edited file and recorded the new hash, so it stays passed.

G2 judged the old bytes. It went stale on its own input, and G5 and G6, which depend on the design, followed it as "upstream G2". G0 never read the file and stayed passed.

The sdlc board for case-search: G0 and G1 passed, G2 design stale with a ring around it, G5 and G6 stale behind it, G7 authoring

You can still edit the file. You just cannot keep the approval.

Three ways out of STALE

A full re-review for every typo would make the whole thing unusable, so the contract gives three exits:

  1. Reaffirm. A reviewer sees only the diff and one question: does the prior verdict still hold? A new PASS log points back at the old one. This is the cheap one, for a one-line edit.
  2. Re-run. A full review, as attempt 1 of a new round, for a change too big to pass as small.
  3. Override. A person writes override: <name> — <reason> into the gate log, and owns the exception.

After the edit to case-search: --reaffirm shows a reviewer only the diff; if the verdict holds, a new PASS; if not, G2 re-runs; only a named person may override, never an agent

The board's sidebar names the cheapest exit for you:

The sdlc sidebar for case-search: G2 to G6 stale because an input changed after review, and What next suggesting /sdlc-gate case-search G2 --reaffirm

textClearing the cascade
/sdlc-gate case-search G2 --reaffirm   # one gate, its changed input only
/sdlc-gate case-search --reaffirm-all  # the cascade, one pass, one log per gate

Reaffirming a gate's own file, as G1 did here, is allowed only for a small edit: at most 40 changed lines, no heading or id added or removed, measured by a script from the last full review. Gates stale only as "upstream" clear once their origin has a new log.

Who may override

That rule matters most for DEC-001, title search or full text, still open and blocking one task. The pipeline built everything that does not depend on the answer and marked only TASK-003 as waiting. When a person answers, the answer is an input change, and the gates that relied on it go stale.

Only those gates. I got this wrong at first: gates hashed the whole decision ledger, so every new row staled every gate that read it. One project ran 54 reaffirms, most of them for that reason. Since 1.3.0 a gate is judged only on the ledger rows it relied on.

case-search now has three stale gates and one open decision, all read from files. But several agents are building the tasks right now. Is any stuck, or touching the same file, and what stops the code shipping before QA has tested it? Part 4 opens the Agents tab on case-search.

Read this with your AI

textPaste into your AI
Read the post "When Something Changes: STALE, Reaffirm and Who May Override".
1. I edit requirements.md after G1 passed. Which gates go STALE, and what are my three options?
2. Ask me 3 questions to check I understood; wait, then correct me.
3. When should I reaffirm, and when must I re-run? Give one example of each from my project.

FAQ

What happens if I edit an approved document?

Its hash no longer matches the gate log, so that gate and every gate depending on it go STALE. A small edit can be reaffirmed from its diff; a large one re-runs the stage.

Can the agent override a failed or stale gate?

No. An override is written in the log with a person's name and a reason, and an agent writing one for itself breaks the contract.

Does an open decision stop the pipeline?

No. The stage builds everything that does not depend on the answer and marks only the dependent work as blocked by the DEC id.

Sources

  1. sdlc DEV-CONTRACTS.md §4.4: staleness and reaffirm
  2. The sdlc VS Code extension

Was this useful?

Only you and the owner see your answer and rating. Send private feedback

Enjoyed it? Support fx-blog with a coffee.

The Board, the Rules and the Handoff to QA

Left to taste, agents write two styles, collide on a file and deploy on the developer's word. sdlc names each agent on a board, gives each rule one owner and one gate, and ends development at qa-handoff.md: G10 will not deploy until QA's report passes, dated after the shipped commit's G8 run.

4 min readIntermediate

Comments

Oldest first

No comments yet. Start the conversation.

You sign in first; what you typed stays here. · 0 / 2,000