session 2026-07-28 evening: 3 skill-harvest proposals (instrument-coverage flag, measurement-before-building, ledger-delta confound)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuMjg3ipEVa3n8CoSzoyvc
This commit is contained in:
co-authored by
Claude Opus 5
parent
30fc1694a4
commit
a866018c3a
@@ -659,3 +659,14 @@ No new skill proposal. Two register notes: **(1)** the S1 proposal **implementat
|
|||||||
| `/wrap-up` §6 / §6.5 | patch | **Verify that every file a commit message names is actually staged, and that steward-authored edits are committed — not just executor ones.** Two concrete additions: (a) before writing a message that names a new file, `git ls-files --error-unmatch <file>`; (b) §6's loose-end check should treat *modified tracked governance files* (`CLAUDE.md`, `REVIEWED.md`) as a blocking finding, not an FYI — they are usually the steward's placements, and the wrap is where they enter the record. | `8abfe88` claimed *"split 1848→430 **+ archive**"* and never staged `PENDING-archive.md`: 1,532 lines deleted, destination absent, pushed. **Recurred the same day** — the steward's `CLAUDE.md` L27 fix and REVIEWED-78/81/82 sat uncommitted while the session was about to be called closed; only a final `git status --porcelain` caught it. | **PROPOSED** |
|
| `/wrap-up` §6 / §6.5 | patch | **Verify that every file a commit message names is actually staged, and that steward-authored edits are committed — not just executor ones.** Two concrete additions: (a) before writing a message that names a new file, `git ls-files --error-unmatch <file>`; (b) §6's loose-end check should treat *modified tracked governance files* (`CLAUDE.md`, `REVIEWED.md`) as a blocking finding, not an FYI — they are usually the steward's placements, and the wrap is where they enter the record. | `8abfe88` claimed *"split 1848→430 **+ archive**"* and never staged `PENDING-archive.md`: 1,532 lines deleted, destination absent, pushed. **Recurred the same day** — the steward's `CLAUDE.md` L27 fix and REVIEWED-78/81/82 sat uncommitted while the session was about to be called closed; only a final `git status --porcelain` caught it. | **PROPOSED** |
|
||||||
| `~/dotfiles/scripts/` | new script | **Promote the union-losslessness verifier** to `verify-union-lossless.py <baseline> <part>...` — asserts *baseline ⊆ union of parts* at **line** granularity (no regex, no notion of "item"), carrying its own positive control (a sentinel absent from the union must be reported missing) and a second control confirming blindness-by-design to additions. | Written ad hoc in scratchpad for the archive repair, where it returned FAIL on 3 lines and thereby surfaced an **unlogged header rewrite inside `8abfe88`** that no other check saw. Third file-surgery this month that would have wanted it. Ad-hoc means the next surgery re-derives it. | **PROPOSED** |
|
| `~/dotfiles/scripts/` | new script | **Promote the union-losslessness verifier** to `verify-union-lossless.py <baseline> <part>...` — asserts *baseline ⊆ union of parts* at **line** granularity (no regex, no notion of "item"), carrying its own positive control (a sentinel absent from the union must be reported missing) and a second control confirming blindness-by-design to additions. | Written ad hoc in scratchpad for the archive repair, where it returned FAIL on 3 lines and thereby surfaced an **unlogged header rewrite inside `8abfe88`** that no other check saw. Third file-surgery this month that would have wanted it. Ad-hoc means the next surgery re-derives it. | **PROPOSED** |
|
||||||
| `/wake-up` §2.a | patch | **(Re-proposing, third firing.)** Link-canary path resolution — root cause now precise, not merely reproduced: the memory dir's *physical* path is `~/dotfiles/claude/memory` (symlinked from `.claude/projects/…`), so a relative pointer like `../../../../_Dev/…` resolves from there and lands at `/Users/`. Fix: resolve pointers against the memory file's logical directory, or absolutise them. One line. | Fired 2026-07-27, and **twice** on 2026-07-28. Each firing costs a false "dead pointer" in the briefing and a paragraph of explanation. Also learned alongside: `find <symlink>` returns nothing without `-L`, and `ls -t` is shadowed by `eza` here. | **PROPOSED** (carried) |
|
| `/wake-up` §2.a | patch | **(Re-proposing, third firing.)** Link-canary path resolution — root cause now precise, not merely reproduced: the memory dir's *physical* path is `~/dotfiles/claude/memory` (symlinked from `.claude/projects/…`), so a relative pointer like `../../../../_Dev/…` resolves from there and lands at `/Users/`. Fix: resolve pointers against the memory file's logical directory, or absolutise them. One line. | Fired 2026-07-27, and **twice** on 2026-07-28. Each firing costs a false "dead pointer" in the briefing and a paragraph of explanation. Also learned alongside: `find <symlink>` returns nothing without `-L`, and `ls -t` is shadowed by `eza` here. | **PROPOSED** (carried) |
|
||||||
|
|
||||||
|
## New proposals (2026-07-28 evening wrap — awaiting steward)
|
||||||
|
|
||||||
|
**PROPOSED — patch `symmetria` §3: an INSTRUMENT-COVERAGE contamination flag (distinct from the medium flag).**
|
||||||
|
Earned hard: **nine instances in one session**, and the existing flags caught none of them. §3 already carries *claim-from-derived-form* and (as of this morning) the medium rule — *a check cannot be written in the medium of the thing it inspects*. Today's class is neither: the instruments were **well-formed and simply did not reach the domain**. A bibliography detector omitting the word "Notes"; "bibliography" asserted where the book says "Works Cited"; English-only patterns over a corpus carrying `bibliographie` ×19; `import docling` in the default python when the runbook *declares* `~/.local/bin/docling`; ssh by raw IP when the credentials live on the `capablehands` alias; two-column inferred about a *book* from its *index*. Proposed flag text: **"A negative reported without establishing that the instrument's domain covers the claim's domain. Before reporting an absence, enumerate what the instrument can see and show it overlaps what the claim is about — a token list, a language, a path, a host alias, and a file region are each a domain boundary. An absence in my instruments is a fact about my instruments."** Note the asymmetry that makes this worth a flag: **four of the nine were caught by the steward** (physical copy · runbook · ssh alias · ledger) and none by any check I wrote.
|
||||||
|
|
||||||
|
**PROPOSED — patch `chamber-library/CLAUDE.md`: extend the existing "check for an existing tool BEFORE building" discipline to MEASUREMENTS.**
|
||||||
|
The line already says *"Check for an existing tool — and our own register — BEFORE building infrastructure."* Today's failure was one level over: I built three successive detectors to establish an apparatus defect that `_curation/corpus-quality-ledger.tsv` had already classified as `stranded-suspect` / `C-apparatus` **on 2026-07-03**, and the runbook held the tool path, the `reanchor:` obligation, and the running-head gap. The steward's correction was two words. Proposed extension: **"…and before MEASURING, check whether the measurement already exists — the runbook, the quality ledger, and the tool-evolution-log are where it usually does."** *This is a discipline change, so surfaced for review rather than applied (§1.6's FIX-vs-PROPOSAL split).*
|
||||||
|
|
||||||
|
**PROPOSED — add to `_curation/conversion-runbook.yaml` `verification:`: the ledger-delta confound.**
|
||||||
|
Regenerating the quality ledger showed 20 files moving `A-convention` → `+B-textdamage` **that had not degraded**: `audit_corpus.py` was unchanged *and* the files were unchanged, but it **dynamically imports** its classifiers and `verify_conversion.py` changed 2026-07-21. In a declared-data architecture where tools are thin consumers, *"did the script change?"* is the wrong question. Proposed clause: **"A ledger regenerated across a change to its instrument produces a delta mixing corpus change with instrument change, and the output cannot distinguish them. Before treating a delta as corpus fact, re-run the old instrument on the new corpus, or stamp each row with the classifier version."** Load-bearing for the re-gate work ahead, where **ledger deltas are the intended progress metric**. Full record: `_curation/tool-evolution-log.md` 2026-07-28.
|
||||||
|
|||||||
Reference in New Issue
Block a user