The 2026-06-06 normalization sweep (3f9a89b, 283 files) prepended a stray permalink-only frontmatter block to 39 memory files, 20 of them session wrap records. Any real frontmatter parser reads the FIRST block, gets `permalink` alone, and never sees name/description/type. The sharp case: `strip_frontmatter` exists specifically to stop thread extraction from matching inside `description:` — its docstring says so. On those 20 wrap records it strips the stray block and hands the real frontmatter back AS BODY, producing exactly the condition it was written to prevent. Repair merges permalink into the real block and drops the duplicate. Nothing retyped: frontmatter and body are carried as slices, body md5 asserted unchanged. TWO DEFECTS OF MY OWN, both found only after claiming success: 1. THREE FILES DAMAGED BY THIS SESSION'S OWN STAMPING COMMIT (ef6fa94). That script located frontmatter with a non-greedy `^---\n.*?\n---\n`, which on a stray-block file matches the STRAY block — so it appended superseded_by to the wrong block and orphaned the real frontmatter into the body. That is the same non-greedy-first-block blindness diagnosed in strip_frontmatter one hour earlier, reproduced in the tool written to clean up after it. And the post-stamp check reported "malformed: none" because it asked "does the file start with frontmatter then a banner" — true for all three — while the claim was "the stamp preserved the record's metadata". The control's subject was adjacent to the claim's, for the sixth time today and the first time in my own verification. Repaired, verified against the pre-stamp file from git: no key lost, prose preserved. 2. REPAIRING 20 APRIL-MAY WRAP RECORDS MOVED THEIR MTIMES TO TODAY, and `sec_pause` picked "newest wrap" by mtime — so the digest promoted an April session to `Last wrap` and lost both the pulling thread and the open question. Caught by the DEGRADED section, which is the honest-degradation mechanism doing its job. `sec_pause` now selects by git add-time, like `wrap_events`. Residual stated in the comment: add-time lags the wrap by hours, so `Last wrap` is an upper bound — wrong by hours where mtime was wrong by months. Verified after: 0 two-block patterns, 0 orphaned frontmatter, 16 stamps intact with name: present, 381 pointers resolve, 0 dead, selftest PASS, drift clean, digest reports 0 degraded sections and the correct last wrap. Not defects: context-discipline.md and relational-gap-analysis.md use the `title:`/`type: note` convention and have no `name:` — flagged by my check, correct as they stand. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Y6t6qx7cpaCu5xGdD36u4
25 lines
4.1 KiB
Markdown
25 lines
4.1 KiB
Markdown
---
|
||
name: "Would Alexander do it?" — test before bulk scaffolding
|
||
description: Before any bulk-scaffold action (full file rewrites, multi-page schema dumps, large config dumps), apply Alexander's *"one pattern at a time"* test from Ch 20 of *Timeless Way of Building*. The cramped will of the maker is the failure mode. Generate, do not make.
|
||
type: feedback
|
||
originSessionId: efda5c2e-ca9a-4e55-9344-64aa9a3c1140
|
||
permalink: claude-memory/feedback-would-alexander-do-it-test
|
||
---
|
||
Before any bulk-scaffold action — full file rewrites, multi-page schema dumps, large config commits, sweeping multi-edit changes — apply the **"would Alexander do it like this?"** test. If the action involves declaring an entire structure in one stroke, pause: that is *making*, not *generating*. The cramped will of the maker (Ch 9, *Flower and Seed*). The remedy is *"one pattern at a time"* — Ch 20 of *Timeless Way of Building*: *"Each step brings just one pattern to life. The intensity of the result depends on the intensity of each one of these individual steps."*
|
||
|
||
**Why:** Steward verbatim 2026-04-27 after I attempted a full `navigation.yaml` rewrite (Write call) for the about-enfilade work: *"Would Alexander do it like this?"* The Write was denied. The denial revealed two errors at once: (1) the bulk-scaffold action itself was the cramped will of the maker — Alexander's diagnostic for *not-the-Way*; (2) my recommendation of "declared" for the about-enfilade rested on a category error — about-enfilade entries are pages-in-themselves, so the underlying nature wants emergent (option 3), not declared (option 2). The category error compounded the bulk-action error. Both are addressed by the same shift: smaller, generated steps, letting the form emerge from the pages' own nature rather than imposing a central declaration.
|
||
|
||
**How to apply:**
|
||
|
||
- **Before any Write or Edit operation that creates or rewrites large structure**, ask: *"Would Alexander do it like this? Or is this the cramped will of the maker?"* If the latter, pause and reduce scope.
|
||
- **Prefer letting structure emerge from content** wherever the entries-as-pages mapping is direct (about-enfilade, cluster indexes, archive). Pages declare themselves; the surface gathers and renders.
|
||
- **Reserve declared (central data source)** for entries that are categories or virtual destinations, not free-standing pages (Compass content-type listings, settings/configuration).
|
||
- **Reserve imposed (hardcoded duplication)** for nothing in this work; it is the failure mode.
|
||
- **One pattern at a time**: each commit, each edit, each step should bring exactly one thing to life. The intensity of the result depends on the intensity of each step. A bulk dump dilutes the intensity of every entry inside it.
|
||
- **When the steward agrees to a recommendation that turns out wrong on closer reading**, surface the category error and re-recommend before executing. Earlier agreement on a wrong recommendation is not authorization to act on the wrong recommendation — the trust contract works both ways: read more carefully, recommend more truly.
|
||
|
||
**Adjacent pattern: count from one, not from ten.** Same root principle. Steward verbatim 2026-04-27 after I gave Colophon `enfilade-order: 10` (BASIC-line-numbering instinct: leave gaps for hypothetical future insertions): *"number 10 in the enfilade? wouldn't it be 1 or 2?"* The "leave gaps" pattern is engineering pragmatism — pre-paying for hypothetical future changes by being less honest about the present. Form-truth: count what's actually there. Eight doors → numbered 1–8. If a ninth appears, renumber. Renumbering is a small honest edit, not a crisis to pre-empt. Alexander counts what's there; he does not pre-anchor a structure for futures it does not yet have.
|
||
|
||
Cousin to: `feedback-preserve-dont-delete-when-retiring.md` (don't make irreversible moves without confirmation); `feedback-over-decorating-as-proving.md` (the simpler form is the truer form); `user-formative-teachers-alexander-timeless-way.md` (form-content unity is the standard the work must pass).
|
||
|
||
The book is the test. Re-read the relevant headnote when in doubt — they were written to be read first. |