id: fc7d006446d848508e1cc6ca6056dab8
parent_id: 3f5e1070b921452694745d640fd2f4d9
item_type: 1
item_id: ec1518e71453490f8fe5ab75cff7180c
item_updated_time: 1786861645263
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"08-1\"],[-1,\"5/16 overnight\"],[1,\"6 midday\"],[0,\" — E\"]],\"start1\":29,\"start2\":29,\"length1\":22,\"length2\":16},{\"diffs\":[[0,\"uityNet \"],[-1,\"build\"],[1,\"iteration 2\"],[0,\")\\\n\\\n> **L\"]],\"start1\":46,\"start2\":46,\"length1\":21,\"length2\":27},{\"diffs\":[[0,\" G51\"],[-1,\" (G48 + RangeNet v17 + corrector + eq_cc gate), persistent server.** Overnight: EquityNet (idea #1) phases 1-5 implemented; data\"],[1,\", persistent server (idle).** EquityNet in training-iteration loop; v6.1 corpus\"],[0,\" col\"]],\"start1\":77,\"start2\":77,\"length1\":136,\"length2\":87},{\"diffs\":[[0,\"ecti\"],[-1,\"o\"],[0,\"n\"],[1,\"g\"],[0,\" + \"],[-1,\"first training running autonomously.\\\n\\\n## EquityNet progress (idea #1) — commits 1190941, 9b95def, 55a01ad, 785986f, adc3d15\\\n\\\n**Implemented (all tested, 532 lib tests):**\\\n- `gen5/equity_recorder.rs`: decision-context tap in build_ranges_and_equity (post-corrector ranges; zero-overhead atomic flag; EQUITY_RECORDER_PATH env) + exact-enumeration labels at cards_revealed_event (flop 990/turn 44/river 1 runouts vs actual holdings; split-adjusted equity; ppot/npot/nutpot/rpot same enumeration) + JSONL (per-hand flush; compact floats 26KB→9.5KB)\\\n- `gen5/equity_net.rs`: permutation-invariant net — shared per-opponent encoder 169→128→64, mean‖max pool, trunk 497→512 residual →256, 5 sigmoid heads. 4 tests incl. permut\"],[1,\"equity_v5 training autonomously (persistent bgp_0093d6f85).\\\n\\\n## Overnight results (equity_v1-v4)\\\n\\\n**v1/v2 (natural sampling):** MW MAE 0.094-0.098, HU 0.34-0.36 — HU catastrophically bad. **Root cause 1**: corpus is 86.5% n=7-8 (loose pool keeps everyone in), only 1% HU → model ignored count feature, predicted global mean.\\\n\\\n**v3 (full equalization + fixed LR-schedule bug):** WORSE (0.374/0.108). Two sub-causes: (a) 59x HU oversample overfits 29k samples; (b) natural-distribution val checkpoint selection never saved anything after epoch-1 batch 4000 — learning HU raises natural val MAE, so \\\"best\\\" stayed an untrained snapshot.\\\n\\\n**v4 (sqrt weighting, working schedule, 6 epochs):** 0.0985 natural, slope 0.82 — best label-fit model.\\\n\\\n## Shadow valid\"],[0,\"ation \"],[1,\"f\"],[0,\"in\"],[-1,\"variance\\\n- `bin/train_gen5_equity.rs`: convert (JSONL→binary, 2% hash val split) + train (n_opp-bucketed batches, warmup+cosine, per-head MAE + calibration slope, best checkpoint). GPU smoke-tested end-to-end\"],[1,\"dings (the decisive diagnostic)\\\n\\\n- **Label-noise floor discovery**: labels (equity vs actual holdings) are bimodal — river HU is 0/0.5/1 realizations. Bayes-optimal MAE for HU ≈ 0.3; the \\\"MAE ≤ 0.03 HU\\\" gate was mis-specified for label comparison. The conditional mean of these labels IS equity-vs-range (= what MC computes). Correct gate: NN-vs-MC divergence.\"],[0,\"\\\n- **\"],[-1,\"S\"],[1,\"v4 s\"],[0,\"hadow \"],[-1,\"mode**: Gen48Config `equity_net_path` + `equity_nn_enabled` (default false=shadow log-only; true=replace MC). Shadow log via EQUITY_SHADOW_LOG env; `cash_nl_g52.toml` ready\\\n- Tooling: `scripts/equity_shadow_run.sh` (turnkey shadow sim vs 8 g51-Tag) + `equity_shadow_analyze.py` (per-head MAE, HU/MW split, calibration slope, gate verdicts)\\\n\\\n**Running overnight (persistent background processes):**\\\n1. Collection: 8 tables, g51 pipeline all seats (v17+corrector+eq_cc — train/infer match), neutral g51_*_nn pool → `/home/jan/gen5_data/equity_v6` (~10.4M samples cap, ~500/s; done ~03:00)\\\n2. Pipeline (`/tmp/kilo/overnight_equity_pipeline.sh`): waits for\"],[1,\"(fish field, 6612 decisions)**: river MAE 0.034 (gate-quality!), turn 0.078, **flop 0.155** with extreme 0.0-vs-0.57 divergences on monotone boards.\\\n- **Root cause 2 (architectural)**: folding combo-level ranges to 169 types discards suit/blocker info — on heart-heavy boards the NN can't see whether a type's weight is on heart combos. River unaffected (no corrector suit dynamics left), flop worst.\\\n\\\n## Fix in flight (v6.1, commit ac4e836)\\\n\\\n- Recorder now stores per-range **suit profiles** (4 floats: combo-weight share per suit) — captures corrector's board-suit concentration.\\\n- Encoder input 169+4=173; binary format v2; backward-compatible with v6.0 corpora (uniform default).\\\n- Trainer fixes: LR schedule spans actual weighted pool; sqrt bucket weighting; balanced (HU+MW)/2 checkpoint metric.\\\n- **Running**: 8-table\"],[0,\" col\"]],\"start1\":165,\"start2\":165,\"length1\":1610,\"length2\":1975},{\"diffs\":[[0,\" 3M \"],[-1,\"cap \"],[0,\"→ tr\"]],\"start1\":2157,\"start2\":2157,\"length1\":12,\"length2\":8},{\"diffs\":[[0,\"ty_v\"],[-1,\"1 (4\"],[1,\"5 (8\"],[0,\" epochs\"],[-1,\", bs 512, lr 5e-4) → `models/equity_v1.safetensors` (log: equity_v6/overnight_pipeline.log)\\\n\\\n**Acceptance gates (plan):** hs MAE ≤0.03 HU / ≤0.045 MW, slope 0.9-1.1; then shadow run (≥1M decisions); then g52 A/B + sanity gates (use the new sanity-gate command: fmt/clippy/test) before any sim adoption; live only after full policy.\\\n\\\n**Morning checklist:**\\\n1. `tail /home/jan/gen5_data/equity_v6/overnight_pipeline.log` — training metrics\\\n2. `bash scripts/equity_shadow_run.sh 5000` — shadow gates\\\n3. If gates pass: A/B `run_ab_parallel.sh cash_nl_g52 cash_nl_g51 eqAB 10000 42 200 1337 7777 31415` + eval_9max + sanity_check.sh cash_nl_g52\\\n4. If gates fail: check `equity_shadow_analyze.py` breakdown (street/n_opp), consider more data or lr/epochs\\\n\\\n## Earlier 2026-08-15 (all committed, pushed)\\\n- G51 corrector (35b4fc6), parser+gate fix (0b18e88), NN fallback (58e3456), eq_cc gate (56b99f0), review fixes (8b467cc) — see previous revision. Harrington: 52 pass / 1 ignored (7_6). Sanity 10/10 ×5. h2h vs g50: dead heat.\\\n\\\n## Backlog (post-EquityNet)\\\n1. 7_6 sequence-aware capping (offline likelihood fit)\\\n2. FutureActionNet (#4) — drops into equity_vs_continue / ContinueFilter\\\n3. Live RangeNet fine-tune (Torn data)\\\n4. Call-path eq_cc (knob-gated)\\\n5. RangeNet\"],[1,\"). Done ~18:00. Then: `bash scripts/equity_shadow_run.sh 3000` (fish field) — gates: NN-vs-MC MAE, slope 0.9-1.1, flop divergence check.\\\n\\\n## Corpus inventory\\\n- `/home/jan/gen5_data/equity_v6`: 10.4M samples, 169-dim ranges only (v6.0) — usable for label training, lacks suit info\\\n- `/home/jan/gen5_data/equity_v6_1`: collecting, 173-dim (suits)\\\n\\\n## Models\\\n- equity_v1..v4: experiments (v4 best label-fit); equity_v5 training (suit-aware)\\\n\\\n## Backlog unchanged\\\n7_6 capping · FutureActionNet (#4) · live RangeNet fine-tune · call-path eq_cc ·\"],[0,\" v18\"]],\"start1\":2173,\"start2\":2173,\"length1\":1280,\"length2\":559},{\"diffs\":[[0,\"8 Tier-2\"],[-1,\";\"],[1,\" ·\"],[0,\" repo-wi\"]],\"start1\":2731,\"start2\":2731,\"length1\":17,\"length2\":18},{\"diffs\":[[0,\"ide \"],[-1,\"`cargo \"],[0,\"fmt\"],[-1,\"`\"],[0,\" debt\"],[-1,\" (sanity-gate enforces; ~1000 pre-existing diffs in untouched files)\"],[0,\"\\\n\\\n##\"]],\"start1\":2748,\"start2\":2748,\"length1\":92,\"length2\":16},{\"diffs\":[[0,\"tes\\\n\"],[-1,\"- \"],[0,\"Ideas\"],[-1,\" top-10 + #7/#1 detail:\"],[0,\" `f3\"]],\"start1\":2771,\"start2\":2771,\"length1\":38,\"length2\":13},{\"diffs\":[[0,\" Roadmap\"],[-1,\":\"],[0,\" `470316\"]],\"start1\":2793,\"start2\":2793,\"length1\":17,\"length2\":16},{\"diffs\":[[0,\"nity\"],[-1,\" Policy:\"],[0,\" `d6\"]],\"start1\":2817,\"start2\":2817,\"length1\":16,\"length2\":8},{\"diffs\":[[0,\"ea3`\"],[-1,\"\\\n- Plan file:\"],[1,\" | Archive `283e98fe` | Plan\"],[0,\" `.k\"]],\"start1\":2828,\"start2\":2828,\"length1\":21,\"length2\":36}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-08-16T06:35:35.744Z
created_time: 2026-08-16T06:35:35.744Z
is_locked: 0
type_: 13