Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ All notable changes to ChelatedAI are documented here. Format follows [Keep a Ch
### Added

- **Liquified Lattice vision** — [docs/VISION_LIQUIFIED_LATTICE.md](docs/VISION_LIQUIFIED_LATTICE.md) names the north-star (self-annealing pools, shims, evidence DAG, disk scale) with claim boundaries and success metrics.
- **Phase II execution program** — [docs/ROADMAP_EXECUTION.md](docs/ROADMAP_EXECUTION.md) steps 9–17: Model-Scope close-out, SHIM DoD, annealing controller, evidence DAG, disintegration loop, drift experiment, GNN prototype, quant shim routing, disk pool slice.
- **Phase II execution program** — [docs/ROADMAP_EXECUTION.md](docs/ROADMAP_EXECUTION.md) steps 9–17. **Delivered apparatus:** rungs 9–12 (Model-Scope close-out, SHIM DoD, annealing controller, evidence DAG); 14 drift experiment (with the H5 living-bank verdict a fail-closed negative); 13 partial (post-bank prune/re-anneal lifecycle only). **Open:** 15 GNN prototype, 16 quant-aware shim routing plane, 17 disk pool slice. The ROADMAP Status column is the source of truth.
- **Execution queue** — [docs/ROADMAP_EXECUTION.md](docs/ROADMAP_EXECUTION.md) Phase I defines core-first, single-track work (ML → infra → Model-Scope → E2E; SHIM deferred last).
- **Phase development loop** — `scripts/phase_development_loop.py` registers CORE-SLICE and SHIM-SLICE handlers, persists turn state under `artifacts/phase_loop/`, and emits `NEXT_AGENT_SLICE.json` for the next operator turn.
- **BHS 10-minute loop tooling** — `scripts/run_10min_priority_bhs_loop.py`, `scripts/loop_core_10m.sh`, `scripts/loop_10m.sh`, `scripts/chelated_loop_timer.py`, and `docs/loop_workers/` worker briefs.
Expand Down Expand Up @@ -35,6 +35,11 @@ All notable changes to ChelatedAI are documented here. Format follows [Keep a Ch
- **SHIM-CD-03 OPEN** — MTP lookahead remains simulation-only (MockMTP).
- **SHIM-CD-07 OPEN** — BHS program score has not shown quantified lift on §77-83 metrics.
- **Phase loop** at turn 3171+ (2026-06-05): block flag `CLEAR`, next executable slice `SHIM-SLICE-SCHEDULER-06` (advisory while core queue active).
- **H5 living-bank VERDICT (closed negative, 2026-07):** on the query-encoder-swap arena the living/annealed post-bank (C5) fails its preregistered gate (C5 must beat **both** C5s frozen-static and C5r one-shot router). SciFact: C5 == C5s (0.131135, bit-identical) and C5r one-shot 0.180862 beats living. NFCorpus: C5 == C5s (0.046389), living edges C5r (0.045817) but does not clear the dual gate. **LIVING BANK WINS = False on both datasets** — the living/annealed lifecycle adds nothing over a frozen static bank; a one-shot router is competitive-or-better. Do not promote the living bank. Sources: [docs/drift-recovery-post-bank-headtohead-results-2026-06.md](docs/drift-recovery-post-bank-headtohead-results-2026-06.md), [docs/drift-recovery-post-bank-headtohead-nfcorpus-results-2026-06.md](docs/drift-recovery-post-bank-headtohead-nfcorpus-results-2026-06.md).
- **H4 compound-cycles ablation (single-seed):** SciFact C4a seed 42 — `compound_cycles=False` Final NDCG@10 0.236297 vs `True` 0.005258 (~45× collapse toward the frozen floor). Compounding is a rejected design, not a recovery path; the idempotent one-shot fixed point is correct. Source: [docs/drift-recovery-h4-compound-cycles-ablation-2026-07.md](docs/drift-recovery-h4-compound-cycles-ablation-2026-07.md).
- **H2 swap re-run (post-H1-fix):** SciFact + NFCorpus query-encoder-swap campaigns re-run on the H1-fixed line; regression gate confirms C3a baseline now equals C0/C2/C2O/C4a per seed (contamination was on NFCorpus; SciFact already clean). Closes carried debt CD-H1-01 (stale C3a numbers) and CD-A2-01 (real `all-mpnet-base-v2` swap path exercised). Sources: [docs/drift-recovery-swap-results-2026-06.md](docs/drift-recovery-swap-results-2026-06.md), [docs/drift-recovery-swap-nfcorpus-results-2026-06.md](docs/drift-recovery-swap-nfcorpus-results-2026-06.md).
- **Lattice rungs 10–14 apparatus (merged, git-verified):** SHIM/promotable-route substrate #284/#285/#286 (+ DoD correction #289, diagnostics observation-only); annealing controller #260 + post-bank temperature schedule #280; Evidence DAG schema #277; disintegration as post-bank prune/re-anneal #279 (+ builder/runtime/conditions #281/#282/#283); concept-drift harness #258–#266 (+ track-0 hygiene #267) with H3 teacher-supervised #287/#288, H4 `compound_cycles` #291, H5 head-to-head driver #290. Rungs **9–12 DONE**, **13 PARTIAL**, **14 apparatus DONE**.
- **Still OPEN on the Phase II queue:** step **15** GNN prototype (no PyG/DGL code — only a docstring forward-ref in `evidence_dag.py`); step **16** quant-aware shim routing as an integrated steering plane (`adapter_router` + `QuantizationPromotionGate` + retrieval fitness — not closed by #285 alone); step **17** disk pool shard via `block_graph`. Step **13** stays partial until isomer/convergence → Evidence-DAG prune is implemented or its exit criteria are re-scoped to the post-bank lifecycle.

### Validation (2026-06-06)

Expand Down
31 changes: 19 additions & 12 deletions docs/ROADMAP_EXECUTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Merge gate: **CLEAR** for this sequence (`docs/next-session.md`). SHIM debts sta
- No new doc-only shim cycles or 10-agent backlog slices.
- No claiming SHIM-CD **CLOSED** without full substrate DoD.
- No Model-Scope + full shim + EGGROLL at full throttle in parallel.
- No GNN layer or disk-pool integration until Phase II steps 12–14 complete (schema + drift experiment first).
- No GNN layer or disk-pool integration until Phase II steps 12–14 are honestly closed (schema **#277 DONE**; drift apparatus **DONE** with the H5 living-bank verdict a hard negative; disintegration **#279 PARTIAL** — do not start step 15 while claiming step 13 fully green without a chair re-scope).

---

Expand All @@ -51,17 +51,24 @@ Merge gate: **CLEAR** for this sequence (`docs/next-session.md`). SHIM debts sta

Same one-track rule: finish each step before starting the next. Phase II does not reopen parallel doc-only shim cycles.

| Step | Track | Exit criteria |
|------|--------|----------------|
| 9 | **Model-Scope shadow (close Phase I #7)** | One bounded steering policy on Qwen3.5-9B fixture; `persist_records` / `load_records` round-trip; bridge `max_total_interventions` exercised in test |
| 10 | **SHIM substrate DoD** | SHIM-CD-01/02/06 production seams wired without env-only guards; rollback test; restore `Blocking=YES` on open SHIM rows when re-entering |
| 11 | **Annealing controller** | Single module owns temperature schedule (explore ↔ stabilize); wired to sedimentation + `online_updater` + ES entrypoint; unit test proves high-T increases perturbation, low-T reduces it |
| 12 | **Evidence DAG schema** | Typed graph contract over `build_attribution_pool.py` output (nodes: query/cluster/actuator; edges: retrieval/intervention links); JSON schema + validator; no GNN required yet |
| 13 | **Disintegration loop** | `isomer_detector` / `convergence_monitor` triggers prune of low-fitness graph edges or pool entries; re-anneal path records fitness before/after in artifact |
| 14 | **Concept-drift experiment** | Injected drift fixture (extend `chelatedai-synthetic-collapse` or road-course window); measurable recovery within N anneal cycles documented in `CHANGELOG.md` |
| 15 | **GNN prototype** | Lightweight GNN over evidence DAG (PyG or DGL); only after steps 12–14 green; must beat flat-pool baseline on drift fixture or fail closed |
| 16 | **Quant-aware shim routing** | `adapter_router.py` + `QuantizationPromotionGate` integrated as steering plane; promotion requires quant survival + retrieval fitness |
| 17 | **Disk pool slice** | One precomputed pool shard readable via `computational_storage_poc/block_graph.py` with host parity check; documented in storage track docs |
**Status snapshot (2026-07, git-verified):** rungs **9–12 DONE**; **13 PARTIAL** (post-bank
prune/re-anneal lifecycle only — not isomer/convergence → Evidence-DAG prune); **14 apparatus DONE**
with the **H5 living-bank question closed as a hard negative** (LIVING BANK WINS = False on SciFact +
NFCorpus); **15–17 OPEN**. Lattice apparatus PRs: #260, #277, #279–#291. Next executable feature work
is step **15** only after chair re-scopes or closes the step **13** remainder — or **16/17** if the
quant plane / disk pool is prioritized over GNN.

| Step | Track | Status | Exit criteria |
|------|--------|--------|----------------|
| 9 | **Model-Scope shadow (close Phase I #7)** | **DONE** (fixture path; Model-Scope stack + #254 persist/cap tests) | One bounded steering policy on Qwen3.5-9B fixture; `persist_records` / `load_records` round-trip; bridge `max_total_interventions` exercised in test |
| 10 | **SHIM substrate DoD** | **DONE** (rung 10: #284 A1a / #285 A1b / #286 A1c; DoD honesty #289 — diagnostics observation-only; live routes overlap rung 16) | Promotable steering-route control plane, default-safe, with quant-survival + actionable rollback (`docs/rung10-shim-substrate-dod.md`). This is the rung-10 DoD, **not** a claim that historical SHIM-CD-01/02/06 rows are CLOSED. |
| 11 | **Annealing controller** | **DONE** (#260 engine controller + #280 post-bank schedule; schedule ownership split across two modules) | Temperature schedule(s) drive explore ↔ stabilize; unit tests prove high-T vs low-T behavior; engine wires the controller into sedimentation temperature; post-bank path uses `annealing_schedule` in the C5 lifecycle |
| 12 | **Evidence DAG schema** | **DONE** (#277 `evidence_dag.py` + validator + JSON schema; no GNN) | Typed graph contract over `build_attribution_pool.py` output (nodes: query/cluster/actuator; edges: retrieval/intervention links); JSON schema + validator; no GNN required yet |
| 13 | **Disintegration loop** | **PARTIAL** — post-bank prune/re-anneal DONE (#279 H5a, wired #281–#283); **NOT** isomer/convergence → Evidence-DAG edge prune | Delivered: fitness-gated prune + re-anneal on `SteeringPostBank` with lifecycle artifacts. Original exit named `isomer_detector` / `convergence_monitor` triggers on DAG edges/pool entries — **not implemented**. Re-scope exit to the post-bank mechanism, or implement that trigger. |
| 14 | **Concept-drift experiment** | **DONE apparatus** (#258–#266 harness, #267 track-0 hygiene; swap arena #268–#276; H3 #287/#288; H4 #291; H5 driver #290). **H5 living-bank VERDICT: FAIL / non-promoted** (SciFact + NFCorpus) | Injected drift + recovery campaigns under `docs/drift-recovery-*.md`. Living annealed post-bank (C5) does **not** beat the frozen static bank + one-shot router gate. Compounding (`compound_cycles=True`) is catastrophic on the single-seed H4 ablation. |
| 15 | **GNN prototype** | **OPEN** (no merged PR; no PyG/DGL code — only a docstring forward-ref in `evidence_dag.py`) | Lightweight GNN over evidence DAG (PyG or DGL); only after steps 12–14 green; must beat flat-pool baseline on drift fixture or fail closed |
| 16 | **Quant-aware shim routing** | **OPEN** (pieces exist: `adapter_router`, `QuantizationPromotionGate`, route gate #285 — **not** integrated as one retrieval-fitness steering plane) | `adapter_router.py` + `QuantizationPromotionGate` integrated as steering plane; promotion requires quant survival + retrieval fitness |
| 17 | **Disk pool slice** | **OPEN** (no pool-shard parity via `block_graph`; the computational-storage POC is a different graph) | One precomputed pool shard readable via `computational_storage_poc/block_graph.py` with host parity check; documented in storage track docs |

### Phase II dependencies (do not skip)

Expand Down
20 changes: 20 additions & 0 deletions docs/drift-recovery-h4-compound-cycles-ablation-2026-07.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Drift Recovery — H4 compound-cycles ablation — July 2026

Arena: `query_encoder_swap`. Task SciFact, condition **C4a** (supervised unbounded adapter),
seed 42, cycles 12, swap `all-MiniLM-L6-v2 → all-mpnet-base-v2`, correction 30 steps @ lr 0.01.

Question (H4 "make cycles compound"): does re-training the adapter from accumulated weights and
applying each correction to the already-mutated store (`compound_cycles=True`) improve recovery over
the idempotent one-shot fixed point (`compound_cycles=False`)?

| `compound_cycles` | Final NDCG@10 (seed 42) | Artifact |
|---|---:|---|
| False (idempotent fixed point) | **0.236297** | `experiment_runs/drift-recovery/h4-compound/C4a_compound0_seed42.json` |
| True (compounding) | **0.005258** | `experiment_runs/drift-recovery/h4-compound/C4a_compound1_seed42.json` |

**Result: compounding is catastrophically worse — recovery collapses ~45× (0.236 → 0.005), to near the
frozen floor.** This quantifies the paper §5.2 "overshoot" observation: applying each bounded
correction to the already-mutated store escalates the per-cycle correction norm cycle-over-cycle
(unstable drift, not convergence), so the idempotent re-initialization from a fixed seed against the
frozen pre-drift snapshot is the correct, stable design — not a failure to compound. This is a
single-seed ablation (seed 42); the direction is unambiguous but the exact magnitude is one seed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Drift Recovery — Post-Bank Head-to-Head (H5) — June 2026

Arena: `query_encoder_swap`. Task NFCorpus, cycles 12, seeds [42, 1337, 7].

Conditions: C0 frozen (floor) · C2O oracle (ceiling) · **C5 living bank** · **C5s frozen static bank** · **C5r one-shot router**. All scored on the SAME eval subset.

## Head-to-head (mean over seeds)

| Condition | Baseline NDCG | Final NDCG | Std | Applied runs |
|---|---:|---:|---:|---:|
| C0 | 0.597642 | 0.040655 | 0.014475 | 0/3 |
| C2O | 0.597642 | 0.611933 | 0.018032 | 0/3 |
| C5 | 0.597642 | 0.046389 | 0.005785 | 3/3 |
| C5r | 0.597642 | 0.045817 | 0.005607 | 3/3 |
| C5s | 0.597642 | 0.046389 | 0.005785 | 3/3 |

## Verdict (the H5 gate)

- C5 living mean: 0.04638866344039569
- C5s static mean: 0.04638866344039569
- C5r one-shot mean: 0.04581675856141487
- Living beats static (C5 > C5s): **False**
- Living beats one-shot (C5 > C5r): **True**
- **LIVING BANK WINS (beats both): False**

Gate: the living annealed bank must beat BOTH the frozen static bank and the one-shot router with the lifecycle exercised. This verdict is from the real run; it is not asserted until the campaign executes on the GPU.
26 changes: 26 additions & 0 deletions docs/drift-recovery-post-bank-headtohead-results-2026-06.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Drift Recovery — Post-Bank Head-to-Head (H5) — June 2026

Arena: `query_encoder_swap`. Task SciFact, cycles 12, seeds [42, 1337, 7].

Conditions: C0 frozen (floor) · C2O oracle (ceiling) · **C5 living bank** · **C5s frozen static bank** · **C5r one-shot router**. All scored on the SAME eval subset.

## Head-to-head (mean over seeds)

| Condition | Baseline NDCG | Final NDCG | Std | Applied runs |
|---|---:|---:|---:|---:|
| C0 | 0.818737 | 0.006394 | 0.005594 | 0/3 |
| C2O | 0.818737 | 0.813164 | 0.003981 | 0/3 |
| C5 | 0.818737 | 0.131135 | 0.009802 | 3/3 |
| C5r | 0.818737 | 0.180862 | 0.009034 | 3/3 |
| C5s | 0.818737 | 0.131135 | 0.009802 | 3/3 |

## Verdict (the H5 gate)

- C5 living mean: 0.13113546862429465
- C5s static mean: 0.13113546862429465
- C5r one-shot mean: 0.18086182834701145
- Living beats static (C5 > C5s): **False**
- Living beats one-shot (C5 > C5r): **False**
- **LIVING BANK WINS (beats both): False**

Gate: the living annealed bank must beat BOTH the frozen static bank and the one-shot router with the lifecycle exercised. This verdict is from the real run; it is not asserted until the campaign executes on the GPU.
27 changes: 9 additions & 18 deletions docs/drift-recovery-swap-nfcorpus-results-2026-06.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
# Drift Recovery — Query-Encoder-Swap Arena (PR-A4) — June 2026

> ⚠️ **C3a rows superseded — pending re-run (CD-H1-01).** The C3a baseline and final
> NDCG below were generated before the H1 harness fix (commit `5b2379b`), which removed a
> build-time bounded adapter that had contaminated C3a's ingested doc vectors and its
> pre-correction baseline. After the fix C3a's baseline equals the other conditions
> exactly and its final NDCG (and the C3a budget sweep) shift slightly; those C3a numbers
> will be regenerated by the H2 re-run. **C0/C2/C2O/C4a are unaffected.**

Arena: `query_encoder_swap` (encoder upgrade; the C2 re-embed oracle is defeated).
Manifest: `experiment_runs\drift-recovery\swap-nfcorpus/swap-campaign-manifest-2026-06.json`.
Manifest: `experiment_runs/drift-recovery/swap-nfcorpus/swap-campaign-manifest-2026-06.json`.
Base model: `sentence-transformers/all-MiniLM-L6-v2`; swap model: `all-mpnet-base-v2`.
Task NFCorpus, anchor_fraction 0.4, cycles 12, seeds [42, 1337, 7].

Expand All @@ -21,22 +14,20 @@ Conditions: C0 frozen (lower bound) · C2 re-embed-with-original (proven no-op)
| C0 | 0.597642 | 0.040655 | 0.014475 | 0/3 | 0/3 |
| C2 | 0.597642 | 0.040655 | 0.014475 | 0/3 | 0/3 |
| C2O | 0.597642 | 0.611933 | 0.018032 | 3/3 | 0/3 |
| C3a | 0.598189 | 0.053501 | 0.008779 | 0/3 | 3/3 |
| C4a | 0.597642 | 0.054347 | 0.004909 | 0/3 | 3/3 |
| C3a | 0.597642 | 0.052435 | 0.012268 | 0/3 | 3/3 |
| C4a | 0.597642 | 0.052922 | 0.005116 | 0/3 | 3/3 |

## C3a Training-Budget Sweep (seed 42)

| Steps | LR | Final NDCG | should_correct | applied | mean norm |
|---:|---:|---:|---:|---:|---:|
| 30 | 0.01 | 0.051264 | 12/12 | 12/12 | 0.515708 |
| 200 | 0.05 | 0.039031 | 12/12 | 12/12 | 0.506980 |
| 1000 | 0.10 | 0.040058 | 12/12 | 12/12 | 0.508960 |
| 2000 | 0.10 | 0.041228 | 12/12 | 12/12 | 0.509369 |
| 30 | 0.01 | 0.040350 | 12/12 | 12/12 | 0.515658 |
| 200 | 0.05 | 0.038064 | 12/12 | 12/12 | 0.507013 |
| 1000 | 0.10 | 0.034303 | 12/12 | 12/12 | 0.509030 |
| 2000 | 0.10 | 0.038662 | 12/12 | 12/12 | 0.509522 |

Best budget cell: steps=30, lr=0.01 (seed-42 final 0.051264). Larger budgets degrade (all 12/12 corrections applied at every budget level — the degradation is genuine overshooting, not a broken loop). Three-seed confirmation:
Best budget cell: steps=30, lr=0.01 (seed-42 final 0.040350). Three-seed confirmation:

| Steps | LR | Mean final NDCG | Std | Recovery@N |
|---:|---:|---:|---:|---:|
| 30 | 0.01 | 0.053501 | 0.008779 | 0/3 |

Note: supervised recovery (C3a/C4a) saturates at cycle 1 and holds flat across all 12 cycles. Subsequent cycles re-apply the same bounded correction magnitude without further improvement. Wall-clock timing was not captured (split run); see campaign-completion.log for session timestamps.
| 30 | 0.01 | 0.052435 | 0.012268 | 0/3 |
Loading
Loading