Skip to content

Keep rules from re-growing and make decisions files show what stands - #743

Merged
derek73 merged 5 commits into
masterfrom
claude/docs-system-critique-5dfabe
Oct 19, 2026
Merged

derek73 merged 5 commits into
masterfrom
claude/docs-system-critique-5dfabe

Conversation

@derek73

@derek73 derek73 commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

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

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
  • Negative controls: each new synthetic row fails on the previous detector

🤖 Generated with Claude Code

derek73 and others added 4 commits October 19, 2026 01:44
…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>
@derek73 derek73 added docs Documentation fixes and updates tests design labels Oct 19, 2026
@derek73 derek73 self-assigned this Oct 19, 2026
@codecov

codecov Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.05%. Comparing base (ef03011) to head (2887570).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

…critique-5dfabe

# Conflicts:
#	docs/design/decisions/README.md
@derek73 derek73 added this to the 2.6.0 milestone Oct 19, 2026
@derek73
derek73 merged commit 90f6d2c into master Oct 19, 2026
12 checks passed
@derek73
derek73 deleted the claude/docs-system-critique-5dfabe branch October 19, 2026 18:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

design docs Documentation fixes and updates tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant