{
 "credit": "Taylor (gtmcknight), github.com/gtmcknight/amm-sim@4812a6382311624e1506aca131ca35c378f930d9 research/solved: replica, Gaussian filter, tell policy, qm tables. Two-component filter from lb-4 (A/93cc1556...) / tca-path twocomp.py (TC-A); LEANBASE from A/efb8e653...",
 "idea": "Replace LEANBASE's single-Gaussian price belief (real.py soft update collapses the arb/retail mixture to one Gaussian at once) with lb-4's bounded two-component posterior: after an uncertain first trade keep (pi, arb point lp, var 0) and (1-pi, retail truncated Gaussian), truncate each component separately to the no-arb band over silent steps, moment-collapse after `dual` silent steps, and evaluate the next first trade's arb likelihood and retail truncation on the mixture. Everything else is LEANBASE's (lean tell with chance-cut retail likelihood, variant A; 0.35 rival pull; soft=1; full qm_k1e-5 tables).",
 "rule": {
  "state_kept": "One extra packed word beyond LEANBASE's (mean, var): arb-point weight pi and arb point lp (variance 0); the retail component is (mt, vt). lb-4 packs these as slots[0]=lp|pi<<128, slots[1]=mt|vt<<128.",
  "per_callback": "Same-step callbacks: unchanged. First trade of a step: for each silent step (<=12) truncate each live component to [ln(sp(1-fb)), ln(sp/(1-fa))] after adding sigma^2, reweight by mass, collapse by moments at silent step `dual`; add sigma^2; arb likelihood = sum_k w_k N(lp; m_k, v_k); retail = moments of the mass-weighted per-component truncations; pi from LEANBASE's tell (off-grid => 0; on-grid => RHO cut by chance); TWO only: tell-positive pi>.5 capped at 1-1e-4 and mixture kept; mixture kept when 1-keep<pi<keep; fees from the mixture's mean/var as before."
 },
 "choose": {
  "seeds": [
   64288,
   64671
  ],
  "n": 384,
  "paired_vs": "LEANBASE (leanbase:Policy variant A, code sha256 ba015769...)",
  "table": {
   "TWO": {
    "opt": {
     "dual": 2.0,
     "keep": 0.995,
     "floor": 0.0001
    },
    "mean_diff": 0.00269,
    "se": 0.00558,
    "min": -0.5159
   },
   "d2f0": {
    "opt": {
     "dual": 2.0,
     "keep": 0.995,
     "floor": 0.0
    },
    "mean_diff": 0.00518,
    "se": 0.00242,
    "min": -0.403
   },
   "d1f0": {
    "opt": {
     "dual": 1.0,
     "floor": 0.0
    },
    "mean_diff": 0.00433,
    "se": 0.0025,
    "min": -0.4031
   },
   "d12f0": {
    "opt": {
     "dual": 12.0,
     "floor": 0.0
    },
    "mean_diff": 0.00544,
    "se": 0.00241,
    "min": -0.403
   },
   "d12k9999f0": {
    "opt": {
     "dual": 12.0,
     "keep": 0.9999,
     "floor": 0.0
    },
    "mean_diff": 0.00504,
    "se": 0.00513,
    "min": -0.5114
   }
  },
  "pick": "d12f0: highest choose mean (dual=12, keep=.995, floor=0); all five configs lie within about 0.003 of each other, i.e. within noise",
  "note": "TWO = lb-4 as is: dual=2 (lb-4 Solidity collapses at silent step i==2), keep window .005/.995, retail floor 1e-4 with mixture kept on a positive tell. Only one stage of grid; keep .9999 and floor 1e-4 at dual 12 not combined further."
 },
 "frozen": {
  "params": {
   "TWO": {
    "dual": 2,
    "floor": 0.0001,
    "keep": 0.995
   },
   "TWO_CHOSEN": {
    "dual": 12,
    "floor": 0.0,
    "keep": 0.995
   }
  },
  "code_sha256": {
   "exp2.py": "98582facd580e7155113b9e65b822d692dc6f3b24ead005bb129f2da48ac6510",
   "lean_tell.py": "b70054f8c0561779e40c4c8df3f41ab08da05b9aef591816ac6c9034beb40a95",
   "leanbase.py": "ba015769f7981d7798acbbc9aff8c0e0c59825bb1541d55bcdef49311d7a04bc",
   "real.py": "6a4a0f0e7f8b43d38e5eaa9d8b2e847a0771aee7f89551b122fe89bfe7969b5f",
   "replica2.py": "54380c8755f4e42e9a0426759e918eacd2c5f915b7f04e5d0501c394c5846b40",
   "run.py": "91133e4ef485626226679d73349b5b4e374d9713ac5d7e9d36a39e1afd75933c",
   "stalerival.py": "d124a171d35b024daed840e5449d352b2b5e50a68ce98c8a9aaafaf3419d23da",
   "tellpol.py": "7d5961c45bec56292533e65607245ad119b8733c760a5bf28f76a2e07bc3960b",
   "tellref.py": "4867a33106ce2597863b8d7c8fb396288954b98f291714801fae8820f1f47aa3",
   "twolean.py": "fa780d2d22de61461dddac5a69e4f1fe3596837e5d931070881bd500d8808199"
  },
  "frozen_at_unix": 1794333121.760526,
  "note": "sha256 per file of the replica modules and twolean.py/exp2.py, checked by exp2.py on every report command; no file changed after freeze"
 },
 "report": {
  "seeds": [
   10000,
   10511
  ],
  "n": 512,
  "blocks": "8 blocks of 64 in order, LEANBASE then TWO then TWO_CHOSEN on each block before the next",
  "base_level_mean_edge": 540.3190963502557,
  "arms": [
   {
    "name": "TWO",
    "oracle": false,
    "settings": {
     "dual": 2,
     "floor": 0.0001,
     "keep": 0.995
    },
    "minus_base": {
     "mean_diff": 0.00738822792961491,
     "se": 0.004840935356320116,
     "min": -0.41788131367138703,
     "min_seed": 10454
    }
   },
   {
    "name": "TWO_CHOSEN",
    "oracle": false,
    "settings": {
     "dual": 12,
     "floor": 0.0,
     "keep": 0.995
    },
    "minus_base": {
     "mean_diff": 0.0025706343939375653,
     "se": 0.002231197722561817,
     "min": -0.35023313961141866,
     "min_seed": 10177
    }
   }
  ],
  "units": "replica edge per seed, each arm alone against the replica's 30 bps rival, paired by seed: arm minus LEANBASE; se = sd/sqrt(n)"
 },
 "cost": {
  "extra_storage_words": 1,
  "worst_ops_per_callback": "Extra over a one-Gaussian filter. TWO (dual=2): 2 extra truncations on silent steps (each 1 sqrt, 2 exp-based pdf, 2 rational cdf, ~5 div, ~10 mul) + 1 sqrt, 3 exp, 2 cdf and 2 moment merges on the first trade. TWO_CHOSEN (dual=12): 12 extra truncations + the same first-trade work.",
  "ops_per_silent_step": "one extra trunc per silent step while two components are live: 1 root (7-step Newton), 2 pdf (1 exp each), 2 cdf (fixed Hart rational), ~5 divi, ~13 mul, plus reweight 2 mul + 1 div",
  "gas_estimate": {
   "TWO_actual": "about +9,000 mean, +10,000 peak over our contract (requester's reading of lb-4); consistent with ~2 x 3k silent + ~4k first trade",
   "TWO_CHOSEN_actual": "about +40,000 to +46,000 worst call (12 x ~3k + ~4-10k)",
   "advance_rule_silent_x12": "about 34,000-46,000 extra for either arm when a silent step is counted 12 times"
  },
  "how_estimated": "Read from lb-4's scratch/Strategy.sol (cut(), update(), trunc/truncSD, root, pdf, cdf, ln, exp); helper gas estimated by op counts (exp Pade ~300-400, cdf ~400-600, root ~500-700, ln ~600-900), giving one trunc ~2.5-3.5k gas. Not measured: no compile or gas run was made in this item. The +9,000 mean / +10,000 peak lb-4 figures come from the brief, not from a measurement here."
 },
 "advance": false,
 "reading": "On LEANBASE, lb-4's two-component filter as it is (TWO) gives +0.0074 (se 0.0048) over 512 report seeds and the choose-tuned version (dual 12, no retail floor) +0.0026 (se 0.0022); neither reaches +0.02, and neither is separated from zero by 2 se. Keeping the arb point and the retail Gaussian apart between pins barely changes the fee, because LEANBASE's exact tell already makes nearly every first trade's pi 0 or above .995, so the mixture is rarely live and when it is the moment-matched single Gaussian sets nearly the same fees. The +1.19 of true-price value between arb pins is not in the arb/retail mixture shape; this lever does not justify its ~10k-40k gas.",
 "code_zb64": "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",
 "code_files": {
  "twolean.py": "fa780d2d22de61461dddac5a69e4f1fe3596837e5d931070881bd500d8808199",
  "exp2.py": "98582facd580e7155113b9e65b822d692dc6f3b24ead005bb129f2da48ac6510",
  "sanity.py": "39de11965acf574534e78069ddb8cd65b090304eb146ec8b8ceed11969734887"
 },
 "how_to_run": "Fetch Taylor's research at 66604b34 with research/tell/fetch.sh into amm/, decode LEANBASE reference_zb64 (A/efb8e653...) into amm/, put twolean.py and exp2.py there; PROCS=2 python3 -I exp2.py choose base; ... choose <name> k=v; exp2.py freeze '<arms>'; exp2.py report 10000 7; exp2.py report 10448 1. sanity.py checks twolean collapse=1 floor=0 equals LEANBASE edge on 64000..64003 (it did, exactly).",
 "seeds_used": {
  "sanity": [
   64000,
   64007
  ],
  "choose": [
   64288,
   64671
  ],
  "report": [
   10000,
   10511
  ],
  "report_reused_for_choice": false
 },
 "not_done": [
  "No ORACLE arm run.",
  "Report stopped at 512 seeds (40-minute work limit); 10512..12047 not used.",
  "No Solidity port, compile or gas measurement; gas figures are op-count estimates.",
  "Choose grid was one stage of 5 configs; keep and floor were not searched jointly at every dual.",
  "No engine run and no submission."
 ]
}