{"key":"h-c","approach":"New-incumbent code-free reference calibration, block h-c. Immutable combine-cash C versus current incumbent B on 500 fixed paired holdout seeds; no tuning or candidate changes. Positive differences favor C.","tried":["Exactly one serial C/B pair per seed 411000..411499, default ChallengeConfig/ParameterVariance and 2000 steps.","First 10 timing pairs retained once; fresh source namespace, factory and Strategy instance per simulation.","First observed competitor bid/ask spread labels checked against sampled configuration and returned regime; returned seeds, finite edges, failed flags, exceptions and source hashes checked."],"next":"Keep B as incumbent; combine this block with the other designated reference measurements. This block is not the reserved finalist test and authorizes no promotion.","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                ub = min(ub, max(0.0, free - C.get('reserve', 0.0) * min(1.0, H / C.get('release', 50.0))))\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":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","incumbent_code_sha256":"bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae","tuning":null,"paired":{"n":500,"sum_d":-341.93720007409996,"sum_d2":179802.61946789513,"mean_diff":-0.6838744001481999,"se":0.8483599109802048,"C_means":{"total_edge":94.0059751985664,"retail_edge":115.8401957842212,"arb_edge":-21.834220585713},"B_means":{"total_edge":94.6898495987146,"retail_edge":117.3419163439548,"arb_edge":-22.6520667453014},"retail_diff":-1.501720559733599,"arb_diff":0.8178461595883999,"seeds":[411000,411001,411002,411003,411004,411005,411006,411007,411008,411009,411010,411011,411012,411013,411014,411015,411016,411017,411018,411019,411020,411021,411022,411023,411024,411025,411026,411027,411028,411029,411030,411031,411032,411033,411034,411035,411036,411037,411038,411039,411040,411041,411042,411043,411044,411045,411046,411047,411048,411049,411050,411051,411052,411053,411054,411055,411056,411057,411058,411059,411060,411061,411062,411063,411064,411065,411066,411067,411068,411069,411070,411071,411072,411073,411074,411075,411076,411077,411078,411079,411080,411081,411082,411083,411084,411085,411086,411087,411088,411089,411090,411091,411092,411093,411094,411095,411096,411097,411098,411099,411100,411101,411102,411103,411104,411105,411106,411107,411108,411109,411110,411111,411112,411113,411114,411115,411116,411117,411118,411119,411120,411121,411122,411123,411124,411125,411126,411127,411128,411129,411130,411131,411132,411133,411134,411135,411136,411137,411138,411139,411140,411141,411142,411143,411144,411145,411146,411147,411148,411149,411150,411151,411152,411153,411154,411155,411156,411157,411158,411159,411160,411161,411162,411163,411164,411165,411166,411167,411168,411169,411170,411171,411172,411173,411174,411175,411176,411177,411178,411179,411180,411181,411182,411183,411184,411185,411186,411187,411188,411189,411190,411191,411192,411193,411194,411195,411196,411197,411198,411199,411200,411201,411202,411203,411204,411205,411206,411207,411208,411209,411210,411211,411212,411213,411214,411215,411216,411217,411218,411219,411220,411221,411222,411223,411224,411225,411226,411227,411228,411229,411230,411231,411232,411233,411234,411235,411236,411237,411238,411239,411240,411241,411242,411243,411244,411245,411246,411247,411248,411249,411250,411251,411252,411253,411254,411255,411256,411257,411258,411259,411260,411261,411262,411263,411264,411265,411266,411267,411268,411269,411270,411271,411272,411273,411274,411275,411276,411277,411278,411279,411280,411281,411282,411283,411284,411285,411286,411287,411288,411289,411290,411291,411292,411293,411294,411295,411296,411297,411298,411299,411300,411301,411302,411303,411304,411305,411306,411307,411308,411309,411310,411311,411312,411313,411314,411315,411316,411317,411318,411319,411320,411321,411322,411323,411324,411325,411326,411327,411328,411329,411330,411331,411332,411333,411334,411335,411336,411337,411338,411339,411340,411341,411342,411343,411344,411345,411346,411347,411348,411349,411350,411351,411352,411353,411354,411355,411356,411357,411358,411359,411360,411361,411362,411363,411364,411365,411366,411367,411368,411369,411370,411371,411372,411373,411374,411375,411376,411377,411378,411379,411380,411381,411382,411383,411384,411385,411386,411387,411388,411389,411390,411391,411392,411393,411394,411395,411396,411397,411398,411399,411400,411401,411402,411403,411404,411405,411406,411407,411408,411409,411410,411411,411412,411413,411414,411415,411416,411417,411418,411419,411420,411421,411422,411423,411424,411425,411426,411427,411428,411429,411430,411431,411432,411433,411434,411435,411436,411437,411438,411439,411440,411441,411442,411443,411444,411445,411446,411447,411448,411449,411450,411451,411452,411453,411454,411455,411456,411457,411458,411459,411460,411461,411462,411463,411464,411465,411466,411467,411468,411469,411470,411471,411472,411473,411474,411475,411476,411477,411478,411479,411480,411481,411482,411483,411484,411485,411486,411487,411488,411489,411490,411491,411492,411493,411494,411495,411496,411497,411498,411499],"seed_start":411000,"seed_end":411499,"role":"fixed_holdout_reference_block","complete":true,"by_spread":{"1":{"n":132,"sum_d":-307.55903167820003,"sum_d2":62339.09590296143,"mean_diff":-2.3299926642287883,"se":1.8877609262799002,"C_means":{"total_edge":44.53238965894015,"retail_edge":63.163950071865905,"arb_edge":-18.631560412996212},"B_means":{"total_edge":46.86238232316894,"retail_edge":64.68006626203636,"arb_edge":-17.81768393894091},"retail_diff":-1.5161161901704558,"arb_diff":-0.8138764740553033},"2":{"n":130,"sum_d":-8.6952419401,"sum_d2":4973.630501205209,"mean_diff":-0.06688647646230769,"se":0.5445588667888177,"C_means":{"total_edge":84.41790515925,"retail_edge":102.71901107196155,"arb_edge":-18.301105912746923},"B_means":{"total_edge":84.48479163571231,"retail_edge":105.46191369702385,"arb_edge":-20.97712206134231},"retail_diff":-2.742902625062306,"arb_diff":2.6760161485953846},"3":{"n":130,"sum_d":21.877597150700254,"sum_d2":101570.51570849633,"mean_diff":0.16828920885154042,"se":2.460987603543159,"C_means":{"total_edge":124.72382832049692,"retail_edge":149.69746122431846,"arb_edge":-24.973632903873078},"B_means":{"total_edge":124.55553911164539,"retail_edge":152.39398533109153,"arb_edge":-27.838446219487693},"retail_diff":-2.696524106773076,"arb_diff":2.864813315614615},"4":{"n":108,"sum_d":-47.560523606500226,"sum_d2":10919.377355232175,"mean_diff":-0.4403752185787058,"se":0.9711319897810418,"C_means":{"total_edge":129.03969270311111,"retail_edge":155.2621767047028,"arb_edge":-26.22248400167037},"B_means":{"total_edge":129.48006792168982,"retail_edge":153.81409770123702,"arb_edge":-24.334029779653704},"retail_diff":1.448079003465743,"arb_diff":-1.8884542220166662}}},"failures":[],"missing_seeds":[],"seconds_per_simulation":1.2959526017801837,"simulator_commit":"b244530ee2a6247b5f930830eeca9dd950da0e7e","fixture":{"codec":"base64(zlib(utf-8-json))","payload":"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","row_count":500,"seed_start":411000,"seed_end":411499,"schema":["seed","s","total_edge","retail_edge","arb_edge"],"uncompressed_sha256":"2087c41ea8948b02299ac390a4a7e80f62b039a3c0bea72b99773478d4b2e46a","code_sha256":"bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae"},"timing":{"elapsed_seconds":1296.1108962139115,"simulation_seconds":1295.9526017801836,"simulations_attempted":1000,"seconds_per_simulation":1.2959526017801837,"first_10_pairs_seconds":26.127453400287777,"first_10_seconds_per_simulation":1.306372670014389,"first_10_pairs":[{"seed":411000,"C":0.8972033211030066,"B":1.1152354297228158},{"seed":411001,"C":1.2361612250097096,"B":1.302730088122189},{"seed":411002,"C":1.4950754097662866,"B":1.5469109090045094},{"seed":411003,"C":1.1761203119531274,"B":1.2416936941444874},{"seed":411004,"C":1.0032809623517096,"B":1.0743031641468406},{"seed":411005,"C":1.3295125598087907,"B":1.2891731229610741},{"seed":411006,"C":1.5125626791268587,"B":1.5442987941205502},{"seed":411007,"C":1.548950987868011,"B":1.5717704598791897},{"seed":411008,"C":1.459539023693651,"B":1.4593132128939033},{"seed":411009,"C":1.1497738249599934,"B":1.1738442196510732}],"limit_seconds":2700},"validation":{"code_hashes_before_and_after":true,"simulator_files_identical_to_pinned_archive":true,"same_sampled_config_and_returned_regime_per_pair":true,"all_returned_seed_finite_and_spread_checks":true,"failed_flags":{"C":0,"B":0},"exceptions_count":0,"fixture_all_rows_and_hash_verified":true,"reserved_finalist_seeds_run":false,"simulation_processes":1,"python_version":"3.12.3"},"scoreboard":{"current_best_code_sha256":"bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae","candidate_code_sha256":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","paired_mean_diff":-0.6838744001481999,"paired_se":0.8483599109802048,"promoted":false},"reproduction":"Download the two specified JSON artifacts and extract exact UTF-8 JSON.code; check the supplied SHA256 values. Extract the simulator GitHub archive pinned to simulator_commit and put its root on sys.path; no third-party packages are needed. In one Python OS process, instantiate ChallengeConfig() and ParameterVariance(). For each seed in range(411000,411500), sample_config(base,variance,seed=seed) once. For C then B, use a fresh factory that executes unchanged compiled source in a fresh namespace and returns a new Strategy wrapped only to record the first StepState competitor_best_bid_ticks and competitor_best_ask_ticks; run SimulationEngine(config,factory,seed=seed).run(). The wrapper passes only the unchanged StepState to Strategy.on_step. Label s=max(1,((ask or 100)-(bid or 0)+1)//2) from that first observation and verify against config.competitor.spread_ticks and result.regime.competitor_spread_ticks. Check result.seed, failed/error and finite total/retail/arb edges. Retain first ten pairs as part of the block, never rerun a seed. Stop beginning new pairs at 2700 elapsed simulation-run seconds. For completed pairs compute d=C.total_edge-B.total_edge, sum_d=math.fsum(d), sum_d2=math.fsum(d*d), mean=sum_d/n, SE=statistics.stdev(d)/sqrt(n); repeat for s=1..4. Signed retail/arb differences use the same paired C-minus-B definition. Include finite returned failed results in statistics and record failures; any failure or missing pair makes complete=false. Tuning is null because no tuning was performed; paired is the fixed holdout block. For the fixture, serialize ordered B rows with json.dumps(rows,ensure_ascii=False,allow_nan=False,separators=(comma,colon)).encode(utf-8), hash uncompressed bytes, zlib.compress(raw,9), base64.b64encode; decode and check every row, float, count and hash."}