You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Epic: The Body Cap Measures the Concept, Not Its Neighbours
Description
The concept store's 400-word body cap exists to keep each page cheap to load, because several
pages are loaded per planning or design task. It applies to the whole body — including
Integration Points, the prose list of a page's neighbours. Those two things grow by different
laws. A page's own content grows with the breadth of its concept, and "split, don't grow" is the
right answer there. Its neighbour list grows with the size of the store, and splitting is the
wrong answer: a narrow page cut in half to make room for someone else's bullet makes retrieval
worse, not better.
The store has grown from 14 seed pages to 48 and the cap has not moved, so the second law now
dominates. Twenty-nine of 47 active pages sit within 6 words of the cap and 13 sit exactly on it.
Integration Points accounts for 16% of all capped body text store-wide. The pages that are full
are the ones with the most neighbours, not the broadest ones — distiller carries 15 edges and
143 words of neighbour prose, leaving 257 for its own content (its Summary, How It Works and
Key Invariants — the term this epic uses throughout), while theme-tokens carries one edge and
has 383 words of its own. No page in the store exceeds 400 words on its own content; the maximum
is 383. Nothing is too broad. The cap is simply measuring the wrong thing.
The consequence is that the touches graph has stopped growing, silently. Reciprocity makes every
new edge cost prose on the neighbour too, an update may not compress still-true content to make
room, and splitting requires a retrieval seam the new work did not create — so the honest move is
to drop the edge and describe the relationship in prose instead. PR #219 did exactly that, for
three real interactions, and flagged it. Nothing fails when this happens; blast-radius retrieval
just quietly gets less complete, and it degrades first on the hub concepts new work most needs to
attach to. This epic re-cuts the cap so it bounds a concept's own content, bounds a neighbour list
by the size of each entry instead, and stops the drain from ever having to choose between a real
edge and the cap.
Success Metrics
Every active concept page passes the validator with no edit to any page — the change is a
measurement correction, not a migration.
A drain that adds a touches edge to the store's highest-degree page completes with no
split, no eviction, and no dropped edge.
Worst-case single-page load is bounded by a stated formula over the cap, the per-bullet ceiling,
and a page's degree — and the schema states the resulting per-task budget at the existing 5–7
page retrieval cap.
Each of the three pages PR distill: Backlog Stubs Become GitHub Issues (#185) #219 could not link into accepts a reciprocal bullet without a split,
so the interactions it recorded as prose become declarable as touches edges.
A page that is genuinely too broad on its own content still fails the cap and still triggers the
split path.
Personas
Per docs/product/context.md.
Assumptions
The quantity the cap protects is the per-task load — several pages loaded per task under the
existing 5–7 page retrieval cap — not the size of any single page. Raising the worst-case page is
acceptable as long as that budget is stated and bounded.
No concept page is hand-edited by this epic. Pages change only through a drain, so the concept
pages that themselves describe the cap are updated when this epic distills, not by hand.
The 400 number is left alone. This epic changes what is counted, not how much is allowed.
The validator's only consumer that gates on its result is the drain — there is no CI workflow
and no hook invoking it — and the drain's current rule is that any printed finding blocks.
Introducing advisories therefore requires changing that rule, which Story 4 owns; it is not a
safe additive change.
Out of Scope
Moving interaction prose off the page entirely (per-edge files, deleting the Integration
Points section, retiring the reciprocity fan-out). Filed as a backlog stub; Story 1's successor
trigger is what routes back to it.
Enforcing splits earlier via a watermark and a create-bias re-curation. Filed as a backlog
stub. It is page hygiene, not a fix for this problem — splitting a high-degree page increases
total edge prose.
Raising the 400-word number.
The 7-invariant cap, which 22 of 47 pages sit on. A parallel symptom, separately triggered.
Any change to touches: semantics, the no-topology line, or the atlas generator, which reads
frontmatter and never the Integration Points prose.
Epic: The Body Cap Measures the Concept, Not Its Neighbours
Description
The concept store's 400-word body cap exists to keep each page cheap to load, because several
pages are loaded per planning or design task. It applies to the whole body — including
Integration Points, the prose list of a page's neighbours. Those two things grow by different
laws. A page's own content grows with the breadth of its concept, and "split, don't grow" is the
right answer there. Its neighbour list grows with the size of the store, and splitting is the
wrong answer: a narrow page cut in half to make room for someone else's bullet makes retrieval
worse, not better.
The store has grown from 14 seed pages to 48 and the cap has not moved, so the second law now
dominates. Twenty-nine of 47 active pages sit within 6 words of the cap and 13 sit exactly on it.
Integration Points accounts for 16% of all capped body text store-wide. The pages that are full
are the ones with the most neighbours, not the broadest ones —
distillercarries 15 edges and143 words of neighbour prose, leaving 257 for its own content (its Summary, How It Works and
Key Invariants — the term this epic uses throughout), while
theme-tokenscarries one edge andhas 383 words of its own. No page in the store exceeds 400 words on its own content; the maximum
is 383. Nothing is too broad. The cap is simply measuring the wrong thing.
The consequence is that the touches graph has stopped growing, silently. Reciprocity makes every
new edge cost prose on the neighbour too, an update may not compress still-true content to make
room, and splitting requires a retrieval seam the new work did not create — so the honest move is
to drop the edge and describe the relationship in prose instead. PR #219 did exactly that, for
three real interactions, and flagged it. Nothing fails when this happens; blast-radius retrieval
just quietly gets less complete, and it degrades first on the hub concepts new work most needs to
attach to. This epic re-cuts the cap so it bounds a concept's own content, bounds a neighbour list
by the size of each entry instead, and stops the drain from ever having to choose between a real
edge and the cap.
Success Metrics
measurement correction, not a migration.
touchesedge to the store's highest-degree page completes with nosplit, no eviction, and no dropped edge.
and a page's degree — and the schema states the resulting per-task budget at the existing 5–7
page retrieval cap.
so the interactions it recorded as prose become declarable as
touchesedges.split path.
Personas
Per
docs/product/context.md.Assumptions
existing 5–7 page retrieval cap — not the size of any single page. Raising the worst-case page is
acceptable as long as that budget is stated and bounded.
pages that themselves describe the cap are updated when this epic distills, not by hand.
and no hook invoking it — and the drain's current rule is that any printed finding blocks.
Introducing advisories therefore requires changing that rule, which Story 4 owns; it is not a
safe additive change.
Out of Scope
Points section, retiring the reciprocity fan-out). Filed as a backlog stub; Story 1's successor
trigger is what routes back to it.
stub. It is page hygiene, not a fix for this problem — splitting a high-degree page increases
total edge prose.
touches:semantics, the no-topology line, or the atlas generator, which readsfrontmatter and never the Integration Points prose.
Open Questions
None.