session 2026-08-24: the heap got a dynamo — thread-query.py + daybook-cue.py, 11 user-memories harvested to the vault
- thread-query.py: the turning. Queries both corpora with the pulling thread, excluding the recency slice (/wake-up reaches 0.71% of an 859,803-word corpus) and favouring age. Wired into /wake-up §2.b.3, replacing a described-not-invoked grep step. Trial pre-registered, graded 2026-10-05 from --log. Caught PASS-BUT-FALSELY on its first live run at 14/14 green; rescored on windowed co-occurrence, length-bias control added. - daybook-cue.py: PostToolUse cue for the daily note. Diagnosed from the record — the hook only ever CREATED and nothing ever prompted filling. 16/16, fail-open, never blocks. - All 11 user-* memories harvested into the vault (12 notes, 10 into 09. Atlas of Roots, empty since 2025-09-29); each memory file back-pointed, vault note canonical for the idea. - N-now corrected in MEMORY.md: 49/84, down 11 — the counter is a rolling window. Steward-authorized. Trials: thread-query + Smart Connections, both graded 2026-10-05. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQKeKY9T9d95KpvHwwok8T
This commit is contained in:
co-authored by
Claude Opus 5
parent
e3da9abad1
commit
edf71fb173
@@ -699,3 +699,10 @@
|
||||
{"subject": "holding a prior measurement to disagree with", "predicate": "prevention", "object": "IS WHAT CAUGHT BOTH TOOL DEFECTS ON 2026-08-23, AND NEITHER WAS CAUGHT BY CONTROLS. The 8,296-vs-654 discrepancy exposed indiscriminate markdown-link extraction; the 1,070-vs-1,153 arithmetic exposed a substring-vs-path archive filter hiding 78 live notes. In both cases the selftest was green. The transfer signature: the discipline of RE-MEASURING rather than relaying — banked from the N-now non-monotonicity finding (PENDING-147) — stopped two failures of a completely different class in a different domain hours later.", "valid_from": "2026-08-23", "valid_to": null, "confidence": 0.95, "source_file": "session-2026-08-23-evening-the-vault-got-instruments-and-a-deficit.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "the steward correcting the JURIST rather than the executor", "predicate": "prevention", "object": "IMPROVED A DESIGN THAT TWO SAME-FORMATION PARTIES HAD AGREED ON. The jurist asserted that a `status: seed` note is 'deliberately unlinked'; the steward objected that seeds are linked by theme and connection, since that is the mechanism by which they resurface at all. The jurist accepted and narrowed its own guardrail — and the correction ADDED a capability neither AI party had proposed: a seed ACCUMULATING inbound links is demonstrating readiness, so the tooling should surface it. Direct evidence for Constraint 6's claim that correction may run in any direction, and that the steward differs from both AI parties in formation where the jurist and executor do not differ from each other.", "valid_from": "2026-08-23", "valid_to": null, "confidence": 0.95, "source_file": "session-2026-08-23-evening-the-vault-got-instruments-and-a-deficit.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "David, root-and-branch vault", "predicate": "has-measured-state", "object": "2,375 notes — 1,298 live, 1,077 in 99. Archive/ (path-component match, NOT substring). 54% of live notes carry no resolved link in or out. 484 unresolved link targets / 817 references. 26 notes declare status: archived; the remaining ~1,051 are UNAPPRAISED, which is true and not a defect. Frontmatter Specification v1.0.2. Archive Convention PROPOSED, not adopted.", "valid_from": "2026-08-23", "valid_to": null, "confidence": 0.95, "source_file": "session-2026-08-23-evening-the-vault-got-instruments-and-a-deficit.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "claude-code", "predicate": "drift-pattern", "object": "PASS-BUT-FALSELY on a tool I wrote and selftested the same hour — SECOND DAY RUNNING, second tool. thread-query.py passed 14/14 while its first live run put Carruthers' Book of Memory (1.6MB) and Yates' Art of Memory (1MB) at the top of every query, because scoring on 'distinct terms present anywhere in the document' measures LENGTH, not relevance. The fixture held only small uniform files, so the selftest certified its author's blind spot — the identical mechanism that broke vault-links.py on 2026-08-23. Knowing the lesson one day later did not prevent it. ONLY THE LIVE RUN CAUGHT IT. Standing implication: a selftest over a self-authored fixture cannot detect a bias the fixture does not contain; run any new instrument against the real corpus before trusting a green suite.", "valid_from": "2026-08-24", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-24-the-heap-got-a-dynamo.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "claude-code", "predicate": "drift-pattern", "object": "Classified files from their filenames and description fields rather than their text, then reported the classification to the steward as a placement decision. Told him all four remaining `user-` memory files belonged outside the Atlas of Roots; on actually reading them, two say 'what I have always tried to do regardless of domain' and 'I've been moving towards this since childhood' in his own words — formation-level, squarely Atlas material. Same shape as reading a field through a summary instead of the substrate. A description is a derived form.", "valid_from": "2026-08-24", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-24-the-heap-got-a-dynamo.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "claude-code", "predicate": "drift-pattern", "object": "Mis-corrected the steward by reading a CURRENT config where he was pointing at a DEFAULT. He said bge was the MemPalace embedding model; I read ~/.mempalace/config.json — which holds the model they had SWITCHED TO (BAAI/bge-m3) — and told him he was half wrong. MemPalace's default is `minilm` (all-MiniLM-L6-v2), English-only: he was pointing at exactly the trap Smart Connections poses, and was right. A live config records a decision already taken; it is not evidence about what the default was.", "valid_from": "2026-08-24", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-24-the-heap-got-a-dynamo.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "checking the substrate before adding to a typology", "predicate": "prevention", "object": "STOPPED THE CREATION OF A SECOND NAME FOR AN EXISTING FIGURE, in a system whose named failure mode is exactly that. The steward proposed 'compost heap' beside 'crucible' and 'dynamo'. Rather than compose a third figure, grepped first: `crucible` turned out to be ratified architecture in the Compass Library organ doc (the Hearth, where classification is suspended during deep engagement), and the compost heap was already banked as the HUMIC LAYER in his own verbatim of 2026-04-21 — same figure, built for authors instead of fragments. `dynamo` was zero in the live vault and was left as an open slot rather than guessed, which the steward then filled himself. The banked lesson that fired was 'answer-from-training-before-banked-record'; it prevented a DIFFERENT failure class — vocabulary duplication in the steward's own conceptual system.", "valid_from": "2026-08-24", "valid_to": null, "confidence": 0.95, "source_file": "session-2026-08-24-the-heap-got-a-dynamo.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "deriving a rule from the existing consumer instead of writing a second one", "predicate": "prevention", "object": "CAUGHT A REINTRODUCTION OF THE PREVIOUS DAY'S BUG WITHIN MINUTES. Fixing thread-query.py's archive filter, I wrote startswith('99. archive') — which re-created the exact substring failure that hid 78 live notes on 2026-08-23. The control carried over from that day failed immediately. The fix was not a better private rule but ADOPTING vault-links.py's existing definition (ARCHIVE_DIR = '99. Archive', exact path component), so the vault has one archive rule rather than two that can drift. The banked discipline 'derive the rule from the consumer, not from the survivor' prevented a field-computed-twice defect in a different tool and a different domain.", "valid_from": "2026-08-24", "valid_to": null, "confidence": 0.95, "source_file": "session-2026-08-24-the-heap-got-a-dynamo.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "the daily note practice", "predicate": "diagnosed-as", "object": "A CONTINUOUS OBLIGATION WITH NO RECURRING CUE. Record, not impression: notes for 2026-08-19 through 08-22 do not exist; 2026-08-23 exists at 33,242 bytes across 8 commits, written incrementally as specified. The practice has produced exactly one note — on the day its convention was authored and live in working memory. daybook-ensure.py fires at SessionStart and ONLY EVER CREATES; the next cue is /wrap-up, hours later; between them there is no cue at all. The vault's own notes diagnosed the two dead predecessors correctly ('neither had a trigger') and then built the trigger for the half that never needed one. Compounding factor: competing sinks that DO have cues — the Symmetria ledger was written three times unprompted the same day, because it belongs to an active skill. SKILLS AND HOOKS FIRE; DOCUMENTS DESCRIBE. Remedy built: daybook-cue.py, PostToolUse on Write|Edit, reminder not block.", "valid_from": "2026-08-24", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-24-the-heap-got-a-dynamo.md", "extracted_at": "2026-08-24"}
|
||||
{"subject": "/wake-up", "predicate": "reaches", "object": "0.71% of the memory corpus — 6,107 words of 859,803, always the newest, ordered by recency. Measured 2026-08-24. This is the gap thread-query.py exists to close, and the number the six-week trial is graded against.", "valid_from": "2026-08-24", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-24-the-heap-got-a-dynamo.md", "extracted_at": "2026-08-24"}
|
||||
|
||||
Reference in New Issue
Block a user