Skip to content

docs(standards): the branch model points at the inventory instead of restating it (backend#2422) - #321

Merged
LukasWodka merged 1 commit into
developfrom
docs/2422-org-standards-branch-model-authority
Aug 24, 2026
Merged

docs(standards): the branch model points at the inventory instead of restating it (backend#2422)#321
LukasWodka merged 1 commit into
developfrom
docs/2422-org-standards-branch-model-authority

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Summary

The branch-model bullet named its own exceptions"docs and rfcs are main-only" — one sentence after naming repo-inventory.yml as the authority and asserting "this line follows it, not the reverse."

It then drifted from that authority on both examples:

repothis line saidinventory says
docsmain-only, not on the trainrelease_train: true since 2026-08-04 — develop: required, staging present
rfcsmain-only, not on the trainhas a develop taking merges, measured 2026-08-22 (backend#2242 / #306)

So the enumeration is removed rather than corrected. A list of repo names in prose will drift again; a pointer to the file that is actually measured will not. That is this file's own meta-rule — "prose is only for what tooling can't judge" — applied to itself.

Why this isn't theoretical

I read this line on 2026-08-19, concluded rfcs should be main-only, created a develop there to satisfy the first bullet, and forked the repo: 9 commits on develop against 5 on main over four days, both sides editing README.md, reconciled by hand in rfcs#50.

The line that was supposed to prevent that caused it — which is the specific failure mode the org's own guidance calls out: a doc an agent reads first manufactures the bug.

Also recorded: the trap no check catches

The inventory found it and said so plainly, so it belongs here rather than nowhere:

develop_unprotected_non_train"a develop created and left UNPROTECTED is not flagged … this correction is human-only work: no check was going to surface it."

A develop created on a non-train repo and left unprotected is invisible to the guards. Creating one to satisfy the train bullet forks the repo silently — PRs split between the new branch and the repo's existing convention, nothing promotes between them, and the heads diverge until someone reconciles by hand. Prose is the only place that can carry this, because the guard demonstrably cannot.

Blast radius — this fans out

scripts/standards-sync.py / .github/workflows/standards-sync.yml sync this file into every repo's CLAUDE.md between the org-standards markers. So this correction propagates fleet-wide on the next sync, which is the point: the stale copy in rfcs/CLAUDE.md still says "(Sole exception: the docs repo may target main.)" — a third variant, older than both the file it came from and the reality it describes.

Type

Docs / org standards.

Test plan

No code. Verified by reading the authority rather than the prose:

Checklist

  • Targets develop
  • Claims verified against repo-inventory.yml, not against the prose being replaced
  • Self-assigned
  • One reviewer

🤖 Generated with Claude Code


Note

Cursor Bugbot is generating a summary for commit d98ff79. Configure here.

…restating it (backend#2422)
The bullet named its own exceptions -- "`docs` and `rfcs` are main-only" --
one sentence after naming `repo-inventory.yml` as the authority and saying
"this line follows it, not the reverse." It then drifted from that authority
on BOTH examples:
* `docs` has been on the release train since 2026-08-04 (release_train:
true, develop: required, staging present) while this line called it
main-only.
* `rfcs` had a `develop` taking merges, measured 2026-08-22 in backend#2242
/ .github#306, while this line called it main-only.
That is the restated-rule defect the file's own meta-rule warns about, and it
is not theoretical: I read this line on 2026-08-19, concluded `rfcs` should be
main-only, created a `develop` there to satisfy the first bullet, and forked
the repo -- 9 commits on develop against 5 on main over four days, both sides
editing README.md, reconciled by hand in rfcs#50.
So the enumeration is removed rather than corrected. A list of repo names in
prose will drift again; a pointer to the file that is measured will not.
Also records the trap the inventory found and no check catches: a `develop`
created on a non-train repo and left unprotected is invisible to the guards
(`develop_unprotected_non_train` -- "a `develop` created and left UNPROTECTED
is not flagged ... no check was going to surface it"). Creating one to satisfy
the train bullet forks the repo silently. Stating it here because the guard
cannot, which is exactly what this file is for.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@LukasWodkaLukasWodka self-assigned this Aug 24, 2026

@saadqbalsaadqbal left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving. Three lines, and it fixes the right thing in the right direction.

Both drift examples are real — I checked the one I hadn't seen myself.repo-inventory.yml gives docsrelease_train: true, develop: required, a staging: block, and a comment reading "Enrolled 2026-08-04 (backend#1420, D1 5-of-5)". So this file called docsmain-only for twenty days after it joined the train. The rfcs half I measured myself on .github#306 — it has a develop that takes merges — so the bullet was wrong about both repos it named. That's about as clean a case as you get for "restating the authority is the defect".

Pointing at the inventory instead of enumerating exceptions is the correct fix, and scoping the first bullet to "a repo on the release train" is what makes the second one land — the old text asserted a universal model and then tried to carve out of it, which is how the carve-outs went stale independently.

The third bullet is the valuable one, and I'd have wanted it even without the drift. develop_unprotected_non_train is a state no check surfaces — the inventory says so in as many words — so "if a repo appears to lack a develop, that is a fact to verify in the inventory, not a gap to fill" is exactly the instruction that stops someone helpfully creating one. Spelling out the consequence (PRs split across two heads, nothing promotes between them, divergence until a hand reconcile) is what makes it a warning rather than a rule to be argued with.

The one thing this can't do is enforce itself: a doc that says "read the inventory" still depends on people reading it. Worth knowing that .github#314's conformance audit already checks caller presence per repo, so if the branch model itself ever becomes machine-checkable, that's where it belongs — not a change for this PR.

@LukasWodka
LukasWodka merged commit b343e66 into developAug 24, 2026
15 checks passed
@LukasWodka
LukasWodka deleted the docs/2422-org-standards-branch-model-authority branch August 24, 2026 09:14
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.

2 participants

@LukasWodka@saadqbal