|
| 1 | +--- |
| 2 | +date: 2026-06-25 |
| 3 | +slug: architecture-promotion-reminder |
| 4 | +summary: Add an agent-facing note in CLAUDE.md reminding that a behavior change must promote to the matching architecture/<capability>.md in the same PR. |
| 5 | +outcome: Added a one-line promotion imperative to CLAUDE.md's `## Architecture` intro, resolving evaluation Finding 3 with an agent-facing reminder rather than a CI gate. |
| 6 | +--- |
| 7 | + |
| 8 | +# Change: Agent-facing architecture/ promotion reminder |
| 9 | + |
| 10 | +**Lane:** lightweight — one file (`CLAUDE.md`), a few lines, no code, no test. |
| 11 | + |
| 12 | +## Goal |
| 13 | + |
| 14 | +Close the last unenforced step of the planning convention: the `architecture/` |
| 15 | +promotion. The whole convention hinges on hand-editing the affected |
| 16 | +`architecture/<capability>.md` in the implementing PR, and it is the easiest step |
| 17 | +to forget. This is evaluation **Finding 3**. |
| 18 | + |
| 19 | +We deliberately reject the heavier options (a git-diff heuristic that warns/blocks |
| 20 | +when `modern_di/` changes without an `architecture/` change, with an escape |
| 21 | +hatch). That heuristic is inherently fuzzy — most code changes (bugfixes, |
| 22 | +refactors, perf) legitimately touch no capability contract — so it would produce |
| 23 | +frequent false positives and train cargo-cult acknowledgments, exactly the |
| 24 | +ceremony this convention has been shedding. A reminder at the point an agent |
| 25 | +reads the code is enough. |
| 26 | + |
| 27 | +## Approach |
| 28 | + |
| 29 | +Add a single agent-facing imperative to `CLAUDE.md`'s `## Architecture` intro |
| 30 | +blockquote — the spot an agent consults to orient on a capability *before* |
| 31 | +changing its behavior. It names the action and the *why*. `architecture/README.md`'s |
| 32 | +"Promotion rule" stays the canonical statement for the truth-home audience; the |
| 33 | +CLAUDE.md line is a deliberate one-line echo aimed at agents (who reliably load |
| 34 | +`CLAUDE.md` but rarely open `architecture/README.md`). |
| 35 | + |
| 36 | +New blockquote text: |
| 37 | + |
| 38 | +> Quick orientation. The authoritative, code-current account of each capability |
| 39 | +> lives in [`architecture/`](architecture/). **When a change alters a |
| 40 | +> capability's behavior, update the matching `architecture/<capability>.md` in |
| 41 | +> the same PR** — that promotion is what keeps `architecture/` true; code that |
| 42 | +> changes without it silently rots the truth home. |
| 43 | +
|
| 44 | +## Files |
| 45 | + |
| 46 | +- `CLAUDE.md` — extend the `## Architecture` intro blockquote with the promotion |
| 47 | + imperative. |
| 48 | + |
| 49 | +## Verification |
| 50 | + |
| 51 | +- [ ] Apply the edit to `CLAUDE.md`. |
| 52 | +- [ ] `just check-planning` — `planning: OK` (this bundle's frontmatter is valid). |
| 53 | +- [ ] `just lint-ci` — clean. |
| 54 | +- [ ] `just docs-build` — succeeds (`CLAUDE.md` is outside the docs build; confirms no collateral breakage). |
0 commit comments