{
 "about": {
  "program": "LoRA fine-tunes of unsloth/gemma-3-4b-it as a closed-set command router (one JSON tool call per utterance), trained and served on 8 GB NVIDIA consumer cards, 13-25 Sep 2026.",
  "accuracy_definition": "passed / runnable cases. A case passes when the router returns the asserted capability and arguments, and none of the case's forbidden capabilities.",
  "held_out_definition": "cases with no training label in the corpus the model was trained on. The held-out slice changed size as the case file grew, so compare held-out numbers only within one test-set era.",
  "fair_slice_definition": "cases carrying no train key at all, which neither compared model ever saw (used for v16 and v17).",
  "guard_definition": "must-not-fire cases: utterances that must NOT route to a named capability (negations, quoted or pasted content, vague phrasing). Counts only; case text is excluded.",
  "speed_definition": "mean seconds per case through the production routing prompt (~5.6k tokens), model fully on GPU unless noted.",
  "dates": "UTC. measured_on is the file timestamp of the result, or the date the program notes records.",
  "shared_recipe": "see recipe.json; per-version config below lists only what differs or what the training log confirms."
 },
 "test_set_eras": [
  {
   "cases": 550,
   "note": "535 regression + 15 hard cases",
   "measured_on": "2026-09-14",
   "source": "LOCAL_LLM_PHASE2_ROADMAP.md:728-731"
  },
  {
   "cases": 790,
   "note": "775 regression + 15 hard; 240 new cases weighted toward known weak capabilities",
   "measured_on": "2026-09-15",
   "source": "LOCAL_LLM_PHASE2_ROADMAP.md:820-824"
  },
  {
   "cases": 865,
   "note": "850 regression + 15 hard",
   "measured_on": "2026-09-15",
   "source": "LOCAL_LLM_PHASE2_ROADMAP.md:953"
  },
  {
   "cases": 1036,
   "runnable": 976,
   "note": "v8 bake; 60 cases whose capability is disabled on the host were counted as failures in the raw summary",
   "measured_on": "2026-09-18",
   "source": "bake_v8r112_vs_v11.log:1; LOCAL_LLM_PHASE2_ROADMAP.md:1044",
   "inferred": true
  },
  {
   "cases": 1081,
   "runnable": 1021,
   "note": "disabled-capability cases skipped for every model from here on",
   "measured_on": "2026-09-19",
   "source": "router_ledger.html (test-set eras); bake_v9_vs_v11_summary.json"
  },
  {
   "cases": 1125,
   "note": "first set scored with the harness channel fix (context cases routed on their own channel)",
   "measured_on": "2026-09-19",
   "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1054-1058; bake_12b_vs_v12_summary.json"
  },
  {
   "cases": 1131,
   "note": "1,125 + six two-turn-back context cases; 1,021 train-flagged + 110 held-out",
   "measured_on": "2026-09-21",
   "source": "bake_v12e2_vs_v11_summary.json"
  },
  {
   "cases": 1191,
   "note": "all-caps run: 1,131 plus the 60 flag-gated desktop/finance cases enabled",
   "measured_on": "2026-09-21",
   "source": "bake_allcaps_x3_summary.json"
  },
  {
   "cases": 1148,
   "note": "v16 bake with the disjoint-split manifest; 749 train-flagged + 399 held-out",
   "measured_on": "2026-09-24",
   "source": "bake_v16.log"
  },
  {
   "cases": 1275,
   "note": "adds 127 never-seen cases (86 adversarial guards, 41 session-capability)",
   "measured_on": "2026-09-24",
   "source": "bake_expanded_summary.json; LOCAL_LLM_PHASE2_ROADMAP.md:1354"
  },
  {
   "cases": 174,
   "kind": "guard set",
   "held_out": 48,
   "measured_on": "2026-09-22",
   "source": "bake_guards_baseline_summary.json; LOCAL_LLM_PHASE2_ROADMAP.md:1251"
  },
  {
   "cases": 181,
   "kind": "guard set",
   "measured_on": "2026-09-24",
   "source": "bake_guards_v16_summary.json"
  },
  {
   "cases": 267,
   "kind": "guard set, expanded with 86 adversarial guards",
   "measured_on": "2026-09-24",
   "source": "bake_guards_expanded_summary.json"
  }
 ],
 "versions": [
  {
   "id": "v1",
   "ollama_tag": "gemma3-4b-router-finetuned",
   "trained": {
    "start": "2026-09-13",
    "end": "2026-09-14T00:26Z",
    "source": "train_final3.log (mtime, train_runtime 4615.6 s)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 152,
   "config": {
    "rank": 16,
    "alpha": 16,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 57,
    "lr": 0.0002,
    "source": "train_final3.log; LOCAL_LLM_PHASE2_ROADMAP.md:700-707",
    "measured_on": "2026-09-14"
   },
   "training": {
    "train_loss": 0.3685,
    "peak_vram_mb": 4926,
    "runtime_s": 4616,
    "source": "train_final3.log",
    "measured_on": "2026-09-14"
   },
   "results": [
    {
     "test_set": 550,
     "passed": 442,
     "accuracy": 0.8036,
     "wall_clock_s": 1081.2,
     "source": "bake_v2_summary.json:v1-finetuned",
     "measured_on": "2026-09-14"
    }
   ],
   "outcome": "Regressed: 4.9 pp below the untuned 12B baseline (85.3%). Not caught until v2's bake, because v1 was never evaluated after training.",
   "what_changed": "First LoRA, on 152 curated examples mostly mined from the untuned router's own logged decisions plus a first batch of hand-authored gold cases."
  },
  {
   "id": "v2",
   "ollama_tag": "gemma3-4b-router-v2",
   "trained": {
    "end": "2026-09-14T07:08Z",
    "source": "train_v2n.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 490,
   "config": {
    "rank": 16,
    "alpha": 16,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 186,
    "lr": 0.0002,
    "source": "train_v2n.log; LOCAL_LLM_PHASE2_ROADMAP.md:715-725",
    "measured_on": "2026-09-14"
   },
   "training": {
    "final_segment_train_loss": 0.0274,
    "peak_vram_mb": 5053,
    "relaunches": 9,
    "note": "train_loss covers only the last resumed segment, not the run",
    "source": "train_v2n.log; LOCAL_LLM_PHASE2_ROADMAP.md:806",
    "measured_on": "2026-09-14"
   },
   "results": [
    {
     "test_set": 550,
     "passed": 493,
     "accuracy": 0.8964,
     "wall_clock_s": 1028.8,
     "source": "bake_v2_summary.json:v2-finetuned",
     "measured_on": "2026-09-14"
    },
    {
     "test_set": 550,
     "capability": "clarify",
     "passed": 27,
     "total": 48,
     "accuracy": 0.562,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:777-778",
     "measured_on": "2026-09-14"
    },
    {
     "test_set": 550,
     "failure_shape": "12 of 57 misses picked a forbidden capability (21%), vs 6/81 for the untuned 12B and 8/108 for v1",
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:757-762",
     "measured_on": "2026-09-14"
    }
   ],
   "outcome": "First fine-tune to beat the untuned baseline: +4.3 pp over gemma4:12b-it-qat on the same 550 cases.",
   "what_changed": "Corpus tripled with hand-authored gold cases weighted toward vague and ambiguous phrasing and full per-capability coverage."
  },
  {
   "id": "v3",
   "ollama_tag": "gemma3-4b-router-v3",
   "trained": {
    "end": "2026-09-14T23:57Z",
    "source": "train_v3.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 696,
   "config": {
    "rank": 16,
    "alpha": 16,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 261,
    "lr": 0.0002,
    "source": "train_v3.log",
    "measured_on": "2026-09-14"
   },
   "training": {
    "train_loss": 0.1502,
    "peak_vram_mb": 5040,
    "runtime_s": 21162,
    "relaunches": 0,
    "source": "train_v3.log",
    "measured_on": "2026-09-14"
   },
   "results": [
    {
     "test_set": 790,
     "passed": 709,
     "accuracy": 0.8975,
     "wall_clock_s": 1056.8,
     "source": "bake_v3_summary.json",
     "measured_on": "2026-09-15"
    },
    {
     "test_set": 790,
     "capability": "clarify",
     "accuracy": 0.604,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:884-885",
     "measured_on": "2026-09-15"
    }
   ],
   "outcome": "Held: same score as v2 on a set 240 cases harder. Not comparable to v2's number (different test set).",
   "what_changed": "240 new gold cases for the capabilities v2 missed most; full corpus, fresh from base."
  },
  {
   "id": "v4",
   "ollama_tag": "gemma3-4b-router-v4",
   "trained": {
    "end": "2026-09-15T02:32Z",
    "source": "train_v4.log (mtime)",
    "conflict": "The program notes and the training script's docstring date the run 2026-09-16; file timestamps (train log 09-15 02:32, bake summary 09-15 02:54) say 2026-09-15. Trust the file timestamps."
   },
   "base_model": "v3's adapter (continued, not fresh from base)",
   "corpus_examples": 59,
   "config": {
    "rank": 16,
    "alpha": 16,
    "rslora": false,
    "dropout": 0,
    "epochs": 8,
    "optimizer_steps": 64,
    "lr": 0.0002,
    "continued_from": "v3 adapter",
    "source": "train_v4.py:1-20,224-228; train_v4.log",
    "measured_on": "2026-09-15"
   },
   "training": {
    "train_loss": 0.0522,
    "peak_vram_mb": 4889,
    "runtime_s": 4778,
    "source": "train_v4.log",
    "measured_on": "2026-09-15"
   },
   "results": [
    {
     "test_set": 865,
     "passed": 717,
     "accuracy": 0.8289,
     "wall_clock_s": 1156.9,
     "source": "bake_v4_summary.json",
     "measured_on": "2026-09-15"
    },
    {
     "test_set": "the 790 cases v3 was scored on",
     "passed": 651,
     "total": 790,
     "accuracy": 0.8241,
     "vs_v3": -0.0734,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:876-878",
     "measured_on": "2026-09-15"
    },
    {
     "test_set": "790 subset",
     "per_capability": {
      "run_agent": 0.25,
      "resume_agent": 0.417,
      "dispatch_code": 0.524,
      "calendar_availability": 0.562,
      "clarify": 0.525,
      "gate_reject": 1.0,
      "dispatch_answer": 0.931
     },
     "before_v3": {
      "run_agent": "~1.0",
      "resume_agent": "0.86-1.0",
      "dispatch_code": "0.91-1.0",
      "calendar_availability": 1.0,
      "clarify": 0.604
     },
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:880-890",
     "measured_on": "2026-09-15"
    }
   ],
   "outcome": "Catastrophic forgetting. Capabilities the patch never touched collapsed to 25-56%. Never deployed.",
   "what_changed": "Incremental patch: only the 59 new or corrected examples, 8 epochs, continued from v3's adapter."
  },
  {
   "id": "v5",
   "alias": "marvin-v1.0",
   "ollama_tag": "gemma3-4b-router-v5",
   "trained": {
    "end": "2026-09-15T11:32Z",
    "source": "train_v5_relaunch_1789454375.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 757,
   "config": {
    "rank": 16,
    "alpha": 16,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 285,
    "lr": 0.0002,
    "source": "train.py:106-113,200-210; train_v5_relaunch_1789454375.log",
    "measured_on": "2026-09-15"
   },
   "training": {
    "train_loss": 0.0729,
    "peak_vram_mb": 5117,
    "kills_by_low_memory_monitor": 4,
    "note": "train_loss and runtime cover the last resumed segment",
    "source": "train_v5_relaunch_1789454375.log; LOCAL_LLM_PHASE2_ROADMAP.md:929-945",
    "measured_on": "2026-09-15"
   },
   "results": [
    {
     "test_set": 865,
     "passed": 772,
     "accuracy": 0.8925,
     "wall_clock_s": 1141.5,
     "source": "bake_v5_summary.json",
     "measured_on": "2026-09-15"
    },
    {
     "test_set": 865,
     "passed": 773,
     "accuracy": 0.8936,
     "s_per_case": 1.506,
     "quant": "Q8_0",
     "source": "bake_v5_q4vq8_summary.json:v5-q8_0-prod",
     "measured_on": "2026-09-16"
    },
    {
     "test_set": 865,
     "passed": 770,
     "accuracy": 0.8902,
     "s_per_case": 1.333,
     "source": "bake_v6wide_vs_v5_summary.json:v5-r16-prod",
     "measured_on": "2026-09-17"
    },
    {
     "test_set": "old 790 subset",
     "passed": 709,
     "total": 790,
     "accuracy": 0.8975,
     "note": "identical to v3 to the case",
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:956-959",
     "measured_on": "2026-09-15"
    },
    {
     "test_set": "75 cases new since v3",
     "passed": 63,
     "total": 75,
     "accuracy": 0.84,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:959",
     "measured_on": "2026-09-15"
    },
    {
     "test_set": 865,
     "held_out_accuracy": 0.849,
     "source": "router_ledger.html (version ledger)",
     "measured_on": "2026-09-18",
     "unverified": true,
     "note": "ledger-only. Recomputing from the bake progress file with today's train flags gives a different split (flags changed after 09-18), so this could not be reproduced."
    }
   ],
   "outcome": "Repaired v4's damage (run_agent, resume_agent, dispatch_code, calendar_availability all back to 100% on the 790 subset). Deployed 15 Sep.",
   "what_changed": "v4's 59 examples mixed into the full corpus and retrained fresh from base."
  },
  {
   "id": "v5-q4",
   "ollama_tag": "gemma3-4b-router-v5-q4",
   "base_model": "same merged weights as v5",
   "config": {
    "quant": "Q4_0",
    "gguf_size_gb": 2.37,
    "source": "bake_v5_q4vq8_summary.json; file size of gemma3-4b-router-v5.Q4_0.gguf",
    "measured_on": "2026-09-16"
   },
   "results": [
    {
     "test_set": 865,
     "passed": 745,
     "accuracy": 0.8613,
     "s_per_case": 1.278,
     "delta_vs_q8": -0.0323,
     "speed_ratio_vs_q8": 0.849,
     "source": "bake_v5_q4vq8_summary.json",
     "measured_on": "2026-09-16"
    }
   ],
   "outcome": "Rejected: -3.2 pp for ~15% speed. Q8_0 stays.",
   "what_changed": "Quantization only."
  },
  {
   "id": "v6-wide",
   "ollama_tag": "gemma3-4b-router-v6-wide",
   "trained": {
    "end": "2026-09-17T01:46Z",
    "source": "train_v6_wide_relaunch_1789585625.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 757,
   "config": {
    "rank": 64,
    "alpha": 64,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 285,
    "lr": 0.0002,
    "source": "train_v6_wide.py:105-112",
    "measured_on": "2026-09-17"
   },
   "training": {
    "train_loss": 0.1227,
    "peak_vram_mb": 5796,
    "runtime_s": 23944,
    "source": "train_v6_wide_relaunch_1789585625.log",
    "measured_on": "2026-09-17"
   },
   "results": [
    {
     "test_set": 865,
     "passed": 805,
     "accuracy": 0.9306,
     "s_per_case": 1.223,
     "source": "bake_v6wide_vs_v5_summary.json",
     "measured_on": "2026-09-17"
    },
    {
     "test_set": 865,
     "passed": 812,
     "accuracy": 0.9387,
     "s_per_case": 1.25,
     "source": "bake_v7r112_vs_v6wide_summary.json",
     "measured_on": "2026-09-18"
    },
    {
     "test_set": 865,
     "capability": "clarify",
     "accuracy_before": 0.521,
     "accuracy_after": 0.755,
     "n": 94,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:996-999",
     "measured_on": "2026-09-17"
    },
    {
     "test_set": 865,
     "held_out_accuracy": [
      0.855,
      0.882
     ],
     "source": "router_ledger.html (version ledger)",
     "measured_on": "2026-09-18",
     "unverified": true
    }
   ],
   "outcome": "+4.0 pp over v5 from rank alone. The two passes a day apart (93.1% / 93.9%) set the noise floor for this era.",
   "what_changed": "Rank 16 to 64 (alpha kept equal to rank). Same 757 examples, same recipe, fresh from base."
  },
  {
   "id": "v7",
   "alias": "marvin-v1.1",
   "ollama_tag": "gemma3-4b-router-v7-r112",
   "trained": {
    "end": "2026-09-17T23:06Z",
    "source": "train_v7_r112_relaunch_1789662150.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 757,
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 285,
    "lr": 0.0002,
    "source": "train_v7_r112.py:105-112",
    "measured_on": "2026-09-17"
   },
   "training": {
    "train_loss": 0.1251,
    "peak_vram_mb": 6647,
    "runtime_s": 24217,
    "source": "train_v7_r112_relaunch_1789662150.log",
    "measured_on": "2026-09-17"
   },
   "results": [
    {
     "test_set": 865,
     "passed": 816,
     "accuracy": 0.9434,
     "s_per_case_clean": 1.26,
     "s_per_case_raw": 1.707,
     "note": "raw speed polluted: first 253 cases ran split CPU/GPU",
     "source": "bake_v7r112_vs_v6wide_summary.json; LOCAL_LLM_PHASE2_ROADMAP.md:994,1021-1024",
     "measured_on": "2026-09-18"
    },
    {
     "test_set": 865,
     "per_capability": {
      "clarify": [
       0.745,
       0.851
      ],
      "context_setup_cases_n31": [
       0.968,
       0.871
      ]
     },
     "note": "v6-wide then v7; 27 cases fixed, 23 broken",
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1008-1013",
     "measured_on": "2026-09-18"
    },
    {
     "test_set": "1,021 runnable",
     "passed": 933,
     "accuracy": 0.9138,
     "held_out_passed": 76,
     "held_out_total": 91,
     "held_out_accuracy": 0.8352,
     "s_per_case": 1.269,
     "source": "bake_v9_vs_v11_summary.json:v1.1-r112-prod",
     "measured_on": "2026-09-19"
    },
    {
     "test_set": "1,036 raw (v8 era)",
     "passed": 906,
     "accuracy": 0.8745,
     "held_out_passed": 69,
     "held_out_total": 90,
     "s_per_case": 1.427,
     "source": "bake_v8r112_vs_v11_summary.json",
     "measured_on": "2026-09-18"
    },
    {
     "test_set": "108-case held-out slice, harness fixed",
     "passed": 92,
     "accuracy": 0.8519,
     "source": "bake_heldout_v9sweep_summary.json:v1.1",
     "measured_on": "2026-09-19"
    },
    {
     "test_set": 865,
     "train_flagged_accuracy": 0.963,
     "held_out_accuracy": 0.871,
     "source": "router_ledger.html (findings: the headline was mostly memorization)",
     "measured_on": "2026-09-18",
     "unverified": true
    }
   ],
   "outcome": "+0.5 pp over v6-wide, inside v6-wide's own day-to-day spread. Shipped 18 Sep, replaced by v9 on 19 Sep.",
   "what_changed": "Rank 64 to 112, the highest rank that fit on the 8 GB card."
  },
  {
   "id": "v8",
   "ollama_tag": "gemma3-4b-router-v8-r112",
   "trained": {
    "end": "2026-09-18T11:19Z",
    "source": "train_v8_r112_relaunch_1789695443.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1050,
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 396,
    "lr": 0.0002,
    "source": "train_v8_r112.py:105-112; train_v8_r112_relaunch_1789695443.log",
    "measured_on": "2026-09-18"
   },
   "training": {
    "train_loss": 0.1117,
    "peak_vram_mb": 6643,
    "runtime_s": 34881,
    "source": "train_v8_r112_relaunch_1789695443.log",
    "measured_on": "2026-09-18"
   },
   "results": [
    {
     "test_set": "1,036 raw",
     "passed": 920,
     "accuracy": 0.888,
     "held_out_passed": 71,
     "held_out_total": 90,
     "held_out_accuracy": 0.7889,
     "s_per_case": 1.249,
     "source": "bake_v8r112_vs_v11_summary.json:v8-r112-new",
     "measured_on": "2026-09-18"
    },
    {
     "test_set": "976 runnable",
     "accuracy": 0.943,
     "held_out_accuracy": 0.91,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1044; router_ledger.html",
     "measured_on": "2026-09-18",
     "inferred": true,
     "conflict": "The raw summary scores 88.8% on 1,036 because 60 disabled-capability cases count as failures. 920/976 = 94.3% matches the program notes, so the program notes number is the raw one with those 60 removed. The held-out 91.0% would need ~12 of the 60 to be held-out (71/78); not verifiable from the summary."
    },
    {
     "test_set": "976 runnable",
     "per_capability": {
      "gate_approve": [
       1.0,
       0.7
      ]
     },
     "guard_families_gain_pp": "19 to 50",
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1044; router_ledger.html",
     "measured_on": "2026-09-18"
    }
   ],
   "outcome": "Mixed, not deployed. Guards rose 19-50 pp, but four new clarify labels on bare confirmation words contradicted older gold and dropped gate_approve from 100% to 70%.",
   "what_changed": "Enriched corpus: 126 negative-guard cases given targets, setup context rendered into prompts (27 context cases had trained context-free), clarify-chain turns exported, 171 gold cases including the 9 capabilities that had zero examples."
  },
  {
   "id": "v9-step175",
   "ollama_tag": "gemma3-4b-router-v9-r112-ckpt175",
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1080,
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": false,
    "dropout": 0,
    "checkpoint_step": 175,
    "of_steps": 405,
    "selected_by": "lowest held-out eval loss (0.1306)",
    "source": "train_v9-r112_relaunch_1789754626.log",
    "measured_on": "2026-09-19"
   },
   "results": [
    {
     "test_set": "1,021 runnable",
     "passed": 884,
     "accuracy": 0.8658,
     "held_out_passed": 79,
     "held_out_total": 91,
     "held_out_accuracy": 0.8681,
     "s_per_case": 1.31,
     "source": "bake_v9_vs_v11_summary.json:v9-ckpt175-bestloss",
     "measured_on": "2026-09-19"
    },
    {
     "test_set": "108-case held-out slice, harness fixed",
     "passed": 96,
     "accuracy": 0.8889,
     "source": "bake_heldout_v9sweep_summary.json:ck175",
     "measured_on": "2026-09-19"
    }
   ],
   "outcome": "Rejected. Tied the final checkpoint on held-out, lost 6.5 pp overall. Eval loss on partial-argument targets does not select for accuracy.",
   "what_changed": "Same run as v9, earlier checkpoint."
  },
  {
   "id": "v9",
   "alias": "marvin-v1.2",
   "ollama_tag": "gemma3-4b-router-v9-r112",
   "trained": {
    "end": "2026-09-19T04:41Z",
    "source": "train_v9-r112_relaunch_1789754626.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1080,
   "eval_examples": 55,
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 405,
    "lr": 0.0002,
    "source": "train_v9-r112_relaunch_1789754626.log",
    "measured_on": "2026-09-19"
   },
   "training": {
    "train_loss": 0.1115,
    "peak_vram_mb": 6643,
    "runtime_s": 38218,
    "eval_loss_best": {
     "step": 175,
     "loss": 0.1306
    },
    "eval_loss_final": 0.1861,
    "source": "train_v9-r112_relaunch_1789754626.log",
    "measured_on": "2026-09-19"
   },
   "results": [
    {
     "test_set": "1,021 runnable",
     "passed": 950,
     "accuracy": 0.9305,
     "held_out_passed": 79,
     "held_out_total": 91,
     "held_out_accuracy": 0.8681,
     "s_per_case": 1.303,
     "source": "bake_v9_vs_v11_summary.json:v9-final",
     "measured_on": "2026-09-19"
    },
    {
     "test_set": "1,125, harness fixed",
     "passed": 1050,
     "accuracy": 0.9333,
     "held_out_passed": 99,
     "held_out_total": 108,
     "s_per_case": 1.264,
     "source": "bake_12b_vs_v12_summary.json:v1.2-prod",
     "measured_on": "2026-09-19"
    },
    {
     "test_set": "1,125, harness fixed",
     "passed": 1047,
     "accuracy": 0.9307,
     "held_out_passed": 99,
     "held_out_total": 108,
     "s_per_case": 1.34,
     "source": "bake_v10r64_vs_v12_summary.json:v1.2-prod",
     "measured_on": "2026-09-20"
    },
    {
     "test_set": "1,125, harness fixed",
     "passed": 1043,
     "accuracy": 0.9271,
     "held_out_passed": 100,
     "held_out_total": 108,
     "s_per_case": 1.332,
     "source": "bake_v11_vs_v12_summary.json:v1.2-prod",
     "measured_on": "2026-09-21"
    },
    {
     "test_set": "1,191 all-caps x3",
     "passed_per_run": [
      1098,
      1112,
      1112
     ],
     "accuracy_per_run": [
      0.9219,
      0.9337,
      0.9337
     ],
     "mean_accuracy": 0.9298,
     "spread_pp": 1.18,
     "held_out_passed_per_run": [
      111,
      112,
      111
     ],
     "held_out_total": 122,
     "source": "bake_allcaps_x3_summary.json:v1.2",
     "measured_on": "2026-09-21"
    },
    {
     "test_set": "174 guards",
     "passed": 167,
     "held_out_breaches": 1,
     "source": "bake_guards_baseline_summary.json:v1.2",
     "measured_on": "2026-09-22"
    },
    {
     "test_set": "1,021 runnable",
     "per_capability": {
      "gate_approve": 0.94,
      "dispatch_answer": 0.59,
      "guards": "0.96-1.0"
     },
     "fixed_vs_v7": 45,
     "broke_vs_v7": 28,
     "source": "router_ledger.html; LOCAL_LLM_PHASE2_ROADMAP.md:1046",
     "measured_on": "2026-09-19"
    }
   ],
   "outcome": "Deployed 19 Sep. First fine-tune to beat the untuned 12B on held-out once the harness was fixed (91.7% vs 88.9%).",
   "what_changed": "v8's corpus with the conflicting labels removed and 35 counterweight cases added; held-out eval loss logged every 25 steps, every checkpoint kept."
  },
  {
   "id": "v10-r64",
   "ollama_tag": "gemma3-4b-router-v10-r64",
   "trained": {
    "end": "2026-09-20T06:03Z",
    "source": "train_v10-r64_relaunch_1789846500.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1080,
   "config": {
    "rank": 64,
    "alpha": 64,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 405,
    "lr": 0.0002,
    "source": "train_v10-r64_relaunch_1789846500.log",
    "measured_on": "2026-09-20"
   },
   "training": {
    "train_loss": 0.1103,
    "peak_vram_mb": 5767,
    "runtime_s": 37684,
    "eval_loss_best": {
     "step": 125,
     "loss": 0.1372
    },
    "eval_loss_final": 0.1839,
    "source": "train_v10-r64_relaunch_1789846500.log",
    "measured_on": "2026-09-20"
   },
   "results": [
    {
     "test_set": "1,125, harness fixed",
     "passed": 1031,
     "accuracy": 0.9164,
     "held_out_passed": 98,
     "held_out_total": 108,
     "held_out_accuracy": 0.9074,
     "s_per_case": 1.224,
     "source": "bake_v10r64_vs_v12_summary.json:v10-r64-final",
     "measured_on": "2026-09-20"
    },
    {
     "test_set": "1,125, harness fixed",
     "capability": "clarify",
     "accuracy": 0.73,
     "rank112_same_data": 0.86,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1061-1062",
     "measured_on": "2026-09-20"
    }
   ],
   "outcome": "-1.4 pp vs v9 at rank 112 on the same data; clarify 86% to 73%. Rank 112 stays.",
   "what_changed": "v9's exact data and recipe at rank 64. Rank the only variable."
  },
  {
   "id": "v11",
   "alias": "marvin-v1.3 (25 Sep 06:42 to 08:10 UTC, then re-pointed to v17)",
   "ollama_tag": "gemma3-4b-router-v11-r112",
   "trained": {
    "start": "2026-09-20T13:27Z",
    "end": "2026-09-21T01:18Z",
    "source": "train_v11-r112_relaunch_1789910846.log (name timestamp, mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1167,
   "eval_examples": 72,
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 438,
    "lr": 0.0002,
    "source": "train_v11-r112_relaunch_1789910846.log",
    "measured_on": "2026-09-21"
   },
   "training": {
    "train_loss": 0.1073,
    "peak_vram_mb": 6648,
    "runtime_s": 42633,
    "eval_loss_best": {
     "step": 75,
     "loss": 0.2727
    },
    "eval_loss_final": 0.3997,
    "source": "train_v11-r112_relaunch_1789910846.log",
    "measured_on": "2026-09-21"
   },
   "results": [
    {
     "test_set": "1,125, harness fixed",
     "passed": 1084,
     "accuracy": 0.9636,
     "held_out_passed": 104,
     "held_out_total": 108,
     "s_per_case": 1.245,
     "source": "bake_v11_vs_v12_summary.json:v11-r112-final",
     "measured_on": "2026-09-21"
    },
    {
     "test_set": "1,131",
     "passes": [
      {
       "passed": 1090,
       "held_out": "108/110",
       "source": "bake_v11_schema_off_summary.json",
       "measured_on": "2026-09-21"
      },
      {
       "passed": 1090,
       "held_out": "108/110",
       "source": "bake_v12e2_vs_v11_summary.json:v11",
       "measured_on": "2026-09-21"
      },
      {
       "passed": 1091,
       "held_out": "108/110",
       "source": "bake_v11avg_vs_v11_summary.json:v11",
       "measured_on": "2026-09-21"
      },
      {
       "passed": 1090,
       "held_out": "108/110",
       "source": "bake_v13_vs_v11_summary.json:v11",
       "measured_on": "2026-09-22"
      },
      {
       "passed": 1090,
       "held_out": "107/110",
       "source": "bake_v15_vs_v13_summary.json:v11",
       "measured_on": "2026-09-23"
      }
     ],
     "accuracy_range": [
      0.9637,
      0.9646
     ],
     "train_flagged_accuracy": 0.9618,
     "held_out_accuracy": 0.9818
    },
    {
     "test_set": "1,191 all-caps x3",
     "passed_per_run": [
      1145,
      1144,
      1145
     ],
     "mean_accuracy": 0.9611,
     "spread_pp": 0.09,
     "held_out_per_run": "117/122 each",
     "source": "bake_allcaps_x3_summary.json:v11",
     "measured_on": "2026-09-21"
    },
    {
     "test_set": "1,148 (v16 manifest)",
     "passed": 1101,
     "accuracy": 0.9591,
     "held_out_passed": 379,
     "held_out_total": 399,
     "s_per_case": 1.194,
     "source": "bake_v16.log",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "82 cases held out from both v11 and v16",
     "accuracy": 0.963,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1333-1335",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "317 cases v11 trained on and v16 did not",
     "accuracy": 0.946,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1335",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "1,275 expanded",
     "passed": 1212,
     "accuracy": 0.9506,
     "held_out_passed": 490,
     "held_out_total": 526,
     "s_per_case": 1.197,
     "source": "bake_expanded_summary.json:v11",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "1,275 (v17 bake)",
     "passed": 1211,
     "accuracy": 0.9498,
     "held_out_passed": 222,
     "held_out_total": 237,
     "s_per_case": 1.187,
     "fair_slice": "93/100",
     "source": "bake_v17.log; v17_decision.txt",
     "measured_on": "2026-09-25"
    },
    {
     "test_set": "174 guards",
     "passed": 169,
     "held_out_breaches": 1,
     "source": "bake_guards_baseline_summary.json:v11",
     "measured_on": "2026-09-22"
    },
    {
     "test_set": "181 guards",
     "passed": 172,
     "held_out_breaches": 1,
     "source": "bake_guards_v16_summary.json:v11",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "267 guards",
     "passes": [
      {
       "passed": 250,
       "held_out_breaches": 5,
       "source": "bake_guards_expanded_summary.json:v11",
       "measured_on": "2026-09-24"
      },
      {
       "passed": 247,
       "held_out_breaches": 4,
       "source": "bake_guards_v17_summary.json:v11",
       "measured_on": "2026-09-25"
      },
      {
       "passed": 250,
       "held_out_breaches": 5,
       "source": "bake_guards_recheck_v11_1_summary.json",
       "measured_on": "2026-09-25"
      },
      {
       "passed": 250,
       "held_out_breaches": 5,
       "source": "bake_guards_recheck_v11_2_summary.json",
       "measured_on": "2026-09-25"
      },
      {
       "passed": 250,
       "held_out_breaches": 5,
       "source": "bake_guards_recheck_v11_3_summary.json",
       "measured_on": "2026-09-25"
      }
     ],
     "breach_categories_in_rechecks": "3 of 5 held-out breaches involve pasted or quoted content; 1 vague phrasing; 1 session-capability"
    },
    {
     "test_set": "1,125-1,131",
     "per_capability_changes": {
      "compound": [
       0.11,
       0.89
      ],
      "correct_last": [
       0.0,
       1.0
      ],
      "gate_reject": [
       0.88,
       0.98
      ],
      "guard:open_folder": [
       1.0,
       0.88
      ]
     },
     "note": "vs marvin-v1.2; open_folder guard n=8",
     "source": "router_ledger.html (version ledger)",
     "measured_on": "2026-09-21"
    },
    {
     "test_set": "10 pooled passes",
     "lowest_capabilities": {
      "gate_approve": {
       "accuracy": 0.766,
       "ci": [
        0.719,
        0.807
       ],
       "cases": 35
      },
      "clarify": {
       "accuracy": 0.827,
       "ci": [
        0.801,
        0.849
       ],
       "cases": 98
      },
      "explain_issue": {
       "accuracy": 0.855,
       "cases": 11
      },
      "compound": {
       "accuracy": 0.906,
       "cases": 18
      }
     },
     "source": "capability_intervals_v11.json",
     "measured_on": "2026-09-22"
    }
   ],
   "outcome": "Best and most stable accuracy of the program. Won the accuracy rule against six challengers (v12, v13, v15, v16, v17 and both averages). Released as marvin-v1.3, then replaced the same morning by v17 on guard behaviour.",
   "what_changed": "Corpus 1,167: new compound and correct_last capabilities, 121 context cases, clarify chains, 40 dispatch_answer positives."
  },
  {
   "id": "v12-e2",
   "ollama_tag": "gemma3-4b-router-v12-r112-e2",
   "trained": {
    "end": "2026-09-21T14:55Z",
    "source": "train_v12-r112-e2_relaunch_1789974074.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1167,
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": false,
    "dropout": 0,
    "epochs": 2,
    "optimizer_steps": 292,
    "lr": 0.0002,
    "source": "train_v12-r112-e2_relaunch_1789974074.log",
    "measured_on": "2026-09-21"
   },
   "training": {
    "train_loss": 0.1417,
    "peak_vram_mb": 6648,
    "runtime_s": 28440,
    "eval_loss_best": {
     "step": 125,
     "loss": 0.2589
    },
    "eval_loss_final": 0.2934,
    "source": "train_v12-r112-e2_relaunch_1789974074.log",
    "measured_on": "2026-09-21"
   },
   "results": [
    {
     "test_set": "1,131",
     "passed": 1081,
     "accuracy": 0.9558,
     "held_out_passed": 104,
     "held_out_total": 110,
     "s_per_case": 1.236,
     "broke_vs_v11": 26,
     "fixed_vs_v11": 17,
     "source": "bake_v12e2_vs_v11_summary.json; LOCAL_LLM_PHASE2_ROADMAP.md:1194-1196",
     "measured_on": "2026-09-21"
    }
   ],
   "outcome": "-0.8 pp and -4 held-out cases vs v11, mostly clarify (wrong answers went to converse). Lowest final eval loss of any run, and still worse. Three epochs stays.",
   "what_changed": "v11's exact data and recipe at 2 epochs. Epochs the only variable."
  },
  {
   "id": "v11+grammar",
   "ollama_tag": "gemma3-4b-router-v11-r112 (same weights)",
   "config": {
    "change": "Ollama structured output: JSON schema with a capability enum enforced at decode time",
    "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1181-1186",
    "measured_on": "2026-09-21"
   },
   "results": [
    {
     "attempt": "first (enum missing a router-hidden capability)",
     "test_set": "1,125",
     "passed": 1077,
     "accuracy": 0.9573,
     "held_out_passed": 103,
     "held_out_total": 108,
     "s_per_case": 1.287,
     "note": "10 cases broke, 8 of them the hidden capability forced to clarify",
     "source": "bake_v11_schema_on_summary.json; LOCAL_LLM_PHASE2_ROADMAP.md:1182-1184",
     "measured_on": "2026-09-21"
    },
    {
     "attempt": "fixed enum",
     "test_set": "1,131",
     "passed": 1092,
     "accuracy": 0.9655,
     "held_out_passed": 108,
     "held_out_total": 110,
     "s_per_case": 1.266,
     "unparseable_outputs": [
      3,
      1
     ],
     "broke": 1,
     "fixed": 3,
     "source": "bake_v11_schema_on_fixed_summary.json; LOCAL_LLM_PHASE2_ROADMAP.md:1199-1201",
     "measured_on": "2026-09-21"
    }
   ],
   "outcome": "+0.1 pp once the enum was correct. Turned on in production with the 25 Sep release.",
   "what_changed": "Decoding only."
  },
  {
   "id": "v11-avg",
   "ollama_tag": "gemma3-4b-router-v11-avg",
   "config": {
    "method": "exact mean of v11 checkpoints 300, 325, 350, 375, 400, 425, 438 by concatenating LoRA A and B along the rank axis (r = 7 x 112, alpha unchanged)",
    "source": "average_checkpoints.py; rslora_chain2.sh header",
    "measured_on": "2026-09-21"
   },
   "results": [
    {
     "test_set": "1,131",
     "passed": 1096,
     "accuracy": 0.9691,
     "held_out_passed": 108,
     "held_out_total": 110,
     "s_per_case": 1.235,
     "source": "bake_v11avg_vs_v11_summary.json:v11avg",
     "measured_on": "2026-09-21"
    },
    {
     "test_set": "1,131",
     "passed": 1090,
     "accuracy": 0.9637,
     "held_out_passed": 108,
     "held_out_total": 110,
     "s_per_case": 3.615,
     "note": "speed contention-affected",
     "source": "bake_v13avg_vs_v11avg_summary.json:v11avg",
     "measured_on": "2026-09-22"
    }
   ],
   "outcome": "Noise: +0.4 pp on the first bake, +0.0 on the second; held-out identical both times.",
   "what_changed": "No training; weight averaging only."
  },
  {
   "id": "v13-rslora-a112 (killed)",
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": true,
    "effective_scale": 10.6,
    "dropout": 0,
    "lr": 0.0002,
    "source": "train_v13-r112-rslora_relaunch_1790010768.log; rslora_chain2.sh header",
    "measured_on": "2026-09-21"
   },
   "training": {
    "eval_loss_step25": 0.5734,
    "eval_loss_step50": 0.577,
    "v11_eval_loss_same_steps": [
     0.35,
     0.33
    ],
    "train_loss_peak": 3.85,
    "source": "train_v13-r112-rslora_relaunch_1790010768.log (step 25, loss peak); LOCAL_LLM_PHASE2_ROADMAP.md:1212-1214 (step 50)",
    "measured_on": "2026-09-21"
   },
   "outcome": "Killed early. Eval loss flatlined; scale 10.6 is too hot at lr 2e-4.",
   "what_changed": "rsLoRA with alpha left equal to rank."
  },
  {
   "id": "v13",
   "ollama_tag": "gemma3-4b-router-v13-r112-rslora-a32",
   "trained": {
    "end": "2026-09-22T06:35Z",
    "source": "train_v13-r112-rslora-a32_relaunch_1790015912.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1172,
   "eval_examples": 74,
   "config": {
    "rank": 112,
    "alpha": 32,
    "rslora": true,
    "effective_scale": 3.02,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 441,
    "lr": 0.0002,
    "source": "train_v13-r112-rslora-a32_relaunch_1790015912.log; v15_r96_chain.sh header",
    "measured_on": "2026-09-22"
   },
   "training": {
    "train_loss": 0.1246,
    "peak_vram_mb": 6653,
    "runtime_s": 42946,
    "eval_loss_best": {
     "step": 100,
     "loss": 0.2519
    },
    "eval_loss_final": 0.3497,
    "source": "train_v13-r112-rslora-a32_relaunch_1790015912.log",
    "measured_on": "2026-09-22"
   },
   "results": [
    {
     "test_set": "1,131",
     "passed": 1103,
     "accuracy": 0.9752,
     "train_flagged_accuracy": 0.9794,
     "held_out_passed": 103,
     "held_out_total": 110,
     "s_per_case": 1.238,
     "source": "bake_v13_vs_v11_summary.json:v13",
     "measured_on": "2026-09-22"
    },
    {
     "test_set": "1,131",
     "passed": 1104,
     "accuracy": 0.9761,
     "held_out_passed": 103,
     "held_out_total": 110,
     "source": "bake_v13avg_vs_v11avg_summary.json:v13",
     "measured_on": "2026-09-22"
    },
    {
     "test_set": "1,131",
     "fixed_vs_v11": 29,
     "broke_vs_v11": 16,
     "gains": {
      "gate_approve": 9,
      "clarify": 9,
      "dispatch_answer": 3
     },
     "unparseable_outputs": [
      3,
      1
     ],
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1220-1221",
     "measured_on": "2026-09-22"
    },
    {
     "test_set": "174 guards",
     "passed": 168,
     "held_out_breaches": 3,
     "breach_categories": "2 of 3 involve pasted or quoted content; 1 is an argument confusion between two knowledge capabilities",
     "source": "bake_guards_baseline_summary.json:v13",
     "measured_on": "2026-09-22"
    }
   ],
   "outcome": "Rejected. Highest overall number of the program, but every gained case was train-flagged and it lost held-out safety guards v11 passes.",
   "what_changed": "rsLoRA at alpha 32 on the 21 Sep corpus (1,172 examples: 6 new two-turn-back context cases, 2 label fixes, 18 conflicts excluded)."
  },
  {
   "id": "v13-avg",
   "ollama_tag": "gemma3-4b-router-v13-avg",
   "config": {
    "method": "exact checkpoint mean, with B scaled by a further 1/sqrt(n) because rsLoRA scales by alpha/sqrt(r)",
    "source": "average_checkpoints.py:23-31",
    "measured_on": "2026-09-22"
   },
   "results": [
    {
     "test_set": "1,131",
     "passed": 1099,
     "accuracy": 0.9717,
     "held_out_passed": 102,
     "held_out_total": 110,
     "source": "bake_v13avg_vs_v11avg_summary.json:v13avg",
     "measured_on": "2026-09-22"
    }
   ],
   "outcome": "-0.4 pp vs v13 with one more held-out miss. Did not recover the guard losses.",
   "what_changed": "No training; weight averaging only."
  },
  {
   "id": "v13-ck225",
   "ollama_tag": "gemma3-4b-router-v13-ck225",
   "config": {
    "checkpoint_step": 225,
    "of_steps": 441,
    "dropout": 0,
    "note": "about 1.5 epochs; control arm of the dropout A/B",
    "source": "ck225_dropout_ab.sh; LOCAL_LLM_PHASE2_ROADMAP.md:1270-1273",
    "measured_on": "2026-09-23"
   },
   "results": [
    {
     "test_set": "1,131",
     "passed": 948,
     "accuracy": 0.8382,
     "train_flagged_accuracy": 0.8394,
     "held_out_passed": 91,
     "held_out_total": 110,
     "source": "bake_dropout_ab_ck225_summary.json:nodrop",
     "measured_on": "2026-09-23"
    },
    {
     "test_set": "174 guards",
     "passed": 148,
     "held_out_breaches": 10,
     "source": "bake_guards_dropout_ab_summary.json:nodrop",
     "measured_on": "2026-09-23"
    }
   ],
   "outcome": "Only the delta to v14-ck225 means anything; absolute scores are for a half-trained model.",
   "what_changed": "Mid-run checkpoint."
  },
  {
   "id": "v14",
   "ollama_tag": "gemma3-4b-router-v14-ck225 (only the step-225 checkpoint was deployed)",
   "trained": {
    "attempts": [
     "2026-09-22T20:16Z",
     "2026-09-23T01:23Z",
     "2026-09-23T03:06Z"
    ],
    "source": "train_v14-r112-drop10_relaunch_*.log (name timestamps)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1172,
   "config": {
    "rank": 112,
    "alpha": 32,
    "rslora": true,
    "dropout": 0.1,
    "epochs": 3,
    "planned_steps": 441,
    "lr": 0.0002,
    "source": "train_v14-r112-drop10_relaunch_1790108172.log",
    "measured_on": "2026-09-23"
   },
   "training": {
    "died_at_steps": [
     184,
     236,
     239
    ],
    "causes": [
     "CUDA illegal memory access (Xid 31 MMU fault per the program notes)",
     "CUDA OOM, 6.98 GiB allocated + 394 MiB reserved of 7.65 GiB",
     "CUDA OOM, 6.90 GiB allocated + 457 MiB reserved"
    ],
    "source": "train_v14-r112-drop10_relaunch_1790108172.log, _1790126592.log, _1790132778.log; LOCAL_LLM_PHASE2_ROADMAP.md:1260-1262",
    "measured_on": "2026-09-23"
   },
   "results": [
    {
     "checkpoint": 225,
     "test_set": "1,131",
     "passed": 984,
     "accuracy": 0.87,
     "train_flagged_accuracy": 0.8766,
     "held_out_passed": 89,
     "held_out_total": 110,
     "s_per_case": 1.22,
     "source": "bake_dropout_ab_ck225_summary.json:drop10",
     "measured_on": "2026-09-23"
    },
    {
     "checkpoint": 225,
     "test_set": "174 guards",
     "passed": 157,
     "held_out_breaches": 7,
     "source": "bake_guards_dropout_ab_summary.json:drop10",
     "measured_on": "2026-09-23"
    }
   ],
   "outcome": "Would not fit at rank 112. At equal steps dropout added 3.2 pp, all on train-flagged cases, and widened the train-to-held-out gap from 1.2 to 6.8 pp. Guards improved 148 to 157.",
   "what_changed": "v13's recipe plus LoRA dropout 0.1."
  },
  {
   "id": "v15",
   "ollama_tag": "gemma3-4b-router-v15-r96-drop10",
   "trained": {
    "end": "2026-09-23T17:51Z",
    "source": "train_v15-r96-drop10_relaunch_1790142410.log (mtime)"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1172,
   "config": {
    "rank": 96,
    "alpha": 30,
    "rslora": true,
    "effective_scale": 3.06,
    "dropout": 0.1,
    "epochs": 3,
    "optimizer_steps": 441,
    "lr": 0.0002,
    "source": "train_v15-r96-drop10_relaunch_1790142410.log; v15_r96_chain.sh:12-13",
    "measured_on": "2026-09-23"
   },
   "training": {
    "train_loss": 0.1218,
    "peak_vram_mb": 6629,
    "predicted_peak_mb": 6793,
    "runtime_s": 43420,
    "eval_loss_best": {
     "step": 300,
     "loss": 0.2499
    },
    "eval_loss_final": 0.3385,
    "source": "train_v15-r96-drop10_relaunch_1790142410.log; v15_r96_chain.sh:5-9",
    "measured_on": "2026-09-23"
   },
   "results": [
    {
     "test_set": "1,131",
     "passed": 1095,
     "accuracy": 0.9682,
     "train_flagged_accuracy": 0.9706,
     "held_out_passed": 104,
     "held_out_total": 110,
     "s_per_case": 1.269,
     "source": "bake_v15_vs_v13_summary.json:v15",
     "measured_on": "2026-09-23"
    },
    {
     "test_set": "174 guards",
     "passed": 165,
     "held_out_breaches": 4,
     "breach_categories": "3 of 4 involve pasted or quoted content",
     "source": "bake_guards_v15_summary.json",
     "measured_on": "2026-09-23"
    }
   ],
   "outcome": "Vetoed on guards. Dropout bought one held-out case over v13 and cost 0.7 pp overall. Closed the rsLoRA branch.",
   "what_changed": "Rank 112 to 96 to pay for dropout's memory; alpha 30 to hold rsLoRA's effective scale near v13's."
  },
  {
   "id": "v16",
   "ollama_tag": "gemma3-4b-router-v16-disjoint",
   "trained": {
    "start": "2026-09-23T22:18Z",
    "end": "2026-09-24T07:12Z",
    "source": "train_v16-r112-disjoint_relaunch_1790201901.log"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 873,
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 330,
    "lr": 0.0002,
    "holdout": "273-case stratified slice (25%) plus 58 cases dropped because a deterministic pre-router step now answers them",
    "source": "train_v16-r112-disjoint_relaunch_1790201901.log; holdout-manifest-expanded.json (frac, stratified, backstop_covered)",
    "measured_on": "2026-09-24"
   },
   "training": {
    "train_loss": 0.1316,
    "peak_vram_mb": 6653,
    "runtime_s": 32031,
    "eval_loss_best": {
     "step": 100,
     "loss": 0.2603
    },
    "eval_loss_final": 0.3877,
    "source": "train_v16-r112-disjoint_relaunch_1790201901.log",
    "measured_on": "2026-09-24"
   },
   "results": [
    {
     "test_set": "1,148",
     "passed": 1035,
     "accuracy": 0.9016,
     "held_out_passed": 334,
     "held_out_total": 399,
     "s_per_case": 1.195,
     "source": "bake_v16.log",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "82 cases held out from both v11 and v16",
     "accuracy": 0.878,
     "v11_accuracy": 0.963,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1333-1334",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "317 cases v11 trained on and v16 did not",
     "accuracy": 0.826,
     "v11_accuracy": 0.946,
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1335",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "1,275 expanded",
     "passed": 1139,
     "accuracy": 0.8933,
     "held_out_passed": 439,
     "held_out_total": 526,
     "s_per_case": 4.231,
     "note": "speed contention-affected",
     "source": "bake_expanded_summary.json:v16",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "181 guards",
     "passed": 173,
     "held_out_breaches": 2,
     "note": "the extra breach is a session-capability case that did not exist when v16's corpus was exported",
     "source": "bake_guards_v16_summary.json; LOCAL_LLM_PHASE2_ROADMAP.md:1346-1348",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "267 guards",
     "passed": 253,
     "held_out_breaches": 5,
     "source": "bake_guards_expanded_summary.json:v16",
     "measured_on": "2026-09-24"
    },
    {
     "test_set": "127 never-seen cases by group",
     "groups": {
      "all_127": {
       "v11": 0.874,
       "v16": 0.843
      },
      "adversarial_guards_62": {
       "v11": 0.855,
       "v16": 0.903
      },
      "guard_counterweights_24": {
       "v11": 0.833,
       "v16": 0.667
      },
      "session_injection_guards_16": {
       "v11": 1.0,
       "v16": 1.0
      },
      "session_paraphrases_and_discriminators_25": {
       "v11": 0.88,
       "v16": 0.76
      }
     },
     "source": "LOCAL_LLM_PHASE2_ROADMAP.md:1356-1362",
     "measured_on": "2026-09-24"
    }
   ],
   "outcome": "-8.5 pp on the fair slice vs v11. Disproved its own premise: v11's headline was not inflated by memorization.",
   "what_changed": "v11's recipe on a disjoint corpus with a quarter of the gold set held back."
  },
  {
   "id": "v17",
   "alias": "marvin-v1.3 (production from 2026-09-25 08:10 UTC)",
   "ollama_tag": "gemma3-4b-router-v17-full",
   "trained": {
    "start": "2026-09-24T17:10Z",
    "end": "2026-09-25T05:38Z",
    "source": "train_v17-r112-full_relaunch_1790269813.log"
   },
   "base_model": "unsloth/gemma-3-4b-it",
   "corpus_examples": 1189,
   "eval_examples": 78,
   "config": {
    "rank": 112,
    "alpha": 112,
    "rslora": false,
    "dropout": 0,
    "epochs": 3,
    "optimizer_steps": 447,
    "lr": 0.0002,
    "holdout": "about 10%",
    "source": "train_v17-r112-full_relaunch_1790269813.log; v17_final_chain.sh:1-6",
    "measured_on": "2026-09-25"
   },
   "training": {
    "train_loss": 0.1105,
    "peak_vram_mb": 6658,
    "runtime_s": 44847,
    "eval_loss_best": {
     "step": 100,
     "loss": 0.2526
    },
    "eval_loss_final": 0.4378,
    "source": "train_v17-r112-full_relaunch_1790269813.log",
    "measured_on": "2026-09-25"
   },
   "results": [
    {
     "test_set": "1,275",
     "passed": 1214,
     "accuracy": 0.9522,
     "train_flagged_accuracy": 0.9653,
     "held_out_passed": 212,
     "held_out_total": 237,
     "s_per_case": 1.174,
     "source": "bake_v17.log; bake_v17_final_summary.json",
     "measured_on": "2026-09-25"
    },
    {
     "test_set": "fair slice, 100 cases neither v11 nor v17 saw",
     "passed": 90,
     "accuracy": 0.9,
     "v11_passed": 93,
     "source": "v17_decision.txt",
     "measured_on": "2026-09-25"
    },
    {
     "test_set": "267 guards",
     "passes": [
      {
       "passed": 257,
       "held_out_breaches": 1,
       "source": "bake_guards_v17_summary.json:v17",
       "measured_on": "2026-09-25"
      },
      {
       "passed": 256,
       "held_out_breaches": 4,
       "source": "bake_guards_recheck_v17_1_summary.json",
       "measured_on": "2026-09-25"
      },
      {
       "passed": 256,
       "held_out_breaches": 4,
       "source": "bake_guards_recheck_v17_2_summary.json",
       "measured_on": "2026-09-25"
      },
      {
       "passed": 256,
       "held_out_breaches": 4,
       "source": "bake_guards_recheck_v17_3_summary.json",
       "measured_on": "2026-09-25"
      }
     ],
     "breach_categories_in_rechecks": "2 of 4 held-out breaches involve pasted or quoted content; 1 vague phrasing; 1 session-capability"
    }
   ],
   "outcome": "Lost the pre-agreed fair-slice rule by 3 cases (90 vs 93), so the scripted decision picked v11. Then chosen deliberately for guards: 256/267 vs 250/267 over three repeated passes. Live as marvin-v1.3 from 25 Sep.",
   "what_changed": "v11's exact recipe on the largest corpus: 86 adversarial guards, 41 session-capability cases, 33 guard training targets and 6 conflict rulings added."
  }
 ]
}
