session 2026-06-09 (pm): Wave 5 CLOSED + typographic audit + measure→72ch + soft rag LIVE; PENDING-37/38, REVIEWED-37..40 placed, session memory + skill-harvest proposals

This commit is contained in:
David F Glidden
2026-06-09 21:16:20 +02:00
parent 730deaf25d
commit db84e50c83
6 changed files with 191 additions and 2 deletions
+4 -1
View File
@@ -37,7 +37,10 @@ permalink: claude-memory/memory
- [Be (laundromat)](project-be-laundromat.md) — canonical workstream tracker established 2026-06-08 (Seb-relay of locked decisions). Be = Skemantix startup (Seb+David) funding CapableMind's funding-ladder; **bridge, not venture**. Decisions LOCKED: entity/exit (CapableMind decoupled, grant-funded), pricing (Living $12.99/mo · Archive $69.99/yr · Memorial $49.99/yr · Renovate ~$199 · $8.99 floor), CF Self-Serve Agency + versioned-template-package infra. **a11y gate MERGED (Pat 100/100/100).** Pre-revenue: the WTP gate = renovate Pat → charge her. **Discipline: stop adding spec until the gate clears → nothing for executor on be until then.** Repo @ `f43a0fd`.
## Active Session
- [Session 2026-06-09 — ARC W3R tree CLOSED+DEPLOYED · phone-compass fix · W5.2/G3 build guard; road to Stage G opened](session-2026-06-09-arc-w3r-closed-deployed-compass-fix-w52-guard.md) — **THREE arcs all shipped/landed.** **(1) W3R.2/W3R.3 — the spec-true tree COMPLETE + DEPLOYED live** (8 commits `d4fd852`→`eb7a557`): section-break→`_silence`(2) · layout→closing(9, it holds the *foot* not the grid) · frontispiece→threshold(7, careful @layer-overrides census first) · **`_post` DECOMPOSED** (breadcrumb→`_navigation`[correctness fix], dateline→new `_dateline`(9), images §VIII→new `_images`; marks LEFT; `_base` kept WHOLE — steward: "honest `_post`, not empty; a truer home, not emptying the drawer") · Tier-4 `mix()`/`darken()`→`sass:color` (byte-identical, warnings 6→0; @font-face→_fonts SKIPPED tidier-not-truer · Appendix-B no-op) · two micro-order calls RULED-LEAVE (scale-purity beyond legibility, recorded in main.scss). Every move proven **content-multiset-identity + collision census**; **steward render-review PASSED ("fantastic") → deployed (17-commit set; CloudFlare output diff = 2 files — the render-identical proofs held end-to-end); live-verified.** The cascade now reads as its own self-description (*finis coronat opus*). **(2) phone Reading Compass [FIX]** (`32163af`, live): both compasses wrap to 2 rows on phone (phone-only; desktop/iPad fine; NOT a regression); **found by MEASURING not theory** — built `/tmp/compass-measure/` headless-Chrome box-model harness, truth = **padding asymmetry** (footer's `a.compass-point` all:unset ate the padding; frontispiece's didn't), NOT width; *causal-story-before-reading-render* recurred 2× before measuring (the day's lesson). **(3) W5.2/G3** (`4936fc9`): PENDING-34 **pending-first** → authorized inline Option 1 → `validateCompass` build guard binds class→glyph→sigil structurally (every sigil-id→`<symbol>`; every surfaced class covered); **byte-identical (570 files), both checks proven to fire**; **REVIEWED-36 DRAFTED for steward to place**. **Pulling thread: continue Wave 5 → W5.1 (G2: single-source title_display, retire `showTitleField`; pending-first) → W5.3/W5.4 → W4.4 (jurist) → Wave 6 Stage G.** Literal Q: does `content-types.yml` carry per-class `title_display` to retire the `showTitleField` hardcode, byte-identical? Sub: steward place REVIEWED-36? Wave 5 or pivot to vignette? Seb on be/L1? ARC `main @ f8e00e7` clean, synced both remotes, live current.
- [Session 2026-06-09 (pm) — Wave 5 CLOSED + deep typographic audit + measure→72ch + soft rag, all LIVE](session-2026-06-09-pm-wave5-close-typographic-audit-measure-softrag.md) — **Two arcs, both fully shipped.** **(A) Wave 5 enforcement CLOSED:** W5.1/G2 title single-source + **Dream `title_display` shown→not-shown** ("one can't title their dreams") — two-hat `4ea261a`(refactor byte-identical)+`ac39b26`(Dream delta=1 page's `<h1>`), DEPLOYED; W5.3/G4 `validateCorpusClasses` clause-1 census `23db039` (exempt-set steward-ratified: sequence-index/not-found PERMANENT views + lex/offering/deliberation v1-legacy ratchet); W5.4/G1 wildcard→error PREPARED for W6. **(B) Deep typographic audit** (8 domains, 6 read-only Explore agents + INDEPENDENT verification — caught 2 agent errors: B.2 recalled-not-searched, A.2 measure; masters folded from typography palace + chamber-library/Rutter). From it, 2 items SHIPPED LIVE: **(B.1) MEASURE→72 chars `06effe4`** — MEASURED 0.3771em true advance (render-confirmed 0.381) over 91,579 real chars; column had run **~90 chars not believed ~68** (0.5em convention misestimated 32%); `27.2rem` **rem-not-px** (holds cpl constant — the px/rem root-scaling was THE bug: 38rem→101 chars at 21px root); proper-homes consolidation (1 token, _base governs, removed mobile 100vw override [resize bug] + dead `.wrapper main` block); spec §I reconciled. **(B.2) SOFT RAG `a9e5196`** — `hyphens:auto` reverses §I.i `hyphens:none` (Hochuli soft>hard rag, Rutter); **the `-webkit-hyphens` prefix was the Safari bug** (no autoprefixer in build); steward-approved desktop+phone ("few, but perfect"; phone "none" was iOS cache). Audit brought INTO repo `0bb7f94` (_audits). **Jurist engaged:** confirmed dispositions, 2 precisions recorded (calt "no *body* face"; hanging-punctuation collision REASON), justification-bar = **Bringhurst even-colour/rivers NOT Rutter hyphenation** (corrected my Rutter-leaning), and **ruled the spec division role-structurally: CC = truth-ups (factual) ONLY; jurist = ALL doctrine** (composed against the assembled spec = the review pass; CC flags-not-resolves evidence bearing on doctrine). **Pulling thread: CC's spec TRUTH-UPS** (§I.d "17"→0 bold, head-dup resolved, drop-cap retired — against git, with cites) to make the spec whole for the jurist's doctrine pass. Literal Q: which stale-flag passages need truthing, and does any contradict doctrine the jurist's about to write (carve-out: flag, don't resolve)? Sub: steward place REVIEWED-39/40? truth-up lane or pivot to vignette? Seb on be/L1? ARC `main @ 0bb7f94` clean, synced both remotes, live current.
## Archived (2026-06-09 morning — W3R tree CLOSED + compass fix + W5.2/G3; road to Stage G opened)
- [Session 2026-06-09 (am) — ARC W3R tree CLOSED+DEPLOYED · phone-compass fix · W5.2/G3 build guard](session-2026-06-09-arc-w3r-closed-deployed-compass-fix-w52-guard.md) — W3R.2/W3R.3 spec-true tree COMPLETE+DEPLOYED (8 commits `d4fd852`→`eb7a557`; `_post` decomposed, `_base` kept whole; render-review "fantastic"); phone-compass [FIX] `32163af` (found by MEASURING — padding asymmetry, the headless-Chrome harness born here); W5.2/G3 `validateCompass` build guard `4936fc9` (byte-identical; REVIEWED-36). The pm session woke from this.
## Archived (2026-06-08 afternoon→evening — W3R Stage 3 the tree begins)
- [Session 2026-06-08 (aft→eve) — ARC W3R Stage 3 the tree begins; _utilities dissolved 530→0; ornament pause-level fixed](session-2026-06-08-arc-w3r-stage3-the-tree-utilities-dissolved.md) — Stage 3 opened (read Kerievsky framing chs → confirmed 3rd-amendment middle path); `_utilities` 530→0 dissolved into `_glimpse`/`_per-type`/`_enfilade`/`_silence`; ornament pause-level 2rem→3rem (steward render-ruled "much better"); 9 commits banked UNDEPLOYED (`10c5f6f`→`0fd7acd`); deploy held for W3R.3. (All shipped 2026-06-09.)
@@ -0,0 +1,87 @@
---
name: session-2026-06-09-pm-wave-5-closed-deep-typographic-audit-measure-72ch-soft-rag-all-shipped-live
description: "Huge day. Wave 5 enforcement closed (G2 title single-source + Dream amendment; G3 compass guard; G4 clause-1 census; G1 staged for W6). Then the deep typographic audit (8 domains, 6-agent fan-out + independent verification, masters folded in from the typography palace + chamber-library). From it, TWO items shipped live: the reading MEASURE (a MEASURED 72 characters — the column had been running ~90, not the believed ~68; 27.2rem, rem-not-px, proper-homes consolidation, mobile resize bug fixed) and the SOFT RAG (hyphens:auto reverses §I.i hyphens:none; the -webkit-hyphens prefix was the Safari bug). Audit brought into the repo (_audits). Jurist engaged: confirmed dispositions, 2 precisions recorded, ruled the spec division role-structurally. Pulling thread: CC's spec TRUTH-UPS (factual, live-state) to make the spec whole for the jurist's doctrine pass — doctrine is the jurist's, not CC's."
metadata:
node_type: memory
type: project
originSessionId: bf9ab071-add6-4848-bc35-0ad8d07ec679
---
# Session 2026-06-09 (pm) — Wave 5 close · typographic audit · measure + soft rag LIVE
Woke ~15:23 via /wake-up into the Wave 5 / Road-to-Stage-G thread. One enormous, fully-shipped
day with two arcs: (A) closed Wave 5 enforcement, then (B) the steward pivoted to a deep
typographic audit, from which the measure + soft rag were built and deployed. Everything
committed, pushed both remotes, live-verified. ARC `main @ 0bb7f94`.
## Past — what we did
### A. Wave 5 enforcement CLOSED (Road to Stage G)
- **W5.1 / G2 — title display single-source + Dream amendment. DEPLOYED + LIVE.** Diagnosis-first: `showTitleField` hardcoded an 11-class `titleClasses` list (`site.hs:1829`); reconciled vs `content-types.yml title_display` — the 10 `shown` matched; the 11th (`chamber`) was a DEAD entry (0 corpus pages carry `class: chamber`; content/chamber/** uses essay/meditation/about/offering/deliberation/lex). So retiring the hardcode = byte-identical. **Coupled steward amendment: Dream `title_display` shown→not-shown** ("one can't title their dreams") — §2 matrix edit → `make content-types` regen → drift-check. **Two-hat:** `4ea261a` (refactor: `postCtx :: [String] -> Context`, `loadTitleShownClasses`, reuses the one content-types.yml decode → `_site` BYTE-IDENTICAL to baseline) + `ac39b26` (Dream amendment → delta = exactly the one dream page's `<h1>` removed; nav/`<title>`/og preserved). `make rebuild` shipped (CloudFlare 2 files); live-verified.
- **W5.3 / G4 — clause-1 enforcement gate. DONE (output-neutral, no deploy).** `validateCorpusClasses` build guard (`site.hs`, run in main via `getMatches "content/**"`): every content file's *declared* class must be in `class_enumeration ∪ exemptClasses`, else loud build error naming the file. Transitively guards default.html's `class="$class$-page"` emission. **Exempt-set (steward-ratified, refined):** `{sequence-index, not-found}` PERMANENT views/infra (steward: sequence-index is NOT legacy — after-the-reply is the only sequence now but MORE are coming, kin to Annals) + `{lex, offering, deliberation}` v1-legacy chamber ratchet. `23db039`; `_site` byte-identical to ac39b26 (stash-rebuild diff); deliberate-mismatch fires; pushed.
- **W5.4 / G1 — wildcard→build-error PREPARED, staged for W6.** Exact patch recorded in roadmap (`9699088`): `classRouteName`/`classDisplayName` `other -> …++"s"` → `error`. Byte-identical (content/posts carries only enumerated classes; exempt classes route via articleCtx not postCtx). Lands inside the Stage-G promotion commit per §5 clause-4 sequencing.
- **Wave 5 CLOSED** (G2/G3/G4 built; G1 staged). Road-to-Stage-G remaining: W4.4 (jurist multilingual v1.0) → Wave 6 promotion (jurist+steward).
### B. Deep typographic audit (jurist-issued instruction; steward-authorized)
- **Method:** established shared foundation (commit SHA, one shared build, GHC 9.8.4/Hakyll 4.16.6.0/Pandoc 3.6/fontTools 4.62.1, font inventory), then fanned out **6 read-only Explore agents** over 8 domains (A hyphenation/justification, B optical-margins, C+D paragraph-sep/word-spacing, E font-binary, F+H print/fidelity, G multilingual). Then **independently re-verified every load-bearing claim** — caught **2 agent errors**: B.2 (browser support — agent RECALLED instead of searching; `hanging-punctuation` is Safari-only-since-2016, not "0%") and A.2 (measure — agent used 720px without noticing the spec's 38rem divergence + an impossible mobile cpl). Report assembled with [V]/[A] provenance marks.
- **Masters folded in as decision inputs** — Bringhurst/Hochuli/Lupton from the **typography palace** (`~/.mempalace/palace-chamber-typography`, CLI), Rutter from the **chamber-library** (steward flagged he was there; the palace doesn't carry him). Verbatim in the audit Appendix.
- **Highest-value empirical:** fontTools on all 9 EB Garamond faces. **No body face carries `calt`** (only the 2 SC faces) → the spec-flagged italic-chancery bug DOESN'T EXIST. All static (no fvar/opsz axis). Space = 0.20em.
### B.1 The MEASURE → 72 characters. DEPLOYED + LIVE (`06effe4`).
- **Measured, not assumed** (the jurist demanded this): EB Garamond's true average prose advance = **0.3771em** over 91,579 chars of real ARC prose (incl. ~16% spaces), **render-confirmed 0.381em** (headless-Chrome on a live essay). The 0.5em convention (→68 chars) and 0.437em lowercase-mean (→78) were BOTH wrong. **The column ran ~90 characters**, not the spec's believed ~68 — past Bringhurst's 75–80 ceiling.
- **Root cause:** `$body-column: 38rem` was authored "≈65 chars" at the **16px** base, but the live `:root` scales to **21px** (breakpoint %), inflating it to ~798px/~101 chars. `$narrow-size: 720px` (px) let cpl drift across breakpoints. The px-vs-rem confusion WAS the bug.
- **Steward render-ruling: 72 characters** (66 read a touch narrow, 75 a touch wide, judged across ALL content types). `27.2rem = 72 × 0.3771em`, **rem** so cpl holds constant.
- **Proper-homes consolidation (steward-directed, W3R discipline):** ONE token (`$narrow-size`; `$body-column` now aliases it), ONE governing rule (`.page-content`/_base, every viewport), ZERO measure rules in `_mobile-responsive` — removed the `.page-content` 100vw override (THE resize bug: column ran uncapped <768px → "measure gets longer on resize") + a DEAD `.wrapper main` block (matched nothing: `<main>` IS a `.wrapper`, never nested). Resize verified across a viewport sweep (measure holds, no overflow). Spec §I Measure + §XII grid + token-index reconciled (38rem→27.2rem; 65/68 inconsistency resolved).
### B.2 The SOFT RAG → hyphenate reading prose. DEPLOYED + LIVE (`a9e5196`).
- Reverses §I.i `hyphens: none` (the prior HARD rag — a tool-quality decision, not philosophical) to a **soft rag**. Hochuli: soft rag > hard rag; Rutter: "hyphenate without justifying… reduces the raggedness." `.page-content p/li/blockquote { hyphens:auto }`; body default `manual`; limits `6 3 3` + `-webkit-` + ≤2 consecutive (Bringhurst §2.4.1, Rutter). Proper home: _base, every viewport.
- **The Safari bug: missing `-webkit-hyphens: auto`.** ARC's sass build has NO autoprefixer → prefixes hand-written; I'd prefixed the *limits* but not the *property* → Safari showed nothing. (Headless Chrome couldn't test it — ships no hyphenation dictionaries; all configs gave identical heights.) Phone "none" was iOS-Safari CACHE (fresh-origin test confirmed; no mobile override). Steward render-approved desktop + phone ("few, but perfect").
- §I.i reconciled to the soft-rag posture; **the posture reversal rides the Stage-G read for formal jurist concurrence** (substance pre-endorsed in the jurist's audit reading as the no-JS "rung (i)").
- **Audit brought INTO the repo** (`0bb7f94`, `docs/AldineXXI-Codex/_audits/deep-typographic-audit-2026-06-09.md`) — steward-directed; the "keep it outside" constraint governed the *investigation* (read-only), not the report's permanent home.
## Present — mood / returns
- **measure-before-theorize was the day's spine, repeatedly.** The headless-Chrome harness (kept from the morning compass fix) measured the true advance, the resize sweep, and the auto-vs-none hyphenation test. The 0.5em CONVENTION misestimated by 32% (90 chars real vs 68 believed) — only measuring caught it. The `-webkit-hyphens` Safari bug was found by measuring (the CSS objectively lacked the prefix), not theorizing.
- **The jurist sharpened my reasoning twice, and I accepted cleanly (good returns):** (1) my "JS case may evaporate" rested on Rutter's hyphenation bar while the steward chose Bringhurst on the measure — you can't mix; a consistent Bringhurst posture points TOWARD KP. (2) The justification-judgment bar is Bringhurst's **even colour / rivers** (paragraph-level), NOT Rutter's "is-it-hyphenating." Corrected in the audit.
- **Drift caught (3):** I attributed a jurist message to "the steward" (corrected). I said "send the spec now" prematurely — the steward caught that the spec isn't WHOLE (stale flags + missing doctrine sections). My close-out shorthand lost the hanging-punctuation rejection REASON (the jurist's precision exists exactly to catch that).
- **Proper-homes discipline (steward-directed) was load-bearing** — it turned "remove a line" into "consolidate the measure to one token/one rule/no junk-drawer," and caught the dead `.wrapper main` block + the px/rem root-cause.
- **Governance held under a long, fast day:** every change pending-first or steward-ruled; the §I.i posture reversal flagged for jurist (not buried); the audit-into-repo correctly reasoned.
## Future
### Pulling thread (singular)
**The spec TRUTH-UPS — bring the spec's stale self-descriptions into line with live state, so the jurist meets a factually-current spec for the doctrine/review pass.** This is CC's lane and ONLY this: factual corrections verified against git + the binary, with cites (the audit's discipline). The jurist composes ALL doctrine; nothing in the doctrine column lands in CC's tomorrow.
### Actionable resumption point (as of wrap — re-judge against what changed)
ARC `main @ 0bb7f94`, clean, synced both remotes, live. **First move: the truth-ups, against current git, with cites:**
1. **§I.d banish-bold** — spec says "17 violations"; live is **0 applied** (the only two `font-weight: 700` are @font-face at `_foundation.scss:149,190`). Correct the spec count to 0-applied (+ the 2 dead @font-face loads: Bold + SC-Display, noted as steward-call font-stack-pass).
2. **Head-template duplication** — spec flags it as standing debt; **resolved** (single `templates/head.html` partial, included once by default.html:3 + frontispiece.html:3). Truth-up.
3. **Drop cap** — confirm the spec reflects retired-by-absence (spec ~line 2312 already records it; verify it's clean).
Commit as `docs(arc): truth-up stale §I.d flags to live state` with file:line cites. **DO NOT touch doctrine** — paragraph-separation lock, hanging-punctuation entry, OpenType catalogue governance, word-spacing deferral, italic-`calt` close ("no body face") are the JURIST's, composed against the assembled spec during the review. **Carve-out:** if a truth-up surfaces live state that *contradicts* doctrine the jurist is about to write (e.g. a "dormant" feature a selector actually activates) — FLAG it as evidence, don't resolve.
### Other open horizons (ranked)
- **REVIEWED-37/38/39/40 — PLACED by the steward this session** (37=W5.1 measure→wait: 37=PENDING-35 W5.1; 38=PENDING-36 W5.3/4; 39=PENDING-37 measure; 40=PENDING-38 soft rag). All AUTHORIZED, on disk in REVIEWED.md. Nothing awaiting placement.
- **Send the spec to the jurist** — AFTER the truth-ups, the jurist composes the doctrine sections (= same pass as the full review). W4.4 (multilingual v1.0) + Wave 6 Stage-G promotion ride this.
- **The vignette (Phase 1 renderer)** — the OTHER executor major front, steward-sequenced "after the tree." Unblocked (tree + audit done). The build-alternative to the spec lane.
- **Justification on large viewports** — OPEN; reduces to the banish-JS gate-amendment question; judge on rendered evidence against **Bringhurst's even-colour/rivers bar** (NOT Rutter's hyphenation bar) after living with the soft rag at the precise measure. Either earns the KP/JS amendment or retires it.
- Baton items: be (parked, WTP gate w/ steward) · L1 (Seb).
### Pause statement
I am about to be away from this. The reading-body work (measure + soft rag) is LIVE and the steward will read against it. I don't know whether tomorrow continues the spec lane (truth-ups → jurist doctrine pass) or pivots to the vignette. What I want to find still pulling is **the spec truth-ups — CC's narrow, factual lane — making the spec whole for the jurist**, with the role boundary held exactly: CC trues-up facts against git; the jurist composes doctrine. The hard-won clarity is that doctrine originates at the jurist seat (role-structural), and CC's job is evidence + implementation, not authoring rules.
### Literal question for next-Claude
**Which stale-flag spec passages need truthing to live state (start: §I.d banish-bold "17"→0, head-dup resolved, drop-cap retired) — and does any truth-up surface live state that CONTRADICTS doctrine the jurist is about to write (the carve-out: flag as evidence, don't resolve)?** Sub: spec-truth-up lane or pivot to the vignette? Any Seb movement on be/L1? (REVIEWED-37..40 already placed by steward this session.)
## Decisions deferred (and why)
- **All doctrine spec sections** — jurist composes (role-structural ruling): OpenType governance, paragraph-sep lock, hanging-punctuation entry, word-spacing deferral, calt close. NOT CC, not even as proposals.
- **Justification (large viewports)** — open; needs lived-with evidence vs Bringhurst's even-colour bar; couples to the banish-JS gate amendment (off the table until a logged amendment with rendered evidence).
- **Token full-unification** — `$body-column` aliases `$narrow-size`; removing the local name is optional tidy, not required.
- **Deploy bundling** — measure + soft rag shipped together (one reading-body improvement); correct call.
- **The two dead @font-face loads** (Bold, SC-Display) — steward call for a font-stack pass; not now.
## Skill harvest (per §1.6) — proposals (steward to authorize)
- **`/measure-render` (headless-Chrome box-model harness) — RE-FLAG, strongly earned.** Already PROPOSED 2026-06-09 (compass fix); today it ran 4+ more times (true-advance measurement, resize sweep, auto-vs-none hyphenation test). Proven repeatedly. *(Caveat learned: headless Chrome can't test hyphenation — no dictionaries.)*
- **Verification-ladder entry: "measure the font's true average prose advance before setting a character-count measure."** Over real corpus text incl. spaces, NOT the 0.5em convention (which misestimated EB Garamond by 32%: 0.377em real vs 0.5em assumed → 90 chars vs believed 68). The instrument that overturned the measure.
- **Feedback memory: ARC's sass build has NO autoprefixer — hand-write vendor prefixes.** The `-webkit-hyphens` Safari bug. When adding a new CSS property, check Safari's prefix need and write it (the limits were prefixed but the property wasn't — the inconsistency was the bug).
- **Feedback memory: the justification-judgment bar is Bringhurst's even-colour/rivers, NOT Rutter's hyphenation.** Load-bearing for the future justification decision; the jurist corrected my Rutter-leaning.
- (To append to skill-harvest-register.md.)
@@ -63,4 +63,20 @@ metadata:
## Sub-agent dialogues
## Open horizons (cont. — new session ~15:23 after lunch pause)
- 2026-06-09 15:23 — Re-entered via /wake-up. Thread CONFIRMED: Wave 5 enforcement toward Stage G; next W5.1/G2 (title_display single-source, retire showTitleField; pending-first). **REVIEWED-36 now ON DISK — steward placed it over lunch** (W5.2 loop fully closed). Seb active on BMF (D1 cross-encoder commits `1a61504` etc.) — L1 front moving, baton his. Drift to hold today: theorize-before-measuring (recurred ×2 yesterday, now a §3-candidate flag) — but W5.1 is diagnosis-first, fits. First act per wrap resumption point: diagnose showTitleField vs content-types.yml title_display, confirm byte-identity, file PENDING-35, await auth.
## Authorization moves (cont. — new session)
- 2026-06-09 ~15:40 — **PENDING-35 filed** (W5.1/G2 single-source title display + Dream amendment, [HARDENING]). Diagnosis-first (per the day's measure-before-theorize lesson, applied to code not layout): read showTitleField hardcode (11 classes) vs content-types.yml title_display; reconciled — the 10 `shown` match exactly, the 11th (`chamber`) is a DEAD entry (0 corpus pages carry `class: chamber`; content/chamber/** uses essay/meditation/about/offering/deliberation/lex). So retiring the hardcode = byte-identical. Census surfaced non-enumeration classes (offering/deliberation/lex/sequence-index/not-found) → lookup must be PERMISSIVE (absent→not-shown, NOT a build error). **Steward authorized inline + coupled amendment: Dream shown→not-shown** (editorial: sleep-recalled register reads truer without hard <h1>).
- **BUILT + VERIFIED (two-hat), local, NOT deployed.** Commit 1 `4ea261a` (refactor: postCtx :: [String]→Context, loadTitleShownClasses, retire titleClasses) → `_site` BYTE-IDENTICAL to baseline (refactor proven pure). Commit 2 `ac39b26` (Dream amendment: §2 matrix edit → `make content-types` regen → check clean) → `_site` delta = EXACTLY the one dream page losing `<h1 class="post-title">` + the now-empty conditional's blank line (nav breadcrumb/<title>/og/twitter title all preserved). The amendment doubled as the G2 liveness proof (YAML flip → rendered output changed end-to-end). ARC main 2 ahead of origin (`f8e00e7`→`ac39b26`).
- **Returns this session:** none yet — diagnosis-first held (read the code + censused before claiming byte-identity; caught that `chamber` was a dead hardcode entry by census, not assumption). The two-hat separation (skill-harvest proposal 2026-06-08) used in anger for the first time — refactor commit byte-identical, feature commit isolated classified delta. Worked cleanly.
- **DONE + DEPLOYED + LIVE.** Steward render-review PASSED ("yes, unquestionably — one can't title their dreams"). `make rebuild` (CloudFlare 2 files = dream page + _redirects; the byte-true proofs held end-to-end) + pushed both remotes (`f8e00e7`→`ac39b26`) + live-verified animalrationiscapax.org (h1.post-title=0; `<title>`+breadcrumb preserved). REVIEWED-37 DRAFTED for steward placement. ARC main clean, synced, live current.
- Next ARC station: W5.3 (G4 clause-1 enforcement gate) + W5.4 (G1 wildcard→build-error, lands inside the Stage-G promotion commit) — the rest of Wave 5 → W4.4 (jurist) → Wave 6 Stage G.
## Authorization moves (cont. — W5.3/G4 + W5.4/G1)
- 2026-06-09 ~16:00 — **PENDING-36 filed** (W5.3/G4 clause-1 gate + W5.4/G1 wildcard→error, [HARDENING]). Diagnosis-first: per-directory class census proved content/posts carries only enumerated classes (G1 wildcards never triggered → byte-identical); non-enumeration classes (sequence-index/not-found/lex/offering/deliberation) all live outside the authored corpus. Gate-location reasoned from evidence: pre-commit hook is generic + no CI → only the BUILD is a real gate (Option 1). **Steward authorized inline + refined: sequence-index is PERMANENT (more sequences coming), not legacy** — split exempt-set into permanent-views vs v1-legacy-ratchet.
- **G4 BUILT + VERIFIED + PUSHED** (`23db039`): `validateCorpusClasses` build guard via `getMatches "content/**"`; `_site` byte-identical to ac39b26 (stash-and-rebuild diff); deliberate-mismatch fires loudly naming the file; output-neutral → no deploy. **G1 PREPARED** (`9699088` roadmap): exact wildcard→error patch documented, lands in W6 promotion commit. Wave 5 CLOSED (G2/G3/G4 built, G1 staged). REVIEWED-38 drafted.
- **Returns:** none — diagnosis-first held all the way (read code + per-path census before every claim; gate-location chosen on hook/CI evidence not assumption; the two-hat / byte-identical-then-classified-delta discipline carried from W5.1). The day's measure-before-theorize lesson stayed applied to code.
- Remaining to Stage G: **W4.4** (jurist multilingual v1.0 sign-off, rides the read) → **Wave 6** promotion (content-typology §5 AUTHORED→OPERATIVE, lands G1). Steward flagged: **another audit before the jurist signoff.**
## Bypasses
+9
View File
@@ -94,6 +94,15 @@ The single place proposed skills live so they don't evaporate between sessions.
| **Headless-Chrome box-model measurement** | create skill OR verification-ladder note | When a rendered layout *differs* and the cause isn't obvious, **measure the box model before theorizing the mechanism**. Today this caught the phone-compass cause (per-point *padding asymmetry*, not width) after *causal-story-before-reading-render* recurred 2× (a footer-only first pass, then a wrong `align-self:stretch` width-fix). Reusable core: `npm i puppeteer-core` in a tmp dir · `executablePath` = `/Applications/Google Chrome.app/...` · `setViewport({width:375,…,isMobile:true})` · `page.evaluate` reading `getComputedStyle`/`getBoundingClientRect` (widths, padding, row counts). Chrome reproduced the bug → it wasn't the Safari quirk I'd hypothesized. | a `/measure-render` skill, or a verification-ladder entry ("measure the box model before theorizing a layout difference") | **PROPOSED** |
| **Symmetria §3 flag: theorize-before-measuring-a-layout** | Symmetria §3 flag | The drift this caught, as a standing flag: a *causal story about why a layout renders as it does*, asserted before the rendered box model is measured, is contamination shape (same family as `causal-story-before-reading-render`, one step more specific — layout/CSS). Antidote: the harness above. | Symmetria §3 | **PROPOSED** (may be redundant with the existing `causal-story-before-reading-render` flag — steward to judge) |
## New proposals (2026-06-09 pm — the typographic audit / measure / soft-rag day)
| Element | Kind | One-line | Where it lands | Status |
|---------|------|----------|----------------|--------|
| **`/measure-render` (headless-Chrome box-model harness)** | create skill OR ladder note | **RE-FLAG — strongly earned.** Proposed this morning (compass fix); the pm session ran it **4+ more times** (true-advance measurement, viewport resize sweep, auto-vs-none hyphenation test). Proven repeatedly across one day. *Caveat learned: headless Chrome cannot test hyphenation — it ships no hyphenation dictionaries (all configs gave identical heights); the real browser is the only valid hyphenation test.* | `/measure-render` skill OR verification-ladder | **PROPOSED (reinforced)** |
| **Measure the font's true average prose advance before a character-count measure** | verification-ladder entry | When setting a measure to a target character count, **measure the font's average advance over real corpus prose (incl. spaces), not the 0.5em convention.** The convention misestimated EB Garamond by **32%** (0.377em measured vs 0.5em assumed → the column ran ~90 chars, not the believed ~68). The instrument that overturned ARC's measure. | `reference-verification-ladder.md` | **PROPOSED** |
| **ARC build has NO autoprefixer — hand-write `-webkit-` prefixes** | feedback memory | ARC's plain-`sass` build adds no vendor prefixes. When introducing a new CSS property, check Safari's prefix need and hand-write it. The `-webkit-hyphens: auto` Safari bug came from prefixing the *limits* but not the *property* — an inconsistency that read as "hyphenation off in Safari." | `feedback-arc-no-autoprefixer-handwrite-webkit.md` | **PROPOSED** |
| **Justification-judgment bar = Bringhurst even-colour/rivers, NOT Rutter hyphenation** | feedback memory | Load-bearing for the future justification decision: when living with the soft rag to judge whether to justify, ask *"is the colour even, are there rivers"* (Bringhurst paragraph-level), **not** *"is it hyphenating"* (Rutter). The jurist corrected the executor's Rutter-leaning rationale. Either earns the KP/JS gate-amendment or retires it. | `feedback-justification-bar-bringhurst-not-rutter.md` | **PROPOSED** |
---
*Discipline reminder: "no harvest" is a valid outcome; do not manufacture proposals to fill the table (the inverse of Hermes's autonomous self-write). The yardstick is the steward's: did the steward have to re-explain something a skill could have carried?*