{
 "notes": "EPISODE 6: round 3 screened (105 items, all accepted); retreat-crossing sent to F; round 3 extension and round 4 development spawned (117 items: 27 extend, 8 final, 44 deepen, 26 fresh, 12 remove). Items used after this: 331 of 600. Episodes 7..10 remain; nothing spawned in 10 can be read.\n\nBEST N (adopted, not promoted): `code` of https://api.imdnotdead.fun/artifacts/db22aff7167a4798251ed3d20432509f30e511e4958799aba5b17b41bb39b4b6 , SHA-256 bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae. LOCAL PROMOTIONS: none. F 900000..903999 run by nobody until r3-final-rc. Streak of completed rounds without promotion: 0 (round 3 completes with its F decision). Check values (unmodified simulator, N): seeds 310000..310003 total edge 17.116002, 20.017111, 2.390311, 241.484752; every brief asks for them. N's mean on H 410000..410499 is 104.4137531881468 on most machines, 104.39217582931519 on a few (older Python); within-item pairing is unaffected.\n\nSCOREBOARD, round 3 screen (H 410000..410499, candidate minus N; s = target spread; n per spread 115/116/138/131; complete, 0 failures). Candidate = `code` of https://api.imdnotdead.fun/artifacts/<art>.\n- retreat-crossing b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf, art 459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 (s3): all +0.241 se 0.076; s3 +0.873 se 0.267 (3.3 se); tuning +0.053 se 0.097. -> F now (r3-final-rc) and extension.\n- s3-flow-transfer e7891178a0bd04852e48b14e76715b2ef37e7962d3dabca74f656dcda61d71de, art 4c44fcf1b73f132078bd65018aa8fea6531d4cc7c0cfd4e5f0b874a69ff39299 (s3): s3 +0.463 se 0.253; all +0.128 se 0.070.\n- s3-queue-transfer 998f1ca92b67bcc7ef539ca5e0beacf1def7472593f344cd660b4f59c6720ebd, art 530133206b1ed0615a14ad24e1aae13e0ec2f03b45d89cbf4e0f9f1a0ee2efe3 (s3): s3 +0.550 se 0.367; all +0.152 se 0.102.\n- f-jump-scale overlay 19aa0a454387c70ec599aacc8376ad9f6f128da3e15f380eea67b85798c0ebf6, assembled 499530021c3f72e8da491724f289913282998f1a183036e4ca65bfa1d3ccd86f, in `top` of r3-fresh-overlay/merge-01 = https://api.imdnotdead.fun/artifacts/1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b (s2,s3): s3 +0.566 se 0.336, s2 +0.241 se 0.219.\n- s2-flow-jump-mask 91ce2de42cda0eb65638767a546b272549638ee7cf7fb94ed45a9650e5959db7, art fbd2c0ef8a258d64f04248e339e5e400f6ded3cb13f287718f45540542689b76 (s2): s2 +0.351 se 0.221; all +0.081 se 0.052.\n- s2-side-risk b1edc389df0c35a2dc0d73096f6a5eed337ff4ef026000ef67621f34773fee8f, art 7d4477490a285f9c7f2eb0d2ac89b584550b5e094737e0fad1d7670280e76bf7 (s2): s2 +0.390 se 0.270; all +0.091 se 0.063.\n- side-jump-budget 8c249a7d2ea89675599b3605807a195ee3c960f7db34650935c1f158ab210f14, art a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420 (s2,s3): s2 +0.98 se 0.98, s3 +0.98 se 0.97; all +0.50 se 0.35; tuning -0.02 se 0.42.\n- s1-queue-safety 77ba268c93b354ba963bb211608a2b8d2ea9c8d7e667cc9ef1c8bc8dcb926289, art e4f60b549bcecf2d4d54e39084dcd646c7fcfb67c44dd516545caf3aa384dd1c (s1): s1 +0.174 se 0.100; all +0.040 se 0.023.\n- f-flow-scales overlay 32f15d36aa069f24f51d668f00a8078f4a81dc646ed13252cbff516e3b16f9b7, assembled 18419c9594a4e685223f3d2eed57f197ccf29f36c13c02f4078e5b9f8e33599f, in `top` of r3-fresh-overlay/merge-05 = https://api.imdnotdead.fun/artifacts/24831096ba62b5aa485b6449ed0c80af71dc487f3fb25faa1a73a8c5fe59dcc3 (s4): s4 +0.307 se 0.185; all +0.081 se 0.049.\nBelow 1.5 se: stock-entry-gate port 682cdc9b all +0.30/0.40 (s4 -0.29); s4-uncertainty-tail s4 +0.13/0.10; s3-flow-shrinkage s3 +0.11/0.08; f-post-jump s1 +0.06/0.05. The other 60 rows are null (24 deepen/overlay/remove rows within noise) or harmful: remove-far-probes -10.2, remove-penny-bank -1.0, remove-below-tick-decay -0.13/0.06, remove-flow-quote -0.16/0.12, f-ambiguity -44, f-competing-risk -5.9, f-cancel-option -5.2, f-shortfall-cap -4.0, f-drift-skew -2.0, f-endgame-stop -1.3, f-pit-calibration -0.87/0.15, f-join-timing -0.49/0.08, f-fill-imbalance -0.30/0.09, s2-coverage-threshold -0.14/0.08. Void and rerun in r4-remove: remove-hysteresis (paired against combine-cash), remove-late-uncovered (222 seeds). combine-cash vs N: -0.4 to -2.0 per 500-seed block.\n\nDIAGNOSTICS of N (500-seed blocks 500000..502499): an oracle cancelling orders about to be swept only on a >=3-tick next move gains +3.2 s1, +7.6 s2, +9.0 s3, +17.1 s4 (all arbitrage); cancelling every swept order loses 27-59. One step after an own fill the sweep rate on that side is 0.77-0.85 vs 0.36 without (s2,s3), and such fills precede 64% of arb loss: the own-fill pullback family in r4-deepen is the main bet. Jump-step asks net -6.7 s2, -11.6 s3; bids with no rival bid net -5.0 s2, -3.1 s3; nonjump inside asks net +112 s2, +75 s3 (never shrink them). At 20-80c N takes 21-23% of retail notional on s2 (rival earns 33.7/run vs N 11.0), 40% on s3, 0.3% on s1. Net-negative time-price cells (s2 p<5c steps 200-999; s2 5-20c and s3 20-80c steps 1600-1899) are -2.3 each, within noise.\n\nBATCHES NOW (all against N): r3-extend (27: the nine candidates above x 3 blocks 410500..410999 / 411000..411499 / 411500..411999, keys <key>-a/b/c, merges of 3 in that order: pooled stats and per-seed arrays); r3-final-rc (8: retreat-crossing on 900000..903999, rc-f1..rc-f8); r4-deepen (44, merges of 11: c-* combines of the winners, d-* diagnostic-driven, p-* ports of old-B gains; T 320000..320199, H 430000..430499); r4-fresh (26 new overlay mechanisms, merges of 9); r4-remove (12, merges of 6). Fields as in round 3 plus check_values and python_version; measure items return per_seed [seed, s, d].\n\nNEXT EPISODE (7), in order:\n1. r3-final-rc: pool the 8 blocks (mean = S/n, se = sqrt((Q - S*S/n)/(n-1)/n) from n, sum_d, sum_d2), overall and s3. PROMOTE retreat-crossing as the s3 block if n = 4000 complete, 0 failures, check values right, and both the s3 gain and the overall gain exceed 2 se. Record: round 3, spread 3, N -> b5158a96..., F n, gain, se, retail and arb change, N's F mean. Its file is N plus a guarded s3 change, submittable as is; later s3 candidates must beat it (the c-s3-retreat-* combines build on it). Otherwise no promotion yet; the streak stays 0 until round 3's other finalists are decided.\n2. r3-extend merges: pooled H2000 per spread per candidate (unselected evidence). Per spread at most one finalist with pooled gain_s > 2 se_s (fall back to > 1.5 se_s if none); spawn r3-final-<key> (8 x 500 over 900000..903999, the measure brief). An s3 finalist other than retreat-crossing only if its pooled s3 gain exceeds retreat-crossing's.\n3. r4 merges: scoreboard by spread (drop flagged rows and rows whose incumbent_mean on 430000..430499 differs from the majority); > 1.5 se_s to r4-extend (3 x 500 on 430500..431999); > 3 se_s straight to F (8 x 500) if that spread has no finalist yet.\n4. Episode 8: promotions from F per spread; one compose item (N with each promoted spread's block, exact-equality audit against each source on its spread, full code and hash, little else); r4 F finals. Episode 9: last promotions, final compose, ask in `read` for the result carrying the full code. Episode 10: finish. Stop early after two completed rounds in a row without a promotion.\nSEED LEDGER: exposed below 300000; round 3 T 310000..310199 (fixtures 310000..310999), H 410000..411999 (all used); SEG audit 420000..421999; diagnostics 500000..502499; round 4 T 320000..320199, H 430000..430499, extension 430500..431999; reserved T 330000..330999, H 440000..441999; confirmations free from 510000; F only in final batches.\nLESSONS: items hit 10-minute tool timeouts near 500 pairs, so briefs say run in the background or in chunks of 50 seeds, and the one-OS-process rule is dropped (pairing is by seed). Never ask an item or a merge for a command's output. A batch over 30 reads needs merges. Write-up limits: F reused across rounds and finalists; H common to a round's items (selected); N adopted from another goal; local paired gains are not a leaderboard result; --sandbox not run.",
 "spawn": [
  {
   "name": "r3-extend",
   "brief": "One item measures ONE frozen candidate against the incumbent N on ONE block of 500 seeds, paired by seed. No development, no tuning: change no code. Candidate {{key}} ({{idea}}): {{how}}\nN: the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/db22aff7167a4798251ed3d20432509f30e511e4958799aba5b17b41bb39b4b6 ; SHA-256 of its UTF-8 bytes bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae. Verify every hash by script first; report a mismatch, never work around it.\nSimulator: https://github.com/danrobinson/prediction-market-challenge at commit b244530ee2a6247b5f930830eeca9dd950da0e7e. Seeds {{start}}..{{end}} inclusive, no seed outside this block. For each seed: config = sample_config(ChallengeConfig(), ParameterVariance(), seed=seed); SimulationEngine(config, factory, seed=seed).run() once for N and once per candidate; serial, no --workers, no --sandbox, unmodified simulator, default ChallengeConfig and ParameterVariance, 2000 steps. Run in the background (nohup) writing one line per (seed, strategy) to a file and poll it, or in chunks of 50 seeds per command, so a tool timeout loses nothing; each (seed, strategy) exactly once. Check first: N's total edge on seeds 310000..310003 must be 17.116002, 20.017111, 2.390311, 241.484752; report yours as check_values.\nd = candidate minus N total edge per seed; overall and per competitor spread s=1..4: n, sum_d, sum_d2, mean_diff = sum_d/n, se = sample sd of d / sqrt(n), incumbent_mean, candidate_mean, retail_diff, arb_diff (per-seed means).\nResult: one JSON object with key, candidate_sha256, incumbent_sha256, seeds {start, end}, n, complete (true only when every seed of the block ran once for both), missing_seeds, failures (seed and error), check_values, python_version, seconds_per_simulation, overall {n, sum_d, sum_d2, mean_diff, se, incumbent_mean, candidate_mean, retail_diff, arb_diff}, by_spread {\"1\",\"2\",\"3\",\"4\": the same fields}, per_seed: an array of [seed, s, d rounded to 6 decimals] for every seed run, notes (at most 600 characters). No code in the result. A block that cannot finish reports complete false and the seeds that ran, never a partial block as the measurement.",
   "items": [
    {
     "key": "retreat-crossing-a",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "retreat-crossing-b",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "retreat-crossing-c",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "411500",
      "end": "411999"
     }
    },
    {
     "key": "s3-flow-transfer-a",
     "vars": {
      "key": "s3-flow-transfer",
      "idea": "spread 3: spread-1 censored retail-flow posterior ported to spread 3 and fed into the tick-1 stock demand",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/4c44fcf1b73f132078bd65018aa8fea6531d4cc7c0cfd4e5f0b874a69ff39299 ; SHA-256 of its UTF-8 bytes must be e7891178a0bd04852e48b14e76715b2ef37e7962d3dabca74f656dcda61d71de.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "s3-flow-transfer-b",
     "vars": {
      "key": "s3-flow-transfer",
      "idea": "spread 3: spread-1 censored retail-flow posterior ported to spread 3 and fed into the tick-1 stock demand",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/4c44fcf1b73f132078bd65018aa8fea6531d4cc7c0cfd4e5f0b874a69ff39299 ; SHA-256 of its UTF-8 bytes must be e7891178a0bd04852e48b14e76715b2ef37e7962d3dabca74f656dcda61d71de.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "s3-flow-transfer-c",
     "vars": {
      "key": "s3-flow-transfer",
      "idea": "spread 3: spread-1 censored retail-flow posterior ported to spread 3 and fed into the tick-1 stock demand",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/4c44fcf1b73f132078bd65018aa8fea6531d4cc7c0cfd4e5f0b874a69ff39299 ; SHA-256 of its UTF-8 bytes must be e7891178a0bd04852e48b14e76715b2ef37e7962d3dabca74f656dcda61d71de.",
      "start": "411500",
      "end": "411999"
     }
    },
    {
     "key": "s3-queue-transfer-a",
     "vars": {
      "key": "s3-queue-transfer",
      "idea": "spread 3: spread-2 off-target rival-price queue retention ported to spread 3",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/530133206b1ed0615a14ad24e1aae13e0ec2f03b45d89cbf4e0f9f1a0ee2efe3 ; SHA-256 of its UTF-8 bytes must be 998f1ca92b67bcc7ef539ca5e0beacf1def7472593f344cd660b4f59c6720ebd.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "s3-queue-transfer-b",
     "vars": {
      "key": "s3-queue-transfer",
      "idea": "spread 3: spread-2 off-target rival-price queue retention ported to spread 3",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/530133206b1ed0615a14ad24e1aae13e0ec2f03b45d89cbf4e0f9f1a0ee2efe3 ; SHA-256 of its UTF-8 bytes must be 998f1ca92b67bcc7ef539ca5e0beacf1def7472593f344cd660b4f59c6720ebd.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "s3-queue-transfer-c",
     "vars": {
      "key": "s3-queue-transfer",
      "idea": "spread 3: spread-2 off-target rival-price queue retention ported to spread 3",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/530133206b1ed0615a14ad24e1aae13e0ec2f03b45d89cbf4e0f9f1a0ee2efe3 ; SHA-256 of its UTF-8 bytes must be 998f1ca92b67bcc7ef539ca5e0beacf1def7472593f344cd660b4f59c6720ebd.",
      "start": "411500",
      "end": "411999"
     }
    },
    {
     "key": "f-jump-scale-a",
     "vars": {
      "key": "f-jump-scale",
      "idea": "spreads 2 and 3: overlay scaling order size by a jump-scale posterior",
      "how": "an overlay on N. In the markdown file at https://api.imdnotdead.fun/artifacts/1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b (SHA-256 of the file 1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b), inside its single ```json fence, `top` has an entry with key f-jump-scale; its `code` is the overlay source, SHA-256 19aa0a454387c70ec599aacc8376ad9f6f128da3e15f380eea67b85798c0ebf6. Assemble the candidate file: N's text with its line `class Strategy(BaseStrategy):` replaced by `class _N(BaseStrategy):`, then a newline, then the overlay source; SHA-256 of the assembled UTF-8 text must be 499530021c3f72e8da491724f289913282998f1a183036e4ca65bfa1d3ccd86f.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "f-jump-scale-b",
     "vars": {
      "key": "f-jump-scale",
      "idea": "spreads 2 and 3: overlay scaling order size by a jump-scale posterior",
      "how": "an overlay on N. In the markdown file at https://api.imdnotdead.fun/artifacts/1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b (SHA-256 of the file 1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b), inside its single ```json fence, `top` has an entry with key f-jump-scale; its `code` is the overlay source, SHA-256 19aa0a454387c70ec599aacc8376ad9f6f128da3e15f380eea67b85798c0ebf6. Assemble the candidate file: N's text with its line `class Strategy(BaseStrategy):` replaced by `class _N(BaseStrategy):`, then a newline, then the overlay source; SHA-256 of the assembled UTF-8 text must be 499530021c3f72e8da491724f289913282998f1a183036e4ca65bfa1d3ccd86f.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "f-jump-scale-c",
     "vars": {
      "key": "f-jump-scale",
      "idea": "spreads 2 and 3: overlay scaling order size by a jump-scale posterior",
      "how": "an overlay on N. In the markdown file at https://api.imdnotdead.fun/artifacts/1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b (SHA-256 of the file 1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b), inside its single ```json fence, `top` has an entry with key f-jump-scale; its `code` is the overlay source, SHA-256 19aa0a454387c70ec599aacc8376ad9f6f128da3e15f380eea67b85798c0ebf6. Assemble the candidate file: N's text with its line `class Strategy(BaseStrategy):` replaced by `class _N(BaseStrategy):`, then a newline, then the overlay source; SHA-256 of the assembled UTF-8 text must be 499530021c3f72e8da491724f289913282998f1a183036e4ca65bfa1d3ccd86f.",
      "start": "411500",
      "end": "411999"
     }
    },
    {
     "key": "s2-flow-jump-mask-a",
     "vars": {
      "key": "s2-flow-jump-mask",
      "idea": "spread 2: the flow estimator drops an observation when the rival ask rose or the rival bid moved more than one tick",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/fbd2c0ef8a258d64f04248e339e5e400f6ded3cb13f287718f45540542689b76 ; SHA-256 of its UTF-8 bytes must be 91ce2de42cda0eb65638767a546b272549638ee7cf7fb94ed45a9650e5959db7.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "s2-flow-jump-mask-b",
     "vars": {
      "key": "s2-flow-jump-mask",
      "idea": "spread 2: the flow estimator drops an observation when the rival ask rose or the rival bid moved more than one tick",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/fbd2c0ef8a258d64f04248e339e5e400f6ded3cb13f287718f45540542689b76 ; SHA-256 of its UTF-8 bytes must be 91ce2de42cda0eb65638767a546b272549638ee7cf7fb94ed45a9650e5959db7.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "s2-flow-jump-mask-c",
     "vars": {
      "key": "s2-flow-jump-mask",
      "idea": "spread 2: the flow estimator drops an observation when the rival ask rose or the rival bid moved more than one tick",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/fbd2c0ef8a258d64f04248e339e5e400f6ded3cb13f287718f45540542689b76 ; SHA-256 of its UTF-8 bytes must be 91ce2de42cda0eb65638767a546b272549638ee7cf7fb94ed45a9650e5959db7.",
      "start": "411500",
      "end": "411999"
     }
    },
    {
     "key": "s2-side-risk-a",
     "vars": {
      "key": "s2-side-risk",
      "idea": "spread 2: diffusion-only loss weights split by side, bid 1.2 and ask 1.0",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/7d4477490a285f9c7f2eb0d2ac89b584550b5e094737e0fad1d7670280e76bf7 ; SHA-256 of its UTF-8 bytes must be b1edc389df0c35a2dc0d73096f6a5eed337ff4ef026000ef67621f34773fee8f.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "s2-side-risk-b",
     "vars": {
      "key": "s2-side-risk",
      "idea": "spread 2: diffusion-only loss weights split by side, bid 1.2 and ask 1.0",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/7d4477490a285f9c7f2eb0d2ac89b584550b5e094737e0fad1d7670280e76bf7 ; SHA-256 of its UTF-8 bytes must be b1edc389df0c35a2dc0d73096f6a5eed337ff4ef026000ef67621f34773fee8f.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "s2-side-risk-c",
     "vars": {
      "key": "s2-side-risk",
      "idea": "spread 2: diffusion-only loss weights split by side, bid 1.2 and ask 1.0",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/7d4477490a285f9c7f2eb0d2ac89b584550b5e094737e0fad1d7670280e76bf7 ; SHA-256 of its UTF-8 bytes must be b1edc389df0c35a2dc0d73096f6a5eed337ff4ef026000ef67621f34773fee8f.",
      "start": "411500",
      "end": "411999"
     }
    },
    {
     "key": "side-jump-budget-a",
     "vars": {
      "key": "side-jump-budget",
      "idea": "spreads 2 and 3: side-specific jump charge in sizing, bid charged by upward and ask by downward jump mass, multiplier 1.0",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420 ; SHA-256 of its UTF-8 bytes must be 8c249a7d2ea89675599b3605807a195ee3c960f7db34650935c1f158ab210f14.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "side-jump-budget-b",
     "vars": {
      "key": "side-jump-budget",
      "idea": "spreads 2 and 3: side-specific jump charge in sizing, bid charged by upward and ask by downward jump mass, multiplier 1.0",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420 ; SHA-256 of its UTF-8 bytes must be 8c249a7d2ea89675599b3605807a195ee3c960f7db34650935c1f158ab210f14.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "side-jump-budget-c",
     "vars": {
      "key": "side-jump-budget",
      "idea": "spreads 2 and 3: side-specific jump charge in sizing, bid charged by upward and ask by downward jump mass, multiplier 1.0",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420 ; SHA-256 of its UTF-8 bytes must be 8c249a7d2ea89675599b3605807a195ee3c960f7db34650935c1f158ab210f14.",
      "start": "411500",
      "end": "411999"
     }
    },
    {
     "key": "s1-queue-safety-a",
     "vars": {
      "key": "s1-queue-safety",
      "idea": "spread 1: the off-target bid retention exception also needs the retained tick at least 5 posterior standard deviations below the posterior tick",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/e4f60b549bcecf2d4d54e39084dcd646c7fcfb67c44dd516545caf3aa384dd1c ; SHA-256 of its UTF-8 bytes must be 77ba268c93b354ba963bb211608a2b8d2ea9c8d7e667cc9ef1c8bc8dcb926289.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "s1-queue-safety-b",
     "vars": {
      "key": "s1-queue-safety",
      "idea": "spread 1: the off-target bid retention exception also needs the retained tick at least 5 posterior standard deviations below the posterior tick",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/e4f60b549bcecf2d4d54e39084dcd646c7fcfb67c44dd516545caf3aa384dd1c ; SHA-256 of its UTF-8 bytes must be 77ba268c93b354ba963bb211608a2b8d2ea9c8d7e667cc9ef1c8bc8dcb926289.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "s1-queue-safety-c",
     "vars": {
      "key": "s1-queue-safety",
      "idea": "spread 1: the off-target bid retention exception also needs the retained tick at least 5 posterior standard deviations below the posterior tick",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/e4f60b549bcecf2d4d54e39084dcd646c7fcfb67c44dd516545caf3aa384dd1c ; SHA-256 of its UTF-8 bytes must be 77ba268c93b354ba963bb211608a2b8d2ea9c8d7e667cc9ef1c8bc8dcb926289.",
      "start": "411500",
      "end": "411999"
     }
    },
    {
     "key": "f-flow-scales-a",
     "vars": {
      "key": "f-flow-scales",
      "idea": "spread 4: overlay rescaling sizes by retail-flow scales",
      "how": "an overlay on N. In the markdown file at https://api.imdnotdead.fun/artifacts/24831096ba62b5aa485b6449ed0c80af71dc487f3fb25faa1a73a8c5fe59dcc3 (SHA-256 of the file 24831096ba62b5aa485b6449ed0c80af71dc487f3fb25faa1a73a8c5fe59dcc3), inside its single ```json fence, `top` has an entry with key f-flow-scales; its `code` is the overlay source, SHA-256 32f15d36aa069f24f51d668f00a8078f4a81dc646ed13252cbff516e3b16f9b7. Assemble the candidate file: N's text with its line `class Strategy(BaseStrategy):` replaced by `class _N(BaseStrategy):`, then a newline, then the overlay source; SHA-256 of the assembled UTF-8 text must be 18419c9594a4e685223f3d2eed57f197ccf29f36c13c02f4078e5b9f8e33599f.",
      "start": "410500",
      "end": "410999"
     }
    },
    {
     "key": "f-flow-scales-b",
     "vars": {
      "key": "f-flow-scales",
      "idea": "spread 4: overlay rescaling sizes by retail-flow scales",
      "how": "an overlay on N. In the markdown file at https://api.imdnotdead.fun/artifacts/24831096ba62b5aa485b6449ed0c80af71dc487f3fb25faa1a73a8c5fe59dcc3 (SHA-256 of the file 24831096ba62b5aa485b6449ed0c80af71dc487f3fb25faa1a73a8c5fe59dcc3), inside its single ```json fence, `top` has an entry with key f-flow-scales; its `code` is the overlay source, SHA-256 32f15d36aa069f24f51d668f00a8078f4a81dc646ed13252cbff516e3b16f9b7. Assemble the candidate file: N's text with its line `class Strategy(BaseStrategy):` replaced by `class _N(BaseStrategy):`, then a newline, then the overlay source; SHA-256 of the assembled UTF-8 text must be 18419c9594a4e685223f3d2eed57f197ccf29f36c13c02f4078e5b9f8e33599f.",
      "start": "411000",
      "end": "411499"
     }
    },
    {
     "key": "f-flow-scales-c",
     "vars": {
      "key": "f-flow-scales",
      "idea": "spread 4: overlay rescaling sizes by retail-flow scales",
      "how": "an overlay on N. In the markdown file at https://api.imdnotdead.fun/artifacts/24831096ba62b5aa485b6449ed0c80af71dc487f3fb25faa1a73a8c5fe59dcc3 (SHA-256 of the file 24831096ba62b5aa485b6449ed0c80af71dc487f3fb25faa1a73a8c5fe59dcc3), inside its single ```json fence, `top` has an entry with key f-flow-scales; its `code` is the overlay source, SHA-256 32f15d36aa069f24f51d668f00a8078f4a81dc646ed13252cbff516e3b16f9b7. Assemble the candidate file: N's text with its line `class Strategy(BaseStrategy):` replaced by `class _N(BaseStrategy):`, then a newline, then the overlay source; SHA-256 of the assembled UTF-8 text must be 18419c9594a4e685223f3d2eed57f197ccf29f36c13c02f4078e5b9f8e33599f.",
      "start": "411500",
      "end": "411999"
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 64000
   },
   "merge": {
    "groupSize": 3,
    "brief": "Merge these block results into one JSON object. `candidates`: one entry per distinct candidate_sha256 (the same candidate's blocks): key, candidate_sha256, blocks (each: seeds, n, complete, failures, python_version, check_values, incumbent_mean), pooled overall and pooled per spread \"1\"..\"4\", computed only from the blocks' n, sum_d and sum_d2: n = sum of n, sum_d and sum_d2 summed, mean = sum_d/n, se = sqrt((sum_d2 - sum_d*sum_d/n)/(n-1)/n); retail_diff and arb_diff n-weighted; per_seed: the blocks' per_seed arrays concatenated in seed order; flag: set and explained when a block is incomplete, has failures, reports a different candidate or incumbent hash, or wrong check values. Copy block numbers as reported; recompute nothing but the pooling. Before the JSON fence, at most 1500 characters of markdown: what each candidate's pooled evidence says, by spread, and the inputs used."
   }
  },
  {
   "name": "r3-final-rc",
   "brief": "One item measures ONE frozen candidate against the incumbent N on ONE block of 500 seeds, paired by seed. No development, no tuning: change no code. Candidate {{key}} ({{idea}}): {{how}}\nN: the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/db22aff7167a4798251ed3d20432509f30e511e4958799aba5b17b41bb39b4b6 ; SHA-256 of its UTF-8 bytes bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae. Verify every hash by script first; report a mismatch, never work around it.\nSimulator: https://github.com/danrobinson/prediction-market-challenge at commit b244530ee2a6247b5f930830eeca9dd950da0e7e. Seeds {{start}}..{{end}} inclusive, no seed outside this block. For each seed: config = sample_config(ChallengeConfig(), ParameterVariance(), seed=seed); SimulationEngine(config, factory, seed=seed).run() once for N and once per candidate; serial, no --workers, no --sandbox, unmodified simulator, default ChallengeConfig and ParameterVariance, 2000 steps. Run in the background (nohup) writing one line per (seed, strategy) to a file and poll it, or in chunks of 50 seeds per command, so a tool timeout loses nothing; each (seed, strategy) exactly once. Check first: N's total edge on seeds 310000..310003 must be 17.116002, 20.017111, 2.390311, 241.484752; report yours as check_values.\nd = candidate minus N total edge per seed; overall and per competitor spread s=1..4: n, sum_d, sum_d2, mean_diff = sum_d/n, se = sample sd of d / sqrt(n), incumbent_mean, candidate_mean, retail_diff, arb_diff (per-seed means).\nResult: one JSON object with key, candidate_sha256, incumbent_sha256, seeds {start, end}, n, complete (true only when every seed of the block ran once for both), missing_seeds, failures (seed and error), check_values, python_version, seconds_per_simulation, overall {n, sum_d, sum_d2, mean_diff, se, incumbent_mean, candidate_mean, retail_diff, arb_diff}, by_spread {\"1\",\"2\",\"3\",\"4\": the same fields}, per_seed: an array of [seed, s, d rounded to 6 decimals] for every seed run, notes (at most 600 characters). No code in the result. A block that cannot finish reports complete false and the seeds that ran, never a partial block as the measurement.",
   "items": [
    {
     "key": "rc-f1",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "900000",
      "end": "900499"
     }
    },
    {
     "key": "rc-f2",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "900500",
      "end": "900999"
     }
    },
    {
     "key": "rc-f3",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "901000",
      "end": "901499"
     }
    },
    {
     "key": "rc-f4",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "901500",
      "end": "901999"
     }
    },
    {
     "key": "rc-f5",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "902000",
      "end": "902499"
     }
    },
    {
     "key": "rc-f6",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "902500",
      "end": "902999"
     }
    },
    {
     "key": "rc-f7",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "903000",
      "end": "903499"
     }
    },
    {
     "key": "rc-f8",
     "vars": {
      "key": "retreat-crossing",
      "idea": "spread 3: a one-tick outward rival retreat reweights the tick posterior toward the crossed interval, strength 0.5",
      "how": "the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 ; SHA-256 of its UTF-8 bytes must be b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf.",
      "start": "903500",
      "end": "903999"
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 64000
   }
  },
  {
   "name": "r4-deepen",
   "brief": "One item develops ONE change to the incumbent N and screens it paired against N. Idea {{key}}: {{idea}}. Spread(s): {{spreads}}. {{change}} Nothing else changes. N reads the rival's spread into self.s (1 to 4) at the first step and a run has one spread: act only when self.s is a target spread, so off-target seeds give d exactly 0.\nN: the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/db22aff7167a4798251ed3d20432509f30e511e4958799aba5b17b41bb39b4b6 ; SHA-256 of its UTF-8 bytes bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae; verify by script; you may read N. Simulator: https://github.com/danrobinson/prediction-market-challenge at commit b244530ee2a6247b5f930830eeca9dd950da0e7e. For each seed: config = sample_config(ChallengeConfig(), ParameterVariance(), seed=seed); SimulationEngine(config, factory, seed=seed).run() once for N and once per candidate; serial, no --workers, no --sandbox, unmodified simulator, default ChallengeConfig and ParameterVariance, 2000 steps. Run in the background (nohup) writing one line per (seed, strategy) to a file and poll it, or in chunks of 50 seeds per command, so a tool timeout loses nothing; each (seed, strategy) exactly once. Check first: N's total edge on seeds 310000..310003 must be 17.116002, 20.017111, 2.390311, 241.484752; report yours as check_values.\nTuning: seeds 320000..320199 only, at most 3 variants, pick one on tuning and freeze it. Holdout: seeds 430000..430499, every seed, the frozen variant and N. Never any other seed, never 900000..903999. d = candidate minus N total edge per seed; overall and per competitor spread s=1..4: n, sum_d, sum_d2, mean_diff = sum_d/n, se = sample sd of d / sqrt(n), incumbent_mean, candidate_mean, retail_diff, arb_diff (per-seed means).\nResult: one JSON object with key, idea, approach (at most 600 characters), tried (per variant: name, code_sha256, tuning mean_diff, se), next (one sentence), code (the frozen candidate's full source), code_sha256, incumbent_code_sha256, target_spreads, tuning {seeds, selected, variants}, paired {seeds, n, complete, missing_seeds, overall, by_spread {\"1\"..\"4\"}}, failures (seed and error), check_values, python_version, seconds_per_simulation. A screen on 500 seeds, never a promotion.",
   "items": [
    {
     "key": "c-s3-retreat-flow",
     "vars": {
      "key": "c-s3-retreat-flow",
      "idea": "combine retreat-crossing with s3-flow-transfer",
      "spreads": "3",
      "change": "Combine two round-3 changes to N, each the `code` field of the JSON at its URL (verify the hash; each is N plus one change): retreat-crossing (https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 , SHA-256 b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf; spread 3: a one-tick outward rival retreat halves posterior weight outside the crossed interval) and s3-flow-transfer (https://api.imdnotdead.fun/artifacts/4c44fcf1b73f132078bd65018aa8fea6531d4cc7c0cfd4e5f0b874a69ff39299 , SHA-256 e7891178a0bd04852e48b14e76715b2ef37e7962d3dabca74f656dcda61d71de). Variants: both as frozen; both with the retreat strength 0.3."
     }
    },
    {
     "key": "c-s3-retreat-queue",
     "vars": {
      "key": "c-s3-retreat-queue",
      "idea": "combine retreat-crossing with s3-queue-transfer",
      "spreads": "3",
      "change": "Combine two round-3 changes to N, each the `code` field of the JSON at its URL (verify the hash; each is N plus one change): retreat-crossing (https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 , SHA-256 b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf; spread 3: a one-tick outward rival retreat halves posterior weight outside the crossed interval) and s3-queue-transfer (https://api.imdnotdead.fun/artifacts/530133206b1ed0615a14ad24e1aae13e0ec2f03b45d89cbf4e0f9f1a0ee2efe3 , SHA-256 998f1ca92b67bcc7ef539ca5e0beacf1def7472593f344cd660b4f59c6720ebd). Variants: both as frozen; retention size cap doubled."
     }
    },
    {
     "key": "c-s3-retreat-jumpscale",
     "vars": {
      "key": "c-s3-retreat-jumpscale",
      "idea": "combine retreat-crossing with the f-jump-scale overlay on spread 3 only",
      "spreads": "3",
      "change": "Start from N and apply the change of retreat-crossing (https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 , SHA-256 b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf; spread 3: a one-tick outward rival retreat halves posterior weight outside the crossed interval), then graft the f-jump-scale overlay (`top` entry f-jump-scale in the json fence of https://api.imdnotdead.fun/artifacts/1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b , SHA-256 19aa0a454387c70ec599aacc8376ad9f6f128da3e15f380eea67b85798c0ebf6) as an on_step post-step acting only when self.s == 3. Variants: as frozen; half strength."
     }
    },
    {
     "key": "c-s3-flow-queue",
     "vars": {
      "key": "c-s3-flow-queue",
      "idea": "combine s3-flow-transfer with s3-queue-transfer",
      "spreads": "3",
      "change": "Combine two round-3 changes to N, each the `code` field of the JSON at its URL (verify the hash; each is N plus one change): s3-flow-transfer (https://api.imdnotdead.fun/artifacts/4c44fcf1b73f132078bd65018aa8fea6531d4cc7c0cfd4e5f0b874a69ff39299 , SHA-256 e7891178a0bd04852e48b14e76715b2ef37e7962d3dabca74f656dcda61d71de) and s3-queue-transfer (https://api.imdnotdead.fun/artifacts/530133206b1ed0615a14ad24e1aae13e0ec2f03b45d89cbf4e0f9f1a0ee2efe3 , SHA-256 998f1ca92b67bcc7ef539ca5e0beacf1def7472593f344cd660b4f59c6720ebd). Variants: both as frozen; the flow multiplier clamp narrowed to [0.7, 1.5]."
     }
    },
    {
     "key": "c-s3-retreat-sjb",
     "vars": {
      "key": "c-s3-retreat-sjb",
      "idea": "combine retreat-crossing with side-jump-budget restricted to spread 3",
      "spreads": "3",
      "change": "Combine two round-3 changes to N, each the `code` field of the JSON at its URL (verify the hash; each is N plus one change): retreat-crossing (https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 , SHA-256 b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf; spread 3: a one-tick outward rival retreat halves posterior weight outside the crossed interval) and side-jump-budget (https://api.imdnotdead.fun/artifacts/a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420 , SHA-256 8c249a7d2ea89675599b3605807a195ee3c960f7db34650935c1f158ab210f14) with the jump charge only when self.s == 3. Variants: multiplier 1.0; 0.5."
     }
    },
    {
     "key": "c-s2-mask-siderisk",
     "vars": {
      "key": "c-s2-mask-siderisk",
      "idea": "combine s2-flow-jump-mask with s2-side-risk",
      "spreads": "2",
      "change": "Combine two round-3 changes to N, each the `code` field of the JSON at its URL (verify the hash; each is N plus one change): s2-flow-jump-mask (https://api.imdnotdead.fun/artifacts/fbd2c0ef8a258d64f04248e339e5e400f6ded3cb13f287718f45540542689b76 , SHA-256 91ce2de42cda0eb65638767a546b272549638ee7cf7fb94ed45a9650e5959db7) and s2-side-risk (https://api.imdnotdead.fun/artifacts/7d4477490a285f9c7f2eb0d2ac89b584550b5e094737e0fad1d7670280e76bf7 , SHA-256 b1edc389df0c35a2dc0d73096f6a5eed337ff4ef026000ef67621f34773fee8f). Variants: both as frozen; bid weight 1.4."
     }
    },
    {
     "key": "c-s2-siderisk-sjb",
     "vars": {
      "key": "c-s2-siderisk-sjb",
      "idea": "combine s2-side-risk with side-jump-budget restricted to spread 2",
      "spreads": "2",
      "change": "Combine two round-3 changes to N, each the `code` field of the JSON at its URL (verify the hash; each is N plus one change): s2-side-risk (https://api.imdnotdead.fun/artifacts/7d4477490a285f9c7f2eb0d2ac89b584550b5e094737e0fad1d7670280e76bf7 , SHA-256 b1edc389df0c35a2dc0d73096f6a5eed337ff4ef026000ef67621f34773fee8f) and side-jump-budget (https://api.imdnotdead.fun/artifacts/a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420 , SHA-256 8c249a7d2ea89675599b3605807a195ee3c960f7db34650935c1f158ab210f14) with the jump charge only when self.s == 2. Variants: multiplier 1.0; 0.5."
     }
    },
    {
     "key": "c-s2-mask-jumpscale",
     "vars": {
      "key": "c-s2-mask-jumpscale",
      "idea": "combine s2-flow-jump-mask with the f-jump-scale overlay on spread 2 only",
      "spreads": "2",
      "change": "Start from N and apply the change of s2-flow-jump-mask (https://api.imdnotdead.fun/artifacts/fbd2c0ef8a258d64f04248e339e5e400f6ded3cb13f287718f45540542689b76 , SHA-256 91ce2de42cda0eb65638767a546b272549638ee7cf7fb94ed45a9650e5959db7), then graft the f-jump-scale overlay (`top` entry f-jump-scale in the json fence of https://api.imdnotdead.fun/artifacts/1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b , SHA-256 19aa0a454387c70ec599aacc8376ad9f6f128da3e15f380eea67b85798c0ebf6) acting only when self.s == 2. Variants: as frozen; half strength."
     }
    },
    {
     "key": "c-s4-flowscales-tail",
     "vars": {
      "key": "c-s4-flowscales-tail",
      "idea": "combine the f-flow-scales overlay with s4-uncertainty-tail",
      "spreads": "4",
      "change": "Start from N and apply the change of s4-uncertainty-tail (https://api.imdnotdead.fun/artifacts/10c5f5e7a38d6b1fbfc35993bc762a8dec90b21d813e8f2ab810fc3acecd1af2 , SHA-256 120ca4121b17c5b56982d8c6258d9edf1db9985e3119eb66d7b0d956629f2d63), then graft the f-flow-scales overlay (`top` entry f-flow-scales in the json fence of https://api.imdnotdead.fun/artifacts/24831096ba62b5aa485b6449ed0c80af71dc487f3fb25faa1a73a8c5fe59dcc3 , SHA-256 32f15d36aa069f24f51d668f00a8078f4a81dc646ed13252cbff516e3b16f9b7) as an on_step post-step acting only when self.s == 4. Variants: as frozen; overlay effect halved."
     }
    },
    {
     "key": "c-s1-queue-postjump",
     "vars": {
      "key": "c-s1-queue-postjump",
      "idea": "combine s1-queue-safety with the f-post-jump overlay on spread 1 only",
      "spreads": "1",
      "change": "Start from N and apply the change of s1-queue-safety (https://api.imdnotdead.fun/artifacts/e4f60b549bcecf2d4d54e39084dcd646c7fcfb67c44dd516545caf3aa384dd1c , SHA-256 77ba268c93b354ba963bb211608a2b8d2ea9c8d7e667cc9ef1c8bc8dcb926289), then graft the f-post-jump overlay (`top` entry f-post-jump in the json fence of https://api.imdnotdead.fun/artifacts/1117198c0b6d6379587ca7db508e00b01a182bbbd5d78f737b803a9102057a2b , SHA-256 5bf56012353053f27ae99edb3b452fd97486d198e68c7ee9b78edb7764109d75) acting only when self.s == 1. Variants: as frozen; qb_z 4."
     }
    },
    {
     "key": "c-s3-retreat-strength",
     "vars": {
      "key": "c-s3-retreat-strength",
      "idea": "retune retreat-crossing's strength on fresh tuning seeds",
      "spreads": "3",
      "change": "Start from N and apply the change of retreat-crossing (https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 , SHA-256 b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf; spread 3: a one-tick outward rival retreat halves posterior weight outside the crossed interval) and search the strength over 0.3, 0.5 and 0.7 on tuning; freeze the best."
     }
    },
    {
     "key": "c-s2-mask-to-ask",
     "vars": {
      "key": "c-s2-mask-to-ask",
      "idea": "feed the jump-masked flow estimate into spread-2 ask sizing",
      "spreads": "2",
      "change": "Start from N and apply the change of s2-flow-jump-mask (https://api.imdnotdead.fun/artifacts/fbd2c0ef8a258d64f04248e339e5e400f6ded3cb13f287718f45540542689b76 , SHA-256 91ce2de42cda0eb65638767a546b272549638ee7cf7fb94ed45a9650e5959db7); its masked flow estimate currently feeds only the tick-1 stock. Additionally scale the spread-2 main ask size by clip(masked_rate/prior_rate, 0.5, 1.5). Variants: that; clamp [0.7, 1.3]."
     }
    },
    {
     "key": "d-s2-ownfill-bid-pull",
     "vars": {
      "key": "d-s2-ownfill-bid-pull",
      "idea": "pull bids for one callback after an own bid fill",
      "spreads": "2",
      "change": "In N's own-fill handling, when a resting bid order of ours was filled on the previous step, do not rest bid orders on the next callback (cancel and skip reposting them for exactly one step), then resume N's normal quoting. Variants: one step; two steps."
     }
    },
    {
     "key": "d-s3-ownfill-bid-pull",
     "vars": {
      "key": "d-s3-ownfill-bid-pull",
      "idea": "pull bids for one callback after an own bid fill",
      "spreads": "3",
      "change": "In N's own-fill handling, when a resting bid order of ours was filled on the previous step, do not rest bid orders on the next callback (cancel and skip reposting them for exactly one step), then resume N's normal quoting. Variants: one step; two steps."
     }
    },
    {
     "key": "d-s2-ownfill-ask-pull",
     "vars": {
      "key": "d-s2-ownfill-ask-pull",
      "idea": "pull asks for one callback after an own ask fill",
      "spreads": "2",
      "change": "In N's own-fill handling, when a resting ask order of ours was filled on the previous step, do not rest ask orders on the next callback (cancel and skip reposting them for exactly one step), then resume N's normal quoting. Variants: one step; two steps."
     }
    },
    {
     "key": "d-s3-ownfill-ask-pull",
     "vars": {
      "key": "d-s3-ownfill-ask-pull",
      "idea": "pull asks for one callback after an own ask fill",
      "spreads": "3",
      "change": "In N's own-fill handling, when a resting ask order of ours was filled on the previous step, do not rest ask orders on the next callback (cancel and skip reposting them for exactly one step), then resume N's normal quoting. Variants: one step; two steps."
     }
    },
    {
     "key": "d-s4-ownfill-both-pull",
     "vars": {
      "key": "d-s4-ownfill-both-pull",
      "idea": "pull the filled side for one callback after any own fill",
      "spreads": "4",
      "change": "In N's own-fill handling, when a resting same-side order of ours was filled on the previous step, do not rest same-side orders on the next callback (cancel and skip reposting them for exactly one step), then resume N's normal quoting. Variants: one step; two steps."
     }
    },
    {
     "key": "d-s1-ownfill-both-pull",
     "vars": {
      "key": "d-s1-ownfill-both-pull",
      "idea": "pull the filled side for one callback after any own fill",
      "spreads": "1",
      "change": "In N's own-fill handling, when a resting same-side order of ours was filled on the previous step, do not rest same-side orders on the next callback (cancel and skip reposting them for exactly one step), then resume N's normal quoting. Variants: one step; two steps."
     }
    },
    {
     "key": "d-s23-ownfill-size-halve",
     "vars": {
      "key": "d-s23-ownfill-size-halve",
      "idea": "halve new same-side size for three steps after an own fill instead of pulling",
      "spreads": "2 and 3",
      "change": "After an own fill on a side, multiply N's newly placed size on that side by 0.5 for the next 3 callbacks (kept orders untouched). Variants: 3 steps; 5 steps; factor 0.25 for 3 steps."
     }
    },
    {
     "key": "d-s23-ask-jump-mult",
     "vars": {
      "key": "d-s23-ask-jump-mult",
      "idea": "ask-only multiplier on the upward-jump loss term in sizing",
      "spreads": "2 and 3",
      "change": "In N's expected-loss sizing for asks, multiply only the upward-jump loss component by a constant; bids unchanged. Variants: 1.5; 2.0; 3.0."
     }
    },
    {
     "key": "d-s23-noquote-bid-withdraw",
     "vars": {
      "key": "d-s23-noquote-bid-withdraw",
      "idea": "shrink bids when the rival shows no bid",
      "spreads": "2 and 3",
      "change": "When the rival book has no bid at all on a callback, multiply N's new bid size by a factor; when a rival bid is present, unchanged. Variants: factor 0; 0.5."
     }
    },
    {
     "key": "d-s2-join-mid",
     "vars": {
      "key": "d-s2-join-mid",
      "idea": "join the rival's price level in the 20 to 80 cent range",
      "spreads": "2",
      "change": "When 0.20 <= phat <= 0.80 (N's own probability estimate), place N's main bid and ask at the rival's best bid and best ask ticks (joining, never improving), sizes from N's sizing at those ticks, capped at 2 times the rival's displayed size. Variants: cap 2x; cap 1x."
     }
    },
    {
     "key": "d-s2-inside-mid",
     "vars": {
      "key": "d-s2-inside-mid",
      "idea": "quote one tick inside the rival in the 20 to 80 cent range with a jump charge",
      "spreads": "2",
      "change": "When 0.20 <= phat <= 0.80, place N's main bid one tick above the rival bid and ask one tick below the rival ask when that keeps a spread of at least 2 ticks, sized by N's sizing with the jump loss term doubled. Variants: jump term x2; x3."
     }
    },
    {
     "key": "d-s3-mid-size-up",
     "vars": {
      "key": "d-s3-mid-size-up",
      "idea": "larger size at the rival's level in the 20 to 80 cent range",
      "spreads": "3",
      "change": "When 0.20 <= phat <= 0.80 and N's order rests at the rival's best tick on that side, multiply its size by a factor. Variants: 1.5; 2.0."
     }
    },
    {
     "key": "d-s2-lowp-early-bids",
     "vars": {
      "key": "d-s2-lowp-early-bids",
      "idea": "fewer bids at very low probability early in the run",
      "spreads": "2",
      "change": "When phat < 0.05 and the step is below 1000, multiply N's new bid size by a factor. Variants: 0.5; 0."
     }
    },
    {
     "key": "d-s2-late-5-20-widen",
     "vars": {
      "key": "d-s2-late-5-20-widen",
      "idea": "late-run bids in the 5 to 20 cent range one tick lower",
      "spreads": "2",
      "change": "When step >= 1600 and 0.05 <= phat < 0.20, place N's main bid one tick lower than N would (keep its size). Variants: one tick lower; same tick with half size."
     }
    },
    {
     "key": "d-s3-late-mid-cut",
     "vars": {
      "key": "d-s3-late-mid-cut",
      "idea": "late-run size cut in the 20 to 80 cent range",
      "spreads": "3",
      "change": "When step >= 1600 and 0.20 <= phat <= 0.80, multiply N's new bid and ask sizes by a factor. Variants: 0.5; 0.25."
     }
    },
    {
     "key": "d-s23-jump-proxy-cancel",
     "vars": {
      "key": "d-s23-jump-proxy-cancel",
      "idea": "cancel the exposed side after a same-direction two-tick rival move",
      "spreads": "2 and 3",
      "change": "When both rival quotes moved at least 2 ticks in the same direction on the last step, cancel and do not repost our orders on the side that direction runs into (asks after an up move, bids after a down move) for one callback. Variants: 2 ticks; 3 ticks."
     }
    },
    {
     "key": "d-s4-jump-proxy-cancel",
     "vars": {
      "key": "d-s4-jump-proxy-cancel",
      "idea": "cancel the exposed side after a same-direction two-tick rival move",
      "spreads": "4",
      "change": "When both rival quotes moved at least 2 ticks in the same direction on the last step, cancel and do not repost our orders on the side that direction runs into for one callback. Variants: 2 ticks; 3 ticks."
     }
    },
    {
     "key": "d-s23-retreat-cancel",
     "vars": {
      "key": "d-s23-retreat-cancel",
      "idea": "cancel the side the rival just retreated from",
      "spreads": "2 and 3",
      "change": "When the rival's quote on one side moved exactly one tick outward on the last step (ask up or bid down), cancel our orders on that side and do not repost them for one callback; the posterior is untouched. Variants: one callback; two."
     }
    },
    {
     "key": "d-s2-retreat-crossing-port",
     "vars": {
      "key": "d-s2-retreat-crossing-port",
      "idea": "retreat-crossing's posterior reweight ported to spread 2",
      "spreads": "2",
      "change": "Start from N and apply the change of retreat-crossing (https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 , SHA-256 b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf; spread 3: a one-tick outward rival retreat halves posterior weight outside the crossed interval) so that it acts when self.s == 2 instead of 3. Variants: strength 0.5; 0.3."
     }
    },
    {
     "key": "d-s4-retreat-crossing-port",
     "vars": {
      "key": "d-s4-retreat-crossing-port",
      "idea": "retreat-crossing's posterior reweight ported to spread 4",
      "spreads": "4",
      "change": "Start from N and apply the change of retreat-crossing (https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 , SHA-256 b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf; spread 3: a one-tick outward rival retreat halves posterior weight outside the crossed interval) so that it acts when self.s == 4 instead of 3. Variants: strength 0.5; 0.3."
     }
    },
    {
     "key": "d-s1-retreat-crossing-port",
     "vars": {
      "key": "d-s1-retreat-crossing-port",
      "idea": "retreat-crossing's posterior reweight ported to spread 1",
      "spreads": "1",
      "change": "Start from N and apply the change of retreat-crossing (https://api.imdnotdead.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1 , SHA-256 b5158a963a479a0919146dc0d56a347b68ddc2d66dd7c467b48473baef8997cf; spread 3: a one-tick outward rival retreat halves posterior weight outside the crossed interval) so that it acts when self.s == 1 instead of 3. Variants: strength 0.5; 0.3."
     }
    },
    {
     "key": "p-s23-ask-dmin",
     "vars": {
      "key": "p-s23-ask-dmin",
      "idea": "ask-only minimum distance from the probability estimate",
      "spreads": "2 and 3",
      "change": "Main asks closer than dma ticks above phat are moved up to phat + dma ticks (rounded up), bids unchanged; an earlier incumbent gained +0.33 (se 0.10) from this. Variants: dma 1; 2."
     }
    },
    {
     "key": "p-s34-low-p-ask-boost",
     "vars": {
      "key": "p-s34-low-p-ask-boost",
      "idea": "larger ask cap at very low probability",
      "spreads": "3 and 4",
      "change": "When phat < 0.05, multiply N's ask size cap by c. Variants: c 1.5; 2.0."
     }
    },
    {
     "key": "p-s34-xu-low-p",
     "vars": {
      "key": "p-s34-xu-low-p",
      "idea": "lower uncovered-ask price floor in the 5 to 10 cent band",
      "spreads": "3 and 4",
      "change": "If N floors the price of uncovered (not inventory-backed) asks, lower that floor only while 0.05 <= phat < 0.10. If N has no such floor, say so and test instead: allow uncovered asks one tick lower in that band. Variants: floor x0.5; x0.3."
     }
    },
    {
     "key": "p-all-phat-clamp",
     "vars": {
      "key": "p-all-phat-clamp",
      "idea": "clamp the probability estimate away from 0 and 1",
      "spreads": "1, 2, 3 and 4",
      "change": "Clamp phat into [c, 1-c] wherever N uses it for sizing and pricing. Variants: c 0.001; 0.0005."
     }
    },
    {
     "key": "p-s2-competitor-mid-likelihood",
     "vars": {
      "key": "p-s2-competitor-mid-likelihood",
      "idea": "soft posterior update toward the rival midpoint",
      "spreads": "2",
      "change": "After N's posterior transition, multiply the tick posterior by a Gaussian likelihood centred on the rival midpoint with standard deviation w ticks, then renormalize. Variants: w 1.5; 3."
     }
    },
    {
     "key": "p-all-release-window",
     "vars": {
      "key": "p-all-release-window",
      "idea": "release the cash reserve over the last steps",
      "spreads": "1, 2, 3 and 4",
      "change": "If N keeps a cash reserve against new asks, release it linearly over the last R steps. If N has no reserve, say so and test instead: in the last R steps allow ask sizes up to the full cash. Variants: R 50; 150."
     }
    },
    {
     "key": "p-s12-stock-entry-gate",
     "vars": {
      "key": "p-s12-stock-entry-gate",
      "idea": "stock-entry gate restricted to spreads 1 and 2",
      "spreads": "1 and 2",
      "change": "In the penny-bank stock branch replace the upper price gate with: enter only when the rival's best bid is at one tick; act only when self.s is 1 or 2 (a port measured on all spreads was +1.08 on s1, +0.53 on s2, -0.29 on s4, all within noise). One variant."
     }
    },
    {
     "key": "d-s3-sjb-retune",
     "vars": {
      "key": "d-s3-sjb-retune",
      "idea": "side-jump-budget multiplier retuned for spread 3",
      "spreads": "3",
      "change": "Start from N and apply the change of side-jump-budget (https://api.imdnotdead.fun/artifacts/a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420 , SHA-256 8c249a7d2ea89675599b3605807a195ee3c960f7db34650935c1f158ab210f14) restricted to self.s == 3 and search the multiplier. Variants: 0.5; 1.5; 2.0."
     }
    },
    {
     "key": "d-s2-sjb-retune",
     "vars": {
      "key": "d-s2-sjb-retune",
      "idea": "side-jump-budget multiplier retuned for spread 2",
      "spreads": "2",
      "change": "Start from N and apply the change of side-jump-budget (https://api.imdnotdead.fun/artifacts/a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420 , SHA-256 8c249a7d2ea89675599b3605807a195ee3c960f7db34650935c1f158ab210f14) restricted to self.s == 2 and search the multiplier. Variants: 0.5; 1.5; 2.0."
     }
    },
    {
     "key": "d-s1-join-mid",
     "vars": {
      "key": "d-s1-join-mid",
      "idea": "join the rival's price level in the 20 to 80 cent range",
      "spreads": "1",
      "change": "When 0.20 <= phat <= 0.80, place a bid at the rival's best bid tick and an ask at the rival's best ask tick (joining, never improving) with size from N's sizing at those ticks, capped at the rival's displayed size, in addition to N's other orders. Variants: cap 1x; 0.5x."
     }
    },
    {
     "key": "d-all-markout-widen",
     "vars": {
      "key": "d-all-markout-widen",
      "idea": "widen a side after negative fill markouts",
      "spreads": "1, 2, 3 and 4",
      "change": "Track the 5-step markout of our fills per side (edge of the fill price against phat five steps later). When the trailing 10-fill mean markout on a side is below -m ticks, place that side one tick wider than N would for the next 20 steps. Variants: m 0.5; 1.0."
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 64000
   },
   "merge": {
    "groupSize": 11,
    "brief": "Merge the items' results into one JSON object. `rows`, one per item, copied from the item and never recomputed: key, idea (at most 200 characters), code_sha256, target_spreads, complete, h_n, incumbent_mean, mean_diff, se, retail_diff, arb_diff, tuning_mean, tuning_se, by_spread (per spread: n, mean_diff, se, sum_d, sum_d2), failures, check_values_ok, python_version, flag (set and explained when h_n is under 500, the run is incomplete, code_sha256 is missing or does not equal the SHA-256 of the row's code, there are failures, check values are wrong, or incumbent_mean differs from the other rows'). `top`: for the two unflagged rows with the largest mean_diff/se on one of their target spreads, their key, code_sha256 and full code. `notes`: at most 1500 characters on what the group learned. Verify every row's code hashes to its code_sha256. Before the JSON fence, at most 1500 characters of markdown: a ranked table (key, target spread, mean_diff and se on that spread, overall mean_diff and se, flag) and the inputs used. Run no simulations."
   }
  },
  {
   "name": "r4-fresh",
   "brief": "One item builds ONE overlay mechanism on the incumbent N, blind, and screens it paired against N. Mechanism {{key}}: {{mech}}\nBlind rule: do not open, print, diff or search N's source, any other strategy for this challenge, a leaderboard entry or an earlier result here. Read only the simulator, its README and docs: https://github.com/danrobinson/prediction-market-challenge at commit b244530ee2a6247b5f930830eeca9dd950da0e7e, unmodified.\nGet N by script: download the JSON at https://api.imdnotdead.fun/artifacts/db22aff7167a4798251ed3d20432509f30e511e4958799aba5b17b41bb39b4b6 , write its `code` field to n_strategy.py; SHA-256 of the UTF-8 bytes must be bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae (checked by script). Overlay: load n_strategy.py with its line `class Strategy(BaseStrategy):` replaced by `class _N(BaseStrategy):`; define `class Strategy(_N)` whose on_step calls super().on_step(state), then drops, resizes, moves or adds orders by your mechanism only, from the StepState and N's actions. N sets self.s (1 to 4) from the rival's spread at the first step and a run has one spread: act only on spreads where the mechanism makes sense (spreads_acted); show off_equals_n: switched off, actions equal N's on seeds 310000..310009 every step.\nFor each seed: config = sample_config(ChallengeConfig(), ParameterVariance(), seed=seed); SimulationEngine(config, factory, seed=seed).run() once for N and once per candidate; serial, no --workers, no --sandbox, unmodified simulator, default ChallengeConfig and ParameterVariance, 2000 steps. Run in the background (nohup) writing one line per (seed, strategy) to a file and poll it, or in chunks of 50 seeds per command, so a tool timeout loses nothing; each (seed, strategy) exactly once. Check first: N's total edge on seeds 310000..310003 must be 17.116002, 20.017111, 2.390311, 241.484752; report yours as check_values. Tuning: seeds 320000..320199, at most 3 variants, freeze one. Holdout: seeds 430000..430499, every seed, frozen variant and N; no other seed, never 900000..903999. d = candidate minus N total edge per seed; overall and per competitor spread s=1..4: n, sum_d, sum_d2, mean_diff = sum_d/n, se = sample sd of d / sqrt(n), incumbent_mean, candidate_mean, retail_diff, arb_diff (per-seed means).\nResult: one JSON object with key, mech, approach (at most 600 characters), tried, next, spreads_acted, off_equals_n, code (overlay source only, at most 10000 bytes), code_sha256 (of it), assembled_sha256 (SHA-256 of N's text with that class line replaced, a newline, then the overlay), tuning {seeds, selected, variants}, paired {seeds, n, complete, missing_seeds, overall, by_spread {\"1\"..\"4\"}}, failures, check_values, python_version, seconds_per_simulation. A screen, never a promotion.",
   "items": [
    {
     "key": "f-vol-size",
     "vars": {
      "key": "f-vol-size",
      "mech": "size scaled by recent volatility: keep an EWMA of the squared one-step change of the rival midpoint and multiply every order size N places by min(1, v0/ewma)^g; tune v0 and g."
     }
    },
    {
     "key": "f-late-widen",
     "vars": {
      "key": "f-late-widen",
      "mech": "late-run widening: in the last W steps move every N order one tick away from the rival midpoint, sizes unchanged; tune W (100, 200, 400)."
     }
    },
    {
     "key": "f-inventory-skew",
     "vars": {
      "key": "f-inventory-skew",
      "mech": "inventory skew: when YES inventory (shares held, from the state) exceeds a threshold, move asks one tick down and bids one tick down; below minus the threshold the mirror; tune the threshold."
     }
    },
    {
     "key": "f-rival-size-cap",
     "vars": {
      "key": "f-rival-size-cap",
      "mech": "rival size cap: cap each of our orders at the same tick to k times the rival's displayed size at that tick (or at the nearest rival level); tune k (1, 2, 4)."
     }
    },
    {
     "key": "f-join-only",
     "vars": {
      "key": "f-join-only",
      "mech": "join only: any N order priced inside the rival's best quotes is moved back to the rival's best tick on its side (size unchanged); act on spreads 2 to 4."
     }
    },
    {
     "key": "f-fill-rate-size",
     "vars": {
      "key": "f-fill-rate-size",
      "mech": "fill-rate adaptive size: track realized own-fill notional per 200 steps against its running average; scale new sizes by clip(ratio, lo, hi); tune lo and hi."
     }
    },
    {
     "key": "f-two-step-split",
     "vars": {
      "key": "f-two-step-split",
      "mech": "time split: place half of each new N order now and the other half on the next callback at the same price if N still quotes there."
     }
    },
    {
     "key": "f-lowp-bid-drop",
     "vars": {
      "key": "f-lowp-bid-drop",
      "mech": "drop bids at very low probability: when the rival midpoint is below a cents, place no bids at all; tune a (3, 5, 8)."
     }
    },
    {
     "key": "f-highp-ask-drop",
     "vars": {
      "key": "f-highp-ask-drop",
      "mech": "drop asks at very high probability: when the rival midpoint is above 100 - a cents, place no asks; tune a (3, 5, 8)."
     }
    },
    {
     "key": "f-microprice-shift",
     "vars": {
      "key": "f-microprice-shift",
      "mech": "microprice shift: compute the rival size imbalance (bid size minus ask size over their sum); when it exceeds +t move our ask one tick up, below -t move our bid one tick down; tune t."
     }
    },
    {
     "key": "f-cash-reserve-decay",
     "vars": {
      "key": "f-cash-reserve-decay",
      "mech": "decaying cash reserve: keep a reserve r(step) = r0 * (steps remaining / 2000) of cash uncommitted by cancelling or shrinking the lowest-priority new orders that would exceed it; tune r0."
     }
    },
    {
     "key": "f-paired-size",
     "vars": {
      "key": "f-paired-size",
      "mech": "paired sizing: estimate each side's fill probability per step from own fill history and size bids and asks so the expected next-step change in inventory is zero, keeping N's total per step."
     }
    },
    {
     "key": "f-order-count-cap",
     "vars": {
      "key": "f-order-count-cap",
      "mech": "order count cap: keep at most the two best-priced resting orders per side, cancelling deeper ones; variant: three."
     }
    },
    {
     "key": "f-rival-inward-join",
     "vars": {
      "key": "f-rival-inward-join",
      "mech": "rival inward join: when the rival improves its quote on a side (moves inward), add an order joining its new tick on that side with size from the smallest N order on that side; variant: half size."
     }
    },
    {
     "key": "f-fill-burst-pause",
     "vars": {
      "key": "f-fill-burst-pause",
      "mech": "fill burst pause: when two or more own fills on the same side happen within 3 steps, place no orders on that side for P steps; tune P (3, 5, 10)."
     }
    },
    {
     "key": "f-phat-band-size",
     "vars": {
      "key": "f-phat-band-size",
      "mech": "size by probability band: multiply sizes by b_mid when the rival midpoint is between 20 and 80 cents and by b_edge outside; tune the pair on tuning seeds."
     }
    },
    {
     "key": "f-side-exposure-cap",
     "vars": {
      "key": "f-side-exposure-cap",
      "mech": "side exposure cap: cap the total resting notional per side at a fraction c of cash (bids) or of inventory value (asks), cancelling the worst-priced orders first; tune c."
     }
    },
    {
     "key": "f-age-size-decay",
     "vars": {
      "key": "f-age-size-decay",
      "mech": "age size decay: halve the size of any order that has rested unfilled for more than A steps (cancel and repost at the same price with half size); tune A (20, 50, 100)."
     }
    },
    {
     "key": "f-exposure-ratchet",
     "vars": {
      "key": "f-exposure-ratchet",
      "mech": "exposure ratchet: after an own fill followed by the rival midpoint moving against that fill by 2 or more ticks within 3 steps, halve all sizes for 50 steps, then recover linearly; variant: 100 steps."
     }
    },
    {
     "key": "f-side-size-ratio",
     "vars": {
      "key": "f-side-size-ratio",
      "mech": "side size ratio: multiply bid sizes by rb and ask sizes by ra (tuned on tuning seeds among 0.5, 0.7, 1.0, 1.3) when the rival midpoint is between 20 and 80 cents."
     }
    },
    {
     "key": "f-end-flatten",
     "vars": {
      "key": "f-end-flatten",
      "mech": "end flatten: in the last E steps cancel every order on the side that would increase the absolute inventory; tune E (10, 25, 50)."
     }
    },
    {
     "key": "f-fill-prob-pricing",
     "vars": {
      "key": "f-fill-prob-pricing",
      "mech": "fill-probability pricing: estimate per-distance fill probability from own fill history and move each order to the tick maximising edge-to-midpoint times fill probability, never inside the rival's best."
     }
    },
    {
     "key": "f-post-fill-other-side",
     "vars": {
      "key": "f-post-fill-other-side",
      "mech": "post-fill other side: for one callback after an own fill on one side, move the opposite side's best order one tick inward; variant: two callbacks."
     }
    },
    {
     "key": "f-retail-clock",
     "vars": {
      "key": "f-retail-clock",
      "mech": "retail clock: estimate the retail arrival rate from the number of own fills per 100 steps; scale sizes by clip(rate / prior, lo, hi) with the prior from the simulator docs; tune lo and hi."
     }
    },
    {
     "key": "f-loss-budget-stop",
     "vars": {
      "key": "f-loss-budget-stop",
      "mech": "loss budget: track realized edge of own fills marked to the rival midpoint; when the cumulative mark-to-market falls below -L, halve all sizes for the rest of the run; tune L."
     }
    },
    {
     "key": "f-behind-level",
     "vars": {
      "key": "f-behind-level",
      "mech": "rest behind: when the rival midpoint is between 20 and 80 cents, move N's orders priced at or inside the rival's best to one tick behind it on that side; sizes unchanged."
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 64000
   },
   "merge": {
    "groupSize": 9,
    "brief": "Merge the items' results into one JSON object. `rows`, one per item, copied and never recomputed: key, mech (at most 200 characters), spreads_acted, off_equals_n, code_sha256, assembled_sha256, complete, h_n, incumbent_mean, mean_diff, se, retail_diff, arb_diff, tuning_mean, tuning_se, by_spread (per spread: n, mean_diff, se, sum_d, sum_d2), failures, check_values_ok, python_version, flag (set and explained when h_n is under 500, incomplete, a hash is missing or code_sha256 does not equal the SHA-256 of the row's code, off_equals_n is not shown, there are failures, check values are wrong, or incumbent_mean differs from the other rows'). `top`: for the three unflagged rows with the largest mean_diff/se on one of their spreads_acted, their key, code_sha256, assembled_sha256 and overlay code. `notes`: at most 1500 characters. Verify every row's code hashes to its code_sha256. Before the JSON fence, at most 1500 characters of markdown: a ranked table (key, spread, mean_diff and se there, overall, flag) and the inputs used. Run no simulations."
   }
  },
  {
   "name": "r4-remove",
   "brief": "One item tests ONE deletion from the incumbent N, without tuning, screened paired against N. Deletion {{key}}: {{idea}}. Target spread(s): {{spreads}}. Delete only: {{change}} Find it in N's source by this description; if N has no such mechanism, or it cannot be removed without touching another, set not_applicable true, say why, and run no simulations. The deletion must act only on the target spreads (guard by self.s, which N sets from the rival's spread at the first step), so off-target d is exactly 0.\nN: the `code` field of the JSON at https://api.imdnotdead.fun/artifacts/db22aff7167a4798251ed3d20432509f30e511e4958799aba5b17b41bb39b4b6 ; SHA-256 of its UTF-8 bytes bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae; verify by script before use; you may read N. Simulator: https://github.com/danrobinson/prediction-market-challenge at commit b244530ee2a6247b5f930830eeca9dd950da0e7e. For each seed: config = sample_config(ChallengeConfig(), ParameterVariance(), seed=seed); SimulationEngine(config, factory, seed=seed).run() once for N and once per candidate; serial, no --workers, no --sandbox, unmodified simulator, default ChallengeConfig and ParameterVariance, 2000 steps. Run in the background (nohup) writing one line per (seed, strategy) to a file and poll it, or in chunks of 50 seeds per command, so a tool timeout loses nothing; each (seed, strategy) exactly once. Check first: N's total edge on seeds 310000..310003 must be 17.116002, 20.017111, 2.390311, 241.484752; report yours as check_values.\nNo tuning. Holdout: seeds 430000..430499, every seed, the deletion and N; never any other seed, never 900000..903999. d = candidate minus N total edge per seed; overall and per competitor spread s=1..4: n, sum_d, sum_d2, mean_diff = sum_d/n, se = sample sd of d / sqrt(n), incumbent_mean, candidate_mean, retail_diff, arb_diff (per-seed means).\nResult: one JSON object with key, idea, what_was_deleted (the removed or replaced lines, at most 1500 characters), not_applicable, code (the full candidate source), code_sha256, incumbent_code_sha256, target_spreads, paired {seeds, n, complete, missing_seeds, overall, by_spread {\"1\"..\"4\"}}, failures, check_values, python_version, seconds_per_simulation, next (one sentence). A screen, never a promotion.",
   "items": [
    {
     "key": "remove-s4-ask-risk-premium",
     "vars": {
      "key": "remove-s4-ask-risk-premium",
      "idea": "the spread-4 ask-risk premium",
      "spreads": "4",
      "change": "the extra risk premium N adds to spread-4 ask sizing or pricing, falling back to the sizing other spreads use."
     }
    },
    {
     "key": "remove-s4-reduced-cheap-bids",
     "vars": {
      "key": "remove-s4-reduced-cheap-bids",
      "idea": "the spread-4 reduction of cheap bids",
      "spreads": "4",
      "change": "the rule that reduces bids at low prices on spread 4, so cheap bids are sized like other bids."
     }
    },
    {
     "key": "remove-s4-bid-tranches",
     "vars": {
      "key": "remove-s4-bid-tranches",
      "idea": "the spread-4 bid tranches",
      "spreads": "4",
      "change": "the splitting of spread-4 bids into tranches at several ticks, placing one bid of the summed size at the best of those ticks."
     }
    },
    {
     "key": "remove-s3-qa-cap",
     "vars": {
      "key": "remove-s3-qa-cap",
      "idea": "the spread-3 target capped by the ask quantity",
      "spreads": "3",
      "change": "the cap of the spread-3 stock or inventory target by the main ask quantity qa."
     }
    },
    {
     "key": "remove-s3-cheap-ask-queue-threshold",
     "vars": {
      "key": "remove-s3-cheap-ask-queue-threshold",
      "idea": "the spread-3 cheap-ask queue threshold",
      "spreads": "3",
      "change": "the queue-position threshold that decides whether a cheap ask on spread 3 is kept or re-placed, keeping every such ask."
     }
    },
    {
     "key": "remove-s1-queue-retention",
     "vars": {
      "key": "remove-s1-queue-retention",
      "idea": "the spread-1 queue retention",
      "spreads": "1",
      "change": "the spread-1 rule that keeps resting orders at an off-target price for their queue position, so orders follow the target price every step."
     }
    },
    {
     "key": "remove-s2-old-price-queue",
     "vars": {
      "key": "remove-s2-old-price-queue",
      "idea": "the spread-2 old-price queue retention",
      "spreads": "2",
      "change": "the spread-2 rule that keeps orders resting at an old price for their queue position, so orders follow the target price every step."
     }
    },
    {
     "key": "remove-s1-censored-flow",
     "vars": {
      "key": "remove-s1-censored-flow",
      "idea": "the spread-1 censored retail-flow estimate",
      "spreads": "1",
      "change": "the censored retail-flow posterior on spread 1, replacing its estimate by the fixed prior rate wherever it is used."
     }
    },
    {
     "key": "remove-s2-neutral-joint",
     "vars": {
      "key": "remove-s2-neutral-joint",
      "idea": "three deletions found neutral alone, jointly",
      "spreads": "2",
      "change": "jointly: the off-price hold of ahead-of-queue orders at the rival quote; the final-step override; the below-floor stock rule (each was within 0.04 of zero alone on 500 seeds)."
     }
    },
    {
     "key": "remove-s3-neutral-joint",
     "vars": {
      "key": "remove-s3-neutral-joint",
      "idea": "three deletions found neutral alone, jointly",
      "spreads": "3",
      "change": "jointly: the inventory-risk switch; the near-ceiling stock rule; the probe renewal (each was within noise alone on 500 seeds)."
     }
    },
    {
     "key": "remove-hysteresis",
     "vars": {
      "key": "remove-hysteresis",
      "idea": "the spread-3 hysteresis, measured against N this time",
      "spreads": "3",
      "change": "the hysteresis that keeps a quote at its previous tick until the target moves by more than a band (an earlier test paired it against the wrong incumbent and is void)."
     }
    },
    {
     "key": "remove-late-uncovered",
     "vars": {
      "key": "remove-late-uncovered",
      "idea": "the spread-4 late uncovered-ask allowance",
      "spreads": "4",
      "change": "the rule that allows uncovered asks late in the run on spread 4 beyond the ordinary budget (an earlier test finished only 222 of 500 seeds and is void)."
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 64000
   },
   "merge": {
    "groupSize": 6,
    "brief": "Merge the items' results into one JSON object. `rows`, one per item, copied and never recomputed: key, idea (at most 200 characters), what_was_deleted (at most 400 characters), not_applicable, code_sha256, target_spreads, complete, h_n, incumbent_mean, mean_diff, se, retail_diff, arb_diff, by_spread (per spread: n, mean_diff, se, sum_d, sum_d2), failures, check_values_ok, python_version, flag (set and explained when h_n is under 500, incomplete, code_sha256 missing or not equal to the SHA-256 of the row's code, failures, wrong check values, or incumbent_mean unlike the other rows'). `top`: the key, code_sha256 and full code of the unflagged row with the largest mean_diff/se on a target spread, if any is positive. `notes`: at most 1500 characters: which deletions are harmful (keep the mechanism), which are neutral (candidates for simplification). Before the JSON fence, at most 1200 characters of markdown: a ranked table and the inputs used. Run no simulations."
   }
  }
 ],
 "read": [
  "r3-final-rc/rc-f1",
  "r3-final-rc/rc-f2",
  "r3-final-rc/rc-f3",
  "r3-final-rc/rc-f4",
  "r3-final-rc/rc-f5",
  "r3-final-rc/rc-f6",
  "r3-final-rc/rc-f7",
  "r3-final-rc/rc-f8",
  "r3-extend/merge-01",
  "r3-extend/merge-02",
  "r3-extend/merge-03",
  "r3-extend/merge-04",
  "r3-extend/merge-05",
  "r3-extend/merge-06",
  "r3-extend/merge-07",
  "r3-extend/merge-08",
  "r3-extend/merge-09",
  "r4-deepen/merge-01",
  "r4-deepen/merge-02",
  "r4-deepen/merge-03",
  "r4-deepen/merge-04",
  "r4-fresh/merge-01",
  "r4-fresh/merge-02",
  "r4-fresh/merge-03",
  "r4-remove/merge-01",
  "r4-remove/merge-02"
 ],
 "cancel": [],
 "wake": {
  "batches": [
   "r3-extend",
   "r3-final-rc",
   "r4-deepen",
   "r4-fresh",
   "r4-remove"
  ],
  "afterMinutes": 420
 },
 "finish": false
}