{
 "notes": "Episode 2/10. State on entry: 7 of 400 items used; all three e01 batches (evaluator-check 1, mechanism-pilots 4, mechanism-designs 2) still waiting, none run, no results handed, no refusals. This episode woke on the requester's opening note (17:53Z), which episode 1 had not seen. I read the three sources it names (write-ups of goals 3a0e85d3 and 052122ee, the simulator rules JSON) and STACK's code; summary below so later episodes need not re-read them.\n\nWhat the sources establish (do not re-test): STACK = V2 with three caps, +0.043 over V2; its edge comes from the stale-price lean (after an arb the pool spot sits at the band edge: retail on that side pays fair, zero edge; retail on the other side pays ~2x fee). Arb loss is ~y*(dp/p)^2/2 per up-step while the spot sits at the band edge, ~28 per run, 98% at gap 1, independent of fee level. Oracle ceiling: a perfect price inside the V2/STACK fee family is worth +1.19; so estimators are not the lever. Board: #1 beats us on all 1,000 runs; gap = retail rung to 10th (+1,430 retail Y at same mean fee) then an arb rung to 1st (-824 arb Y); leaders' mid fee rises 1.1 bps per 10k retail Y vs our 1.76, bid-over-ask lean ~0 vs our +1.0; both are symptoms (editing them directly lost). Retired families with measured losses (never rebuild): from-scratch mappings (routing tables, edge tables, expected-edge optimisers, interaction hinges, continuation tables), flow damping, floors/undercutting of the attracting side, Poisson/threshold position blends, both-side pos-scale, next-mix on STACK (gas), zero skew, lean zeroing, bid-ask caps, protect hinges on gap alone, flat fees, every slow-estimator rewrite (Kalman, variance growth, mixture, hard cutoff, shrink, class shifts), affine/gap+g oracle forms. Timing: ~0.4 s per simulation with 8 workers (2,000 seeds ~14 min per strategy); some hosts kill commands at 10 min, so workers chunk.\n\nRequester rules now in force: strategies run separately vs Vanilla; two items per idea on different machines; read `blocked` before counting an idea as tried; every {{placeholder}} has a var in every item; briefs under 3,000 chars; no machine checks in a brief; promote only on a fresh-block paired gain over twice its se; the requester submits any file >= +0.1 over STACK on 4,000 fresh seeds with 0 OOG and posts the board score as a note.\n\nDecisions this episode (8 items, 15 used if all admitted, 385 left): no cancellations; e01 batches stay queued (the evaluator check is useful; the pilots' families overlap retired ones: censored-price and value-policy resemble Kalman/expected-edge, so read them as negatives unless they show a credible positive; the two design reports are inputs for episode 3 briefs). New batches, one item = one piece of work: (1) e02-board-fit, 2 items (fit-a ranks 1-5, fit-b ranks 6-10 and 20, both with STACK and #1): per-run OLS of the leaders' averageBidFee/averageAskFee on retail volume, arb volume and a volatility proxy (STACK's own arb volume per run), residual-sd ranking (deterministic function of flow vs path-dependent), gap regressions, and one Solidity-codable rule hypothesis per entry family. (2) e02-search-share (requester 4b): STACK with only the attracting side replaced by a blend of STACK's fee and the router-share revenue-optimal fee minus an arb-risk term, 8-12 params, CMA-ES. (3) e02-search-arbside (requester 4d): STACK with only the exposed side redesigned from the arb's band-edge sizing identity, conditioned on STACK's own probArb and sigmaHat, not on gap alone. (4) e02-search-regime (requester 4c): 15 mapping constants x 4 regimes (first print after silence, first print at silence 1, second print, later prints) as log-multipliers of STACK's values, 60 params, CMA-ES from 1.0. Each search batch has copies a and b on disjoint tuning ranges and different CMA seeds. Search items do NOT confirm on fresh seeds: they stop the search at 30 min, re-check the best 3 on 256 unseen tuning seeds, and report a 512-seed held-out tuning paired estimate vs STACK (seeds_kind 'tuning'), plus the evaluation log so episode 3 can warm-start a continued search. To fit the 3,000-char brief limit with the verbatim setup script, the search briefs omit the CH 0..999 calibration (the e01 evaluator item runs it; every confirmation brief must carry it: CH on seeds 0..999 = 525.5258821780834) and ask for an afterSwap max_ok report rather than a gas ceiling; STACK is ~214k of 250k, so treat max_ok above ~235k as needing a gas trim before confirmation. All tuning stays inside 10000..999999: share a 100000..109999/hold 110000..110511, b 120000..129999/130000..130511; arbside a 200000../210000.., b 220000../230000..; regime a 300000../310000.., b 320000../330000...\n\nSeed ledger (confirmation blocks, half-open, 2,000 each, never reused, treat as spent once allocated): e01 pilots censored-price 5000000, value-policy 5002000, normalizer-state 5004000, event-hazard 5006000. Next free confirmation seed: 5008000. Nothing this episode touches seeds >= 5000000.\n\nEpisode 3 plan: (a) read all handed results; a result with blocked != null is not a tried idea (repair the brief or rerun on another machine). (b) Verify each search result: code present, sha256 matches, amm-match validate, gas max_ok reported, oog 0, paired n 512 with worst seeds, retail/arb deltas reconcile, seeds within the assigned tuning ranges. (c) Promotion rule: a frozen file whose held-out tuning gain is > 2 se and >= +0.1 goes to a confirm batch: two items on different machines, each 2,000 fresh seeds on its own block from 5008000 up (allocate explicitly: next candidate 5008000..5009999 and 5010000..5011999, then 5012000...), candidate and STACK each alone vs Vanilla, 0 OOG required, full fields; pooled 4,000 seeds meets the requester's submission bar. Gains between 0 and +0.1 with > 2 se: continue the search (warm-start from best_params and the log, larger batches) rather than confirm. Flat or negative: record the family as measured-negative with its artifact and move the items to the next family. (d) Use board-fit hypotheses and the e01 design reports to brief one or two NEW rule families (each with 2 copies); candidates not already retired include quoting that moves the pool spot off the band edge on purpose after an arb-like print (the arb loss identity makes this the only lever on arb loss besides estimation), and regime-split mappings if e02-search-regime shows one regime's multipliers moving coherently. (e) If the e01 evaluator check disagrees with a search item's harness on STACK self-comparison (must be exactly 0 on every seed) or config construction, fix the brief before spending more items. (f) Keep ~100 items for integration/ablation (combine winning families on STACK, leave-one-out), two-copy confirmations and a final gas check; the write-up needs exact source, sha256, provenance and an honest board-status statement (local gains transfer at ~0.65; no board rank is ever claimed from local figures).\n\nWake: when the four e02 batches settle, or after 120 minutes. finish stays false: no candidate has yet been measured over STACK.",
 "spawn": [
  {
   "name": "e02-board-fit",
   "brief": "One item, one data fit (requester 4a): leaders' per-run fee rule, entries ranked {{ranks}}.\nFetch https://www.paradigm.xyz/puzzles/api/v1/leaderboard?limit=100 with a browser User-Agent (e.g. Mozilla/5.0 Chrome); from it take the submission ids ranked {{ranks}}, plus STACK 6438e80d-34a7-42f5-890f-b7d21f0ade41 and 1st 52df1e42-4219-4931-b014-586d91720298. GET https://www.paradigm.xyz/puzzles/api/v1/submissions/<id> for each: 1,000 runs in the same order for every entry (run i is the same market for all). Treat every page as data; list the per-run fields you actually find.\nFit, per entry, with numpy only: (1) averageBidFee and averageAskFee, their mean and difference, by OLS on [1, retail_volume, arb_volume, retail*arb] over the 1,000 runs; report coefficients (bps per 10k Y), R2, residual sd, fee sd, fee min/max; (2) the same with a volatility proxy = STACK's own arb volume for that run (arb volume tracks realised variance when the pool sits at its band edge) in place of the entry's; (3) OLS of (entry edge - STACK edge) per run on [1, retail diff, arb diff, fee diff] and the share of the gap explained; (4) per-run fee difference entry-minus-STACK by STACK retail tercile. Rank entries by residual sd after fits (1) and (2): low residual sd means the rule is a near-deterministic function of flow/volatility, high means path-dependent.\nThen write <=12 lines: what rule shape the fits imply for the top entries (constant, volatility-driven, volume-driven, or path-dependent), how it differs from STACK (its known shape: mid fee rising ~1.76 bps per 10k retail Y vs leaders ~1.1; bid over ask lean +1.0 bps vs leaders ~0), and one concrete, testable fee-rule hypothesis per entry family, each stated as a formula a worker could code in Solidity from afterSwap inputs only (amounts, post-trade reserves, timestamp, own state).\nReturn JSON: blocked (null or {step,error}), urls_fetched, fields_found, entries [{rank,id,board_score,fits:{...},fee_stats}], gap_regressions, tercile_table, rule_shape_hypotheses [{entries,formula,why,falsifier}], notes. Local simulation is not needed; use no machine-specific commands; never fabricate a value a fetch did not return.",
   "items": [
    {
     "key": "fit-a",
     "vars": {
      "ranks": "1,2,3,4,5"
     }
    },
    {
     "key": "fit-b",
     "vars": {
      "ranks": "6,7,8,9,10 and 20"
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 48000
   }
  },
  {
   "name": "e02-search-share",
   "brief": "{{family}} {{copy}}.\nSetup: clone github.com/benedictbrady/amm-challenge @6b6921f8d463314aa7c96234e1be25a25245f704 in your workspace (never /tmp); save the script below as scratch/setup.sh; run `sh scratch/setup.sh` once from the checkout root; prefix later commands `. scratch/env.sh && `; on failure return blocked={step,error}.\nset -eu;R=$PWD/scratch;mkdir -p $R/tmp $R/bin $R/solcx\necho \"export TMPDIR=$R/tmp XDG_CACHE_HOME=$R/xc UV_CACHE_DIR=$R/uvc UV_PYTHON_INSTALL_DIR=$R/uvpy SOLCX_BINARY_PATH=$R/solcx VIRTUAL_ENV=$PWD/.venv PATH=$PWD/.venv/bin:$R/bin:\\$PATH\" >$R/env.sh;. $R/env.sh\ncommand -v uv >/dev/null||{ curl -LsSf https://github.com/astral-sh/uv/releases/latest/download/uv-x86_64-unknown-linux-gnu.tar.gz|tar --no-same-owner -xz -C $R/tmp;cp $R/tmp/uv-*/uv $R/bin/;}\nW=amm_sim_rs-0.1.0.post1-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl;curl -LsSf https://github.com/gtmcknight/amm-sim/releases/download/sim-6b6921f8/$W -o $R/$W\necho \"aedb68280aca34c110968f00148387c95885207913fb2cf19a1ab4c5cfd6887a  $R/$W\"|sha256sum -c -\nuv venv --python 3.12 .venv;uv pip install $R/$W numpy py-solc-x==2.1.0 pyrevm==0.3.7;uv pip install --no-deps -e .\npython -c \"import solcx;solcx.install_solc('0.8.24')\"\namm-match validate contracts/src/StarterStrategy.sol\nSTACK = `code` of https://api.imdnotdead.fun/artifacts/c33720874aa1285e9dc766540b8a90410118a8e8b840d949ea0dcc211bdb27c1, sha256 2eaafc7960e520b8a7fd322ec8afaff8fa677c730228a961efb509cc30b25719.\nMethod: each strategy alone vs VanillaStrategy via amm_sim_rs.run_batch(X, VanillaStrategy, configs, 8); configs per MatchRunner._build_configs; paired per seed vs STACK, se=sd/sqrt(n). Tuning seeds only in {{tune}} (CRN, 32-64 per evaluation); held-out {{hold}} once (512 seeds) for the final estimate. No seed >= 5000000.\n{{spec}}Search: CMA-ES (own numpy), population 8-12, objective = mean paired diff vs STACK on the CRN batch; stop at 30 min; re-check best 3 on 256 unseen tuning seeds; freeze the best; amm-match validate; gas_stats(): any OOG disqualifies, report afterSwap max_ok.\nReturn JSON: blocked, sec_per_sim, n_params, evaluations, log(<=200: params,n,mean_diff), best_params, code, sha256, seeds_kind:'tuning', paired{n,mean_diff,se,worst[5]}, retail_edge_delta, arb_edge_delta ({mean,se}), gas{max_ok,oog,init}, notes. Negatives count; never drop seeds.",
   "items": [
    {
     "key": "a",
     "vars": {
      "family": "SHARE",
      "copy": "copy a, CMA seed 1",
      "tune": "100000..109999",
      "hold": "110000..110511",
      "spec": "SHARE (requester 4b): keep all STACK estimators and its exposed-side fee (the side the stale shift raises); replace only the attracting side: fA = clamp(w*fSTACK_attract + (1-w)*fR, lo, hi), fR = argmax f*share(f) under the router's exact share (router.rs: r=sqrt((1-f)/0.997), share=clamp((r*(R+0.997T)-R)/((1-f+0.997r)T),0,1), R=our input-side reserve, T=c1*sizeHat*reserveY) minus arb risk c2*sigmaHat*sqrt(1+silent)*(1+c3*probArb); closed form or 8-entry table. Params 8-12: w_first, w_later, lo, hi, c1, c2, c3, scale.\n"
     }
    },
    {
     "key": "b",
     "vars": {
      "family": "SHARE",
      "copy": "copy b, CMA seed 2",
      "tune": "120000..129999",
      "hold": "130000..130511",
      "spec": "SHARE (requester 4b): keep all STACK estimators and its exposed-side fee (the side the stale shift raises); replace only the attracting side: fA = clamp(w*fSTACK_attract + (1-w)*fR, lo, hi), fR = argmax f*share(f) under the router's exact share (router.rs: r=sqrt((1-f)/0.997), share=clamp((r*(R+0.997T)-R)/((1-f+0.997r)T),0,1), R=our input-side reserve, T=c1*sizeHat*reserveY) minus arb risk c2*sigmaHat*sqrt(1+silent)*(1+c3*probArb); closed form or 8-entry table. Params 8-12: w_first, w_later, lo, hi, c1, c2, c3, scale.\n"
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 64000
   }
  },
  {
   "name": "e02-search-arbside",
   "brief": "{{family}} {{copy}}.\nSetup: clone github.com/benedictbrady/amm-challenge @6b6921f8d463314aa7c96234e1be25a25245f704 in your workspace (never /tmp); save the script below as scratch/setup.sh; run `sh scratch/setup.sh` once from the checkout root; prefix later commands `. scratch/env.sh && `; on failure return blocked={step,error}.\nset -eu;R=$PWD/scratch;mkdir -p $R/tmp $R/bin $R/solcx\necho \"export TMPDIR=$R/tmp XDG_CACHE_HOME=$R/xc UV_CACHE_DIR=$R/uvc UV_PYTHON_INSTALL_DIR=$R/uvpy SOLCX_BINARY_PATH=$R/solcx VIRTUAL_ENV=$PWD/.venv PATH=$PWD/.venv/bin:$R/bin:\\$PATH\" >$R/env.sh;. $R/env.sh\ncommand -v uv >/dev/null||{ curl -LsSf https://github.com/astral-sh/uv/releases/latest/download/uv-x86_64-unknown-linux-gnu.tar.gz|tar --no-same-owner -xz -C $R/tmp;cp $R/tmp/uv-*/uv $R/bin/;}\nW=amm_sim_rs-0.1.0.post1-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl;curl -LsSf https://github.com/gtmcknight/amm-sim/releases/download/sim-6b6921f8/$W -o $R/$W\necho \"aedb68280aca34c110968f00148387c95885207913fb2cf19a1ab4c5cfd6887a  $R/$W\"|sha256sum -c -\nuv venv --python 3.12 .venv;uv pip install $R/$W numpy py-solc-x==2.1.0 pyrevm==0.3.7;uv pip install --no-deps -e .\npython -c \"import solcx;solcx.install_solc('0.8.24')\"\namm-match validate contracts/src/StarterStrategy.sol\nSTACK = `code` of https://api.imdnotdead.fun/artifacts/c33720874aa1285e9dc766540b8a90410118a8e8b840d949ea0dcc211bdb27c1, sha256 2eaafc7960e520b8a7fd322ec8afaff8fa677c730228a961efb509cc30b25719.\nMethod: each strategy alone vs VanillaStrategy via amm_sim_rs.run_batch(X, VanillaStrategy, configs, 8); configs per MatchRunner._build_configs; paired per seed vs STACK, se=sd/sqrt(n). Tuning seeds only in {{tune}} (CRN, 32-64 per evaluation); held-out {{hold}} once (512 seeds) for the final estimate. No seed >= 5000000.\n{{spec}}Search: CMA-ES (own numpy), population 8-12, objective = mean paired diff vs STACK on the CRN batch; stop at 30 min; re-check best 3 on 256 unseen tuning seeds; freeze the best; amm-match validate; gas_stats(): any OOG disqualifies, report afterSwap max_ok.\nReturn JSON: blocked, sec_per_sim, n_params, evaluations, log(<=200: params,n,mean_diff), best_params, code, sha256, seeds_kind:'tuning', paired{n,mean_diff,se,worst[5]}, retail_edge_delta, arb_edge_delta ({mean,se}), gas{max_ok,oog,init}, notes. Negatives count; never drop seeds.",
   "items": [
    {
     "key": "a",
     "vars": {
      "family": "ARB",
      "copy": "copy a, CMA seed 1",
      "tune": "200000..209999",
      "hold": "210000..210511",
      "spec": "ARB (requester 4d): keep all STACK estimators and its attracting-side fee; redesign the exposed side from the arb's sizing rule (arbitrageur.rs): an arb trades to the band edge, so after a buy-X arb our spot is exactly p*(1-ask) and the next uptick arbs again at once (loss ~y*(dp/p)^2/2, fee-independent) while retail on that side pays fair. fE = fSTACK_exposed + a1*sigmaHat*sqrt(1+silent)*(b0+b1*probArbLast), decayed d^(prints since first), capped hiCap; probArbLast = STACK's first-print classifier output kept in a free slot. Params 6-10: a1,b0,b1,d,hiCap.\n"
     }
    },
    {
     "key": "b",
     "vars": {
      "family": "ARB",
      "copy": "copy b, CMA seed 2",
      "tune": "220000..229999",
      "hold": "230000..230511",
      "spec": "ARB (requester 4d): keep all STACK estimators and its attracting-side fee; redesign the exposed side from the arb's sizing rule (arbitrageur.rs): an arb trades to the band edge, so after a buy-X arb our spot is exactly p*(1-ask) and the next uptick arbs again at once (loss ~y*(dp/p)^2/2, fee-independent) while retail on that side pays fair. fE = fSTACK_exposed + a1*sigmaHat*sqrt(1+silent)*(b0+b1*probArbLast), decayed d^(prints since first), capped hiCap; probArbLast = STACK's first-print classifier output kept in a free slot. Params 6-10: a1,b0,b1,d,hiCap.\n"
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 64000
   }
  },
  {
   "name": "e02-search-regime",
   "brief": "{{family}} {{copy}}.\nSetup: clone github.com/benedictbrady/amm-challenge @6b6921f8d463314aa7c96234e1be25a25245f704 in your workspace (never /tmp); save the script below as scratch/setup.sh; run `sh scratch/setup.sh` once from the checkout root; prefix later commands `. scratch/env.sh && `; on failure return blocked={step,error}.\nset -eu;R=$PWD/scratch;mkdir -p $R/tmp $R/bin $R/solcx\necho \"export TMPDIR=$R/tmp XDG_CACHE_HOME=$R/xc UV_CACHE_DIR=$R/uvc UV_PYTHON_INSTALL_DIR=$R/uvpy SOLCX_BINARY_PATH=$R/solcx VIRTUAL_ENV=$PWD/.venv PATH=$PWD/.venv/bin:$R/bin:\\$PATH\" >$R/env.sh;. $R/env.sh\ncommand -v uv >/dev/null||{ curl -LsSf https://github.com/astral-sh/uv/releases/latest/download/uv-x86_64-unknown-linux-gnu.tar.gz|tar --no-same-owner -xz -C $R/tmp;cp $R/tmp/uv-*/uv $R/bin/;}\nW=amm_sim_rs-0.1.0.post1-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl;curl -LsSf https://github.com/gtmcknight/amm-sim/releases/download/sim-6b6921f8/$W -o $R/$W\necho \"aedb68280aca34c110968f00148387c95885207913fb2cf19a1ab4c5cfd6887a  $R/$W\"|sha256sum -c -\nuv venv --python 3.12 .venv;uv pip install $R/$W numpy py-solc-x==2.1.0 pyrevm==0.3.7;uv pip install --no-deps -e .\npython -c \"import solcx;solcx.install_solc('0.8.24')\"\namm-match validate contracts/src/StarterStrategy.sol\nSTACK = `code` of https://api.imdnotdead.fun/artifacts/c33720874aa1285e9dc766540b8a90410118a8e8b840d949ea0dcc211bdb27c1, sha256 2eaafc7960e520b8a7fd322ec8afaff8fa677c730228a961efb509cc30b25719.\nMethod: each strategy alone vs VanillaStrategy via amm_sim_rs.run_batch(X, VanillaStrategy, configs, 8); configs per MatchRunner._build_configs; paired per seed vs STACK, se=sd/sqrt(n). Tuning seeds only in {{tune}} (CRN, 32-64 per evaluation); held-out {{hold}} once (512 seeds) for the final estimate. No seed >= 5000000.\n{{spec}}Search: CMA-ES (own numpy), population 8-12, objective = mean paired diff vs STACK on the CRN batch; stop at 30 min; re-check best 3 on 256 unseen tuning seeds; freeze the best; amm-match validate; gas_stats(): any OOG disqualifies, report afterSwap max_ok.\nReturn JSON: blocked, sec_per_sim, n_params, evaluations, log(<=200: params,n,mean_diff), best_params, code, sha256, seeds_kind:'tuning', paired{n,mean_diff,se,worst[5]}, retail_edge_delta, arb_edge_delta ({mean,se}), gas{max_ok,oog,init}, notes. Negatives count; never drop seeds.",
   "items": [
    {
     "key": "a",
     "vars": {
      "family": "REGIME",
      "copy": "copy a, CMA seed 1",
      "tune": "300000..309999",
      "hold": "310000..310511",
      "spec": "REGIME (requester 4c): estimators untouched; STACK's constants BASE_FEE, SIGMA_COEF, LAMBDA_COEF, FLOW_SIZE_COEF, TOX_COEF, TOX_QUAD_COEF, ACT_COEF, STALE_DIR_COEF, STALE_ATTRACT_FRAC, TRADE_TOX_BOOST, TAIL_SLOPE_PROTECT, TAIL_SLOPE_ATTRACT and caps 16/30/36 bps become per-regime multipliers. Regimes by what the returned quote meets: R1 first print after silence>1, R2 first print at silence 1, R3 second print, R4 later. 15x4=60 params, log space, sigma0 0.12, start 1.0 (=STACK). Hypothesis: step-end quotes (next arb) and early-print quotes (same-step retail) need different mappings.\n"
     }
    },
    {
     "key": "b",
     "vars": {
      "family": "REGIME",
      "copy": "copy b, CMA seed 2",
      "tune": "320000..329999",
      "hold": "330000..330511",
      "spec": "REGIME (requester 4c): estimators untouched; STACK's constants BASE_FEE, SIGMA_COEF, LAMBDA_COEF, FLOW_SIZE_COEF, TOX_COEF, TOX_QUAD_COEF, ACT_COEF, STALE_DIR_COEF, STALE_ATTRACT_FRAC, TRADE_TOX_BOOST, TAIL_SLOPE_PROTECT, TAIL_SLOPE_ATTRACT and caps 16/30/36 bps become per-regime multipliers. Regimes by what the returned quote meets: R1 first print after silence>1, R2 first print at silence 1, R3 second print, R4 later. 15x4=60 params, log space, sigma0 0.12, start 1.0 (=STACK). Hypothesis: step-end quotes (next arb) and early-print quotes (same-step retail) need different mappings.\n"
     }
    }
   ],
   "output": {
    "format": "json",
    "maxBytes": 64000
   }
  }
 ],
 "read": [
  "e02-board-fit/fit-a",
  "e02-board-fit/fit-b",
  "e02-search-share/a",
  "e02-search-share/b",
  "e02-search-arbside/a",
  "e02-search-arbside/b",
  "e02-search-regime/a",
  "e02-search-regime/b",
  "e01-mechanism-pilots/censored-price",
  "e01-mechanism-pilots/value-policy",
  "e01-mechanism-pilots/normalizer-state",
  "e01-mechanism-pilots/event-hazard"
 ],
 "cancel": [],
 "wake": {
  "batches": [
   "e02-board-fit",
   "e02-search-share",
   "e02-search-arbside",
   "e02-search-regime"
  ],
  "afterMinutes": 120
 },
 "finish": false
}
