Repository navigation
docs(architecture): make the module-split inventory's header true - #1705
Merged
Merged
Conversation
`module-split-inventory.json` told its next maintainer to do something nobody could do. Its header read "Generated for docs/architecture/module-split-plan.md. Regenerate from the artifact; never hand-edit", and it carried a commit stamp — but there is no generator in this repository, and the commit that added the file (36dc36c) says one was deliberately not committed, because a one-off analysis script that produced a design artefact is not a gate (AGENTS.md, "Do not build platform-level tooling here"). The only permitted action did not exist and the only available action was forbidden, so doing nothing was the rational move — which is the mechanism by which the file went stale. The `generated` stamp made it worse: a file that claims to be derived from a commit is read as fresh. The header now states what is true and what can be done. The file is hand-maintained; `$maintenance` names who updates it, when, and which figures to leave alone; `$hand_edits` records each edit. `generated` becomes `measured_at` — the stamp survives, reframed from a generation claim into a measurement stamp, because module-split-plan.md anchors its own "Measured against" line to it. module-split-plan.md carried the other half of the contradiction: a section titled "how to regenerate the inventory" ending "regenerate rather than patch it", directly below the paragraph explaining the generator is deliberately absent. That decision stands and is kept; the impossible instruction is replaced by the possible one. One roster row is dropped — src/flows/case-csat-followup.flow.ts, deleted after the measurement. Auditing the whole roster rather than that one row showed the file was never wrong: files[] was a 171/171 exact match for src/** at its stamped commit. Every other difference against today's tree is 119 commits of movement, not error — 34 authored files added since have no row. The counts therefore stay as measured and the drift is recorded rather than patched. Co-authored-by: Claude
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
os-steve
marked this pull request as ready for review
September 6, 2026 12:18
This was referenced Sep 6, 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.
Closes #1698
What was wrong
docs/architecture/module-split-inventory.jsontold its next maintainer to do something nobody could do:There is no generator in this repository. The only permitted action did not exist, and the only available action was forbidden — so doing nothing was the rational move, which is precisely the mechanism by which the file went stale. The
generatedstamp made it worse: a file that claims to be derived from a commit gets read as fresh.Route taken: 1 (it is hand-maintained), and why
Route 2 (commit a generator) is not merely out of scope — it is already decided against, on the merits. Two independent pieces of evidence, both measured on this branch's
origin/main:36dc36c0, which added the file, states it outright: "The generator is deliberately not committed — a one-off analysis script is not a gate."module-split-plan.mdcarries the same reasoning, grounded in AGENTS.md "Do not build platform-level tooling here".So route 1 is not a fallback here; it is the route the repo already chose and then failed to write down in the file itself.
The measurement that shaped the fix
Auditing the whole roster rather than the one row I was told about changed the diagnosis.
files[]is a 171/171 exact match forsrc/**(*.ts,*.md) at its stamped commita6be39a3:The file was never wrong. It is an accurate snapshot being read as a live index because its header invited that. Every difference against today's tree is 119 commits of movement, not error:
src/flows/case-csat-followup.flow.ts, deleted by #1699src/translations/{en,es-ES,ja-JP,zh-CN}/from the #1311 split (the 6 barrels the roster lists still exist), plussrc/flows/_guarded-iteration.tsandsrc/flows/case-escalation-stamp.flow.tsThat is a snapshot behaving like a snapshot. So the counts stay as measured and the drift is recorded rather than silently patched — patching totals by hand to look current would be the same lie in a new place.
The stamp
a6be39a3is real, reachable and an ancestor ofmain(git merge-base --is-ancestorexit 0, with a control leg also at 0 on this shallow checkout). It ischore(deps): upgrade the ObjectStack platform to 17.2.0 (#1442), 2026-09-01, and the direct parent of the commit that added the inventory. It is not squashed away.So the stamp is kept, not deleted — deleting it would break
module-split-plan.md, which anchors its own "Measured against" line to it. It is reframed instead: thegeneratedblock becomesmeasured_at, with ameaningfield saying in words that it is a measurement stamp, not a generation claim.Changes
module-split-inventory.json—$schema_noterewritten; new$maintenanceblock (how, who, when, anddo_not_hand_patchnaming the figures that are frozen readings); new$hand_editslog;generatedbecomesmeasured_at. The one dead roster row is removed, and its removal is recorded in$hand_editsprecisely enough that the roster's 171/171 identity with the stamped commit stays reconstructible.module-split-plan.md— it carried the other half of the contradiction: a section titled "how to regenerate the inventory" ending "regenerate rather than patch it", sitting directly below the paragraph explaining that the generator is deliberately absent. Fixing only the JSON would have moved the deadlock next door. The "not committed" decision and its AGENTS.md grounding are kept verbatim; the impossible instruction is replaced by the possible one..github/workflows/changeset-check.yml, matching the precedent changeset for these same two files. Docs-only: nothing undersrc/changes.Acceptance
The next person to update this file reads the header and learns: it is hand-maintained, there is no generator and there will not be one, edit it by hand, log the edit, and leave the measured figures alone. Every one of those actions is possible.
Verification
pnpm verifyfully green — all eight stages ran:Run under the shared verify lock:
VERDICT command-exit 0 · held the lock 178s.No new gate and no new test (AGENTS.md, Do not build platform-level tooling here).
content/docs/releases/untouched;CHANGELOG.mdand existing.changeset/*.mdread only.Generated by Claude Code