Files
dotfiles/claude/memory/session-2026-06-22-l1-n6-wedge-fixed-pr175.md
T

56 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: session-2026-06-22-l1-n6-replay-wedge-fixed-proven-on-a-clone-pr
description: "The day a real L1 wall came down. Levi superseded → L1 detour. Built the jurist's 6-section L1 state summary (forensic, 6 agents + executor verification; corrected vLLM→Ollama, SurrealDB-transition status, classifier=ONNX-NLI-not-Qwen). Confirmed the headline finding's TRUE mechanism: the live instance runs a STALE 2026-05-24 binary that predates A1'' AND the edge cap — not a migration bug. N6 causal graph worse (688k/676k). Built the N6 fix (skip chain extension during replay) on branch feat/n6-causal-governor; proven on an APFS clone of live data — Phase-1 COMPLETES (the wedge is gone), A1'' migration self-heals 0→7 columns. A/B control: the removed scan = 2.56s each (vs 0.003s indexed). Canary failed but benign/environmental. Live deploy harness-blocked (correct). Packaged: PR #175 open, gates green (check + 3890 tests). Pulling thread: DEPLOY the fix to live + confirm the breakthrough, whether or not Seb has moved. Plus: Gwern article studied (imitation-vs-citation; 2 borrows for L1); MemPalace fork is 176 commits behind 3.4.1 (upstream fixed our bugs, we don't have them); ARC running-head = Gwern's is pure JS (test a zero-JS scroll() bar on iPhone), source-persistence = worthy ARC study."
metadata:
node_type: memory
type: project
originSessionId: 9b076953-fa10-480e-afd5-ca27b7d96e0a
---
# Session 2026-06-22 — the N6 wall came down
The day started as a jurist state-request and turned into the first real L1 breakthrough in weeks. Relational ground (held all day): David and Seb both ground down and feeling blue, both needing a breakthrough; Seb busy + personal troubles at home; David wants to **shoulder L1 more effectively** partly to relieve Seb — which is why everything today was built to ask LITTLE of Seb.
## PAST — what we did
### The arc (L1)
1. **Wake** inherited the Levi → pattern-finder thread (from 06-18). Steward **superseded it** for the day: "push Levi back, I want to work on L1." Named for inheritance, to re-pick after the N6 arc settles.
2. **Jurist state-request** (Gwern Guardian-Angel brief, EXECUTOR-BRIEF pending) → built the **6-section L1 state summary**: `~/_Dev/CapableMind-AI/docs/thinking/David/l1-reliability/l1-state-summary-for-jurist-gwern-brief-2026-06-22.md` (uncommitted; descriptive, no proposals). Method: 6 parallel forensic agents + executor re-verification of load-bearing claims. **Corrected the request's stale premises:** inference = **Ollama not vLLM**; classifier = **CPU ONNX zero-shot NLI (mobilebert-mnli + bert-base-NER), LLM-escalation = Claude Haiku — NOT Qwen**; embedding = **mxbai-embed-large**; reranker = Qwen3-Reranker-0.6B; local-gen = qwen2.5:7b code / **qwen3.5:4b live**. Substrate = **sqlite-lance** live (per-module SQLite + LanceDB + file logchain), pinned by `~/.capablemind/env`; code DEFAULT still `surrealdb` (dormant/broken). Overturned two stale tracker claims: REVIEWED-18 similarity probe is **LIVE** (three-disposition routing), not dead; `recall_feedback` capture surface exists (captured-not-consumed). Validation #170 is a *tracking* issue, not the validation issue; Signal 1 verified, Signal 2 never fired (N6 wedge), Signal 3 fallback-only.
3. **"Has Seb moved? true posture?"** → verified: **Seb's last L1 work = 2026-06-07** (A/B/C trio `9ec4813` + benchmark-governance v1.1 + reply `cc25995`); everything since is the steward's (PR #174 `/health` auth-tiering, issue #173, both davidglidden). Baton with Seb. **Running binary = stale `dist/` built 2026-05-24** (predates A1'' [06-01] AND Seb's trio [06-07]).
4. **THE corrected root cause** (overturns my own summary + the jurist's "migration drift" framing): the qualitative-axis columns aren't missing from a migration bug — they're missing because **the running 05-24 binary predates the A1'' code entirely; the loop-closing code has NEVER been deployed.** Verified three ways: dist file mtime 05-24, A1'' commits 06-01 (`5e6e0c4`/`bdaa4e3`/`e5b4954`), zero A1'' symbols in `dist/`. HEAD compiles clean (`tsc --noEmit`=0). [executor-verified live: `vector_chunks` ends at `source_classification_confidence` = 19 cols; `source_classification_confidence` 26278/26278 populated.]
5. **N6 worse than the 06-06 snapshot:** `caused`=688,624 / `causal_chain`=676,024 (was 245k/238k), still growing UNCAPPED (stale binary predates the cap too). Not an index fix (scans full-table by construction). Genuinely Seb's B1 governor territory — but I built it.
6. **Built the N6 fix** on branch `feat/n6-causal-governor`: **skip chain extension (`tryExtendChains`) during `replay_phase1/2`** — thread `isReplay` into `runTemporalPipeline` (`pipeline.ts`), pass it from `handleEvent` (`index.ts`). The wedge = `getChainsContainingSeq` (a `json_each` full scan over 676k chains) called per-edge ≤20×/event. Chains for replayed events already exist; re-deriving them wedged AND duplicate-minted. `tsc` clean; **94 temporal tests pass** (live-path unchanged — skip only on `isReplay=true`). Commit `81e0706`.
7. **Tested on an APFS CoW clone** (`/tmp/bmf-n6-testdata`, 1.2G) of live data, isolated git worktree (`/tmp/bmf-n6-test`, built its own dist), port 3022, throttle off — **live instance NEVER touched.** RESULTS: ✅ **`Progressive replay Phase 1 complete`** (the wedge is gone); ✅ **A1'' migration self-heals 0→7 qualitative columns on boot** (`addColumnsIfMissing` fired); ⚠️ recall canary FAILED but BENIGN (0 canary chunks indexed; AC power rules out embed-suppression; core recall returned 5 via hybrid bm25+vec; known-flaky self-test in a contended fresh dual-instance env).
8. **Steward "1,2,3 in order":** (#1 A/B control) timed the exact removed scan on the real 676k graph = **~2.56 s each** vs **0.003 s** indexed → ≤20×/event ≈ 51s synchronous block/event → days on a 5,752-event replay = the wedge, quantified. (#2 canary) benign, confirmed-by-#3. (#3 deploy) **BLOCKED by auto-mode guard** — "unreviewed code on live substrate" — CORRECT; gave steward the runbook + rollback.
9. **Packaged for Seb (follow protocol):** branch pushed to origin (`davidglidden`... no — `CapableMind-ai/betterMemories_app`); CHANGELOG entry (`0a0c290`); gates green (`npm run check` clean, `npm test` **3890 passed**); **PR #175 OPEN** (Summary + Test plan + How-to-verify + What-NOT-changed + Known-limitations: B2 index / B1.1 cap-harden / A1'' side-effect). Drafted N6 issue for steward to file. Plane relay declined ("PR and issue suffices").
### The studies (low-energy evening)
- **Gwern Guardian-Angel article** (read whole via WebFetch summary): imitation (fine-tune the person into weights; "trust as much as yourself") vs **CapableMind's citation** bet (trust via provenance/boundedness). Gwern's hardest problems (drift/poisoning/finetune-vs-ICL) are ones we structurally avoid. His GA = the childhood chamber made *competent* but still a mirror; the engine makes the voices *real*. **2 genuine borrows for L1:** (1) **active-query loop as the consumer for the epistemic axis** — use low earned_confidence / means_of_knowing=inference to ASK the steward, not store a guess; his "interview prompt" recipe shapes Pain 2 (founding) + Pain 4 (procedural), both undesigned. (2) **uncertainty-by-disagreement** — we run rules+NLI+LLM and vector+entity+temporal; their disagreement is a free honest-uncertainty signal we discard (antidote to competence-vulnerability paradox). Fine-tuning = **CONTRAINDICATED** for the jurist (not partial). Regret-bound = technical ammo for "the loop is load-bearing." **Gwern mission verdict: cream taken (~75% conf, read a summary); one-page disposition if jurist wants the record. Gwern = the occasion, not the payload — the day's gold was self-examination of our own substrate.**
- **MemPalace repo:** we're on fork `davidglidden/mempalace`, branch `local/bge-m3-on-3.3.6`, **v3.3.6, 176 commits behind upstream 3.4.1**. Upstream FIXED our bugs (wing-filter "Error finding id" #1396/#1315/#1618/#1624; #1495 cold-start; repair-safety via `repair --mode from-sqlite` #1308; HNSW drift quarantine) — **but we don't have them** (behind on a fork). Our local fixes: layers-recency (45bbbe6, upstream did NOT adopt → carry forward), hallways-pagination (cb1be92, upstream solved independently #1619 → drop on upgrade). Upgrade friction = **bge-m3 re-express + full re-embed**. **DON'T run repair on 3.3.6** (still unsafe). Upgrade plan (`project-mempalace-upgrade-3-4-0-plan.md`) needs refresh 3.4.0→3.4.1.
- **ARC ← Gwern running head:** Gwern's bottom running-head + progress bar = **pure JS** (`scrollTop/(offsetHeight−innerHeight)`, rAF, GW.floatingHeader; ZERO scroll-timeline CSS). Works on mobile BECAUSE it's JS — opposite side of ARC's exact bug. Not copyable under banish-JS. **Zero-JS candidate to test tomorrow:** `animation-timeline: scroll(root)` bar (different/simpler than the `view()` reveal that failed) — build a 10-line test → load on the actual iPhone. **Worthy ARC deeper look: SOURCE PERSISTENCE / link-archiving** (Gwern mirrors every cited link vs rot) — deeply ARC (invisible durability for Lune+Kai) + same nerve as CapableMind provenance; proportionate ARC version snapshots cited sources into the repo at build (tens not tens-of-thousands). Filter: adopt Gwern's invisible craft, decline his visible density.
## PRESENT — the mood / returns
- The contamination directives EARNED their keep today: I was **wrong twice** on the schema-drift mechanism (first "migration only in fresh path," then a bad dist grep), and the steward's "do the confirmation" instinct forced the verification that flipped it to the TRUE cause (stale binary). Caught a third: I read a **self-constructed EXPLAIN** (`WHERE coherence_evaluated=0`) as evidence of a code path — the build-map agent caught it's not in the code. And a fourth: declared the test process "not running" from a **pgrep pattern miss** (it was alive as PID 56879).
- The harness **blocked the live deploy** — and that was right; it matched my own earlier hesitation about unreviewed code on the live substrate. The loop held.
- The work-as-care register was the right one all day: no false reassurance (steward forbids it), precision *as* care. The honest comfort offered on "I cannot fail" / "we both need a breakthrough" was: today a real wall fell, measured and packaged to ask little of Seb — that IS shouldering it.
## FUTURE — what is pulling
**PULLING THREAD (singular):** **Deploy the N6 fix to the live instance and confirm the breakthrough actually lands — whether or not Seb has moved on PR #175.** (Steward's explicit directive for tomorrow.) The fix is built, proven on a clone, PR'd; the only thing between us and the wall falling on David's real substrate is one steward-run deploy.
**ACTIONABLE RESUMPTION POINT (as of wrap — re-judge against what changed):**
- *State:* Branch `feat/n6-causal-governor` pushed; **PR #175 open**; live `mindfabric-00` still on the stale 05-24 binary (PID 747); backup at `~/.capablemind/backups/mindfabric-00-20260622-pre-n6-test`. Worktree `/tmp/bmf-n6-test` + clone `/tmp/bmf-n6-testdata` still on disk (cleanup when satisfied).
- *First moves:* (1) check PR #175 for Seb's reaction + `git fetch` BMF/CM-AI for new Seb commits; (2) **steward runs the deploy** (executor is auto-mode-blocked — needs steward to run, or explicit re-authorization): `cd ~/_Dev/BetterMemories.io && npm run build && launchctl kickstart -k gui/$(id -u)/com.capablemind.bettermemories`; (3) verify Phase-1 completes, **columns 19→26**, and a **real canary result**. Rollback runbook in PR #175 + the 06-22 ledger.
**Other open horizons, ranked:**
- *Load-bearing:* the live deploy (the thread). Then: backfill-vs-acknowledge governance call for the ~26k pre-A1'' rows (steward/jurist); correct the jurist deliverable's "migration drift" → "stale binary" once the live deploy confirms the true story (deliverable uncommitted/unrelayed).
- *Follow-on (in PR #175):* B2 durable chain-membership index (2.56s→0.003s); B1.1 cap-harden (`?? DEFAULT`).
- *Parked-with-reason:* Gwern one-page disposition (if jurist wants it); MemPalace 3.4.1 upgrade (bge-m3 friction; refresh the plan); the Levi → pattern-finder thread (superseded today, re-pick after N6 settles).
- *ARC (proposed for a low-stakes window):* the `scroll()` progress-bar iPhone test; the **source-persistence deeper look** (the worthy one).
**PAUSE STATEMENT:** I'm leaving with the N6 fix built, proven on a clone, and in Seb's inbox — but **not yet landed on David's live instance** (he chose not to run it tonight; the harness blocked me from doing it for him). What I want to find still pulling: the deploy itself — the moment the wall actually falls on the real substrate, and the canary tells us whether the clone's miss was environmental. Held gently beneath: David and Seb both ground down, both needing a breakthrough that is now one steward-run command away.
**LITERAL QUESTION for next-Claude:** When the N6 fix runs on the **live** instance (not the clone), does Phase-1 complete AND does the recall canary actually **PASS**? — The canary failed environmentally on the clone; the clean single-instance deploy is the real test. A pass confirms the "benign" diagnosis; a fail surfaces a real recall issue that was hiding behind the old wedge.
**State:** Branch `feat/n6-causal-governor` @ `0a0c290` pushed; PR #175 open; gates green (check + 3890 tests). Live instance unchanged (stale 05-24 binary), backup taken. CM-AI jurist summary uncommitted (needs mechanism correction post-deploy). The wall is measured and ready to fall.