name the layer, not only the primitive
The constitution asks which primitive a feature is. It never asked *where* the feature belongs, and that let a whole feature get built at the wrong layer. Four layers, outermost wins: content on disk, engine (facts only the engine can produce), theme (markup), browser (CSS, then JS). Two rules fall out — the engine never edits authored text to change how it looks, and a feature needing no engine fact is not an engine feature. architecture.md carries the table and the test; CLAUDE.md carries the one-line version, since it is the file always loaded. The example is named in the docs on purpose. A rule with a scar attached is one an agent can apply; a rule stated in the abstract gets reasoned around.
This commit is contained in:
@@ -52,6 +52,13 @@ must do — not the theme. `verify.sh` fails if the embedded reference theme cha
|
||||
changing, because in practice those two drift together — and it fails on a `<script>` tag in that theme,
|
||||
because a reference theme that grows taste stops being a reference (ADR-0026).
|
||||
|
||||
**The agent names the layer as well as the primitive.** Content on disk, engine, theme, browser — and it builds
|
||||
at the outermost layer that can do the job (`CLAUDE.md` §2, `docs/architecture.md`). This exists because a whole
|
||||
feature was built at the wrong one: widow prevention as a Markdown transform that inserted a non-breaking space
|
||||
into an author's prose. It worked and it had tests; `text-wrap: pretty` does it better with no bytes in the
|
||||
content, so the feature was deleted (ADR-0045). If a feature only rearranges how something looks, expect the
|
||||
agent to push back toward CSS or a template.
|
||||
|
||||
**The core ceiling moved once, on purpose.** `CORE_LOC_MAX` went 2000 → 2800 (ADR-0041) because the original
|
||||
figure was costed before any code existed and never budgeted what `cmd/` would hold — `check`, `new`, `-dev`,
|
||||
change detection. Treat a *second* raise as evidence that something belongs in `internal/ext/` instead: the
|
||||
|
||||
Reference in New Issue
Block a user