{
  "approach": "One reserve-only candidate. Replace the fixed $200 reserve and final-50-step linear release with min($200, (1-ask_price) * (current uncovered ask quantity + max(0, expected near-term ask demand - covered inventory left after this ask))). Expected demand is rho * P[m] * min(steps_remaining,50) / ask_price; rho is the incumbent retail buy-arrival assumption. This uses only public state and incumbent constants, releases collateral as covered inventory becomes available or the remaining demand horizon shrinks, and leaves both stock targets, acquisition gates and the price-risk model unchanged.",
  "tried": [
    {
      "name": "inventory-near-demand-reserve",
      "code_sha256": "d44dc5cc7176b1aaf5543f4deed58e1f82bb40197080066e6f536ae5a4ab2d9a",
      "change": "Only the former reserve clamp replaced; reserve cap remains 200. Horizon 50 fixed before any evaluation. No sweep, screen-based selection, or parameter revision. All tuning prefixes were progress reports from this one full evaluation.",
      "tuning_score": {
        "n": 2000,
        "seeds": {
          "start": 100000,
          "end": 101999,
          "inclusive": true
        },
        "failures": [],
        "candidate": {
          "mean": 93.9049345429897
        },
        "incumbent": {
          "mean": 93.89279754790844
        },
        "mean_diff": 0.012136995081249987,
        "se": 0.08412616610538227,
        "components": {
          "retail": {
            "candidate_mean": 118.115889209333,
            "incumbent_mean": 118.1713251589008,
            "mean_diff": -0.05543594956780004,
            "se": 0.012856295216020948
          },
          "arbitrage": {
            "candidate_mean": -24.21095466633005,
            "incumbent_mean": -24.27852761097935,
            "mean_diff": 0.06757294464929998,
            "se": 0.08364209569687621
          }
        },
        "eligible": true,
        "elapsed_seconds": 2902.942671775818
      }
    }
  ],
  "next": "Return this frozen candidate and evidence to the round coordinator. No promotion is made. Any further reserve redesign needs new tuning data; holdout was evaluated once and was not used to select, revert, combine or alter code.",
  "code": "\"\"\"Stale-quote defence with tick probes, a sub-tick belief and cheap YES stock.\n\nEvery step the arbitrageur removes any order on the wrong side of p, so tiny\ntwo-sided probes around the estimate locate p to a tick; a grid filter narrows\nthat further.  Quotes sit one tick inside the competitor and are sized by the\nmarginal rule: one more share is worth quoting while the chance a retail order\nreaches it, times its edge, exceeds the expected arbitrage loss.  Near p=0 a\nretail buy pays almost its whole notional as edge, so YES is held to cover low\nasks.  That YES is bought when it is cheap: a large bid rests at tick 1 while p\nis above it, so the arbitrageur fills it on the crossing for about 0.1 tick a\nshare instead of nearly a full tick once p is near zero, and smaller bids sit on\nwhichever tick p is within 0.15 of.  Below tick 1 the estimate of p decays with\nthe time spent there, since no probe can see it.\n\"\"\"\nimport math\nfrom orderbook_pm_challenge.strategy import BaseStrategy\nfrom orderbook_pm_challenge.types import CancelOrder, PlaceOrder, Side\n\nP = dict(lam_r=0.25, m=5.0, sig_n=1.2, lam_j=0.0019, sig_j=0.35, sig=0.02,\n         qmax=3000.0, rmin=2, kA=0.7, kL=0.15, pL=0.05,\n         ammo=1.0, ydem=0.4, W=200.0, fy=0.6, ammo_q=60.0, ammo_pmax=0.05, ammo_maxpay=0.02,\n         fb=0.9, fu=0.7, xu=0.1, sticky=1.0, min_ahead=2.0, keep_hi=1.5, keep_lo=0.7, Hu=300.0, bins=8.0, filt=1.0, uni=0.01, jumpinfo=1.0, dmin=0.0, kLb=0.08, kLf=0.08, pinf=1.0, pre=0.0, H1=100.0,\n         ydf=0.6, Wf=2000.0, g_hi=0.15, g_lo=0.15, qf=400.0, pmaxf=0.05, pre_gap=1.0,\n         ydf1=0.6, g1=5.0, f1=0.6, a1=100.0, nb1=0.0, gs=1.0, p1t=1.0, m1=1.0, zd=1.0, pfl=0.0005)\nP.update({'W': 50, 'ammo_pmax': 0.02, 'fy': 0.7, 'fu': 0.25, 'Hu': 500})\nC = {'W': 50, 'ammo_pmax': 0.02, 'fy': 0.7, 'reserve': 200, 'scar': 0.0025, 'fu': 0.25, 'Hu': 500}\nSQ2 = math.sqrt(2.0)\nSQ2PI = math.sqrt(2.0 * math.pi)\ndef cdf(x): return 0.5 * (1.0 + math.erf(x / SQ2))\ndef pdf(x): return math.exp(-0.5 * x * x) / SQ2PI\ndef inv(p):\n    p = min(max(p, 1e-9), 1 - 1e-9)\n    t = math.sqrt(-2.0 * math.log(min(p, 1 - p)))\n    x = t - (2.515517 + 0.802853 * t + 0.010328 * t * t) / (1 + 1.432788 * t + 0.189269 * t * t + 0.001308 * t ** 3)\n    x = -x if p < 0.5 else x\n    for _ in range(2):\n        d = pdf(x)\n        if d < 1e-12:\n            break\n        x -= (cdf(x) - p) / d\n    return x\ndef lpm(k):\n    return pdf(k) + k * cdf(k)\ndef fl(q):\n    return math.floor(q * 100 + 1e-9) / 100\n\nNODES = [(-2.2, .06), (-1.3, .17), (-0.6, .27), (0.6, .27), (1.3, .17), (2.2, .06)]\nPROBE = 0.01\n\n\nclass Strategy(BaseStrategy):\n    def __init__(self):\n        self.n = 0\n        self.ahead = set()     # main orders placed strictly ahead of any competitor order at their tick\n        self.res = {}          # order id -> uncovered quantity at placement\n        self.bc = None         # belief: sub-tick grid centres (ticks)\n        self.bw = None         # belief: weights\n        self.st = 0.5          # last one-step sd in ticks\n        self.pcb = self.pca = None\n        self.pb = set()\n        self.pa = set()\n        self.tb = 0\n        self.s = None          # competitor spread parameter\n\n    def _oid(self, tag):\n        self.n += 1\n        return tag + str(self.n)\n\n    def on_step(self, state):\n        H = max(1, state.steps_remaining)\n        cb = state.competitor_best_bid_ticks or 0\n        ca = state.competitor_best_ask_ticks or 100\n        if self.s is None:\n            self.s = max(1, (ca - cb + 1) // 2)\n        lo, hi = cb, ca\n        for o in state.own_orders:\n            if o.side is Side.BUY:\n                lo = max(lo, o.price_ticks)\n            else:\n                hi = min(hi, o.price_ticks)\n        if P['pinf'] > 0:\n            sb = {o.price_ticks for o in state.own_orders if o.side is Side.BUY and o.remaining_quantity <= PROBE + 1e-9}\n            sa = {o.price_ticks for o in state.own_orders if o.side is Side.SELL and o.remaining_quantity <= PROBE + 1e-9}\n            ea = self.pa - sa\n            eb = self.pb - sb\n            if sa and ea:\n                lo = max(lo, min(max(ea), hi))\n            if eb and (sb or min(eb) <= P['p1t']):\n                hi = min(hi, max(min(eb), lo))\n        if P['jumpinfo'] > 0 and self.pcb is not None:\n            if ca > self.pca + 1:\n                lo = max(lo, ca - 1)\n            if cb < self.pcb - 1:\n                hi = min(hi, cb + 1)\n        self.pcb, self.pca = cb, ca\n        if lo > hi:\n            lo, hi = hi, lo\n        # sub-tick belief over p_(t-1): predict with one-step noise, truncate to [lo, hi]\n        wid = max(hi - lo, 1e-6)\n        nb = max(2, min(48, int(round(wid * P['bins']))))\n        cs = [lo + (i + 0.5) * wid / nb for i in range(nb)]\n        if self.bc is None or P['filt'] <= 0:\n            ws = [1.0 / nb] * nb\n        else:\n            sg = max(self.st, 0.6 * wid / nb)\n            k = -0.5 / (sg * sg)\n            ws = []\n            uni = P['uni'] * sg\n            for c in cs:\n                t = uni\n                for ci, wi in zip(self.bc, self.bw):\n                    d = c - ci\n                    d2 = d * d * k\n                    if d2 > -12.5:\n                        t += wi * math.exp(d2)\n                ws.append(t)\n            tot = sum(ws)\n            ws = [w / tot for w in ws]\n        self.bc, self.bw = cs, ws\n        mean_t = sum(c * w for c, w in zip(cs, ws))\n        var_t = max(sum(c * c * w for c, w in zip(cs, ws)) - mean_t * mean_t, 0.0)\n        phat = min(max(mean_t / 100.0, 0.002), 0.998)\n        var = P['sig'] ** 2 + P['lam_j'] * P['sig_j'] ** 2\n        sd = math.sqrt(H * var)\n        self.tb = self.tb + 1 if hi <= 1 else 0\n        if self.tb > 0 and P['zd'] > 0:\n            # below the last tick there is no probe: the score keeps walking away from it\n            phat = min(phat, max(P['pfl'], cdf(inv(0.01) - P['zd'] * 0.02 * math.sqrt(self.tb) / sd)))\n        z = inv(phat)\n        Z = z * sd\n        sp = pdf(z) / sd * P['sig']\n        self.st = sp * 100.0\n        s = math.sqrt(sp * sp + var_t / 1e4 + 1e-8)\n        sd1 = math.sqrt(max(1.0, H - 1.0) * var)\n        jp = [(cdf((Z + n * P['sig_j']) / sd1), w) for n, w in NODES]\n        lj = P['lam_j']\n\n        def AB(x):\n            k = (x - phat) / s\n            a = s * lpm(k)\n            b = a - (x - phat)\n            ja = sum(w * max(0.0, x - p) for p, w in jp)\n            jb = sum(w * max(0.0, p - x) for p, w in jp)\n            return (1 - lj) * a + lj * ja, (1 - lj) * b + lj * jb\n\n        if H == 1:\n            def AB(x):\n                return (1 - phat) * x, phat * (1 - x)\n        rho = P['lam_r'] * 0.5\n        mu = math.log(P['m']) - 0.5 * P['sig_n'] ** 2\n        kA = P['kL'] if phat < P['pL'] else P['kA']\n\n        def qsize(loss, gain, px):\n            loss *= kA\n            if gain <= 0:\n                return 0.0\n            tail = loss / (rho * gain)\n            if tail >= 1.0:\n                return 0.0\n            return min(P['qmax'], math.exp(mu + P['sig_n'] * inv(1 - max(tail, 1e-6))) / px)\n\n        ptk = phat * 100\n        def qbid(t):\n            if not 1 <= t <= 99:\n                return 0.0\n            a, b = AB(t / 100.0)\n            if phat * 100 - t < P['dmin']:\n                return 0.0\n            if P['nb1'] > 0 and self.s == 1 and t == 1 and ptk < 1.0:\n                return 0.0\n            if phat < P['pL']:\n                ytg = P['ydem'] * min(H, P['W']) / max(ca - 1, ptk + 1) * 100.0\n                a *= (P['kLb'] if state.yes_inventory < ytg else P['kLf']) / P['kL']\n            return qsize(a, b, max(phat, 0.05))\n\n        def qask(t):\n            if not 1 <= t <= 99:\n                return 0.0\n            a, b = AB(t / 100.0)\n            if t - phat * 100 < P['dmin']:\n                return 0.0\n            if phat < C.get('scar_p', .1):\n                a = max(0.0, a - C.get('scar', 0.0) * (1 - min(1.0, state.yes_inventory / C.get('stock', 3000.0))))\n            return min(C.get('askcap', P['qmax']), qsize(b, a, t / 100.0))\n\n        bids = [o for o in state.own_orders if o.side is Side.BUY and o.remaining_quantity > PROBE + 1e-9]\n        asks = [o for o in state.own_orders if o.side is Side.SELL and o.remaining_quantity > PROBE + 1e-9]\n        sticky = P['sticky'] > 0\n        def top(orders, comp, step):\n            if sticky and sum(o.remaining_quantity for o in orders if o.price_ticks == comp and o.order_id in self.ahead) >= P['min_ahead']:\n                return comp\n            return comp + step\n        bid_t = top(bids, cb, 1)\n        ask_t = top(asks, ca, -1)\n        qb = min(C.get('bidcap', 3000.0), qbid(bid_t))\n        qa = qask(ask_t)\n\n        Y = state.yes_inventory\n        if ask_t == 1 and H > P['H1'] and P['pre'] > 0:\n            qa = qa if Y >= P['a1'] > 0 else 0.0          # let the competitor's 2-tick ask erode instead of fronting it for nothing\n        # ammunition: hold YES so that low asks are covered\n        ptick = phat * 100\n        amt = 0\n        qam = 0.0\n        if P['ammo'] > 0 and ask_t >= 2 and phat < max(P['ammo_pmax'], P['pmaxf']):\n            wealth = state.cash + Y * phat\n            x = max(ask_t, ptick + 1) / 100.0\n            capw = P['fy'] * wealth / max(phat, 0.005)\n            target = min(P['ydem'] * min(H, P['W']) / x, capw)\n            full = min(P['ydf'] * min(H, P['Wf']) / x, capw) if phat < P['pmaxf'] else 0.0\n            t = max(1, min(99, int(math.ceil(ptick + 1e-9))))\n            g = t - ptick\n            if Y < full and g <= P['g_hi'] and bid_t <= t < ask_t:\n                amt, qam = t, min(P['qf'], full - Y)     # a tick p has just crossed: nearly free\n            elif Y < target and phat < P['ammo_pmax'] and bid_t <= t < ask_t and t / 100.0 - phat < P['ammo_maxpay']:\n                amt, qam = t, min(P['ammo_q'], target - Y)\n            elif Y < full and t >= 2 and 1.0 - g <= P['g_lo']:\n                amt, qam = t - 1, min(P['qf'], full - Y)  # rest just under p: filled only on the crossing, or by retail\n\n        if P['pre'] > 0 and ca == 2 and phat < 0.01 and H > P['H1'] and Y < P['pre'] and not qam and 1.0 - ptick < P['pre_gap']:\n            amt, qam = 1, min(P['ammo_q'], P['pre'] - Y)\n        q1 = 0.0\n        if P['ydf1'] > 0 and P['m1'] < ptick < P['g1'] + 1.0 and amt != 1:\n            q1 = max(0.0, P['ydf1'] * min(H, P['Wf']) / (self.s / 100.0) - Y)\n        # order management\n        actions = []\n        free = state.free_cash - 2.0\n        keep_ask = 0.0\n        new_b = []\n        new_a = []\n        def cancel(o):\n            nonlocal free\n            actions.append(CancelOrder(o.order_id))\n            x = o.price_ticks / 100.0\n            if o.side is Side.BUY:\n                free += x * o.remaining_quantity\n            else:\n                free += (1 - x) * min(self.res.get(o.order_id, 0.0), o.remaining_quantity)\n            self.ahead.discard(o.order_id)\n            self.res.pop(o.order_id, None)\n        for o in state.own_orders:\n            if o.remaining_quantity <= PROBE + 1e-9:\n                cancel(o)\n        kept_ids = set()\n        def manage(orders, t, q, comp):\n            kept = 0.0\n            for o in orders:\n                if not (C.get('recover', 0) and o.side is Side.SELL and t < comp and self.res.get(o.order_id, 0.0) > 1 and state.yes_inventory > C.get('recover_yes', 1) and state.free_cash < C.get('recover_cash', 200)) and o.price_ticks == t and q > 0 and kept + o.remaining_quantity <= max(q * P['keep_hi'], 1.0):\n                    kept += o.remaining_quantity\n                    kept_ids.add(o.order_id)\n                else:\n                    cancel(o)\n            return kept\n        kb = manage(bids, bid_t, qb, cb)\n        ka = manage(asks, ask_t, qa, ca)\n        add_b = (qb - kb) if (kb < qb * P['keep_lo'] and bid_t != cb) else 0.0\n        add_a = (qa - ka) if (ka < qa * P['keep_lo'] and ask_t != ca) else 0.0\n\n        budget = P['fb'] * max(free, 0.0)\n        cost = add_b * bid_t / 100.0 + qam * amt / 100.0\n        if cost > budget:\n            f = budget / cost\n            add_b *= f\n            qam *= f\n            cost = budget\n        out = []\n        q1 = min(q1, P['f1'] * max(budget - cost, 0.0) * 100.0)\n        if q1 >= 0.01:\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=1, quantity=fl(q1)))\n            free -= fl(q1) / 100.0 + 1e-6\n        if amt and qam >= 0.01:\n            q = fl(qam)\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=amt, quantity=q))\n            free -= q * amt / 100.0 + 1e-6\n        if bid_t >= 1 and add_b >= 0.01:\n            q = fl(add_b)\n            oid = self._oid('b')\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=bid_t, quantity=q, client_order_id=oid))\n            free -= q * bid_t / 100.0 + 1e-6\n            if bid_t > cb:\n                self.ahead.add(oid)\n        if ask_t <= 99 and add_a >= 0.01:\n            x = ask_t / 100.0\n            covk = sum(o.remaining_quantity - min(self.res.get(o.order_id, 0.0), o.remaining_quantity)\n                       for o in asks if o.order_id in kept_ids)\n            cov = max(0.0, Y - covk - 0.1)\n            unc = max(0.0, add_a - cov)\n            if unc > 0:\n                ub = max(0.0, free - (1 - P['fu']) * max(state.cash, 0.0)) if x >= P['xu'] else 0.0\n                if H < P['Hu'] and phat < 0.05:\n                    ub = max(0.0, free * (1 - H / P['Hu']))\n                # Reserve only collateral for current and near-term uncovered asks.\n                # Covered YES remaining after this ask offsets expected retail demand.\n                near_demand = rho * P['m'] * min(H, 50.0) / x\n                covered_after = max(0.0, cov - add_a)\n                near_uncovered = unc + max(0.0, near_demand - covered_after)\n                reserve = min(C.get('reserve', 0.0), (1 - x) * near_uncovered)\n                ub = min(ub, max(0.0, free - reserve))\n                unc = min(unc, ub / (1 - x))\n            q = fl(min(add_a, cov + unc))\n            if q >= 0.01:\n                oid = self._oid('a')\n                out.append(PlaceOrder(side=Side.SELL, price_ticks=ask_t, quantity=q, client_order_id=oid))\n                r = max(0.0, q - cov)\n                self.res[oid] = r\n                free -= r * (1 - x) + 1e-6\n                if ask_t < ca:\n                    self.ahead.add(oid)\n\n        # probes: tiny orders that the arbitrageur removes when p crosses them\n        f = int(math.floor(ptick + 1e-9))\n        r = max(int(P['rmin']), int(math.ceil(2.0 * s * 100)))\n        self.pb = set()\n        self.pa = set()\n        if free > 1.0:\n            for t in range(f, f + r + 1):\n                if cb < t < ca and 1 <= t <= 99:\n                    out.append(PlaceOrder(side=Side.BUY, price_ticks=t, quantity=PROBE))\n                    self.pb.add(t)\n            for t in range(f + 1 - r, f + 2):\n                if cb < t < ca and 1 <= t <= 99:\n                    out.append(PlaceOrder(side=Side.SELL, price_ticks=t, quantity=PROBE))\n                    self.pa.add(t)\n        return actions + out\n",
  "code_sha256": "d44dc5cc7176b1aaf5543f4deed58e1f82bb40197080066e6f536ae5a4ab2d9a",
  "incumbent_code_sha256": "baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273",
  "tuning_score": {
    "n": 2000,
    "seeds": {
      "start": 100000,
      "end": 101999,
      "inclusive": true
    },
    "failures": [],
    "candidate": {
      "mean": 93.9049345429897
    },
    "incumbent": {
      "mean": 93.89279754790844
    },
    "mean_diff": 0.012136995081249987,
    "se": 0.08412616610538227,
    "components": {
      "retail": {
        "candidate_mean": 118.115889209333,
        "incumbent_mean": 118.1713251589008,
        "mean_diff": -0.05543594956780004,
        "se": 0.012856295216020948
      },
      "arbitrage": {
        "candidate_mean": -24.21095466633005,
        "incumbent_mean": -24.27852761097935,
        "mean_diff": 0.06757294464929998,
        "se": 0.08364209569687621
      }
    },
    "eligible": true,
    "elapsed_seconds": 2902.942671775818
  },
  "paired": {
    "n": 2000,
    "seeds": {
      "start": 200000,
      "end": 201999,
      "inclusive": true
    },
    "failures": [],
    "candidate": {
      "mean": 99.44497924689895
    },
    "incumbent": {
      "mean": 99.53422961247875
    },
    "mean_diff": -0.08925036557980016,
    "se": 0.017295627237662557,
    "components": {
      "retail": {
        "candidate_mean": 129.03370166852125,
        "incumbent_mean": 129.1063455107792,
        "mean_diff": -0.07264384225795009,
        "se": 0.01399498439318504
      },
      "arbitrage": {
        "candidate_mean": -29.58872242163515,
        "incumbent_mean": -29.5721158983128,
        "mean_diff": -0.01660652332235001,
        "se": 0.007436630886925397
      }
    },
    "eligible": true,
    "elapsed_seconds": 2872.9533989429474
  },
  "evidence": {
    "simulator_commit": "b244530ee2a6247b5f930830eeca9dd950da0e7e",
    "simulator_url": "https://github.com/danrobinson/prediction-market-challenge",
    "incumbent_url": "https://api.imdnotdead.fun/artifacts/ecbc9087b4f238fc1b5b0d52f55af073f676c038bfb6756172b1e51480ac1741",
    "runtime": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]",
    "execution": "Serial in-process SimulationEngine; fresh Strategy per simulation, same sample_config(default ChallengeConfig, default ParameterVariance, seed) for both strategies; 2000 steps. No simulator modifications, workers, sandbox, external Python dependencies, hidden-state access or finalist seeds.",
    "commands": [
      "git clone https://github.com/danrobinson/prediction-market-challenge test/scratch/simulator",
      "git -C test/scratch/simulator checkout b244530ee2a6247b5f930830eeca9dd950da0e7e",
      "curl -L --fail -o test/scratch/incumbent.json https://api.imdnotdead.fun/artifacts/ecbc9087b4f238fc1b5b0d52f55af073f676c038bfb6756172b1e51480ac1741",
      "python3 test/scratch/prepare.py",
      "python3 test/scratch/evaluate.py 100000 2000 tuning",
      "python3 test/scratch/sequence.py",
      "python3 test/scratch/evaluate.py 200000 2000 holdout",
      "python3 test/scratch/finalize.py",
      "python3 test/scratch/validate.py"
    ],
    "evaluator_code": "import sys,json,time,hashlib,statistics,math,importlib.util\nfrom pathlib import Path\nsys.path.insert(0,str(Path('test/scratch/simulator').resolve()))\nfrom orderbook_pm_challenge.config import ChallengeConfig,ParameterVariance\nfrom orderbook_pm_challenge.runner import sample_config\nfrom orderbook_pm_challenge.engine import SimulationEngine\n\ndef load(name):\n    spec=importlib.util.spec_from_file_location(name,'test/scratch/'+name+'.py')\n    mod=importlib.util.module_from_spec(spec);spec.loader.exec_module(mod)\n    return mod.Strategy\n\ndef summarize(rows):\n    n=len(rows);out={'n':n,'seeds':{'start':rows[0]['seed'],'end':rows[-1]['seed'],'inclusive':True},'failures':[]}\n    for name in ['candidate','incumbent']:\n        out[name]={'mean':statistics.mean(r[name]['total_edge'] for r in rows)}\n    for field,label in [('total_edge','total'),('retail_edge','retail'),('arb_edge','arbitrage')]:\n        ds=[r['candidate'][field]-r['incumbent'][field] for r in rows]\n        stats={'candidate_mean':statistics.mean(r['candidate'][field] for r in rows),'incumbent_mean':statistics.mean(r['incumbent'][field] for r in rows),'mean_diff':statistics.mean(ds),'se':statistics.stdev(ds)/math.sqrt(n) if n>1 else None}\n        if label=='total':out.update(mean_diff=stats['mean_diff'],se=stats['se'])\n        else:out.setdefault('components',{})[label]=stats\n    for r in rows:\n        for name in ['incumbent','candidate']:\n            if r[name]['failed']:out['failures'].append({'seed':r['seed'],'strategy':name,'error':r[name]['error']})\n    out['eligible']=n==2000 and not out['failures']\n    return out\n\nif __name__=='__main__':\n    start,count=int(sys.argv[1]),int(sys.argv[2]);tag=sys.argv[3]\n    assert (100000<=start and start+count<=102000) or (200000<=start and start+count<=202000)\n    factories={name:load(name) for name in ['incumbent','candidate']}\n    base=ChallengeConfig();variance=ParameterVariance();assert base.process.n_steps==2000\n    rows=[];t=time.time()\n    with open('test/scratch/'+tag+'.jsonl','w') as f:\n        for seed in range(start,start+count):\n            cfg=sample_config(base,variance,seed=seed);row={'seed':seed}\n            for name,factory in factories.items():\n                r=SimulationEngine(cfg,factory,seed=seed).run()\n                row[name]={k:getattr(r,k) for k in ['total_edge','retail_edge','arb_edge','failed','error']}\n            rows.append(row);f.write(json.dumps(row)+'\\n');f.flush()\n            if len(rows)%20==0:print(json.dumps({'tag':tag,'n':len(rows),'seconds':time.time()-t,'summary':summarize(rows)}),flush=True)\n    out=summarize(rows);out['elapsed_seconds']=time.time()-t\n    Path('test/scratch/'+tag+'.summary.json').write_text(json.dumps(out,indent=2))\n    print(json.dumps(out),flush=True)\n",
    "candidate_preparation_code": "import hashlib,json\nfrom pathlib import Path\np=Path('test/scratch')\nc=(p/'incumbent.py').read_text()\nold=\"                ub = min(ub, max(0.0, free - C.get('reserve', 0.0) * min(1.0, H / C.get('release', 50.0))))\"\nnew='''                # Reserve only collateral for current and near-term uncovered asks.\n                # Covered YES remaining after this ask offsets expected retail demand.\n                near_demand = rho * P['m'] * min(H, 50.0) / x\n                covered_after = max(0.0, cov - add_a)\n                near_uncovered = unc + max(0.0, near_demand - covered_after)\n                reserve = min(C.get('reserve', 0.0), (1 - x) * near_uncovered)\n                ub = min(ub, max(0.0, free - reserve))'''\nassert c.count(old)==1\n(p/'candidate.py').write_text(c.replace(old,new))\nprint(hashlib.sha256((p/'candidate.py').read_bytes()).hexdigest())\n",
    "freeze_and_holdout_code": "import time,json,hashlib,datetime,subprocess\nfrom pathlib import Path\np=Path('test/scratch')\n# Wait only for the already-running full tuning evaluation, never inspect H to choose code.\nwhile not (p/'tuning.summary.json').exists():time.sleep(2)\ntuning=json.loads((p/'tuning.summary.json').read_text());assert tuning['n']==2000\ncode=(p/'candidate.py').read_bytes()\nfreeze={'code_sha256':hashlib.sha256(code).hexdigest(),'utc':datetime.datetime.now(datetime.timezone.utc).isoformat(),'tuning_n':2000,'holdout_started':False,'selection':'Only one candidate; all choices fixed before tuning. Full T completed and candidate retained for the requested once-only H measurement regardless of the sign of T. No H data read.'}\nassert not (p/'holdout.jsonl').exists()\n(p/'freeze.json').write_text(json.dumps(freeze,indent=2))\nwith (p/'holdout.log').open('w') as f:subprocess.run(['python3','test/scratch/evaluate.py','200000','2000','holdout'],stdout=f,stderr=subprocess.STDOUT,check=True)\nsubprocess.run(['python3','test/scratch/finalize.py'],check=True)\n",
    "freeze": {
      "code_sha256": "d44dc5cc7176b1aaf5543f4deed58e1f82bb40197080066e6f536ae5a4ab2d9a",
      "utc": "2026-11-06T16:58:26.429605+00:00",
      "tuning_n": 2000,
      "holdout_started": false,
      "selection": "Only one candidate; all choices fixed before tuning. Full T completed and candidate retained for the requested once-only H measurement regardless of the sign of T. No H data read."
    },
    "completed_utc": "2026-11-06T17:46:19.705608+00:00",
    "failures": {
      "simulation": [],
      "setup": [
        {
          "command": "python - <<...",
          "error": "python: command not found; corrected to python3 before evaluation"
        }
      ]
    },
    "checks": {
      "incumbent_sha256_matches": true,
      "candidate_ast_parses": true,
      "candidate_sha256_matches_freeze": true,
      "complete_contiguous_disjoint_ranges": true,
      "all_pairs_included_no_failure_filtering": true,
      "standard_error": "sample_stdev(candidate.total_edge-incumbent.total_edge)/sqrt(n), ddof=1; component errors paired likewise",
      "metric": "total_edge, retail_edge and arb_edge; signed edge, not PnL",
      "independent_prefix_runs": false,
      "holdout_evaluation_count": 1,
      "promotion": false,
      "independent_paired_arithmetic_verified": true,
      "simulator_worktree_unmodified": true,
      "source_quotes_refetched_and_verified": true
    },
    "scoreboard": {
      "current_best_code_sha256": "baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273",
      "candidates": [
        {
          "code_sha256": "d44dc5cc7176b1aaf5543f4deed58e1f82bb40197080066e6f536ae5a4ab2d9a",
          "tuning_mean_diff": 0.012136995081249987,
          "tuning_se": 0.08412616610538227,
          "holdout_mean_diff": -0.08925036557980016,
          "holdout_se": 0.017295627237662557
        }
      ],
      "promotion": null
    },
    "status": "complete",
    "validation_code": "import json,math,hashlib,ast\nfrom pathlib import Path\nout=Path('artifacts/goal/batches/r1-deepen-pilot/items/reserve-release')\nr=json.loads((out/'result.json').read_text());assert (out/'result.json').stat().st_size<=64000\nassert r['evidence']['status']=='complete'\nassert set(['approach','tried','next','code','code_sha256','incumbent_code_sha256','tuning_score','paired','evidence'])<=r.keys()\nast.parse(r['code']);assert hashlib.sha256(r['code'].encode('utf-8')).hexdigest()==r['code_sha256']==r['evidence']['freeze']['code_sha256']\nfor tag,key,start in [('tuning','tuning_score',100000),('holdout','paired',200000)]:\n rows=[json.loads(v) for v in Path('test/scratch/'+tag+'.jsonl').read_text().splitlines()]\n assert len(rows)==2000 and [v['seed'] for v in rows]==list(range(start,start+2000))\n score=r[key];assert score['n']==2000 and score['seeds']['start']==start and score['seeds']['end']==start+1999\n assert not score['failures'] and score['eligible']\n for v in rows:\n  for name in ['candidate','incumbent']:assert not v[name]['failed'] and v[name]['error'] is None\n for field,component in [('total_edge',None),('retail_edge','retail'),('arb_edge','arbitrage')]:\n  ds=[v['candidate'][field]-v['incumbent'][field] for v in rows]\n  mean=math.fsum(ds)/len(ds)\n  se=math.sqrt(math.fsum((d-mean)**2 for d in ds)/(len(ds)-1)/len(ds))\n  target=score if component is None else score['components'][component]\n  assert math.isclose(mean,target['mean_diff'],rel_tol=1e-12,abs_tol=1e-12)\n  assert math.isclose(se,target['se'],rel_tol=1e-12,abs_tol=1e-12)\n  for name in ['candidate','incumbent']:\n   m=math.fsum(v[name][field] for v in rows)/len(rows)\n   expected=score[name]['mean'] if component is None else target[name+'_mean']\n   assert math.isclose(m,expected,rel_tol=1e-12,abs_tol=1e-12)\n print(tag,score['n'],score['mean_diff'],score['se'])\ns=json.loads((out/'sources.json').read_text());assert len(s['sources'])<=20\nfor source in s['sources']:assert len(source['quote'])<=500\nprint('PASS: complete paired arithmetic, ranges, no failures, hashes, AST, JSON, size and source structure')\nprint('result bytes', (out/'result.json').stat().st_size,'sources bytes',(out/'sources.json').stat().st_size)\n"
  }
}
