Repository navigation
Keep rules from re-growing and make decisions files show what stands - #743
Merged
Merged
Conversation
…AGENTS.md S2 and C1 each grew by sound clauses, every review passing, until #716 and #728 split them after the fact. The principle those splits applied was written only in their commit messages. State it where the next rule author meets it: a rule states one signal and what it decides, a decision weighing several is a hub with a one-line map, and new evidence is a new rule rather than a new clause. Axis 12 asks the reviewer to name the signal each added clause reads, as a structural finding the reviewer's style ban does not cover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"Append-only in spirit" left unclear which edits were allowed, and #728 had already compacted entries under it. The README now names three: a changed decision is a new entry with SUPERSEDES/SUPERSEDED BY, a factual error is corrected in place with a note, and superseded entries and shipped measurement paragraphs compact on a stated trigger. Every entry opens with its verdict. A `## Standing` block indexes the decisions in force, each line ending with the entry that decided it, and is the one part edited freely. decisions/C1 tries it first; writing it found the #611 entry's "the rethinks are filed, not done" stale since #613 and #614 shipped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
standing_findings() reads a decisions file's Standing block and reports a bullet with no `— <date> #N` pointer, a pointer matching no log entry or only superseded ones, a Not-standing pointer matching nothing, and a Standing block with no Log. Synthetic rows break each one, and the real-tree test fails if no file carries a Standing block, so it cannot pass vacuously. It cannot see a decision in force that Standing omits; that half stays with the reviewer. #613 shipped in 2.4.0, so its WHAT MOVES and COST paragraphs and the review round's clock figures are cut to one line each, per the README's compaction rule. The decisions they sat beside are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two review rounds. The detector treated an entry announcing what it replaces (M2's #549 "SUPERSEDED:", R4's "SUPERSEDED IN PART:") as superseded; only `SUPERSEDED by` marks one now. Pointers match the entry's exact date and the FIRST issue its head names, so a later issue in a partial-supersession note cannot answer for its entry; every date-and-issue pointer after the dash is checked, and a date-only pointer reaches an entry whose head names no issue. Each new row fails on the previous detector. The README's headline rule binds new entries only; it gains the partial-supersession form (C3's #575 head), lets compaction cut a superseded passage inside a live entry, keeps a harvested entry's framing line through it, and defines Not standing as a plan carried out or a schedule overtaken, a reversal by a later decision being marked instead. C1's Standing gains the bound-caps-word decision. AGENTS.md cites the splits by issue with their PRs (#682/PR #716, #728/PR #734) and states what C1 and S2 still lack as hubs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #743 +/- ##
=======================================
Coverage 99.05% 99.05%
=======================================
Files 47 47
Lines 4642 4642
=======================================
Hits 4598 4598
Misses 44 44 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…critique-5dfabe # Conflicts: # docs/design/decisions/README.md
3 tasks done
This was referenced Oct 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to the S2 (#682) and C1 (#728) splits: a critique of how rules/, decisions/ and mechanisms.md are serving us found that the splits fixed file granularity but not the clause-by-clause growth that caused them, and that decisions files make the current answer a replay of the whole log. This PR lands the first three remedies.
What changes
SUPERSEDES:/SUPERSEDED by, with a partial form); a factual error is corrected in place with a note; superseded entries and shipped measurement paragraphs compact on a stated trigger; and master's per-word-fact-to-TOML exception (Describe each word by its readings: per-word TOML vocabulary compiled to today's sets (phase 1) #737), folded in as the fourth when master was merged. New entries open with their verdict.## Standingblock, trialled on decisions/C1. An index of the decisions in force, each line pointing at the entry that decided it, plusNot standing:andOpen:lines; the entries follow under## Log. Writing it found the Have C1, S2 or P6 grown by patching the way M2 had, and should they be rethought? #611 entry's "the rethinks are filed, not done" overtaken since Rethink the suffix-comma rule (C1): decide the comma's structure once, after the words are tagged #613 and Rethink the credential-run rule (S2): read a name's trailing run once, over name units, and bind it before any join #614 shipped in 2.4.0.test_every_standing_line_points_at_a_live_entry(tests/v2/design_docs.py'sstanding_findings): every pointer must match an entry by exact date and first issue, and not one onlySUPERSEDED bya later entry. Synthetic rows break each check; the review rounds' new rows each fail on the earlier detector. It cannot see a decision in force that Standing omits — that half stays with the reviewer.Review
Two design-docs-reviewer rounds: nine findings, then five on the fixes, all addressed in 0934efa (the main one: the detector read an entry ANNOUNCING a supersession as superseded). Not done here, by choice: the
Signal:field in the rule grammar, a recorded per-rule size budget, and rolling Standing out past C1.Test plan
uv run pytest— 21,704 passed, 123 skipped, 3 xfailed (after merging master)uv run mypy,uv run ruff check🤖 Generated with Claude Code