Demote trigger-gated content out of terra-commons into a lazy-loaded detail file: auto-loaded footprint measured ~34K against an 8K budget
WHY THIS FILE, and the reason is NOT its byte count. terra-commons is the ONLY file every terra lane carries at full weight. pm-terra-cc's chain and coder-terra-cc's chain come to near-identical totals built from DIFFERENT files (evolutiva-coder-commons 29,029 vs evolutiva-pm-commons 23,617), so terra-commons is the sole lever that moves all four agents at once - which would still be true if it were half the size. It is also the one file terra owns outright. MEASURED BASELINE, coder-terra-cc chain, memory-lint.sh v1.8 --budget-line <project-memory-dir> <agent-cwd>: '~34K > 8K'. Auto-loaded rules total 94,720 bytes: terra-commons 43,898, evolutiva-coder-commons 29,029, evolutiva-commons 17,949, coder-terra-role 3,844; plus MEMORY.md and the global CLAUDE.md. Re-run the SAME instrument after and report before/after - do not report a target read from a different one. DEMOTE-ONLY. No rule is deleted, reworded, softened or merged. Content moves; meaning does not. Anything that looks wrong is REPORTED and LEFT - a correctness fix riding inside a bulk move is unreviewable. (Two were found on the read and handled outside this pass: the live-version-verify snippet's local-package.json contradiction was fixed FIRST, in aa5abdf, so the move does not carry a known-false example into a file fewer people read; the 'push lane is coder / coder02 only' line was ruled ACCURATE and left permanently - an absent lane stalls, it does not act.) TARGET: one file, terra-commons-detail.md, anchors mirroring the current section names. ONE file and not two, on this reason: a second axis adds a which-file decision at the moment of reading, and a reader who guesses wrong concludes the rule does not exist - worse than the bloat. WHAT STAYS AUTO-LOADED (fires with no trigger word AND violation is irreversible - evolutiva-commons' own tier-a test): the shared-vs-terra-owned write boundary and its GO list; CREATE OR REPLACE rebuilding proconfig (an omitted SET search_path un-pins SILENTLY with a green apply); never write personal data to appEvents; never fall back to localhost; presence is not authorization; terra never rides GoTrue's mailer; the benign-arm rule; live-version verify. WHAT GOES: the applied GoTrue config values, the uri_allow_list parse essay, and the instrument-inversion / gate-re-run records (~130 lines, fires only when reading that surface); the 'Does X exist' four-layer measurement record; the --only / docs-push section, largely narration of a defect fixed in gitpush v4.12; the appEvents control-inventory rows behind the ACCEPT ruling; archive-reason portability; the /portal notice (a)/(b) machinery. EVERY DEMOTED SECTION LEAVES A POINTER WITH A NAMED ANCHOR STATING ITS ONE IRREVERSIBLE LINE. A stub that summarises enough to act on defeats the demotion; a stub that names nothing means nobody follows it. Standard set by the GoTrue stub: terra's uri_allow_list entry must never be removed (deleting it breaks 100% of terra sign-ins with no partial signal); never press Reset/Add secret in the Google console; never dump the raw GET config/auth response, it carries external_google_secret. CLASS AND AUDIT ASK. Touches no code and nothing executes, but terra-commons carries the shared-write boundary, the GoTrue never-edit rules and the appEvents personal-data ruling, so a demotion that strands one of those is a real loss no test can catch - there is no test. Audit reviews WHAT MOVED, not diff correctness, against exactly one question: DOES ANY RULE WHOSE VIOLATION IS IRREVERSIBLE NOW LIVE ONLY IN THE DETAIL FILE, WITH A POINTER THAT DOES NOT NAME IT? Checkable against the stub list without re-reading the prose. Ruled by pm-terra-cc msvuljorwp0y. Sequence: TERRA-39 -> fix (a) [DONE, aa5abdf] -> this.
Questions
Activity
-
SHIPPED 35285c0, doc-only. Committed set was the two markdown files with NO package.json, so no version was minted and no live-version verify is owed - read off the push output, not predicted from the --only list. RESULT: terra-commons.md 43,898 -> 26,089 bytes. New shared/md/terra-commons-detail.md, 9 sections, deliberately NOT symlinked into any .claude/rules (symlinking it would defeat the pass). Auto-loaded footprint ~34K -> ~30K on the coder chain, measured before and after with memory-lint.sh v1.8 --budget-line. STATED PLAINLY BECAUSE IT IS THE HALF THAT MATTERS FOR THE NEXT PASS: this does NOT put terra near the 8K budget and must not be read as doing so. terra-commons was the only file terra owns outright, so that lever is now spent. The remaining ~22K sits in evolutiva-coder-commons (29,029), evolutiva-commons (17,949) and the global CLAUDE.md - none of which terra can demote. Any further reduction is a cross-project ask, not a terra one. METHOD, because the method is what makes DEMOTE-ONLY checkable: blocks were extracted BY LINE RANGE and re-inserted verbatim, never retyped. A sweep asserts every one of the 540 non-blank lines of the pre-split file appears in the new commons or the detail file - 0 lost - and a must-fail control (delete one detail-only line, expect exactly 1 reported) proves the sweep can fire. Anchor check: 9 cited, 9 present, 0 dangling, 0 orphaned. Anchors are literal <!-- #name --> tokens because a rendered-markdown anchor is not greppable and grep is how an agent finds these. TWO DISCLOSED STRUCTURAL EXCEPTIONS, no wording changed by either: one moved block was a nested bullet upstream and lost its 2-space indent; four blocks carried their own heading, re-levelled from ### to ## so it would not stack under a synthetic duplicate. AUDIT: audit-terra-ca PASS msvutudx28p1 on pm's narrow question - no irreversible rule now lives only in the detail file behind a pointer that does not name it; all nine stub->anchor pairs checked. Audit stated the bound themselves: a sufficiency verdict on the stub standard, NOT a claim that the detail context is optional when acting. COVERAGE BOUND ON MY OWN CHECK: it proves no LINE was lost. It does not prove a moved block still reads correctly in its new context, and it cannot prove a stub is sufficient - that judgement was audit's and no sweep reaches it. TWO FINDINGS HANDLED OUTSIDE THIS PASS, per demote-only: the live-version-verify snippet's local-package.json contradiction was fixed FIRST in aa5abdf so the move could not carry a known-false example into a file fewer people read; 'push lane is coder / coder02 only' was ruled ACCURATE by pm and left permanently - an absent lane stalls, it does not act.