474 lines
106 KiB
Markdown
474 lines
106 KiB
Markdown
---
|
||
name: skill-harvest-register-proposed-skills-awaiting-steward-authorization
|
||
description: Standing register of skill create/patch/retire proposals surfaced by
|
||
/wrap-up §1.6, awaiting steward authorization. The governed analog of PENDING.md,
|
||
turned on our own tooling — propose → authorize → build → record. Surfaced every
|
||
wake via this MEMORY entry.
|
||
metadata:
|
||
node_type: memory
|
||
type: reference
|
||
originSessionId: a8eb1d46-314e-4545-a133-f747c69ad5b4
|
||
permalink: claude-memory/skill-harvest-register
|
||
---
|
||
|
||
# Skill-harvest register
|
||
|
||
The single place proposed skills live so they don't evaporate between sessions. `/wrap-up` §1.6 *proposes* here; the steward *authorizes*; only then is a skill created/patched/retired (never autonomously — the loop is load-bearing, per PENDING-23). `/wake-up` surfaces the open proposals via this entry. The governed analog of `~/PENDING.md`, for our own tools.
|
||
|
||
**Status legend:** `PROPOSED` (awaiting steward) · `AUTHORIZED` (proceed to build) · `BUILT` (done; move to the built-log) · `DEFERRED` (reason + condition) · `REJECTED` (reason; don't revisit without new input).
|
||
|
||
## Open proposals
|
||
|
||
*Full review with steward 2026-06-05 (housekeeping session) — every item ruled, evidence-checked against the KG drift/built record. Verdicts below.*
|
||
|
||
| Skill | Kind | One-line | Origin | Status |
|
||
|-------|------|----------|--------|--------|
|
||
| `/spec-code-audit` | create | Audit live code against a spec-contract section clause-by-clause; classify each gap; deliverable = gap-map. | 2026-05-29 | **BUILT 2026-06-07** — deferral condition met from the ARC direction (Seb's completeness question revived the justification; steward authorized build-from-this-run). Generalizes the four-pass bidirectional method proven on the full ARC audit (`_audits/spec-code-full-audit-2026-06-07.md`: 172 findings, 66-agent fan-out, adversarial refutation, 2 kills). Skill at `~/.claude/skills/spec-code-audit/`. Serves L1's first spec-vs-code audit as originally intended. |
|
||
| `bmf-diagnose` | create | N6 `EXPLAIN`-first root-cause method for L1/BMF storage pathologies. | 2026-05-27 | **AUTHORIZED 2026-06-05** (build at next L1 diagnostic need). |
|
||
| `mempalace-diagnose` (was `mcp-drop-diagnose`) | create | Upstream-issue-first method for MemPalace/MCP failures (proved on #1495; HNSW quarantine + search errors 2026-06-05). | 2026-06-02 | **AUTHORIZED 2026-06-05**. *Merge with bmf-diagnose RETRACTED same evening* — the merge was itself the MemPalace≠BMF conflation (steward's 3rd correction): one substrate we build, one we merely use. Two skills, two names. |
|
||
| `/pre-build-audit` | create | The four-pass *scope-claimed-vs-scope-tested per claim, with substrate evidence* discipline. | 2026-05-28 | **AUTHORIZED 2026-06-05**, build-on-next-big-build (cascade Stage 2 / vignette Phase 1 / L1). |
|
||
| `/vignette` | create | Phase-α vignette genome generation under Symmetria. | 2026-05-28 | DEFERRED (until vignette Phase 2) — condition unchanged, re-confirmed 2026-06-05. |
|
||
|
||
## Built / authorized (lineage — for context, not action)
|
||
|
||
- `/landscape-scan` + `/tooling-scan` (the scan-skill family, per-workstream lens cards) — built + in use (2026-05-27).
|
||
- `/wrap-up` §1.6 skill-harvest step + `/wake-up` §2.a/§3 glance — the practice itself (PENDING-23, 2026-05-27).
|
||
- Chaîne-d'union clasp across wake / Symmetria / wrap (2026-05-26).
|
||
- `/wrap-up` §4.0 — MemPalace liveness-ping-before-diary; steward-authorized + applied (2026-06-02; #1495 cold-start drop resilience, so a silent drop never eats the wrap filing).
|
||
- `/wrap-up` §6.5 dotfiles session-state commit+push (scoped add, session-stamped message, preservation-not-modification boundary) + `/wake-up` §2.c read-only push-check — steward-proposed and authorized conversationally, built same session (2026-06-05 housekeeping). Closes the governance-state single-disk latency that `sysupdate`'s calendar cadence left open; sysupdate keeps the catch-all sweep + Brewfile dump.
|
||
- **Symmetria §3 — two flags added** (2026-06-05, authorized + built same evening): *trust-prior-pass-frame* (frame-inheritance from prior verification into untested domain) + *census-through-truncation* (count first, then look). Closes the long-standing §3 patch proposal.
|
||
- **`reference-verification-ladder.md`** (2026-06-05, authorized + built same evening): one canonical home for the proven instruments (byte-identical compile gate, expected-delta/delta-classification, censused-routes, measure-toolchain-before-spec, compiled-selector grep, governed-char byte gate, WCAG compute, fresh-clone gate, live-fetch gate, per-type×per-viewport, re-verify-at-extension-scope). Ends the per-wrap re-proposing; future instruments append there, not here.
|
||
- **`/arc-typeset` REJECTED** (2026-06-05): superseded — §I.k.b/c moved the mechanical pass into the build; LINT class carries judgment warnings; multilingual §2.5 carries authoring notes; `french-typography-pass` covers the French preparation layer. Do not re-propose without a new gap.
|
||
- **MEMORY.md two-file self-bounding architecture — BUILT 2026-07-06** (steward-authorized; closes three long-open proposals below). MEMORY.md 213KB→17KB (91.8%); split into `MEMORY.md` (wake-loaded live index) + `MEMORY-reference.md` (lossless history + reference layer). **Closes:** (a) the 2026-06-08 *`/wrap-up` §3 compress-at-demotion* patch → built as the richer **demote-on-promote** rule (prior Active Session relocates to `MEMORY-reference.md` in the same move; trackers stay one-liners; budget check); (b) the 2026-06-08 *deeper MEMORY.md reduction* proposal → done (the reference-layer split it described, plus the finding that the fat 8KB ARC tracker line — not just the archive — was the real bloat); (c) the *wake-canary* (2026-06-07) → the **truncation/load-integrity half** is now a standing `/wake-up` §2.a gate (truncated load = loud flag + trim). **Still open from the wake-canary proposal:** the *link-resolution* half (every pointer + `[[link]]` resolves at every wake) was applied once as a verification instrument this pass but is NOT yet a standing wake step — remains PROPOSED. Root-cause framing: the recurrence was role-conflation (one file doing live-index + archive + reference), no self-bounding, no load-integrity gate; the compress-in-place pass of 2026-06-08 attacked the level not the class, so it re-bloated.
|
||
- **`/wake-up` + `/wrap-up` rewired off MemPalace → the files layer — BUILT 2026-07-07** (steward-directed; palace-memory wind-down STAGED PLAN item 3, [[project-mempalace-winddown]]). wake §2.b (the MemPalace 5-step protocol) → files-layer reconstruction (recent `session-*.md` for thread trajectory; `grep drift-pattern knowledge-graph.jsonl` replaces the `kg_query claude-code` ritual; grep-the-files for depth); §2.e upgrade-check RETIRED; §5 constraints inverted (files primary; no `mempalace_*` for palace-memory). wrap §4 (drawer+diary writes) → the session file IS the record; §5 (kg_add/kg_invalidate) → append JSONL triples to `knowledge-graph.jsonl` (soft-invalidate via `valid_to`); §8 template MemPalace lines → `KG appended:`. **Typography palace KEPT** (separate instance, CLI). Both carry 2026-07-07 provenance notes; verified no live `mempalace_*` calls remain (grep), headings intact. **Decommission remainder (own slot, own 'tomorrow'):** items 1 (disable hooks), 2 (remove the MCP server), 4 (cold-archive) + the owed **BMF lessons report**.
|
||
|
||
## Candidate patches not yet proposed (watch-list)
|
||
|
||
- ~~Register wiring (authorized 2026-05-29)~~ — **APPLIED 2026-06-05 (evening wrap)**: wrap §1.6 now appends here; wake §2.a now reads here. Provenance notes in both skills.
|
||
- A Symmetria §3 flag for `verify-counts-two-ways` / mechanical-sweeps-finicky (saved as `feedback-verify-counts-two-ways.md`; may graduate to a flag if it recurs).
|
||
|
||
## New proposals (2026-06-06 wrap — awaiting steward)
|
||
|
||
| Skill | Kind | One-line | Origin | Status |
|
||
|-------|------|----------|--------|--------|
|
||
| `bmf-diagnose` | **build now** (already AUTHORIZED 2026-06-05 "at next L1 diagnostic need") | Today WAS that need and the method is proven+fresh: process sample → log pattern census (`uniq -c` histogram) → SIGUSR1→CDP CPU profile (working script at `/tmp/profile-mindfabric.mjs` — fold in before /tmp clears) → read-only SQLite census (`?mode=ro` URI) → evidence preservation to `l1-reliability/evidence/` → restart-with-capture. Hand-derived today over ~2h; the skill carries it next time in minutes. | 2026-06-06 mindfabric-00 forensics | PROPOSED (build, not authorize — authorization exists) |
|
||
|
||
## New proposals (2026-06-05 evening wrap — awaiting steward)
|
||
|
||
| Skill | Kind | One-line | Origin | Status |
|
||
|-------|------|----------|--------|--------|
|
||
| `/wrap-up` §5 | patch | **Palace-fully-derived, part 1:** mirror every `kg_add`/`kg_invalidate` made at wrap into the session memory file (one line each), so KG facts — the last palace-only data — become file-backed and the palace becomes wholly disposable/rebuildable. | 2026-06-05 MemPalace forensics + tooling scan part (b) | PROPOSED |
|
||
| `/wake-up` §2.b | patch | Until upstream #1665 closes: wake searches run **unscoped + post-filter by wing** (wing-scoped `mempalace_search` errors at HEAD). Remove when the feedback memory `feedback-mempalace-wing-filter-broken` is deleted. | 2026-06-05 diagnosis | PROPOSED |
|
||
| `/wake-up` (new step or §2 check) | patch | **Wake canary**: seconds-cheap probe at wake — every MEMORY.md pointer + `[[link]]` resolves to an existing memory file; flag dead pointers and load-bearing orphans. Lesson 7 of substrate-failure-lessons-2026-06-07 (BM false-clean sync) applied to our own index, which the harness already part-loads with a warning. | 2026-06-07 evening (memory-verdicts night) | PROPOSED |
|
||
|
||
## New proposals (2026-06-08 — harvested from Fowler, *Refactoring* 2nd ed. chs 1–3, awaiting steward)
|
||
|
||
*Read in the Chamber before Wave 3R. Three elements are genuinely NEW to our toolkit (not already carried by the verification ladder / Symmetria); two more are heuristics worth a feedback memory. Proposing the new ones; flagging where each would land on authorization.*
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---------|------|----------|----------------|--------|
|
||
| **Revert-and-redo-smaller** | Symmetria §3 flag OR ladder note | Ch1's strongest working reflex we *don't* have: when a verification/gate fails and the cause isn't immediately visible, **revert to the last green commit and redo the step smaller** — do NOT debug forward. We default to debug-forward; this is a different reflex, and it depends on commit-after-every-green (which we already do via the byte-identical gate). | Symmetria §3 (a flag) or verification-ladder (a named discipline) | PROPOSED |
|
||
| **Two-hat commit separation** | verification-ladder entry | Name which hat each commit wears: a *refactor* commit's compiled output is byte-identical (or carries a pre-stated classified delta); a *feature/behaviour* commit is where rendered values change. We already own the byte-identical gate + delta-classification — this names the **commit-level rule** that pairs them ("never mix a structural move and a value change in one step"). The ARC `@layer` re-partition is the textbook case. | verification-ladder (formalizes what the byte-gate implies) | PROPOSED |
|
||
| **Bad-smells → refactoring lens** | reference card OR fold into `/code-review` | Ch3's smell catalogue (Mutable/Global Data, Duplicated Code, Shotgun Surgery, Speculative Generality, Comments-as-deodorant…) as an explicit review lens. Today it classified the `!important` census cleanly (global-data smell → `@layer`). Likely too large for a new skill; candidate to fold into `/code-review`'s prompt or a one-page reference beside the ladder. | `/code-review` prompt or new reference | PROPOSED (lowest priority — may be redundant with existing review skill) |
|
||
|
||
**Heuristics (feedback-memory candidates, no skill needed):**
|
||
- **Rule of Three** (ch2): first time do it, second wince, third refactor. Defer abstraction to the third repetition.
|
||
- **Preparatory refactoring** (ch2, Kent Beck): *"make the change easy (warning: this may be hard), then make the easy change."* The framing for sequencing Wave 3R *before* Stage G — Jessica Kerr's "drive north to the highway."
|
||
|
||
*Note: measure-don't-speculate (ch2 date-range story) is NOT proposed — already carried by the ladder (censused-routes, measure-toolchain-before-spec). Today's census re-proved it; no new instrument needed.*
|
||
|
||
## New proposals (2026-06-08 evening — the tree + the memory-index archive pass)
|
||
|
||
**Verification-ladder additions (the session proved both; → `reference-verification-ladder.md`):**
|
||
- **content-multiset-identity gate (file-split/extraction under @layer)** — when a refactor *moves rules between partials* (not just reorders one), the byte-identical compile gate FAILS: each new partial adds a legitimate `@layer base { }` wrapper. The correct proof: strip `@layer …{` openers and lone `}` lines, sort, diff → identical content-multiset proves no rule changed/added/dropped while the wrapper count differs as expected. Proven 5× (the `_utilities` dissolution). PROPOSED.
|
||
- **CAUTION: property-name-exact collision measures miss shorthand↔longhand + cross-selector-same-specificity** — the `.ornament` margin flip (`margin` shorthand vs `margin-top/bottom` longhand) was invisible to the automated `/tmp/collide.py`; only the source-read caught it. The automated census is the floor; the per-move render gate is the guarantor (byte-identical≠rendered-identical, one layer down). PROPOSED.
|
||
|
||
**Memory-index (MEMORY.md) — the archive pass + the durable fixes:**
|
||
- **DONE 2026-06-08 (steward-authorized, live): compress-in-place archive pass.** 90 archived-session bullets compressed to one-line pointers (detail preserved in the session files), **285KB→157KB**, all 239 pointers preserved, every load-bearing section byte-identical; backup `/tmp/MEMORY.md.bak`. ⚠ A naive split-at-first-`## Archived` was **caught-and-avoided** — the file is INTERLEAVED (archived blocks scattered among load-bearing reference sections: Pending work / Feedback / Drift patterns / ARC project state / CapableMind L1 / Personal Context / Reference Files). Surgical compression of only archived bullets is the correct tool for an interleaved index.
|
||
- **[PATCH proposal] `/wrap-up` §3 — compress at demotion.** When demoting Active Session → Archived, compress the entry to a one-liner in the *same move* (it's already in the session file). Prevents index re-bloat at the source — without it the index re-grows ~4–5KB/session and this pass recurs. **→ BUILT 2026-07-06** as demote-on-promote in the two-file architecture (see built-log). CLOSED.
|
||
- **[PROPOSAL] deeper MEMORY.md reduction (only if 157KB still trips "only part loaded").** The load-bearing REFERENCE sections (steward profile / project states / ARC project state / CapableMind L1 / Reference Files) are large but largely STABLE — candidate to move to a consult-on-demand `MEMORY-reference.md`, leaving the wake-loaded MEMORY.md = standing prefs + trackers + Active Session + recent. Riskier (real memory, not duplication); its own focused pass, not a tail-of-session move. **→ BUILT 2026-07-06** (its own focused pass, exactly as advised — backup + full read + byte-exact split + link canary). The predicted reference sections all moved to `MEMORY-reference.md`; the pass also found the fat 8KB ARC tracker line was itself a bloat source. CLOSED.
|
||
- **[reminder] the wake-canary** (PROPOSED 2026-06-07, above) still awaits authorization — the paired guardrail (every MEMORY.md pointer + `[[link]]` resolves at wake); should cover MEMORY.md + any future archive/reference split files. **→ PARTIALLY BUILT 2026-07-06:** the *truncation/load-integrity* half is now a standing `/wake-up` §2.a gate. The *link-resolution* half was applied once (this pass, as a verification instrument — caught that all 8 unresolved links were pre-existing) but is NOT yet a standing wake step. **STILL OPEN:** wire link-resolution as a recurring wake check (covering MEMORY.md + MEMORY-reference.md); low-urgency (cheap, but the split introduced no new breakage, so no active pain).
|
||
|
||
## New proposals (2026-06-09 — the headless-Chrome measurement harness, awaiting steward)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---------|------|----------|----------------|--------|
|
||
| **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** |
|
||
|
||
## New proposals (2026-06-10 — Stage-G close + spec-internal consistency audit day)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---------|------|----------|----------------|--------|
|
||
| **spec↔spec coherence dimension** | patch `/spec-code-audit` | The 2026-06-10 audit found §I.f-class contradictions — the measure (38→27.2rem) un-propagated across silence-and-rhythm/apparatus/vignette, an American-quote remnant, v0.5/AUTHORED status leftovers — that bidirectional spec↔**code** could not catch, and that the jurist's read-scope (charter+multilingual only) missed. Add a **cross-document spec↔spec coherence pass**: every cross-referenced rule agrees across files; every late decision swept across ALL companions, not just its primary home. Proven method: a per-file-vs-canon + cross-reference fan-out (6 read-only agents). | `/spec-code-audit` (new dimension) | **PROPOSED** |
|
||
| **container-must-embody-the-contained** | feedback memory | When producing an ARTIFACT *of* a spec (a PDF of the spec, a rendered sample), set it per the spec's OWN rules and verify the render **against the doctrine, not for approval.** 2026-06-10: the Codex PDF violated its own §I.d (bold), §I.i (justified), §I.b (lining figures), §I.h (marked blockquotes), §VII.e (grey), and earlier the whole-document small-caps — and I read each render *favourably* instead of testing it against the spec (the SC miss especially). Sibling of `causal-story-before-reading-render` / read-render-favorably, one level up: the artifact must obey what it states. | `feedback-container-must-embody-the-contained.md` | **PROPOSED** |
|
||
| **check-for-governed-tooling-before-building** | feedback memory OR Symmetria §3 flag | Before hand-rolling infrastructure (a PDF preamble, a build script, a template), grep the repo for an existing governed version. 2026-06-10: I reinvented a lualatex preamble while `tools/latex/arc-typography.sty` (the governed PDF/print substrate, encoding the very rules I was hand-fixing) existed; the steward's "did we not do a basic pdf spec?" caught it. Kin to `reinvented-governed-tooling-without-checking-it-exists` (KG drift, 2026-06-10). | feedback memory or Symmetria §3 | **PROPOSED** |
|
||
| **byte-identical gate: hold/exclude volatile build-stamps** | verification-ladder refinement | When proving a change byte-identical, a build-date/commit stamp (e.g. the colophon `_build_info/stamp`) will differ between baseline and post builds and falsely flag a diff. Hold the stamp constant (don't re-run `make build-info`) or exclude the stamped file, then diff. Caught 2026-06-10 (G1 proof: the lone "diff" was the colophon stamp). | `reference-verification-ladder.md` | **PROPOSED** |
|
||
|
||
*Not a skill — a parked project task (in the ledger + session file): the **Phase-2 print/PDF-spec session** to update `arc-typography.sty` + `template-pdf-posture.tex` to current doctrine (posture-aware ragged/justified, Medium headings, 27.2rem measure-geometry, British quote-normalization, xelatex glyph routing, v0.3). Governs all future ARC PDFs.*
|
||
|
||
---
|
||
|
||
*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?*
|
||
## New proposals (2026-06-11 — §VII.f / open-work-reckoning day, awaiting steward)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---------|------|----------|----------------|--------|
|
||
| **Symmetria §3 flag: inherited-marker-read-as-current-state** | Symmetria §3 flag | A status/marker inherited from a RECORD (a selector-index entry, a tracker line, a "-pending" file, a prior framing) asserted as current state without verifying against code/live is contamination shape — **records drift, in BOTH directions** (stale "pending" files describe DONE work; "done" narratives hide OPEN work). Earned hard 2026-06-11: 3 stale-index misreads in one turn (running-head index entry, the "only unbuilt element" overclaim, the colophon) + the steward's two corrective catches (colophon done-mislabeled-pending; cul-de-lampe open-mislabeled-done). Antidote: verify status against the substrate before asserting. Kin to `live-state-discipline` / `reasoning-from-remembered-model-not-current-state`, generalised to ALL records. | Symmetria §3 | **PROPOSED** |
|
||
| **`/measure-render` (headless-Chrome box-model/scroll harness)** | create skill OR ladder note | **RE-REINFORCED (4th day of evidence).** Proposed 2026-06-09 (compass fix) + reinforced 06-09 pm; today drove the ENTIRE §VII.f build — reveal opacity across scroll, body-column-axis alignment (598/798 constant), the dissolve-below-rule geometry, the frontispiece no-scroll proof, the compass graded reveal. The build would not have been groundable without it. Earns its own skill. | `/measure-render` skill OR verification-ladder | **PROPOSED (strongly reinforced, 4th instance)** |
|
||
|
||
*Watch-list (not yet a skill proposal): the **open-work register pattern** — when tracking surfaces drift, consolidate them into ONE code-verified source of truth (built `project-arc-open-work-register.md` today). Overlaps `/spec-code-audit` for the spec↔code half; the new part is the content/governance/Phase-2 reconciliation. May graduate to a `/reconcile-open-work` discipline if it recurs on another workstream (L1/be).*
|
||
|
||
## New proposals (2026-06-12 — Studium planning charter / model-routing day, awaiting steward)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---------|------|----------|----------------|--------|
|
||
| **`/model-handoff` (premium-model scope charter)** | create skill OR reference card | When switching to an expensive/premium model (Fable 5 = 2× Opus rate; burn scales with context×session-length) for a **bounded high-leverage phase**, first write the **scope charter on the cheap model** — the bounding/orientation reasoning is cheap, the content reasoning is where the premium pays. Charter shape (proven today, `studium-engine/docs/stage-1-planning-brief-2026-06-12.md`): §0 operating discipline (1M window — `claude-fable-5[1m]` not bare-200k; reset thinking level on switch; no sprawl) · §1 settled decisions (don't re-derive) · §2 already-read summaries (don't re-read) · §3 bounded reading list (verified paths; out-of-scope named) · §4 exact deliverables · §5 report-and-stop. Plus: **clear+wake rather than switch-in-place** so the premium model never rereads the long chat; **artifacts (not chat) are the handoff** (the Reddit "knowledge in files not chat" insight, but **reject** its "query the graph instead of files" — that's the index-as-source-of-truth shape). Recurs every Fable session in the 06-22 window and beyond. | a `/model-handoff` skill OR a reference card beside the verification ladder | **PROPOSED** |
|
||
| **verification-ladder: feature-detect gates can lie** | verification-ladder entry | A CSS `@supports(feature)` (or any capability probe) can return **true on a platform where the feature is non-functional** — today the ARC §VII.f running head: `@supports(animation-timeline:view())` is `true` on iOS Safari 26, but mobile WebKit won't *drive* the scroll-reveal on a `position:fixed`+`timeline-scope` consumer (`display:block, opacity:0`); desktop Safari works. So a progressive-enhancement "no-support shows nothing" contract can be **silently false** on a major platform. Antidote: **verify the feature on the real engine/device, not the support table** — `CSS.supports(...)` + computed-`opacity`/`getBoundingClientRect` on-device (the iOS analog of the headless-Chrome box-model harness). Kin to `/measure-render`; one level up (feature-functionality, not box-model). | `reference-verification-ladder.md` | **PROPOSED** |
|
||
|
||
*(Both genuine, both recurring-shaped — not manufactured. The first will pay off the very next time the steward opens a Fable window; the second generalizes today's running-head correction into a standing instrument.)*
|
||
|
||
## New proposals (2026-06-12 night — Studium Stage-1 build / source-cleaning, awaiting steward)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---------|------|----------|----------------|--------|
|
||
| **verification-ladder: parse/validate machine-consumed artifacts that have only ever been human-read** | verification-ladder entry | When an artifact that humans have only ever *read* (a hand-authored YAML index, a config, a data file) is about to be *machine-consumed* for the first time, parse-and-validate it BEFORE trusting it. Today: **all four** chamber reading-index YAMLs were defective and **eye-invisible** — three had unparseable YAML (a list entry starting with a quoted phrase then trailing text, e.g. `- "The Wanderer" (Old English poem)`), one had silent anchor-drift; the Read tool renders them fine, so eye-review and the prior cruft audits never caught them. The engine was the first machine reader. Antidote: `yaml.safe_load` (or the consumer's real parser) + anchor-verify against the substrate, both directions, before binding. Kin to the deliberate-mismatch gate, one level up (artifact-validity, not output-validity). | `reference-verification-ladder.md` | **PROPOSED** |
|
||
| **clean cruft at the SOURCE layer, not as a downstream transform** | feedback memory | When a source carries conversion cruft (EPUB footnote-links, image-scan embeds), clean it at the SOURCE — producing a new canonical file (new hash, re-anchor) — not as a chunk-time/read-time transform. A downstream strip makes `text_original` a *transform* of the file rather than a byte-faithful *slice*, silently violating the verbatim guarantee. Spec §5 names this the primary path; the steward's instinct ("attend to the source files") corrected my chunk-time-rule fallback. Technique note: when footnote *display* numbers restart per-section (so `[45]` recurs), pair/label by the globally-unique anchor id (`#nf K`/`#anf K`), not the visible number — Pandoc renumbers on render anyway. Governed cleaner built: `chamber-library/scripts/clean_epub_residue.py`. | `feedback-clean-at-source-not-downstream-transform.md` | **PROPOSED** |
|
||
|
||
*(Both earned in use, both recurring-shaped. The first generalizes today's all-four-indices-defective finding into a standing gate; the second captures the steward's layer/placement correction — his instincts about WHERE a thing belongs were load-bearing twice today, also worth holding.)*
|
||
|
||
## New proposals (2026-06-13 — Studium Steps 3-4 / chamber canonical-tier day, awaiting steward)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **dry-run-first for bulk file operations** | verification-ladder entry | When a mutation touches many files at once (mass `git mv`, graduation, rename), build it **dry-run by default** and emit the full move-map + collision-guard + reference-scan (`git grep` each old basename) BEFORE `--apply`. Proven 3× today (`canonicalize_filenames.py`, `graduate_to_canonical.py`, and the graduation preview) — the steward approved each from the preview, and the preview caught the 7 stale hand-doc references + 0 collisions before anything moved. Kin to the byte-identical gate, generalized to file-tree moves. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
| **Symmetria §3 flag: census-through-a-pattern** | Symmetria §3 flag (refines census-through-truncation) | A filter/regex used to *count* or *partition* a set can silently mis-match and the count reads as authoritative. Today `grep -iE 'LOG'` for meta-files matched "episteme**LOG**y"/"phenomeno**log**y"/"eco**log**y" → 49 false "meta" files (real = 4). Antidote: verify the pattern against known positives AND a known negative before trusting the partition; anchor patterns (`_LOG\.md$` not `LOG`). One step more specific than census-through-truncation (which is about *coverage* of the scan; this is about *correctness* of the matcher). | Symmetria §3 | **PROPOSED** |
|
||
|
||
*(Both genuine, both recurring-shaped. The first will pay off the next bulk corpus move — the 237 dirty files graduate incrementally, each a potential bulk op. The second caught a real false-count today and is a clean refinement of an existing flag.)*
|
||
|
||
## New proposals (2026-06-13 post-clear — L1 /health PR + Studium Steps 5-7 + the dilution correction)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **Symmetria §3 flag: solve-the-constraint-by-discarding-the-value** | Symmetria §3 flag | A "fix" that satisfies a stated constraint by **removing the thing the constraint was protecting** is contamination shape — it optimizes away the value to avoid a failure. Caught HARD today: the steward's dilution memory → my first Step-7 verdict bounded vector to voice-scope-only ("never a global semantic index"), which *solved* dilution by discarding the engine's core value (whole-corpus depth+breadth). The steward caught it; correction restored depth-WITH-breadth (dilution = engineering problem, not a reason to forbid the capability). Antidote: when a constraint forces a fix, check the fix **preserves the value the constraint was guarding**, not merely satisfies the constraint. Kin to the executor-bias-to-satisfy-the-interlocutor, one level up (satisfy the *constraint* over the *truth*). | Symmetria §3 | **PROPOSED** |
|
||
| **verification-ladder: re-verify a workflow/sub-agent's per-item dispositions on the real apply** | verification-ladder entry | A sub-agent or background workflow that reports a per-item verdict from a **dry-run on a temp copy** can be wrong on the real apply — the agent's own audit can differ. Caught today: the cleaning-triage workflow classified `la-terre-…-Bachelard` as "cleanable to 0" (dry-run on a temp copy); the real `strip_cruft` run left **460 cruft** (7 passes). 23/25, not 25, graduated. Antidote: treat a workflow's dispositions as *candidates*; re-run the gate on the **real mutation** before trusting/committing. Kin to `/symmetria audit-agent` (calibration/convenience checks on a return), specialized to workflow per-item verdicts + the real-vs-dry-run gap. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
|
||
*(Both earned in use today. The first is the load-bearing one — a clean name for a contamination shape the steward caught live, and a genuine addition to the §3 catalogue. The second is a concrete guardrail for the now-standard workflow-fan-out pattern.)*
|
||
|
||
### Harvest 2026-06-15 (chamber-clean + studium charter)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **Symmetria §3 flag: assert presence/absence from a fuzzy matcher, not the substrate** | Symmetria §3 flag | A presence/absence claim produced by a **fuzzy/token matcher** (filename tokens, embeddings, author-surname overlap) treated as **fact** is contamination shape — the matcher's false-positives/negatives become confident assertions. Caught **4× in one session**: the physical-library gap analysis claimed *Timeless Way of Building* absent, then 44 of 49 "load-bearing gaps," then physical-worthy candidates, then the gap list — all wrong; the steward corrected each. Cause: the matcher required author-surname + title in the *same* filename, and 1,072 chamber sources have no frontmatter. Antidote: **verify any presence/absence claim against the substrate** (content-grep the actual text) **before asserting** — and prefer reporting *candidates-to-verify* over claims. Kin to the censused-routes flag (don't claim coverage from a sampled read), specialized to matcher-derived membership claims. | Symmetria §3 | **PROPOSED** |
|
||
|
||
*(One candidate, load-bearing: it recurred four times in a single session and the steward caught every one. A clean §3 flag would have made me reach for the content-grep before the first assertion.)*
|
||
|
||
### Harvest 2026-06-16 (officina + the chamber conversion-tooling upgrade)
|
||
|
||
**Standing discipline ESTABLISHED (steward-directed):** *review every conversion/audit/repair tool after each use — success or failure — capture what it taught, iterate until reliable.* Home: `chamber-library/_curation/tool-evolution-log.md` (operationalizes conversion-skill-plan §13). PASS-BUT-FALSELY (tool reports success on a wrong result) is the priority signal. **This is a standing memory:** see [[feedback-tool-review-after-each-use]].
|
||
|
||
**BUILT + validated 2026-06-16 (the conversion batch's tools, "made most effective they can be"):**
|
||
- `audit_cruft.py` hardened — added `md_image` (any ``, not just `img/`), `svg_raw`, `repl_char` (`U+FFFD`). Re-audit surfaced **160 standing canonical files with residue the old gate hid** (95 image / 64 svg / 8 encoding) → corpus cleaning pass owed.
|
||
- `verify_conversion.py` NEW — the composite verifier (the planned `/convert-verify` in script form): cruft + heading-density + ocr-damage + encoding + word-sanity, pass/fail per check. Calibrated (Greek-apparatus false-positive fixed → 948/952 on clean Loeb tier).
|
||
- `repair_epub_headings.py` fixed — hyphen-separator bug (Crawford 4→12 headings, all chapters) + honest structural-coverage report (fails loud, no more silent partial ships).
|
||
|
||
**PROPOSED (register, awaiting steward / for the historical-treatise track):**
|
||
- Author the four `/convert-*` skills proper (the v3 plan) — today's manual run is their empirical spec.
|
||
- `ocrmac_pdf.py`: retain per-token confidence (currently discarded) → per-page confidence + low-confidence flagging; auto-detect-body-column (the TODO); apparatus-zone separation.
|
||
- **OCR frontier = research track, not a tweak:** no validated polytonic-Greek/Latin/fraktur/critical-apparatus path exists (ocrmac=modern-Latin only; Marker CPU-infeasible >50pp). Needs investigation before historical treatises + the apparatus `role` vocabulary (jurist-owed).
|
||
- Positive language-validity check (dictionary-valid-word ratio per language) for verify_conversion — catches "no cruft fires but text is OCR garbage."
|
||
- Promote today's catalogue census (title+author co-required, evidence-emitting) into a reusable `census_membership` tool.
|
||
- Calibration follow-ups logged: word_sanity floor vs genuine short fragments; repair coverage threshold should weight content over front-matter.
|
||
|
||
**New proposal (2026-06-16 wrap §1.6 — awaiting steward):**
|
||
| Skill | Kind | One-line | Status |
|
||
|---|---|---|---|
|
||
| `/wrap-up` §4.b/§5 | patch | Inline reminder at the KG-write step: `kg_add` `object` hard-caps at **128 chars** — write short keyword objects on the FIRST pass (detail in the drawer). Hit it AGAIN this wrap (2 failed adds, re-added short). The memory [[feedback-mempalace-kg-object-128-char-cap]] knows it; the skill doesn't carry the reminder at the moment of writing. A one-line patch would stop the recurrence. | PROPOSED |
|
||
|
||
### Harvest 2026-06-16 (evening — pattern-finder build + Station-I contamination)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **Work-in-omnibus: verify the interior, not just the endpoints** | verification-ladder instrument | When a sidecar/scope brackets one work out of a **multi-work source** by heading-to-heading boundaries, **content-sample the span INTERIOR** (mid-span reads) and scan for embedded works / editorial apparatus **before trusting the bracket** — endpoint-verification is necessary but not sufficient. Caught the hard way this session: my La Chute bracket `[8062–10951]` verified at both ends (Clamence present, Meursault absent) yet its interior was *mostly Le Premier Homme* — a whole undeclared novel the heading-to-heading logic swallowed. Specialization of [[trust-prior-pass-frame]] (verify at the scope of the extension), kin to the censused-routes flag. Lands on [[reference-verification-ladder]]. | verification ladder | **PROPOSED** |
|
||
| **studium-engine tool-evolution-log** | create | Establish the analog of `chamber-library/_curation/tool-evolution-log.md` for the **engine** tools (pattern_finder, ingest_gate, chunker, store, retrieve), per the standing [[feedback-tool-review-after-each-use]] discipline — studium tool-reviews currently have no home. First entry = the pattern_finder pass-1 review (**PASS-BUT-FALSELY**: reported "5/5 voices" over partly-false grounding). Home candidate: `studium-engine/docs/_audits/tool-evolution-log.md`. | studium-engine repo | **PROPOSED** |
|
||
|
||
*(Both load-bearing: the interior-homogeneity instrument would have prevented the Camus contamination outright; the engine tool-log is where this very review should have been recorded and wasn't. Neither created autonomously — surfaced for steward authorization.)*
|
||
|
||
### Harvest 2026-06-17 (the cul-de-lampe day — designed, rolled out, versioned, shipped)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/version-essay`** | **create** | The ADR-005 essay-versioning procedure, derived from `essay-versioning-specification.md` this session: when a published essay gets a *substantive* revision — **(1)** snapshot the genesis with `git show HEAD:<path> > <path>.YYYY-MM-DD.md` (suffix date = origin `date:`); **(2)** add a `revisions: {date, location, summary}` entry to the current file (present-tense one-line summary, not a changelog); **(3)** clean rebuild + verify the `/v/YYYY-MM-DD/` route renders and the piece-end version-stamp links it. Apparatus-only changes (e.g. *adding the close*) are NOT revisions — leave them unversioned. **Yardstick met:** the steward had to flag *"respect the versioning — this is a major change"* mid-work; a skill would carry it. Recurs on every major essay revision. | new `/version-essay` skill | **PROPOSED** |
|
||
| **CSS-mask: fill WHITE, not black (luminance-safe)** | verification-ladder note | A CSS `mask`/`-webkit-mask` SVG must fill the shape **white/opaque** — a **black-fill** mask renders **BLANK** (the luminance-vs-alpha trap). Cost ~6 debug rounds this session (the cul-de-lampe painted nothing until isolated in a standalone test page). Pair: ARC has no autoprefixer → **hand-write `-webkit-mask`**. | `reference-verification-ladder` | **PROPOSED** |
|
||
| **live-CSS-patch in `_site` for fast in-browser iteration** | verification-ladder note | To eyeball size/style options in the real browser without a full Hakyll rebuild each round, `sed` the value directly in `_site/assets/css/style.css` and refresh — then lock the chosen value in the **source** SCSS. Made the steward's 1→1.5→1.75em sizing dance fast. (Discipline: it's a *preview hack*; the source edit is the real change.) | `reference-verification-ladder` | **PROPOSED** |
|
||
| **headless-Chrome element shot: scrollIntoView + full-viewport, NOT computed clip** | Symmetria §3 flag OR ladder note | Recalibration: computed box-clips kept mis-landing on the page-top (burned several shots). The reliable element screenshot is `el.scrollIntoView({block:'center'})` + a **full-viewport** screenshot, then read the image — not `clip:{x,y,w,h}` math off `boundingBox()`. Kin to `/measure-render`. | `reference-verification-ladder` or `/measure-render` | **PROPOSED** |
|
||
| **glyph-outline → SVG from a woff2** | method note (ladder or `/measure-render`) | Build a typographic SVG asset *from the real font glyphs*: `fontTools` `SVGPathPen` (path) + `BoundsPen` (bbox) over the woff2, y-flip into SVG space. Used to draw the cul-de-lampe from EB Garamond U+E001/E002. Reusable for any future glyph-derived ornament/mark; pairs with the mask note above. | `reference-verification-ladder` | **PROPOSED** |
|
||
|
||
*(Five, all earned in use; `/version-essay` is the load-bearing one — a steward-flagged gap a skill would close. The four ladder/method notes are concrete instruments from the cul-de-lampe build; the mask-luminance one alone cost the most debug time and would have been a one-line save.)*
|
||
|
||
### Harvest 2026-06-18 (evening — engine telos & steward formation disclosed)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/wake-up` patch — surface the *why* when the thread touches the engine's purpose** | patch | When the active workstream is studium-engine / The Making / ARC-as-public-proof (the engine's reason-for-being), `/wake-up` should **actively weave the load-bearing telos + steward-formation "why"** into the briefing — not just leave the pointers in MEMORY.md. **Yardstick met, explicitly and painfully:** the steward had to re-disclose the chamber's childhood origin *"many times, across many threads … it clearly needs to be said again"* — the memory failing at its one job. Concrete: add to §2.a a conditional read of [[project-studium-engine-telos-chamber-of-voices]] + [[user-formation-flamenco-substrate]] when the thread is engine/Making/ARC-purpose, and one line in §3 holding the why. **Caveat (honest):** the prominent MEMORY.md pointers added this session may already largely close the gap, since wake reads MEMORY.md — so this is belt-and-suspenders, low-urgency, for steward judgment. Do NOT recite the why every wake (decorative); only when the thread touches it. | `/wake-up` §2.a + §3 | **PROPOSED** |
|
||
|
||
*(One proposal, low-urgency. The pain it answers is real — losing the most important thing across threads is the exact failure the engine exists to end — but the file-prominence fix landed this session may suffice; surfaced for the steward to judge whether the wake-up patch adds enough over the pointers to be worth the weight.)*
|
||
|
||
### Harvest 2026-06-22 (L1 N6 wedge fixed + clone-tested + PR #175)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/clone-test-runtime-fix` (CoW-clone + isolated-worktree harness)** | create skill OR ladder | When testing a runtime fix that needs **real live data** but must not touch the live instance: `/bin/cp -c -R` (APFS CoW) the live data dir to `/tmp`, `git worktree add --detach` the branch + symlink `node_modules`, `npm run build` in the worktree, run against the clone on an **alt port** with a separate `BM_DATA_DIR`. Live `dist/` + live instance untouched; the fix is proven against the worst-case real graph. Proven today (N6 fix proven on a clone of mindfabric-00's 688k-graph; PID 747 never touched). Recurs for any L1/BMF runtime fix. | new `/clone-test-runtime-fix` skill OR `reference-verification-ladder` | **PROPOSED** |
|
||
| **verification-ladder: verify the RUNNING BINARY's provenance, not just source HEAD** | verification-ladder entry | Before reasoning about live behaviour, verify what the running process actually executes — compiled `dist/` build mtime + grep the compiled symbols — not just `git HEAD`. Today the whole "schema-drift" mechanism flipped on this: HEAD had the A1'' migration, but the running `dist/` was a **2026-05-24 build predating it** (zero A1'' symbols in dist) → "migration didn't fire" was wrong; "code never deployed" was right. Generalises [[live-state-discipline]] one layer down (source-as-committed ≠ code-as-running). | `reference-verification-ladder` | **PROPOSED** |
|
||
| **Symmetria §3 flag: probe-confirms-hypothesis** | Symmetria §3 flag | A query/test **I constructed to match my hypothesis**, whose result I then read as *confirming* the hypothesis rather than testing whether the system actually does that. Caught today: I hand-wrote `EXPLAIN … WHERE coherence_evaluated=0`, saw it `SCAN`, and reported it as a live wedging code-path — but the build-map agent found **no code runs that query**. The probe matched my theory; the codebase didn't. Antidote: a constructed probe tests the *probe's* behaviour, not the *code's* — verify the code actually issues the query before citing the probe as evidence. Kin to `causal-story-before-reading-render`, specialised to self-authored SQL/test probes. | Symmetria §3 | **PROPOSED** |
|
||
| **verification-ladder: quantify-the-removed-cost as the A/B control** | verification-ladder entry | When a fix *removes* a hot operation, the cleanest control isn't a flaky end-to-end before/after race — it's to **time the exact removed operation on real data**. Today: timing the wedging `json_each` scan on the real 676k graph = **2.56 s each** (vs 0.003 s indexed) × ≤20/event = the wedge, quantified decisively in seconds, no full-replay race needed. Bounded, reproducible, and the number goes straight into the PR. | `reference-verification-ladder` | **PROPOSED** |
|
||
|
||
*(Four, all earned in use today on the N6 work. The clone-test harness and running-binary-provenance are the load-bearing two — the first is a reusable safe-test pattern for the steward's live substrate; the second flipped a wrong root-cause to the right one. The probe-confirms-hypothesis flag is a clean new §3 shape [self-authored probe ≠ code behaviour]. Minor/reinforcing: "assert-process-dead-from-a-pgrep-pattern-miss" recurred today [declared PID gone; it was alive, my pattern just didn't match the cmdline] — reinforces the existing `census-through-a-pattern` flag, no new entry needed. None created autonomously — surfaced for steward authorization.)*
|
||
|
||
### Harvest 2026-06-23 (N6 deployed live + consumer-hardware reframe — the thrash day)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **Symmetria §3 flag: diagnose-inference/latency-without-isolating-the-exact-endpoint-uncontended-first** | Symmetria §3 flag | **The load-bearing harvest.** When a network/inference call is slow, the FIRST test must be the *isolated* one: stop the competing load AND hit the *exact endpoint the code uses*. Today I thrashed **4 confident-then-overturned leads** (missing-model → structured-output-bug → "model dead on host") because I tested `/api/generate` (wrong endpoint — it has its own Ollama-0.30.8 quirk) *under contention* from the live instance. TEST G — BMF stopped + slot cleared + the real `/api/chat` — gave the answer (4.6s, saturation not breakage) in **one shot**. The thrash was the cost of not doing the clean isolation test first. Kin to `probe-confirms-hypothesis`, specialised to latency/throughput diagnosis. | Symmetria §3 | **PROPOSED** |
|
||
| **Symmetria §3 flag: reinvent-governed-DESIGN-without-reading-the-spec** | Symmetria §3 flag (may be redundant) | Proposed PENDING-41 (consumer-hardware graceful degradation) as a *novel* architectural direction when `local-inference-spec` 43L/43M **already designed exactly it**. Steward's clasp/circles pointer caught it. Antidote: before proposing an architectural direction, grep/read the spec for the existing design. **Possibly redundant** with the KG drift `reinvented-governed-tooling-without-checking-it-exists` (this is the *design/architecture* sibling of that *tooling* flag) — steward to judge whether it needs its own entry or just widens the existing one. | Symmetria §3 | **PROPOSED (poss. redundant)** |
|
||
|
||
*(Two. The first is genuinely load-bearing — it would have saved an embarrassing afternoon of flip-flopping and is a clean, reusable diagnostic discipline. The second may just widen an existing flag; surfaced for the steward to merge-or-keep. Reinforced-not-new: the clone-test discipline [proposed 2026-06-22] — I restarted the LIVE substrate 4× today doing diagnosis that belonged on a clone; reinforces that proposal, no new entry. None created autonomously.)*
|
||
|
||
### Harvest 2026-06-26 (Chamber spec ratified + OCR pipeline + Levi first graduation)
|
||
|
||
| Skill | Kind | One-line | Origin | Status |
|
||
|---|---|---|---|---|
|
||
| **`/graduate-chamber-source`** (the `/convert-*` family the runbook already plans) | create | Codify the now-PROVEN OCR→canonical→graduation pipeline as a single governed discipline, so the next source (Alexander 1–4, then the rest) follows the sequence + gates without re-deriving them: **(1)** `normalize_ocr.py` (mechanical: pages, seam-rejoin, dict-validated de-hyphenation, verbatim word-guard, conversion record; raw→`converted_texts/` §III) → **(2)** build per-book `structure.tsv` (curatorial: offset-anchor → read page-top windows → verify each chapter opening → `insert_chapter_headings.py`, fails-loud) → **(3)** curatorial front/back-matter trim + §IV/§VI frontmatter (drop apparatus, keep epigraph) → **(4)** `verify_conversion.py` PASS → **(5)** graduate (catalogue regen) → **(6)** check/re-point the studium-engine manifest. **Yardstick met:** the steward watched me *derive* the order + gates live this session; a skill carries it. The runbook (`known_gaps.next`) already flags "author the four /convert-* skills" — **today's Levi run is their empirical spec.** Recurs for every OCR source. | 2026-06-26 Levi graduation | **PROPOSED** |
|
||
|
||
*(One candidate, load-bearing. It realizes a pre-existing planned-skill (runbook `/convert-*` family) with a concrete proven sequence — not manufactured. Captured-elsewhere, not proposed as skills: the de-hyphenation 3-way classifier (in `normalize_ocr.py` + tool-evolution-log); "test the steward's idea against the substrate before accepting/dismissing" (already covered by the measure-before-theorizing ladder/Symmetria flags); the structure-map curatorial method (folded into the proposed skill above). None created autonomously.)*
|
||
|
||
### Harvest 2026-06-27 (ocrmac toolset calibrated + Making-corpus + research)
|
||
|
||
| Element | Kind | One-line | Status |
|
||
|---|---|---|---|
|
||
| **`/graduate-chamber-source`** (already PROPOSED 06-26) | **EXPAND** | Its empirical spec is now the full **ocrmac column-aware** pipeline, not the olmOCR one: render→ocrmac(per-line bbox/conf)→**column detection** (line-crossing-of-narrow-lines + line-width; 150dpi)→column-major reassembly→**furniture layer** (running-heads/page-numbers-retain-then-strip/captions/footnotes — the one UNBUILT piece)→**structure-from-authoritative-ToC** (page-numbers for OCR PROVEN 9/9; NCX-anchors for EPUB)→`normalize_ocr.py` (within-page rejoin + **wordfreq multilingual de-hyph** `--lang` + merge_flag)→verify→graduate. Plus the **EPUB path** (pandoc→clean_epub_residue→repair_epub_headings/NCX-anchor→verify). Method doc: `chamber-library/docs/ocr-conversion-method-2026-06-27.md`. Build only after the furniture layer + driver packaging exist (the literal-question: unify the OCR-page-number and EPUB-NCX structure steps into one format-agnostic "structure-from-authoritative-ToC"?). | PROPOSED (expand; build-on-packaged-driver) |
|
||
| **`feedback-resurface-banked-notes-before-rederiving`** | DONE (memory, not skill) | Created this session — read the banked note before re-deriving; re-derivation drifts (page-numbers mis-recalled as provenance; Levi gate re-raised 3×). The engine's purpose turned on my practice. | BUILT (memory) |
|
||
| verification-ladder note: **OCR word-guard passes on SCRAMBLED text** | ladder entry (proposed) | A verbatim word-guard that checks word PRESENCE cannot catch reading-order scrambling (2-col read across the gutter) — same words, wrong order = PASS-BUT-FALSELY at the corpus level. Validation gate = reading-order COHERENCE (no mid-sentence discontinuity), not just word-multiset. | PROPOSED |
|
||
| **2 research sweeps owed** (not skills — project tasks) | note | The engine's signature capabilities are greenfield: (1) genealogy/temporal/citation-graph/KG-augmented/diachronic-NLP; (2) multi-voice persona-grounded attribution + voice-fidelity verification. Plus: validate claim-level NLI on multilingual/archaic humanities prose. | (project tasks, in research doc) |
|
||
|
||
### Harvest 2026-06-28 (corpus settling — Musil graduated, Position I, gate fixed)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/graduate-chamber-source`** (already PROPOSED 06-26/27) | **EXPAND again** | Now carries the full EPUB path (`structure_from_ncx`→`insert_chapter_headings`→`clean_pandoc_html_residue`, used when `repair_epub_headings` coverage is low) + the **keep-notes** rule (convert footnotes/endnotes, never drop) + the per-book curatorial forks graduation always has (endnotes form, small-caps/two-line heading rendering, front/back trim, neighborhood). Empirical spec now = Musil (clean) + Taylor (the messy-EPUB case: two-line headings, raw `<a>`, `<sup>` footnotes). Build when the batch begins. | new skill | PROPOSED (expand) |
|
||
| **The gate itself can be PASS-BUT-FALSELY** | verification-ladder entry | A verifier that checks an **enumerated set of cruft signatures** silently passes any residue outside the set — `verify_conversion` passed `cruft=0` on 59 raw `<sup>` (the cruft check only knew `audit_cruft`'s img/span-class/fenced-div patterns). When the gate gates a whole-corpus audit, its blind spot makes the PASS count untrustworthy. Antidote: gate on the **general class** (any residual raw HTML tag, tag-name-anchored) not just known signatures; periodically adversarially-probe the gate itself. Caught 2026-06-28; fix re-ran the audit 1187/91→1152/126. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
| **Symmetria §3 flag: finding-scoped-to-one-condition restated as unconditional verdict** | Symmetria §3 flag | A result true under a specific condition, restated as an unconditional rule, is contamination shape. Caught 2026-06-28: the method doc's "ocrmac more accurate than olmOCR" was scoped to **2-column figure-dense** (where olmOCR scrambles); I wrote "olmOCR RETIRED." Steward corrected (olmOCR is the single-column tool, more precise; complementary not ranked). Antidote: **verify the scope of a claim before generalizing it.** Kin to `trust-prior-pass-frame` (which is about test-scope; this is about claim-scope). | Symmetria §3 | **PROPOSED** |
|
||
| **prose word-guard for faithful structure-cleaning** | verification-ladder entry | When a cleaner removes/reflows STRUCTURE (headings, printed titles, residue) but must preserve PROSE, gate it with a **prose-only word-multiset compare**: reduce both before/after to narrative words (exclude headings, numbers, printed-title runs, markup — anchored consistently on both sides), refuse to write on any non-zero delta. `clean_pandoc_html_residue`'s guard; proven raw↔final WORD-IDENTICAL on 464k-word Musil; caught every real defect across ~10 iterations. The complement to the byte-identical gate (which proves *output* identity; this proves *prose* identity under intended structural change). | `reference-verification-ladder.md` | **PROPOSED** |
|
||
| **structure-from-authoritative-ToC = one engine, two map-producers** | method note (ladder or `/graduate-chamber-source`) | Answer to the long-open unify question: chapter-structure recovery is ONE placement engine (`insert_chapter_headings`: match anchor→unique line→replace-block/insert, fail-loud, dry-run) fed by TWO map-producers — the EPUB **NCX ToC** (`structure_from_ncx`, anchor=`<span id>`) and the OCR **printed page-number** method (ToC printed-page→scan-offset). Honour the work's *declared* structure; never re-infer. | `reference-verification-ladder.md` or the skill | **PROPOSED** |
|
||
|
||
*(Five, all earned in use today. The gate-PASS-BUT-FALSELY and the prose-word-guard are the load-bearing two — the first is a defect found in the gold standard itself; the second is the reusable faithfulness instrument the whole Musil graduation rode. None created autonomously.)*
|
||
|
||
### Harvest 2026-06-30 evening (Loom/Mill convergence + the consolidation substrate reframe)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **Symmetria §3 flag: tool-creep-into-substrate (name genome-or-phenotype before building on a tool)** | Symmetria §3 flag | A convenience tool proposed for one job silently becoming the **durable substrate** (the source of truth) is contamination shape — it solves the immediate need at the cost of inheritability/durability, the wrong *level*. Caught HARD tonight: Calibre, suggested only as "a cheap way to build a catalogue," was about to become the library's substrate (an app-owned `metadata.db` that rewrites files + only Calibre reads → fails the next-hand-can-`cd`-into-it test + byte-preservation). Antidote (now sharpened by the Loom/Mill frame we adopted same evening): before building on a tool, **name whether it is genome (durable, must be plain/inheritable) or phenotype (a disposable view)** — the substrate is plain files + a regenerable manifest; any UI is thrown-away and re-rendered. Kin to `reinvented-governed-tooling-without-checking-it-exists`, one level up (this is about a tool becoming the *substrate*, not about reinventing one). | Symmetria §3 | **PROPOSED** |
|
||
|
||
*(One, load-bearing — it names the exact wrong-level the steward's "Calibre was only a means" let me catch, and it composes cleanly with the genome/phenotype vocabulary now entering the four-party lexicon. Not manufactured: it was the session's central return. The Loom/Mill reconciliation itself is a one-off artifact, not a skill; the cadence-governor insight lives in the reconciliation doc, not here.)*
|
||
|
||
### Harvest 2026-07-01 (Making graduations + the graduation rail)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/graduate-chamber-source`** (proposed 06-26/27/28) | **BUILD NOW** | The empirical spec is complete AND the rail it needs now exists (`graduation-spec.yaml` + `verify_graduation.py` + graduate-tool gate). It should codify: census-scan-layout→pick-engine (OCR: single-page olmOCR / split-if-2up via split_spreads.py; or EPUB pandoc path)→normalize (--lang, --no-heading-recovery)→structure (insert_chapter_headings from ToC)→frontmatter+title-block (spec convention)→**both** gates fail-closed→graduate_to_canonical→catalogue. **"Build when the batch begins" = now** (the ~12 pending Making sources, most EPUBs). Yardstick met: the steward watched me + 3 agents run this flow twice today; a skill carries it so the batch doesn't re-derive it per source. | new skill | **PROPOSED (build-first tomorrow)** |
|
||
| **graduation-spec.yaml + verify_graduation.py + graduate-tool gate** | BUILT (governed instrument) | The steward's insight realized: conventions as machine-readable DATA consumed at the moment of action + an enforced validator gate (fail-closed in graduate_to_canonical). Sibling of ARC `operations.yaml` + the verification-ladder. Governed via PENDING-44. This is a NEW named instrument for the field guide / tool-evolution-log — record it. | `_curation/graduation-spec.yaml`; tool-evolution-log | **BUILT (governed, PENDING-44)** |
|
||
| **Symmetria §3 flag: graduated-with-a-flagged-gap-instead-of-resolved** | Symmetria §3 flag | Letting "honestly flagged" substitute for "resolved" — shipping a known-incomplete text because the hole is *marked*. Contamination shape (honest-degradation excusing incomplete work). Steward caught it on Jonas p248; my own spec even permitted it. Antidote codified: `gaps_BLOCK_graduation` (resolve or explicit STEWARD-RULED marker). Kin to the "non-fatal accepted at face value" directive. | Symmetria §3 | **PROPOSED** |
|
||
| **Symmetria §3 flag: re-derived-instructions-instead-of-citing-the-governed-doc** | Symmetria §3 flag | Wrote agents hand-made instructions (and invented fields) instead of pointing them at `conversion-runbook.yaml`/the spec — the direct cause of the graduation divergence. Kin to `reinvented-governed-tooling-without-checking-it-exists`, at the *instruction* layer. Antidote: cite the governed doc; if it's silent, that's a runbook gap to close, not a prompt to improvise into. | Symmetria §3 | **PROPOSED** |
|
||
|
||
*(Four. The load-bearing two: BUILD `/graduate-chamber-source` now [it's the throughput multiplier for the whole Making batch], and record the graduation-spec+validator+gate as a named governed instrument [the steward's own idea, proven]. The two §3 flags are the session's real returns — both steward-caught, both class-fixed in the spec/gate. Not manufactured.)*
|
||
|
||
### Harvest 2026-07-03 (doctrine phase — Wave 0, full spec-revision rulings, Loeb substrate reframe)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **Symmetria §3 flag: claim-from-derived-artifact-when-the-source-is-checkable** | Symmetria §3 flag | **The load-bearing harvest — jurist-elevated to STANDING PRACTICE.** I trusted a derived artifact / a regex-over-derived-text over the AUTHORITATIVE SOURCE **three times in one session**: the break-count (frontmatter fences + bullet-lists counted as thematic breaks), the heading-count (title-as-structure, then line-numbers-as-divisions, Plutarch-chapters missed), and "anchors absent" (searched Stephanus form `153a` when the DSL uses `St. II p. 153`). The steward twice sent me to the substrate (`loeb.dsl`) and was right both times; the jurist ruled it a governance rule: *any corpus-population claim feeding spec doctrine must be sourced from the source directly, or explicitly flagged extract-derived+provisional, before it does normative work.* Same discipline gap-2/gap-3 enforce on the corpus, turned on how the corpus is AUDITED. Antidote: verify against the authoritative source, never the derived form, when the source is checkable — and validate a matcher against a known positive AND negative before trusting its count (kin to census-through-a-pattern, generalized to source-vs-derived). | Symmetria §3 + `reference-verification-ladder.md` (a named "source-not-derived for doctrine-feeding claims" entry) + a feedback memory | **PROPOSED (strongly earned — 3× + jurist-ratified as standing practice)** |
|
||
| **`/spec-amendment`** (the RFC-supersession amendment process) | create (later) | The now-RATIFIED chamber amendment process as a codified discipline: normative spec change = a superseding version (Obsoletes/Updates, never in-place edit) + change-class test ("does this change what any gate accepts?" → FIX vs PROPOSAL) + semver-MAJOR re-verifies all consumers + PENDING/REVIEWED record. Recurs every spec amendment. **Defer** until v2.0 is drafted (the process's first real exercise IS Phase 2 — build the skill from that empirical run, don't pre-author). | new skill | PROPOSED (build-after-first-use, i.e. after Phase 2) |
|
||
| **per-claim citation verification (don't let a sub-agent's blanket "verified" ride)** | feedback memory or verification-ladder note | Caught by the jurist: I cited arXiv 2605.24229 for a claim it didn't support, having let a sub-agent's aggregate "4/4 papers verified" stand without per-citation checking. Verify each citation against the SPECIFIC claim it carries; never let an agent's blanket verification substitute for per-claim checking. | feedback memory / ladder | PROPOSED |
|
||
|
||
*(Three, all earned. The first is the session's real return — a drift I hit three times and the jurist turned into a standing rule; it should become a Symmetria flag AND a ladder entry AND a feedback memory. The second is a genuine future skill but correctly deferred to after its first real use. The third is a concrete citation-integrity guardrail from a real miss. None manufactured.)*
|
||
|
||
### Harvest 2026-07-04 (Chamber spec v2.0 drafted spine-first + ratified + shipped)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/spec-amendment`** (proposed 2026-07-03, DEFERRED-until-first-use) | **BUILD — deferral condition NOW MET** | The 2026-07-03/04 v2.0 drafting IS its first real exercise — the empirical spec now exists. Codify the proven procedure so the next constitutional amendment doesn't re-derive it: **(1)** source-check before drafting (read the CURRENT spec end-to-end + the ruling docs — source-not-derived, the near-miss caught my own header overclaim); **(2)** draft **spine-first** in dependency order (substrate section first), not front-to-back; **(3)** each section **surfaced for the jurist's editor-gate** before the next; corrections applied in-place; **(4)** tag every clause `[CARRIED]`/`[REVISED]`/`[NEW]` + forward-notes for cross-section mechanisms; **(5)** **coherence-revise** any carried section that *summarizes* a revised one (don't silently carry — §VIII/§X/§XI); **(6)** assemble self-contained + reorder; **(7)** supersede via RFC pattern — archive prior to `-vN.md` with an OBSOLETE banner (immutable), promote new to the canonical filename, fix internal version refs, commit (=logchain supersession record) + push; **(8)** the **FIX-class errata lane** for post-ratification exactness fixes (no version bump). Yardstick met: a whole constitution was drafted this way in one sitting; the procedure is the skill. | new `/spec-amendment` skill | **PROPOSED (build — first-use condition met)** |
|
||
| **`/wrap-up` §4.a** | **patch** | The §4.a drawer-filing step instructs passing `tags:` to `mempalace_add_drawer` — **the tool rejects it** (`MCP error -32602: Unknown parameter 'tags'`). Misfired in use this wrap. Fix: drop the `tags:` param from the §4.a instruction; fold retrieval keywords into the drawer **content** (a `[tags: …]` line) instead, since content is the semantic surface. One-line correction; caught live. | `~/.claude/skills/wrap-up/SKILL.md` §4.a | **PROPOSED (patch — caught in use)** |
|
||
|
||
*(Two, both earned in use. `/spec-amendment`'s deferral condition [first real use] is genuinely met — this session was that use, so it's a build not a re-propose. The §4.a patch is a real tool-instruction mismatch that cost one failed drawer call this very wrap. Neither manufactured; source-not-derived-as-drafting-method is NOT re-proposed as a skill — it's already a discipline-named KG fact + reinforces the existing trusted-derived-artifact §3 flag.)*
|
||
|
||
### Harvest 2026-07-04 (Seam-1 ESCALATE + engine deep-research day)
|
||
|
||
| Element | Kind | One-line | Status |
|
||
|---|---|---|---|
|
||
| **verification-ladder: CI-upper-bound + drop-one-robustness = STANDARD for every ESCALATE** | verification-ladder entry | The jurist RULED (2026-07-04) that grading on the one-sided 90% Clopper-Pearson **upper bound** (not the point estimate) + the **drop-one-confirmed-case robustness check** are standing practice for *every* ESCALATE, not a one-off. A point estimate at n=40 can't tell 1% from 5% (P(0or1\|.05,40)=0.399); the CI does the real work. → `reference-verification-ladder.md`. | PROPOSED |
|
||
| **`/model-handoff`** (premium-model scope-charter) | REINFORCED (existing proposal, 2026-06-12) | Used tonight end-to-end: produced `studium-engine/docs/stage-1-replan-scope-charter-2026-07-05.md` on Opus (§0 discipline / §1 settled / §2 already-read / §3 bounded-reading / §4 deliverable / §5 report-and-stop) as the Fable-5 handoff; clear+wake not switch-in-place; artifacts-are-the-handoff. Second clean use → strengthens the standing proposal. | PROPOSED (reinforced) |
|
||
|
||
*(Both genuine, both recurring-shaped. The CI-for-ESCALATE is a jurist-ruled standing practice worth a ladder entry; the model-handoff is its second proven use. No NEW skill emerged — the chamber-specific instruments (exclusion-path, archive-audit, Instrument-B hardening) are corpus work, not skills.)*
|
||
|
||
### Harvest 2026-07-04 (night — the Fable replan session)
|
||
|
||
| Element | Kind | One-line | Status |
|
||
|---|---|---|---|
|
||
| **`/model-handoff`** (proposed 2026-06-12; reinforced 07-04 eve) | **REINFORCED — 3rd use, FIRST full receiving-end run** | Tonight was the first time the pattern ran END-TO-END as designed: fresh Fable-5 session woke into the scope-charter, read only the bounded list, produced the deliverable (`stage-1-rebuild-plan-2026-07-05.md`), took inline steward rulings, recorded them INTO the artifact, committed, stopped — chat disposable, artifact carries everything. Also surfaced its one authoring hazard: the charter contained a wrong path (`chamber-library/PENDING.md` — doesn't exist) → the skill should mandate **verify every path in §3's reading list before writing the charter**. Pattern proven; proposal now has 3 uses + 1 authoring rule. | PROPOSED (reinforced; +path-verification rule) |
|
||
| **MEMORY.md deeper-reduction** (proposed 2026-06-08, condition-gated) | **CONDITION NOW MET — authorize the focused pass** | The 06-08 proposal deferred the risky deeper reduction "only if 157KB still trips 'only part loaded'." Tonight the index is **204.5KB vs a 24.4KB load limit** and a PostToolUse hook actively demanded compaction to ~17KB mid-wrap. NOT executed (the proposal explicitly names it "its own focused pass, not a tail-of-session move" — steward-unauthorized). Evidence is now decisive: ~88% of the index doesn't load at wake. Recommend authorizing the focused pass (compress archived one-liners further + move stable reference sections to a consult-on-demand `MEMORY-reference.md`; backup first, as 06-08). | **AUTHORIZED 2026-07-06 (steward) — the NEXT-SESSION FIRST task, before the PENDING-49 jurist ruling.** Shape: backup → move stable reference sections → `MEMORY-reference.md`; verify pointers resolve. Real-memory move, so surgical + verified; goes first and alone |
|
||
|
||
*(Two, neither manufactured: the first is the strongest evidence yet for an already-standing proposal plus one earned authoring rule; the second converts tonight's hook pressure into the governed channel rather than a tail-of-session mutation of real memory.)*
|
||
|
||
### Harvest 2026-07-05 (V0 ratified + exclusion path + repo CLAUDE.md files)
|
||
|
||
**BUILT + AUTHORIZED + COMMITTED this session:**
|
||
- **`chamber-library/CLAUDE.md`** (`2238b65`, local — skemantix push pending) + **`studium-engine/CLAUDE.md`** (`4ad82d6`, pushed) — steward-authorized 2026-07-05. The two missing project-local orientation docs (ARC already had one; steward-flagged the gap). Pointer-style by design: they carry the *stable* layer (disciplines, governance posture, terminology, tool-fleet groups, layout) and delegate current-state to the trackers they name (corpus-work-map / PENDING / graduation-spec.yaml for chamber; rebuild-plan / charter for the engine). Chamber = governed (NOT D-1); engine = D-1 with the one V0 jurist exception.
|
||
|
||
**PROPOSED (awaiting steward) — how to keep the CLAUDE.md files fresh:**
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/wrap-up` — CLAUDE.md freshness check** | `/wrap-up` patch | At session close, ask: did this session change a **tool** (fleet add/remove), a **discipline** (a tool-evolution-log entry that generalizes), a **governance rule** (a PENDING/REVIEWED shifting posture), or a **term/mechanism** (like the exclusion path today)? → update the relevant repo `CLAUDE.md` line. **Event-based, NOT count-based** (the steward proposed a change-count threshold; challenged: these are POINTER docs, so most repo churn — files graduated, sources pinned, reports regenerated — doesn't touch them; a count fires on noise and misses the real triggers). Rides the §1.6 harvest slot, which already asks "did we change something that should be recorded?". | `~/.claude/skills/wrap-up/SKILL.md` | **BUILT 2026-07-05 (steward-authorized)** — §1.6 4th bullet + provenance note; mechanical-updates-apply / discipline-changes-surface split |
|
||
| **CLAUDE.md staleness canary (git tripwire)** | create (small) OR git hook | If the `scripts/` set or `graduation-spec.yaml` changed but `CLAUDE.md` didn't since, flag "may be stale." Bounded, low-false-positive — the two most CLAUDE.md-relevant change classes. **Prompts; never auto-writes** (a bot rewriting the disciplines is the automation-of-recognition risk — the loop stays load-bearing). Sibling of the proposed **wake-canary** (MEMORY.md pointer-resolution). | git pre-commit / a `/repo-doc-canary` | **PROPOSED (optional; pairs with the wake-canary)** |
|
||
|
||
*(Two proposals + two docs built. The freshness mechanism is the load-bearing one — it answers the steward's live question and applies this whole session's thesis [storage isn't memory; a protocol that exercises it is] to our own orientation docs. Not manufactured: the docs were just built, so the "how do they stay true" question is real and now. The count-vs-event correction is the substantive contribution — a raw threshold would institutionalize decorative maintenance.)*
|
||
|
||
### Harvest 2026-07-06 (MEMORY.md two-file compaction + Olson graduation opened)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **memory/index restructure = byte-exact slice + md5-conservation + link-canary** | verification-ladder entry | When restructuring a memory index or any lossless-relocation of prose between files, do it as **line-range slices (never retype)** + prove **byte-conservation** (md5 each moved slice == source slice) + a **link-resolution canary** (every `](file.md)` and `[[wikilink]]` resolves; distinguish pre-existing-broken from new-broken by grepping the original). Today's MEMORY.md 213→17KB split: proved the 198KB relocated tail md5-identical to source, and verified all 8 canary-flagged links were pre-existing (0 regressions) rather than asserting "the split looks fine." Kin to the byte-identical compile gate, generalized to prose-file moves. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
|
||
*Also this session (recorded, not new proposals): the self-bounding wiring (`/wrap-up §3` demote-on-promote + `/wake-up §2.a` load-integrity gate) was BUILT + authorized live — see the built-log entry above. `/graduate-chamber-source` (still PROPOSED, build-on-packaged-driver) gained another reinforcing instance — the Olson orientation walked the graduation pipeline manually again; the GRADUATION-STATE.md note is effectively its per-book empirical spec.*
|
||
|
||
### Harvest 2026-07-06 (pm — Olson pdftotext-scan graduation)
|
||
- **`/graduate-chamber-source` REINFORCED** (PROPOSED 2026-06-26; the `/convert-*` family the runbook plans). Today's Olson run is the **V-SCAN pdftotext variant** of the pipeline — a distinct empirical branch from the Levi OCR path: (1) `normalize_ocr.py --pdftotext` (form-feed + case-agnostic furniture + reflow; guard-verified) → (2) scan-verified + fail-loud-LOGGED `ocr_defects` correction pass (verify eccentricities/names vs the source PDF via `Read pages=N`) → (3) `insert_chapter_headings` (needs the occurrence-index extension for repeated section titles) → (4) frontmatter → (5) gates → (6) graduate + archive + attest. The skill, when built, should carry BOTH branches (born-digital/EPUB, OCR-scan) + the branch-selection heuristic. No new autonomous change — reinforcing the existing proposal. Also surfaced (build tasks, not skills): fix Phase-1 in-page-rejoin heading-glue in normalize_ocr; add occurrence-index to insert_chapter_headings.
|
||
|
||
### Harvest 2026-07-06 (evening — Olson graduation completed + tool-integration audit)
|
||
- **`/graduate-chamber-source` (proposed 2026-06-26) — REINFORCED, hardest run yet.** Today's Olson graduation exercised the full pipeline on the hardest V-SCAN case so far: heavy curatorial structure (73 headings), occurrence-indexed repeated titles, glued/wrapped/ALL-CAPS heads, dropped running-head chapter titles, a blank-page scan-noise region, source_verified. The empirical spec is now very rich; still PROPOSED (build-on-need), but today is a strong nudge it's ripe.
|
||
- **`completion-is-a-tripwire` → Symmetria §3 flag WATCH-ITEM (NOT yet proposed).** Recorded as `feedback-completion-is-a-tripwire.md` (steward-authorized 2026-07-06). Per the governed pattern (propose → watch → promote-on-recurrence), it stays a feedback memory until it recurs; then it earns a §3 flag ("the *feeling* of done is the cue to verify the tail"). Do not mint the flag from one session.
|
||
- **No CLAUDE.md change (freshness check).** chamber-library CLAUDE.md is pointer-style; `insert_chapter_headings` already in the fleet list; the new `localized_scan_noise` discipline lives in `graduation-spec.yaml` (which CLAUDE.md points to for conventions) — adding it to the CLAUDE.md disciplines section would be belt-and-suspenders bloat. Deliberately not proposed (steward's anti-bloat stance, same session).
|
||
|
||
### Harvest 2026-07-07 (A2 landed v2.0.1 + the OCR-fidelity rug-lift)
|
||
- **PROMOTE `completion-is-a-tripwire` → Symmetria §3 flag (recurrence met; the watch-item from 2026-07-06 evening).** Tonight IS the recurrence the watch-item awaited — and it arrived in a sharper, *objective* form: a **verification SUITE whose every check is orthogonal to a failure class passes green while claiming to verify.** The 5 `verify_conversion.py` gates (cruft / structure / word-final-& / U+FFFD / not-shattered) all passed Olson while sparse word-level OCR error (`Ihave`, garbled Greek) sat untouched — none of the 5 can *see* it, and a joined word even *improves* `word_sanity`. The wall of green read as thoroughness; "graduated + gates PASS" oversold a converted-tier V-SCAN text; the steward caught it. **Proposed flag text:** *a passing gate-suite is not coverage — ask which failure class each check can actually see before trusting the green; the feeling of "done" after a fluent pass or a wall of green is the cue to verify the tail, not the signal to ship.* Kin to `rank-on-fields-you-actually-write` (a mechanism that can't do what it claims, silently) + `census-through-truncation`. Home: Symmetria §3 — fold the objective "gate-suite blind to the failure class" form into the subjective `completion-is-a-tripwire`. **PROPOSED — recurrence-promoted per the governed pattern, not minted-from-one.**
|
||
- **Not a skill (tracked elsewhere):** the **V-SCAN OCR-vs-scan verification stage + model-plurality doctrine** is a chamber `[PROPOSAL]` (parked; steward-sequenced priority once the REVIEWED-49 folding completes) — captured in the session file + ledger + KG, becomes its own PENDING when we return. Design invariant: verifier FLAGS discrepancies, never autonomously corrects; olmOCR = local localizer / executor-vision = adjudication-assist / human = apex; first step = the olmOCR reformed-spelling probe.
|
||
- **CLAUDE.md freshness (mechanical, applied):** chamber-library CLAUDE.md spec-version pointer bumped v2.0.0 → v2.0.1 at the A2 landing — a tracker-style pointer update applied at wrap (not a discipline/posture change).
|
||
|
||
### Harvest 2026-07-07 (evening — MemPalace wind-down decided)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **quote a long-job ETA only from an observed rate, never model-size intuition** | verification-ladder entry | Twice today I gave a re-embed ETA from gut ("15–45 min") and was wrong by ~30×; the steward caught it. The fix was **measuring** — rows-per-elapsed on the running job (2000/27min) + a 150-chunk benchmark → **~21 h**, grounded and confirmed. Rule: any long job (re-embed, migration, bulk convert) ETA must come from a **measured throughput sample** (a short timed run or the live job's own rate), stated with the sample. "It's a small/fast model" is not an estimate. Kin to measure-toolchain-before-spec / measure-the-font's-true-advance. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
| **Symmetria §3 flag: reassuring-verb-before-verifying-the-mechanism** | Symmetria §3 flag | Reaching for a comforting characterization ("self-healed", "fine", "recovered", "handled") *before* verifying the actual mechanism is contamination shape — it smooths the steward instead of informing them. Caught hard today: I called the morning HNSW quarantine "self-healed"; verifying showed **108 chronic quarantines** — damage-control, not repair. Antidote: name the mechanism you verified, not the outcome you hope for; if unchecked, say "I don't yet know if it recovered." Kin to `causal-story-before-reading-render`, one level up (the *valence* of the claim, not just its causal story). | Symmetria §3 | **PROPOSED** |
|
||
| **`mempalace-diagnose` — RETIRE the proposal** | retire | AUTHORIZED 2026-06-05 (build-on-need). Now **decorative**: the steward decided (evidenced) to **wind down** palace-memory MemPalace. Building a MemPalace diagnostic skill for a substrate we're leaving is the inverse of proportionate. Retire on decommission. (The reusable, substrate-agnostic instruments from tonight — measure-ETA, from-sqlite-rebuilds-only-chroma, verify-install-isn't-standard-before-upgrade — are captured as the ladder/flag entries above, not tied to MemPalace.) | skill-harvest register | **PROPOSED (retire)** |
|
||
|
||
*(Three, all earned in the MemPalace session. The first two are substrate-agnostic instruments that outlive MemPalace; the third is honest housekeeping — don't build tooling for what we're decommissioning. None autonomous. Also fulfilled-not-proposed: the standing `/wrap-up §5` "mirror KG to files → palace disposable" proposal was **realized** this session as the `knowledge-graph.jsonl` export — mark it done when the decommission wires wake to read it.)*
|
||
|
||
### Harvest 2026-07-08 (Fable-window allocation → V2 charter; MemPalace decommission)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/model-handoff` (premium-model scope charter)** | **RE-FLAG — strongly reinforced** | Proposed 2026-06-12; this session *built* a full scope charter with the discipline (charter-on-Opus → Fable spends premium tokens only on design; artifacts-not-chat; **NO /wake-up on the premium model — the charter IS the wake**) and it pays off the very next session (the bare Fable-on-V2 run). The steward-directive "next session = no wake/wrap, just the charter" is the discipline in action. Earns building. | new `/model-handoff` skill | **PROPOSED (reinforced)** |
|
||
| **cross-volume verify-before-delete move** | verification-ladder note | Moving data across filesystems (internal→external cold archive): `rsync -a` → verify **exact file-count match + `du`** (NOT a byte-sum — mine computed 0=0 vacuously) + rsync rc=0 → only then `rm` the source. Isolate flaky-remote pushes so a hang can't block. And **check git's real exit, not a pipe's** (`… | tail` masks push failure — bit me on the dotfiles→gitea push this wrap). Proven twice today (MemPalace cold-archive). | `reference-verification-ladder.md` | **PROPOSED** |
|
||
|
||
*(Both genuine — /model-handoff is load-bearing: it just proved itself and will again next session. The byte-sum-vacuous + pipe-masks-exit catches are also logged as KG drift-patterns; not manufactured.)*
|
||
|
||
### Harvest 2026-07-09 (V2 review + Handke de-gold graduation + the read-repo-docs-first lesson)
|
||
- **PROPOSE — Symmetria §3 flag: `enter-a-repo → read its CLAUDE.md + the runbook/spec it names, BEFORE acting`.** Recurrence met HARD: I started graduating in chamber-library WITHOUT reading its local CLAUDE.md first (a standing global directive), and re-derived — badly, with wrong source-location guesses — a fully-documented process (attest-never-default · source-archiving-IS-a-graduation-step · conversion-runbook · graduation-spec). The steward corrected ~4× in a row, each the same shape ("this is in the runbook / the CLAUDE.md"). **Flag text:** *before acting in a repo, read its local CLAUDE.md and the runbook/spec it points to — re-deriving a documented process is the contamination shape (looks like work, produces drift, spends the steward's corrections).* Kin to `resurface-banked-notes-before-rederiving`. **PROPOSED — recurrence-promoted, not minted-from-one.**
|
||
- **PROPOSE — Symmetria §3 flag / feedback: `provenance-is-part-of-the-process, not a loose end`.** I framed source-attestation + archiving as "loose ends / deferrable"; the steward: *"they should never be considered loose ends, they are part of the process."* Executor bias: treat the visible artifact as done, provenance (attestation, archiving, cataloguing) as afterthought. **Text:** *attestation, source-archiving, cataloguing are constitutive steps, not the tail; the feeling that "the artifact is done" hides the provenance the next hand needs.* Kin to `completion-is-a-tripwire`. **PROPOSED.**
|
||
- **`/graduate-chamber-source` — REINFORCED (the born-digital/EPUB branch, full pipeline incl. archive+attest+catalogue).** The Handke run is the born-digital branch (distinct from Levi-OCR + Olson-V-SCAN): identity-verify → pandoc + structure pass → gates → archive via `archive_sources.py --add` + steward `source_verified` + catalogue. The skill, when built, must carry the branch-selection heuristic AND make archive+attest+catalogue non-skippable (the whole "loose end" failure this session). **PROPOSED (reinforced; build-on-need — another strong nudge it's ripe).**
|
||
- **PROPOSE — verification-ladder entry: `a red gate deserves the same scrutiny as a green one`.** verify_conversion's `heading_density` FAILED the Handke (a genuinely continuous work). Before trusting OR overriding, I read the gate's own §VII sectionless exception + how the English sibling passes → the honest fix (title-as-`#` heading matching the sibling; NOT invented chapters, NOT a bare `sectionless:true` flag). **Rule:** a gate FAILURE is a candidate, not a verdict — verify true-defect vs heuristic-false-positive (read the gate's own escape conditions + a passing sibling) before either trusting or overriding it. The green-gate-blindness lesson's mirror. Home: `reference-verification-ladder.md`. **PROPOSED.**
|
||
|
||
### Harvest 2026-07-09 evening (P1 clean + the cross-repo re-anchor miss + the EPUB-normalizer pivot)
|
||
- **PROPOSE — verification-ladder entry: `re-anchor spans BOTH repos`.** When a chamber canonical is re-hashed (source-clean OR reconvert), the sha-binding surface is NOT chamber-internal only: studium-engine binds via `corpus/manifest.yaml` sha + `sidecars/*.source_sha256` + `coverage-ledger.json`, enforced by `ingest_gate §1.1`. **Discipline:** grep BOTH `chamber-library` + `studium-engine` for the OLD sha (zero occurrences = completeness gate); regenerate the engine ledger via `ingest_gate` (never hand-edit the derived ledger); the engine gate re-VALIDATING is the proof. Born 2026-07-09 (P1 re-anchored chamber only; engine's 4 bindings missed, caught by luck during P2). **Already landed operationally** in `conversion-runbook.yaml` `reanchor:`; the ladder is the cross-workstream home. Kin to `trust-prior-pass-frame` (cross-repo variant). Home: `reference-verification-ladder.md`. **PROPOSED.**
|
||
- **PROPOSE (surface, not auto-apply) — chamber `CLAUDE.md:67` discipline note.** The load-bearing line *"Clean at the SOURCE layer … (new hash, re-anchor)"* under-specifies what "re-anchor" covers — the exact under-specification that produced the miss. Add a cross-repo pointer to the runbook `reanchor:` block. This is a **discipline change** → surface for steward review per the CLAUDE.md-freshness rule (not a mechanical fleet/term update). Pairs with PENDING-53 (which completes the *governed graduation-spec* side). **PROPOSED.**
|
||
- *Watch-list (not yet a skill): `/normalize-epub`* — a structural, verbatim-guarded EPUB normalizer keyed on the bidirectional href↔id mirror predicate (this session's pivot). Premature — the tool doesn't exist yet; the pulling thread is to prototype-then-build it. If it proves out, it earns a skill that carries the detector→converter→verbatim-guard sequence. **NOT YET PROPOSED (build first).** → **DISCHARGED 2026-07-10:** the tool was built + shipped into the chamber fleet (`inject_epub_footnotes.py` + `convert_mega_epub.py`, PENDING-54/REVIEWED-54). NOT proposing a `/normalize-epub` skill: the *method* that produced it (measure-before-build → census → pandoc-2×2-diagnosis → prototype → adversarial-test → per-pair verbatim guard) generalizes to existing disciplines (`/pre-build-audit`, the verification ladder, adversarial-verify), so no new skill is earned; the tool + its `tool-evolution-log` entry carry the specifics.
|
||
|
||
### Harvest 2026-07-10 (EPUB footnote pre-processor: census → hardening → ruling → fleet build-in)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **verify at the granularity of the mutation, not the aggregate** | verification-ladder entry | A whole-set invariant (a document-wide word-multiset guard) can PASS while a per-item operation (a cross-note swap — a word from note A landing in note B's body) violates it, because the total bag is unchanged. **Check per-item, keyed by the item's own identity** (here: per-footnote-pair, keyed by (destination-file, id)). Earned hard 2026-07-10: the jurist (PENDING-54 §3) caught that the aggregate guard was blind to a swap → the per-pair guard was built, teeth-demonstrated (a deliberate swap caught), and it **immediately earned its keep** by surfacing Jung's cross-volume id reuse (81 collisions) that a bare-id key hid. Kin to `trust-prior-pass-frame` (verify at the scope of the change) — this is verify at the *granularity* of the change. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
|
||
*Mechanical (applied at wrap per §1.6 CLAUDE.md-freshness): chamber `CLAUDE.md` fleet line gains the two footnote-pre-processor tools (tools entered the fleet — event-based update). Discipline-level items (the CLAUDE.md:67 re-anchor note from 2026-07-09; a §V ratified-spec cross-ref for the pre-processor) remain surfaced-not-applied.*
|
||
|
||
*(One ladder proposal, load-bearing — it's a clean generalization the jurist forced, and the guard it names has already caught a real defect. The session was otherwise disciplined [returns held: measure-before-build, verify-against-substrate, honest-refuse-built-into-the-tool]; no other harvest manufactured.)*
|
||
|
||
### Harvest 2026-07-11 (Sennett split-anchor → census re-audit → recognizer generalization, three jurist loops)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **re-audit coverage with the TOOL's recognizer, not the classifier that shares its blind spot** | verification-ladder entry | When a classifier and the tool it feeds share a predicate, the classifier's *mis*-classifications masquerade as genuine "new categories." To size a remaining gap, re-audit by running the **tool's own recognizer** over the corpus — not the census classifier. Earned 2026-07-11 (jurist's census-misclassification flag): Sennett was census-filed "one-directional" yet was covered by the split-anchor recognizer; running the current recognizer over all 252 sources collapsed the apparent "5 remaining families" to **one reciprocal mirror with the id in 3 positions**. Cheaper to re-measure than to build a widen for a phantom family. Kin to *measure-don't-speculate* / *censused-routes*, specialized to shared-blind-spot classifiers. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
| **extending a tool re-tests its foundations** | verification-ladder note / feedback | Building an extension exercises shared machinery the original's tests never hit — so a widen's `--validate` should assert the *shared* invariants too, not only the new predicate. Earned 2026-07-11: building the block-id handler surfaced a **latent duplicate-id defect in the already-shipped Sennett code** (`<p id=X … id=X>`, pandoc-tolerated, undetected by the prior fixture). The extension's dup-id assertion is what caught it. | `reference-verification-ladder.md` (or a feedback memory) | **PROPOSED** |
|
||
| **classify a change by MECHANISM, not by how big it feels** | feedback memory OR Symmetria §3 note | Reflexively labeled the recognizer generalization "PROPOSAL" because it *felt* large; the jurist's own FIX/PROPOSAL test (does it touch the **verification** — the guard, a new mechanism, or pandoc's prose role?) showed most of it is **FIX**. Over-classifying to appear cautious is the *safe* direction (over-governance, not a contamination risk), but it still burdens the loop and mis-frames the ask; classify by mechanism. Milder cousin of the executor-bias flags. | feedback memory or Symmetria §3 | **PROPOSED (low-urgency; safe-direction error)** |
|
||
|
||
*Mechanical (applied at wrap per §1.6 CLAUDE.md-freshness): chamber `CLAUDE.md` fleet line + `conversion-runbook.yaml` policy updated for REVIEWED-54a (split-anchor) + REVIEWED-54b pt1 (block-id + URL-decode) — tools' recognizer classes changed (event-based). §V ratified-spec cross-ref for the pre-processor still surfaced-not-applied (discipline-level).*
|
||
|
||
*(Three proposals, none manufactured: the first two are concrete instruments the session proved [the re-audit collapsed a phantom taxonomy; the extension caught a real latent defect]; the third is an honest recalibration, flagged as a safe-direction error so it isn't over-weighted. REVIEWED-54b part 2 [inner-anchor + letter-marker] will earn its own review after build.)*
|
||
|
||
### Harvest 2026-07-12 (footnote arc close + the program open-work register)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **`/reconcile-open-work` (program forest-view register)** | **create** | The practice proven twice now (ARC open-work register, then the whole Chamber→Gold→Engine register today): when tracking has drifted and orientation is lost, **census the real sources with parallel read-only agents → synthesize ONE canonical forest-view register** (every workstream, status, what-it-blocks) that **points to authoritative detail, never duplicates it**, and is **maintained at /wrap-up**. Yardstick met HARD: the steward said losing the whole-program picture was "alarming" and asked for exactly this. The ARC watch-list already flagged this as a graduate-if-it-recurs candidate — it recurred. | new `/reconcile-open-work` skill | **PROPOSED (strongly — recurred + steward-requested)** |
|
||
| **verification-ladder: retroactively re-verify everything landed under a weaker standard when a stronger gate lands** | ladder entry | The jurist's Q1b principle, proven load-bearing: a stronger check existing and NOT pointed at canon that shipped under the weaker one is the exact gap-shape the discipline exists to close. Today's retroactive sweep (end-to-end verify over all footnote-covered books → 45/87 fail) is the instance. Reusable whenever a new gate supersedes an old one. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
| **verification-ladder: structural safety = PROVISIONAL FIX; end-to-end proof on real, representative books = FINAL** | ladder entry / Symmetria §3 | The jurist's generalization after nested-block: "same risk as (a)" was true of the *matching* logic and silent on the *rendering* logic. No widen/transform gets ruled final on structural reasoning alone — it earns provisional-FIX; only verbatim-clean proof on real books makes it final. Caught two FIX-assumptions this arc ((c), nested-block). | `reference-verification-ladder.md` or Symmetria §3 | **PROPOSED** |
|
||
| **Symmetria §3 flag: lost-the-forest-in-a-long-execution-arc** | Symmetria §3 flag | A long, productive execution session that costs the whole-program altitude is contamination shape (composition-over-consideration at the *session* scale, not the task scale). Antidote: keep the open-work register in view; re-surface it when a workstream has run deep for a while. Steward-named 2026-07-12. | Symmetria §3 | **PROPOSED** |
|
||
|
||
### Harvest 2026-07-12 (the Docling reframe — building a solved domain our own register already mapped)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **check-the-register-before-a-substantial-build** | `/wake-up` §2 patch OR `/pre-build-audit` step OR Symmetria §3 flag | Before starting substantial INFRA/tool building (a converter, a pipeline, a substrate), read the **tooling-register + landscape-register + prior scans** for an existing adopt-candidate first — the studium-engine-scan-register (2026-05-27) already named Docling+Surya/OCR4all/TEI/DTS as THE substrate answer, and we hand-built ~20 bespoke tools over ~6 weeks anyway. The two-week "every breakthrough → new obstacle" feeling was the tell of reimplementing a solved domain. **Yardstick met, painfully:** the steward had to re-surface that extant tools exist ("are there no epub tools? … TEI?") — our own register carried that six weeks earlier. Kin to [[feedback-resurface-banked-notes-before-rederiving]], specialized to the build-infra decision. | `/wake-up` §2 (when the thread is a build) or `/pre-build-audit` (its natural home) or a Symmetria §3 flag (solving-at-the-wrong-level / build-a-solved-domain) | **PROPOSED** |
|
||
|
||
*(One proposal, load-bearing — the drift cost ~6 weeks and recurred at pipeline scale; a standing "check the register before building infra" reflex would have surfaced Docling at the outset. Surfaced for steward authorization; not auto-applied. The paired KG drift-patterns are already appended (solving-at-the-wrong-level · didn't-consult-our-own-tooling-register).)*
|
||
|
||
### Harvest 2026-07-12 evening (schema-lock → B2 fleet → PENDING-57 keystone ratified → doc-currency)
|
||
|
||
**BUILT this session (steward-directed — recorded, not proposed):**
|
||
- **"Doc-currency on wrap" protocol → added to BOTH `chamber-library/CLAUDE.md` and `studium-engine/CLAUDE.md`.** A standing 6-point checklist (fleet/build-state · status markers · substrate-terminology · disciplines · deprecated-verify-before-archive · tool-review) walked before ending work in each repo — the mirror of each repo's read-first session protocol, so wrapping work THERE keeps THOSE docs current (not memory). Steward's framing: "then we are always current." Institutionalizes the anti-guess/anti-reinvent/anti-ignore-a-solution-we-had discipline at the point of work. Complements `/wrap-up` §1.6's "Repo CLAUDE.md fresh?" check (which now has a repo-side counterpart).
|
||
- **chamber `CLAUDE.md` + runbook made current** — added `build_loeb_sidecar` + `verify_body_conservation` to the fleet; Loeb-DSL terminology rewritten (flatten-vs-preserve); a new **check-for-existing-tool/register-before-building** load-bearing discipline (the day's meta-lesson); schema DRAFT→LOCKED.
|
||
|
||
**PROPOSED (awaiting steward):**
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **Symmetria §3 flag: a check proven for one tier/case is NOT proven for another** | Symmetria §3 flag | Reusing a verification method across a boundary it wasn't demonstrated on is contamination shape — the V-TEXT k-gram coverage check FALSE-FLAGGED a clean V-DSL book (reflow ≠ born-digital). Antidote: an injection/demonstration test PER tier/case, don't reuse-and-assume. Kin to `trust-prior-pass-frame` (one level up: not "extend the same pass" but "reuse the same *instrument*"). | Symmetria §3 | **PROPOSED** |
|
||
|
||
*(One proposal, genuinely recurring-shaped — the jurist's demonstration-discipline is the human version of this flag; making it a §3 flag would make the executor reach for a per-tier demonstration before shipping a reused check. The Doc-currency protocol is BUILT, not proposed — steward directed it explicitly.)*
|
||
|
||
> **⏭ STEWARD REQUEST (2026-07-12): hold a full skill-harvest REVIEW next session (2026-07-13).** Walk the open proposals accumulated in this register (the 2026-06-05-style full review) — rule each PROPOSED item (build / authorize / defer / reject), prune the built/stale, and specifically rule the new **Symmetria §3 flag: a-check-for-one-tier-isn't-proven-for-another**. Surface this at /wake-up.
|
||
|
||
### Harvest 2026-07-13 (keystone landing + Loeb sweep — checkable-claim day)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **Symmetria §3 flag: soft-classification-where-a-checkable-claim-was-available** | Symmetria §3 flag | Shipping a soft label ("this is reordering", "magnitude unresolved", "apparatus") when a CHECKABLE claim (a reportable number, a substrate-verified fact, a discriminating test) was producible is contamination shape — the soft label can be true-shaped and wrong, and papering over defect. Antidote: ask what checkable claim the label stands in for, produce THAT; if it can't be produced cleanly, that inability is the finding; never force a figure onto a comparison that can't bear it. Earned HARD 2026-07-13 (steward-named "5 times in one day; not coincidence" — nagarjuna, nested-block, loss-half injection, Aeschylus reordering, matcher key). Feedback memory [[feedback-checkable-claim-surfaces-bugs]] already saved; a §3 flag makes it operational at check-time. | Symmetria §3 | **PROPOSED** |
|
||
|
||
*(One proposal, strongly earned — recurred 5× in a day and the steward named the pattern. The feedback memory captures it for recall; the §3 flag would make me reach for the checkable claim before shipping the soft label. Surfaced for steward authorization — not applied.)*
|
||
|
||
### Harvest 2026-07-13 (afternoon — the 18 body-deficit cause-analysis)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **split cause from magnitude before sizing a remedy** | verification-ladder instrument | A diagnostic bucket keyed on ONE summary axis (magnitude, holds%, a deficit size) can hold **heterogeneous causes** — a single label silently implies a single fix at a single scale. Before sizing remediation from a bucket, **read the substrate to split cause from magnitude**. Earned today: the one "18 BODY-DEFICIT" label masked THREE mechanisms → three remedies (re-match 8 / re-extract 4 / re-verify-and-reconvert 12); sizing the reprocess from the magnitude alone would reach for the wrong fix on most. Kin to census-through-truncation (that flag is about *coverage* of a scan; this is about *cause-homogeneity within a bucket*). | `reference-verification-ladder.md` | **PROPOSED** |
|
||
| **confirm-a-named-cause-by-swap-in (don't assert from identification)** | verification-ladder instrument | When you NAME the true reference / config / cause behind an anomaly, don't assert the fix from the identification — **swap the candidate in and confirm the anomaly collapses** (ideally to zero). Today: naming augustine's true key ('Confessions' full) and philo's ('On Abraham') wasn't trusted; re-running the comparison against each drove fab+lost to exactly 0/0 — the checkable version of "this is the wrong match." The specific form of [[feedback-checkable-claim-surfaces-bugs]] for root-cause claims. | `reference-verification-ladder.md` | **PROPOSED** |
|
||
|
||
*(Two, both earned in use, both recurring-shaped and distinct from the morning's checkable-claim §3 flag. The first is the session's load-bearing lesson — magnitude ≠ cause in a diagnostic map. Watch-list, not proposed: "counted-the-bundled-representation-as-items" [the ③ table row = 3 Aeschylus books counted as 1] — logged as a KG drift-pattern; may graduate to a census-through-a-pattern refinement if it recurs.)*
|
||
|
||
### Harvest 2026-07-13 (evening — the matcher key-selection fix)
|
||
|
||
| Element | Kind | One-line | Where it lands | Status |
|
||
|---|---|---|---|---|
|
||
| **method-class-vs-calibration** | verification-ladder entry (primary) OR Symmetria §3 flag | **When a metric/gate fails to separate two cases, ask whether it is mis-CALIBRATED or structurally BLIND to the distinction — no amount of retuning a set metric reaches an order-only difference, because the blindness is in the method CLASS, not its threshold.** Antidote: reach for a different method *category* and order tiers strongest-most-specific-signal FIRST (exact ordered-string before fuzzy set metrics). Earned today: Jaccard=1.0 AND raw-overlap both TIED on Suetonius 'Grammarians' vs 'Rhetoricians' (identical token sets — both words in "Grammarians and Rhetoricians"); only the ordered STRING separates them, and it had to lead. The steward elevated it: "the problem was in the *category* of method, not its calibration… no amount of retuning a set metric would ever have separated them." Generalizes past this matcher — any check that ties/fails where a distinction is real. | `reference-verification-ladder.md` (a diagnostic instrument), with a possible Symmetria §3 shadow ("retune-a-structurally-blind-metric" = reaching for the calibration knob when the method class can't make the distinction) | **PROPOSED** |
|
||
|
||
*(One candidate, load-bearing and steward-named. Primary home is the verification-ladder — it's a positive diagnostic technique, not only a contamination shape. The §3-flag form is offered in case the steward reads it as the drift-shadow [reaching for the convenient tuning knob] rather than the instrument. His ruling on which home, or both.)*
|