Repository navigation
Split rules/S2 and decisions/S2 into one rule per piece of evidence - #716
Merged
Merged
Conversation
S2 had grown to 324 lines holding seven rules. Each piece now has its own ID, statement, examples and Accepted clauses; no behavior moves (the 89 example lines are the same set, and corpus_rules.jsonl rebuilds byte-identical). - S2 a suffix word ends a name and never opens the string (keeps the trailing read-once clause the others rely on) - S4 the ambiguous acronym needs words to spare - S5 the given part's trailing slot after a family comma - S6 the case signal at the suffix slot - S7 the company of an unambiguous credential - S8 the credential's trailing run (#602) - S9 unlisted words that join the ambiguous class by shape S3 keeps its ID: rule IDs are never renumbered. Every citation in code, tests, other rules and AGENTS.md is retargeted by what it meant; four pointer citations became quoted ones so S5, S6, S7 and S9 have an implemented: list the citation check can hold. decisions/S2 stays the history of all seven until it is split in the next commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 40 entries go to the rule each one decided: S2 keeps the trailing read (#614, #620, #625); S3 takes the roman-chunk retirement and the digit-dotted tokens, whose history had been filed under S2 too; S4 the count and the slots that report; S5 the given part's trailing slot (#531, #573, #578); S6 written case and the #289 + #516 arc's review and measurement rounds; S7 company (#544); S8 the credential's run (#602, #627, #679); S9 the by-shape class (#516's switches, #563, #564). Entry text moves unchanged except the 16 positional references the move broke ("the bullet above", "this section's item (ii)"), now key-form pointers, and one already stale before the move (the `### M2 above` left by #713). Each file closes with a dated note on the split, and every decisions/S2 pointer in code, tests and other entries is retargeted to the file now holding what it meant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Short-form #S2 and 'under S2' pointers that located entries now in decisions/S3, S5, S6, S7 and S9 become key-form pointers; R4's caps-shape credential points at S9, not S6; S4 states that the case gives way to the count at the first slot after a comma (S6, C1), and its rationale scopes the words-to-spare claim to position; C2 names S7's report beside S8's; R5 interacts with S6. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 #716 +/- ##
=======================================
Coverage 99.03% 99.03%
=======================================
Files 46 46
Lines 4557 4557
=======================================
Hits 4513 4513
Misses 44 44 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
decisions/S3's closing note no longer says S3 was part of rules/S2 (it only shared S2's log), and decisions/S2's note says so too. The test_design_docs fixture now pairs the case-signal name with S6, as the tree does, and probes S99 rather than the now-real S9 as missing. Two comments covering both the count and the case cite S4 and S6; test_render's #S2 becomes decisions/S6, where the judged-token decision lives; two comments the retarget overflowed are rewrapped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 18, 2026
derek73
added a commit
that referenced
this pull request
Oct 19, 2026
…743) * Add one-rule-per-piece-of-evidence and review axis 12 to docs/design/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> * State the decisions edit rules and try a Standing block on decisions/C1 "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> * Check every Standing line against the log; compact #613's measurements 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> * Fix the design-docs review's findings on the Standing convention 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> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.
Closes #682.
rules/S2 had grown to 324 lines holding seven rules, each with its own evidence. This splits it with no behavior change: the 89 example lines are the same set,
corpus_rules.jsonlrebuilds byte-identical, and the snapshot matches.The issue's open question is answered by the repo's own constraints: rule keys are letter+digits (
design_docs._RULE_KEY_RE) and IDs are never renumbered, so S3 stays put and the new rules take S4–S9.Commits
Rules split. Each statement piece, example and Accepted clause moves to the rule it witnesses. Every
rules/S2, bareS2and in-rule(S2)reference in code, tests, other rules and AGENTS.md is retargeted by what it meant. Four pointer citations became quoted ones, so S5, S6, S7 and S9 each have animplemented:list the citation check holds.decisions/S2 split. The 40 entries go to the rule each one decided:
Entry text is unchanged except 16 positional references the move broke, which are now key-form pointers. Each file ends with a dated note on the split.
Design-docs review fixes:
#S2/ "under S2" short-form pointers to moved entriesLesson recorded in docs/design/AGENTS.md: an ID split must grep all five citation spellings, not only the three the citation check reads.
PR review fixes (comment analyzer + AGENTS.md reviewer): decisions/S3's closing note (S3 only shared S2's log, it was never part of it), the test_design_docs fixture now pairs the case-signal name with S6 and probes S99 as missing, two count-and-case comments cite S4 and S6, one citation moves to decisions/S6.
Verification
🤖 Generated with Claude Code