Skip to content

Give every fact one home, and stop the README restating values - #18

Merged
robertblust merged 1 commit into
mainfrom
docs/single-source-of-truth
Aug 21, 2026
Merged

Give every fact one home, and stop the README restating values#18
robertblust merged 1 commit into
mainfrom
docs/single-source-of-truth

Conversation

@robertblust

Copy link
Copy Markdown
Contributor

Spotted while reading the two side by side: the README's How matching decides section had drifted into restating docs/matching.md. The five signal weights, the score cap, the auto-merge threshold, and both algorithm names appeared in both files.

Changing one weight meant editing three places — FuzzyMatcher, matching.md, and a README paragraph nobody would think to check.

What changed

README keeps the shape, drops every value. It still carries the three confidence layers, the blocking-finds / scoring-grades distinction, and the property worth knowing before anything else — that automatic fuzzy merging ships off. It now says plainly that docs/matching.md is the single place those values are defined.

A weight change now touches two files, and the doc is versioned per matcher version, so that change is an append rather than an edit.

CLAUDE.md gains the rule that would have prevented it. Not "don't duplicate" — too vague to act on — but:

  • an ownership table naming the one file that owns each kind of fact (code / matching.md / specs / roadmap-notes.md / contracts / README)
  • the edit test: before writing a number, threshold, or algorithm name into prose, ask if this changes, how many files must I touch? More than one → link instead

Plus two rules that already bit us:

  • Specs are frozen at merge. Slice 3 amended R4-1 in roadmap-notes.md rather than rewriting slice 2's spec. That was already the practice; it was never written down.
  • A second repository links, never restates. The org profile drifted to "Core in development" while two slices had shipped, because it restated a roadmap living here. No CI in one repo can catch that.

Documentation only — no code, no test changes.

🤖 Generated with Claude Code

The README's matching section had drifted into restating docs/matching.md:
the five signal weights, the score cap, the auto-merge threshold, and the two
algorithm names all appeared in both. Changing a single weight meant editing
three files — FuzzyMatcher, matching.md, and a README paragraph nobody would
remember to look at.
So the README now carries the shape and drops every value. It keeps the three
layers, the blocking-finds/scoring-grades distinction, and the property worth
knowing before anything else — that automatic fuzzy merging ships off — and
says plainly that docs/matching.md is the single place the values are defined.
A weight change now touches the code and the doc, and the doc is versioned per
matcher so that change is an append.
CLAUDE.md gains the rule that would have prevented it. Not "don't duplicate",
which is too vague to act on, but an ownership table naming the one file that
owns each kind of fact, plus a test to apply before writing a number into
prose: if this changes, how many files must I touch? More than one, link
instead.
Two more rules go in because both already bit us: specs are frozen at merge —
slice 3 amended R4-1 in roadmap-notes rather than rewriting slice 2's spec, and
that practice was never written down — and a second repository links rather
than restates, after the org profile drifted to "Core in development" while two
slices had shipped.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@robertblust
robertblust merged commit 5145f66 into mainAug 21, 2026
2 checks passed
@robertblust
robertblust deleted the docs/single-source-of-truth branch August 21, 2026 18:19
Sign up for freeto 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

@robertblust