For Agents

Living index of themes for this project. Each H2 is a topic; bullets are wikilinks to related notes. Updated by obsidian-documenter when documenting work. Read by historian at bootstrap. Topics kept alphabetical.

15m Expansion

  • crypto-shortterm-algo-accuracy-audit-2026-07-0215m benching STARTED (2026-07-02, Andras go): window_secs in AssetConfig (Btc15/Eth15 @900s), observe-only recording live; emit hard-refuses non-300s assets at boot — no 15m money path until a fresh 15m calibration passes its own full deflated-bar gate; band DERIVED from our own data, not copied from the tape.

  • crypto-shortterm-competitor-wowitsamazing-refuted-2026-07-0315m tape verdict (2026-07-03): NO +EV seed for the 15m gate. The competitor’s late-window band (BTC cushion≥5bps τ≤300s) is real on HIS entries (+3.75¢/window, dose-response 90.7/94.5/98.9) but mechanically dead on the population (all 3,613 windows: window-selection ceiling ≈0, side/timing gap ~3pp, matched-cushion mechanical EV −1.1¢ [−2.7,+0.6]); v1 “+7.5¢” was selection lookahead, blended “+4.5¢” an aggregation artifact. Capture requires a fresh 15m calibration model (side/timing); deploy #1014 (btc15/eth15 observe) is the bottleneck; tape priors only: late>mid, cushion dose-response exists, eth-15m adversely selected (−$22k), pre-window dead.

  • crypto-shortterm-15m-observe-nogo-2026-07-0615m = efficiently priced, NO tradeable regime (early NO-GO, 2026-07-06): our own btc15/eth15 observe (332 windows each, 5d) — the fair-value model HAS strong signal (p_fair monotonic; conviction ≥0.80 → 98% up; under-confident tails like 5m), but the market ask ≈ actual win rate across the ENTIRE τ curve (0.95–0.98 vs 0.98–1.0; real_edge ±1% everywhere) → no τ pocket where the ask lags (unlike 5m’s [60,150)s). The two bigger apparent edges are unreliable (<120s execution-impractical; 600–720s n=290 thin, contradicts prior tape). Don’t build a 15m money lane; keep the observe container banking data — the population confirmation of the competitor-tape 15m verdict.

  • crypto-shortterm-fill-space-closed-15m-pivot-proposal-2026-07-1815m offline gate PROPOSED as the primary pivot (2026-07-18, PENDING decision — no decision taken): btc15/eth15 observe verified running since 2026-07-02 19:45Z (not 07-09) = 1,490 windows/asset, 96/day, outcomes 100% settled, both books ≥94% populated → an offline 15m gate is runnable now (thin: 2 assets, ~2.7-day purged folds). Proposed W2: fresh fit-then-frozen 15m calibration (days 1–5), its OWN band + ask cap (do NOT inherit 5m τ∈[60,150)s / EMIT_MAX_ASK), ONE confirmatory test, honest fills, deflated bar. Existence proof to beat: the [[crypto-shortterm-competitor-wowitsamazing-refuted-2026-07-03|competitor’s btc-15m late band +3.8¢/share CI[+2.2,+5.4] at HIS fills]] (a ~1s taker like us); refutation to overcome: mechanical trigger −1.1¢ (his edge = side/timing SKILL; our candidate replacement = p_cal, 94% side-agreement on 5m). Emit’s 15m block is a one-line compiled guard (emit.rs:86-93), gated on a validated 15m calibration+regime, never before. Sharpens the early 15m NO-GO (re-derive the band, don’t copy 5m).

  • crypto-shortterm-15m-resite-premise-falsified-2026-07-2115m re-site PREMISE FALSIFIED; exit rule FIRED; SHELVE recommended (grounding-pass verdict, 2026-07-20/21 — SUPERSEDES the 07-18 proposal’s conclusion): three read-only passes killed the pivot before any build. Pass A — the conviction gate |p_fair−0.5|≥0.30 ∧ τ≤300s saturates 15m (~98% of 1,733 windows/asset qualify) at first-qualifying asks 0.96–0.97 (worse than the 5m τ∈[150,300) trap). Pass B — the competitor’s cushion band ([5,10)bps, τ≤300s) IS priced at his-era levels on our books (btc15 median ask 0.875 n=878; eth15 0.800 n=788) = the only non-dead pocket found. Pass C (decisive) — true CLOB backfill of all 3,131 first-trigger windows (slug→conditionId→tokens[].winner, 0.03% miss): EVERY cushion bucket net-negative on both assets; pooled own-ask EV −1.14¢ CI[−3.0,+0.5]; calibration +1.6¢ in-sample flips −2.2¢ OOS (n=1,209) both assets. The near-breakeven was LABEL ERROR — on-chain resolved_up disagrees with CLOB on 18–23% of near-ties; true near-tie win 0.63–0.69 (~coinflip), not 0.77; the competitor’s +3.8¢ was a selection ceiling, our books price his pockets fee-negative. Durable method: (a) 15m label trap — near-ties 22–31% of late-window populations, outcomes has no condition_idCLOB backfill mandatory for 15m scoring; (b) 07-09 fill-regime break (4–7%→13.6%→27–35%); pm_fak_attempts is in pmv2’s schema (the 07-03 spec qualifier is wrong). Retractions: p_cal does NOT replicate his side skill (94% = mechanical side); eth15 not co-primary (his eth-15m lost 14.4k, TAKER_REBATE rows exist)**. Reopeners: faster PM path, venue change, new non-repriced auto-settled family, or a non-latency-locked signal.

Backtesting & Validation

  • crypto-shortterm-maker-sim-gate-build-complete-2026-07-22maker-sim gate harness BUILT + reviewed, READY-FOR-GATE-RUN (2026-07-22; gate runs blocked on infra-VM data fetches, lane stays SHELVED): crates/analysis/src/bin/makersim.rs (quote engine on lagged snaps; pessimistic bracketed fill engine adverse-certain/at-quote φ=0.25; inventory cap ±3 hold-to-settlement; day-clustered bootstrap z; fixed 48-config grid; 15/15 tests, clippy/fmt clean, deterministic) + three fixture-proven fetch scripts (makersim_resolve_markets/clob_winners/tape_backfill + makersim_common DRY). Review caught 2 bugs in the plan’s OWN reference code (unsorted-prints self-inconsistency → stable sort; unresolved-CLOB silent Down-label → exactly-one-winner guard). Pre-registered before any data: 0-print windows COUNT in the bootstrap denominator (survivorship). Fee verdict: live 5m advertises maker_base_fee=1000==taker_base_feemaker_fee_zero:false → the 0.07-charged variant is the PRIMARY gating number (a maker posture does NOT escape the fee). Pre-committed chain: Task 8 sanity STOP → Task 9 KILL if no lag==1 config reaches z≥3.07 pessimistic 0.07-fee → Task 10 single confirmatory. A pass clears only the gate; a separate Phase-2 decision is required before any live posture.
  • crypto-shortterm-maker-sim-gate-spec-grounding-2026-07-22 — grounding for the proposed maker-sim gate study (v2, pending review); establishes that CLOB tokens[].winner backfill is mandatory for ALL scored 5m windows (53% near-tie rate makes resolved_up unusable at 5m)
  • crypto-shortterm-15m-resite-premise-falsified-2026-07-21the “offline +EV” 15m gate DIES on true CLOB labels; the honest-fill harness was never needed (2026-07-20/21): the full CLOB backfill of 3,131 first-trigger windows shows every cushion bucket net-negative (pooled own-ask EV −1.14¢ CI[−3.0,+0.5], calibration +1.6¢ in-sample → −2.2¢ OOS n=1,209 both assets). Method lesson: the “near-breakeven” was on-chain LABEL ERRORresolved_up vs CLOB winner disagree on 18–23% of near-ties (near-ties are 22–31% of late 15m populations), true near-tie win 0.63–0.69 not 0.77; off near-ties CLOB vs sign(settle−k) agree 99.1%. outcomes has no condition_id → a CLOB backfill (slug→conditionId→tokens[].winner) is MANDATORY for any 15m EV measurement. Fires the pre-committed exit rule → shelve recommended; the same on-chain-optimistic mask that inflated every 5m study, here manufacturing a fake tradeable 15m pocket.
  • crypto-shortterm-backtesting — causally-typed core (structural anti-leakage), purged/embargoed walk-forward, trial ledger + deflated Sharpe, exec-sim/fault-injection/dry-run/canary, Phase-0 calibration/basis/depth analysis.
  • crypto-shortterm-phase0-codebase-completeanalysis report-gen now runs (phase0-report.md); first thin read (basis ≈ -$40, empty-book 0.98-spread); go/no-go is data-gated.
  • crypto-shortterm-phase0-edge-analysislive edge analysis on 129k rows / 530 windows: calibrated overall +7.28% avg net PnL, 54.4% hit, Sharpe 0.17; best τ-bucket (0–30s) +19.46%; raw baseline +2.08%. VERDICT: PROMISING but NOT confirmed — T19 OPEN, likely near-expiry leakage (positive +2% baseline = systematic bias; edge concentrates in the 0–30s leakage zone; optimistic fills). Directional signal real; tradeable edge unproven.
  • crypto-shortterm-phase0-validationT19 OPEN — offline edge confirmed, live-capturability UNCONFIRMED (2026-06-12): three-pronged leakage debunk (validate.rs, 198,733 rows). ≥60s gated strategy +1.61%/trade (0 slip), +0.81% (1% slip); ≥60s baseline −3.21% (so +2.08% was 0–60s leakage — resolved). Real OFFLINE edge survives, but optimistic top-of-book/1s-stale fills overstate a latency edge, it’s slippage-fragile, single split. Remaining gates: purged walk-forward + deflated Sharpe/t≈3; depth/capacity read (needs recording sizes); decisive forward paper-trade.
  • crypto-shortterm-phase0-walkforwardT19 OPEN — purged K=6 walk-forward (2026-06-12): 219,688 rows / 899 windows; 750 OOS windows; τ≥60s, 1% slip; t-stat 1.46 < 3.0; 5/5 folds positive; per-window Sharpe 0.0533. EDGE FRAGILE / LIKELY OVERFIT — consistent direction but variance dominates; need more data (N≥3,100 windows for t≥3 at current mean/σ) or a stronger signal. Commit 476cab1.
  • crypto-shortterm-phase0-selectivityT19 CONDITIONAL pass — selectivity/regime sweep on the same K=6 walk-forward (2026-06-12, bin selectivity.rs, commit 2d52628): 7 a-priori cells (conviction × τ-band + baseline), Bonferroni bars t≥2.69 / t≥2.97. WINNER τ∈[60,150)s c≥0.30 → t=4.61, 5/5 folds positive, ~34k trades, Sharpe 0.16 — passes both; c≥0.20 (4.10) & c≥0.10 (4.04) also pass; baseline (2.51) and all τ∈[150,300)s (<1.8) FAIL. Edge lives only in the last 60–150s on clearly-ITM/OTM contracts; t rose 1.46→4.61 by variance reduction (mean PnL fell), so sign/persistence robust OOS. CAVEAT: ~7%/trade magnitude is a mirage — 1s top-of-book ≠ fillable price; unresolvable offline (no book DEPTH recorded). Next: record sizes → depth-aware re-run → tiny real-fill test.
  • crypto-shortterm-phase0-depthprofiledepth profile of the new book-depth columns (pin 69b84b1; bin depthprofile.rs, commit 35aa202, 2026-06-18): 159,113 rows / 761 windows; candidate regime (τ∈[60,150)s, c≥0.30) = 12,197 rows / 360 windows. Take-side touch median 658 / p90 5,109 shares; 3¢ cumulative median 6,171 / p90 ≈ 15,579 (shares ≈ 432 is circular (depends on the unverified 7¢ edge), depth ≠ latency-fillable, watch the decay curve. Next: depth-aware re-run (cap fills to best_*_sz, plot edge-vs-size). Report docs/superpowers/phase0-depthprofile-report.md.
  • crypto-shortterm-phase0-depthawaredepth-aware selectivity re-run (bin depthaware.rs, commit bba5739, 2026-06-19): 524 candidate-depth windows, Bonferroni t≥2.99; fills capped to recorded touch + 3¢ cumulative depth. Edge SURVIVES at all sizes ≤2000 shares (S=50: t=5.52/5.01¢; S=2000: t=3.01/2.61¢; ∞ uncapped: t=5.67). Decay SANE/DECLINING — not a top-of-book artifact. Capacity ceiling 2000 shares. +0.5¢ latency buffer: verdict unchanged. DECISIVE offline gate: prior t=4.61 was real. Window-count audit (commit a3e0468): 524 (raw/all-folds) vs 770 (calibrated/OOS-folds-1–5) explained, no bug, t-stats unchanged.
  • crypto-shortterm-strategy-design — the shared core under test and the promotion gate.
  • crypto-shortterm-loss-filter-analysis-2026-06-26loss-filter analysis (PRELIMINARY, n=4, 2026-06-26): forensic decomposition of 4 live losses (27W/4L = 87.1% on 31 BUYs; 12.9% loss < ~15% priced = healthy). EV-not-win-rate method: the mom30<0 bucket is 2W/2L (momentum doesn’t separate W/L) yet EV-negative — expensive losses (fills 0.75/0.76) vs cheap sacrificed wins (0.90/0.93) → net ≈ +1.34 stakes. Rejected agreement gates (pm_ask≥0.80/conv_fair_ask) that delete the disagreement edge (+44 best bet dies); rejected overshoot/sigma/depth/dist≥60 as overfit on n=2. 10-agent adversarial-overfit synthesis. Re-run at n≥20.
  • crypto-shortterm-exit-loss-cut-study-2026-07-01exit/loss-cut feasibility study → definitive NO-GO (two independent runs, 2026-07-02): exitlib/exit_study bins on feat/exit-study (day-folds + day-clustered bootstrap + trial-deflation, OOS winner-exit gate); Phase-0 well-powered (losers 316/350, adverse days 19/21); best rule −0.77/−0.79¢ per bet (z=−2.33/−2.68), couldn’t-fill 52–63% — exiting is significantly −EV vs holding. Killers: collapsing-bid no-fill + weak loser-lead; NOT winner-forfeit. Also the reusable embargo unit seam bug lesson (lib-unit ≠ production-unit).
  • crypto-shortterm-algo-accuracy-audit-2026-07-02live-vs-validated fidelity audit + folded calibration audit (BTC clean era n=920): calibration healthy overall; τ60–90s under-confident (z≈2.9), DOWN-side bucket skews, lowest-σ quartile over-confident (EWMA σ lag over 10s-decimated Chainlink prints), extreme-disagreement fade (haircut sizing, don’t skip). Cross-asset OOS confirmation: BTC frozen calibration within ~2 SE on all 4 alt lanes. Refit-era items require refit + walk-forward re-gate.
  • crypto-shortterm-competitor-wowitsamazing-refuted-2026-07-03pre-registered 3-leg validation design (2026-07-03; reusable method): clean-room re-derivation + adversarial statistics + on-chain reconciliation; every number survived ≥2 independent no-shared-code derivations; caught three headline errors before they shipped (v1 15m band = selection lookahead; blended-price EV = aggregation artifact; “58% vs 55.3¢” = mixed weighting). Companion lessons: frozen post-settlement tapes are row-exact reproducible (freeze tapes at study time); check file mtimes when a claim contradicts a recent measurement (shared-file clobber incident); agents write findings-to-disk before digests.
  • crypto-shortterm-disagreement-ceiling-nogo-2026-07-03disagreement-ceiling shave → OOS NO-GO (directional, 2026-07-03): a live-attributed SELECTION ceiling (skip the high-disagreement/low-ask tail — ask<~0.70 or modeled edge ≥~0.07) run through the refit/exit walk-forward rig on BTC (21-day actual-resolution parquet, won_up NOT resolved_up; day-folds + clustered bootstrap + deflated_threshold(6,1.64)=3.53). Baseline at-ask EV +28.1 / 4,965 OOS windows / 19 days (matches the refit-study universe); NO-GO on all 6 grid combos — every ceiling LOWERS at-ask EV (tightest max_edge<0.05 → −7.3), best Δz −1.45, no majority-positive folds = a DIRECTIONAL rejection. Method caveat: the at-ask harness CANNOT validate an execution fix (fills at the ask by construction — needs a fill/repricing model or live shadow A/B).
  • crypto-shortterm-time-of-day-filter-nogo-2026-07-06time-of-day filter → NO-GO (in-sample great, OOS reversed, 2026-07-06): in-sample (July live ~5d) looked like overnight prints (01–05 CEST +245, 15:00 −5), overnight −0.018/fire (−10). Hour-of-day P&L flips sign between periods = **noise** (BNB May no US-open dip; July −165 period-specific, Jul 4 −$124). Do not arm a time filter — the 4th in-sample-great/OOS-fail overlay this session (after EMIT_MIN_EDGE floor, disagreement-ceiling, don’t-chase); durable lesson = the edge is the [60,150)s pocket, the market efficiently prices every overlay.
  • crypto-shortterm-chainlink-harness-timeout-fix-2026-07-06Chainlink eth_call had NO HTTP timeout → backtest round-walk hung (harness fix, 2026-07-06): ingest::chainlink::eth_call_result had no reqwest timeout → the backtest_run on-chain Chainlink round-walk HUNG indefinitely on the free publicnode RPC; fixed on the analysis worktree with reqwest 12s timeout + 4 retries with backoff (makes any harness Chainlink walk reliable — worth upstreaming to main). Remaining slowness = a fresh client per call (no connection reuse) → slow for long ranges; connection pooling is the next optimization if long backtests are needed.
  • crypto-shortterm-depth-aware-sizing-nogo-2026-07-10depth-aware dynamic sizing → offline edge-gate NO-GO (2026-07-10): per-window clamp(FRAC × side_best_ask_sz, 5, MAX) vs fixed 1× (S=5) and retired 2× (S=10) — new bin depthsizing.rs, paired per-window, ACTUAL CLOB labels (NOT resolved_up), K=6 purged/embargoed walk-forward, clustered UTC-day bootstrap (2000×, seed 42, deterministic), Down = symmetric down-book BUY; DRY module depthlib.rs lifted byte-identical from depthaware.rs. Best 1.0/10+0.141/window, t=2.60 (d_z=2.24, 3/5 folds) < Bonferroni t≥3.08 (24 trials); vs 2× 1.0/15 → +0.139, t=2.54 — both below. Decisive: the winners raise per-window exposure 1.9×–4.7× (¢/share 2.32–2.83 vs 2.74 = no per-share edge) → a size-up, not a de-risk. Power caveat: the correct down-buy pass is 934 win / 5 UTC days (down_best_ask_sz from ~06-28), but a full-range up-book pass (2325 win / 13 days, Down as sell-up) ALSO fails (t=1.55) — not a 5-day artifact. Live depthwatch shadow: ~90% of fires would size up. Nothing merged (663b8af); 127 tests green (11 new depthlib). Shelve; supersedes HANDOVER item 5.
  • crypto-shortterm-overnight-gate-a0-lever-rearm-2026-07-10overnight/daytime split OOS verdict → DIRECTIONAL-REAL but NOT structural (provisional, 2026-07-10): purged/embargoed OOS on 4,773 filled orders / real CLOB labels (realized_pnl_usd sign 100% == CLOB winner). Overnight (20–06 UTC) +560/−2.15¢, and the gap is within-lane (+0.0352 vs +0.0372/fire — not lane-mix). BUT P(overnight>daytime)=0.949 with the diff CI including 0, P(overnight>0)=0.875 (overnight-positive NOT significant — the robust leg is “daytime worse”); walk-forward met the bar in only 5/9 day-folds & 3/6 contiguous WITH sign reversals 07-03/04/08 (the time-of-day NO-GO flip signature); 67% of the daytime loss is the single 07-09 US-open blowout → dropping it collapses P 0.949→0.883. ⇒ UNDERPOWERED / period-noise-consistent — confirms (does not overturn) the 07-06 time-of-day NO-GO. The overnight re-arm is a provisional risk tilt on the known-winner lanes, not a validated clock edge; re-test after ~2–3 wk forward data.
  • crypto-shortterm-honest-recalibration-edge-gate-verdict-2026-07-11honest recalibration → NO-GO for EV; the signal is HEALTHY, the edge PERSISTS (rigorous refit, 2026-07-11): 5 purged/embargoed folds, 5,671 OOS windows, real BTC CLOB labels. Signal healthy — late window (≥07-05) STRONGEST, honest win ~0.77–0.79 / +3.46¢/fire, all 6 assets +EV late week. Recalibration NO-GO: frozen 2,633 fires/76.3%/+37.13 (own_z 2.30) → Δz −0.30 (tie); best of 16 variants +0.16 « deflated bar 3.99. The frozen map IS overconfident ~5–11pt/bin (claims 0.912 where real 0.808) but the gate absorbs it at the ~0.72 ask → recalibration recovers ZERO EV, only refuses 40% near-breakeven expensive-ask fires. RETRACTS a same-session “edge eroding” read (real win 80→73%, ceiling +7¢→0) that was a coarse cross-asset aggregate skewed by SOL (07-10 sol −11.2¢ n=62 partial day) while BTC was +9.2¢, eth +3.8¢ — lesson: measure erosion PER-ASSET, never cross-asset aggregate (same family as the window_id trap). The loss is FILL-side (A0), not the signal — reconfirms the standing finding. Caveat: rigorous folds BTC-only (binance_ticks BTC-only); alts cross-checked (+EV) not refit — resolve before live GO. BTC-only; feat/calibration-refit-degraded-rerun ae31a0c (not pushed); report docs/superpowers/refit-honest-degraded-verdict-2026-07-11.md; calibration.json untouched.
  • crypto-shortterm-discriminator-catchability-ask-drift-2026-07-13unfilled-would-win discriminator VALIDATED (opposite of A0) but the prize is largely NOT catchable (2026-07-13): same per-asset/per-regime scrutiny that dissolved A0, re-run on the discriminator (data/signal_fill_decomposition_2026-07-10.csv, 5,555 fires, real_win=CLOB truth). Unfilled 80.6% win vs filled 73.4% = ~7.2pt (≈6 SE); positive in ALL 6 assets (btc 9.6…sol 4.0), positive on ALL 7 days green+red (5.7–11.3pt, structural not drawdown, where A0 flipped +0.4→−7.2), survives conditioning on conviction (7.5pt within stratum = adverse selection on the unobservable). Missed winners +EV-capturable at the quoted ask (0.5→+17.6pt, 0.7→+10.4, 0.8→+5.0, 0.9→−4.6). BUT ask-drift kills the speed lever: on real best_ask_at_snap no_match rows (n≈1,810, 07-09→11) 99.9% had the real ask ABOVE our limit (genuine reprice, not phantom liquidity), median +0.07 above emit ask; the run is FRONT-LOADED (drift identical at attempt 1 & 2, p50 0.07 → the ~7-tick lift completes during emit→first-touch latency and plateaus) → a tighter FAK ladder can’t help. Consequence: catchable fills = stale-ask losers (A0); +EV fills need filling at the emit ask before a near-instant lift = a sub-latency race (RTT 117–260ms, co-lo shelved OOS); chasing +7 ticks ≈ breakeven at 0.72, −EV above 0.78 (why the BE limit correctly refuses). NO cheap fill-capture lever adds EV — honest levers = quality-not-quantity (EMIT_MAX_ASK 0.85→0.78–0.80, refuse doge/xrp thin-book). Re-confirms PM’s latency/co-lo shelving on EV grounds; validates the standing FILL adverse-selection thesis. Caveats: clean attempt-0 drift needs post-2f0ec6ad real ask (accrue forward); real-ask data red-days-only.
  • crypto-shortterm-fill-space-closed-15m-pivot-proposal-2026-07-18the honest-fill harness (never built) is the root cause of “offline +EV, live −EV” — PROPOSED to build it (2026-07-18, PENDING): the 2026-07-03 backtest-fill-harness spec was never implemented; the current walkforward gate assumes CERTAIN fill at ask+1¢ flat, resolved_up labels (~10pt optimistic on the traded subset), zero latency/book-evolution = exactly the gap between the offline gate passing and the live lane losing. Proposed W1: a fill model calibrated on our ~1,400 recorded live fills, self-validated on held-out fills, won_up labels only, latency params from babylon #1189 — the shared instrument for W2 (the 15m offline gate: fresh fit-then-frozen calibration, own band, ONE confirmatory test, deflated bar) and W3 (a cheap 5m τ∈[150,300) falsification, expectation LOW — population sufficient ~3,311 win/14d but median first-qualifying ask 0.90–0.93, conviction and ask co-move). Pre-committed exit rule: W2+W3 fail under honest fills → shelve the lane, keep observe as a data asset. Deps refitlib/exitlib on feat/calibration-refit; fill truth (pm_fak_attempts/pmv2_autotrade_orders) needs a cross-schema read. No decision taken.

Competitor Analysis

  • crypto-shortterm-competitor-wowitsamazing-refuted-2026-07-03the “sole skill-verified winner” (0xd02b…/wowitsamazing) REFUTED + 3-leg-VALIDATED (2026-07-03): 38-day lifetime harvest (199,184 rows) shows no fee-clearing edge and a net loser by true USDC (90k, three accountings, components reproduce exactly; on-chain-confirmed — Polygon net −87,540** (corr 0.9915; cutover ~Jun 13; 1.72% effective after ~16% rebates) — the exact fee term in our net-edge gate → VALIDATED on ~190k fills; book-calibration audit independently re-validates EMIT_MAX_ASK 0.85 + edge-vs-ask. The “242-0” = artifact-with-certainty (p≈1e-20); mechanism NAMED (§C8): survivorship by activity-dependent tape truncation (0/56 lost vs 55/129 won markets tape-visible — zero-error prediction; true window record 129W/56L; the naive fill-level “cap hid his losses” story itself REFUTED, §C7 — capped tape shows 29% vs true 54%); “79.3%” = redeem-proxy overcount. Validation matrix fully closed (every finding ≥2 independent no-shared-code derivations). Data Streams falsified 3 ways (print-direction follower, 94% agrees with our p_cal); his tape cannot rule on our 0.75–0.85/τ≤150 band (power limit). 15m arm: real structure, mechanically dead (−1.1¢ population). NEW follow-up: do WE accrue taker rebates? Not a threat to our $400 roll.
  • crypto-shortterm-polymarket-data-api-gotchas — harvest + tape method behind the refutation: /activity offset cap + time-paging, usdcSize = nominal price + the Polymarket taker fee 0.07·x·(1−x) (NOT a bid-ask spread; corr 0.9915), PM’s own PnL endpoints exclude the fee (flatter takers), the redeem-presence caveat (overstates directional win rate under hedging), capped /trades?market= tapes unusable for per-wallet PnL in both directions (maker-invisibility ~32% → ~9% taker-visible), fee-era cutover ~2026-06-13, rebates (1.72% effective), frozen-tape reproducibility.
  • crypto-shortterm-market-expansion-scan-2026-07-09resident competition mapped on expansion candidates (2026-07-09): hourly up/down has confirmed fast bots (0xee55214e… 53 of the live window’s last 500 trades; five more wallets 17–50× each; ~16 trades/min); monthly touch barriers are held by a single algorithmic MM parking ~14.5k @0.96–0.98) on every barrier that will out-cancel a NATS→executor path; elon-tweets counters occupied by resident algos trading every 10–90s. Competition was one of the two universal killers in the scan (the other: UMA settlement velocity).

Data & APIs

  • crypto-shortterm-maker-sim-gate-spec-grounding-2026-07-22 — 5m market-data facts: gamma slug/condition_ids query BROKEN for 5m updown (use emitted_signals.condition_id→CLOB /markets/{condition_id}); data-api /trades?market= verified as 5m tape (taker-only, ~2k/page); pm_book_snaps 5m cadence ≈1.3s
  • crypto-shortterm-data-sources — the three feeds (Chainlink settlement, Binance predictor, Polymarket book), Gamma/CLOB APIs, Supabase + WAL storage split.
  • crypto-shortterm-phase0-live-milestone — all four feeds verified writing live; Chainlink on-chain via Alchemy RPC; recorder per-row throughput limit.
  • crypto-shortterm-phase0-codebase-complete — first measured Polymarket book spread ≈ 0.98 (empty/untradeable WATCH) and Binance↔Chainlink basis ≈ -$40 near expiry.
  • crypto-shortterm-prediction-research — mandates a Binance L2+trades feed for microstructure (Polymarket trade classification near-random); now feeds the adverse-flow veto.
  • crypto-shortterm-data-sourceslive-DB analysis access (2026-07-02 append): homebrew duckdb → Supabase without psql (PG* env from SUPABASE_DB_URL + PGSSLMODE=require; postgres_query server-side, READ_ONLY ATTACH); plus the emitted_signals.side era gotcha ('BUY' Jun 25–28 v1 rows vs 'Up'/'Down' after — filter side IN ('Up','Down') or legacy rows silently mis-score; caused a fake 15% win-rate scare).
  • crypto-shortterm-polymarket-data-api-gotchasPolymarket data-api /activity gotchas (2026-07-03): offset hard-caps at ~3000 → time-page via start/end unix secs (newest-first, end inclusive, browser UA, binary-search first-activity); usdcSize includes the Polymarket taker fee 0.07·x·(1−x)·size (the usdcSize-vs-nominal gap is the fee, NOT a bid-ask spread; corr 0.9915) → use usdcSize for true PnL; leaderboard lb-api/profit + user-pnl-api/user-pnl compute off nominal/marks (exclude the fee → flatter high-freq takers); REDEEM rows attributable via conditionId/slug (asset=”/outcomeIndex=999), redeem-presence is a valid per-market outcome proxy but overstates the directional win rate — the toolchain behind the competitor refutation. Extended by the 3-leg validation (same day): capped /trades?market= tapes unusable for per-wallet PnL in BOTH directions (1000-print recency cap; ~32% of fills execute as maker → ~9% taker-visible; per-wallet-z methodology retracted); taker-fee cutover ~2026-06-13 (zero-fee subset = pre-fee era); rebate program → 1.72% effective fee (check if OUR wallet accrues rebates); post-settlement tapes are frozen — row-exact reproducible (10/10) → freeze tapes at study time.
  • crypto-shortterm-pnl-attribution-corrections-2026-07-03attribution join trap (2026-07-03): crypto_shortterm.outcomes.window_id is NOT unique — it is shared across all 5 assets for the same 5-min bucket (each resolves independently; ~9,643 rows / ~5,995 distinct window_ids; (asset, window_id) is the unique key, with duplicate rows per pair). A window_id-only join collapses all assets → coin-flip labels (>50% self-contradicted on resolved_up). ALWAYS join (asset, window_id); dedupe bool_or(resolved_up) GROUP BY asset, window_id; asset = crypto_5m_algo_*→btc else split_part(source_id,'_',1).
  • crypto-shortterm-observations-window-id-not-asset-uniqueobservations/outcomes.window_id is NOT asset-unique; emitted_signals has NO asset column (2026-07-09): window_id = bare window-open Unix epoch (format!("{}", open_ts().timestamp()), observe/src/lib.rs:165), identical across every lane at the same instant; observations PK (asset, window_id, as_of) / outcomes (asset, window_id) (migrations/0007). Any join on window_id alone + ORDER BY abs(Δt) LIMIT 1 returns a near-arbitrary asset’s row (correct ref: depthprofile.rs:72 WHERE o.asset=$1). emitted_signals PK (source, window_id) (was (window_id) in 0003) — asset lives only in source via an IRREGULAR map (ingest/src/asset.rs: BTC→crypto_5m_algo_up prefix crypto not btc; btc15→btc_15m_algo_up label btc15; eth15→eth_15m_algo_up) → split_part(source,'_',1) mislabels btc/btc15/eth15, use an explicit CASE. Generalizes + corrects the [[crypto-shortterm-pnl-attribution-corrections-2026-07-03|outcomes join-trap]]. Adjacent: emitted_signals.size dropped in migrations/0005 (per-directive size unrecoverable); emit_ts/as_of both timestamptz (instant-based, TZ-safe).
  • crypto-shortterm-lane-state-adverse-fill-2026-07-05realized_pnl_usd IS CLOB settlement truth (confirmed 2026-07-05): 24/24 sampled windows the CLOB tokens[].winner matches the SIGN of realized_pnl_usd exactly → it = the actual CLOB resolution, net of fees (fee baked into cost_basis); the ~9–15% near-tie noise is resolved_up-only. Live P&L tables on realized_pnl_usd are label-truth-grade — no CLOB backfill needed for them (backfill only helps on-chain/resolved_up analyses).
  • crypto-shortterm-perf-dashboard-2026-07-05reusable live-P&L pull + HTML dashboard (2026-07-05): dashboard_data.py extracts overall/daily/per-lane/per-asset metrics as JSON from the live DB via the duckdb + postgres READ-ONLY ATTACH pattern (source = pmv2_autotrade_orders.realized_pnl_usd, CLOB-truth net-of-fee); build_dashboard.py bakes a self-contained dark HTML. Both live in the session scratchpad — ephemeral; move to repo scripts/ to keep.
  • crypto-shortterm-pnl-onchain-cash-truth-2026-07-06on-chain realized CASH = the P&L truth (2026-07-06): realized P&L = Σ(REDEEM)+Σ(SELL)−Σ(BUY) from the data-api /activity per proxy wallet (net of fees, no mark-to-market); reusable persisted scripts scripts/wallet_lane_cashflow.py (maps each REDEEM→lane via the originating BUY’s conditionId) + scripts/wallet_pnl_reconcile.py. The PM lb-api/user-pnl-api/UI “profit” is INFLATED 2–6× (unrealized MTM + gross of fees) — do NOT use it; realized_pnl_usd reconciles to on-chain cash but lags at resolution. Sits atop the realized_pnl_usd > resolved_up hierarchy.
  • crypto-shortterm-empire-ui-crm-topology-2026-07-06one Supabase project holds everything (2026-07-06): mgmt ref mkofmdtdldxgmmolxxhc hosts the Levandor CRM, the pmv2/pm_* tables AND our isolated crypto_shortterm schema (crypto_algo .env SUPABASE host = same ref). The CRM (React+Vite+Supabase+Clerk, @crm) reads the DB directly → surfacing crypto lane-ops = public SQL views/RPCs bridging crypto_shortterm→PostgREST (likely via public, since the schema is isolated and pmv2’s public/pm_* tables are off-limits), not a new API. Open: is crypto_shortterm PostgREST-exposed or must it be bridged.
  • crypto-shortterm-db-index-audit-2026-07-09Supabase index audit of the shared project (2026-07-09): DB 8.4GB (crypto_shortterm 4.3 / public 4.0); top-10 statements ≈ 80% of server exec time, PM’s schema ~65%. Worst offenders: TEXT end_date regex sweeper (16.9%), pm_trades fat select (19.8%, index fine — app shape), pm_trader_metrics 2.6B-tuple seq scans, pmv2_market_resolutions useless 155MB index (4 lifetime scans). Per-owner DDL → babylon #1163. Crypto: migrations/0010_index_hygiene.sql written NOT applied (obs_asof_idx btree→BRIN); writers healthy; the real lever = retention/partitioning (the 912MB pm_book_snaps pkey IS the ON CONFLICT dedup key over 77-char TEXT token_ids — only retention shrinks it). GOTCHA: binance_ticks pkey (trade_ts, price) has no asset column → multi-asset same-price ticks would silently dedup (unresolved). Repro scripts/db_index_audit.sh (duckdb read-only ATTACH); full report docs/superpowers/db-index-audit-2026-07-09.md.
  • crypto-shortterm-loss-investigation-real-vs-onchain-edge-2026-07-10resolved_up overstates the TRADED win rate ~9–14pt on the FILLED subset (2026-07-10): sharpens the 4–7pt per-bin inflation — because fills concentrate in near-ties, the filled-subset gap is bigger. 07-08+07-09 fills 111 on-chain-WIN-but-real-LOSS vs 13 the reverse (asymmetric, median 3.5 bps from strike) = −$1,011 the on-chain label doesn’t see; real fill-win on loss days 64–72% vs on-chain 78–86% (breakeven ~73%). BINDING: every gauge on resolved_up — signal-win dashboards, the CRM signal_win−fill_win toxicity tab, break-even bookkeeping — reads ~10pt healthier than the money at risk; re-base health on realized_pnl_usd split by side+day. Read-only duckdb→Postgres, un-peer-reviewed.
  • crypto-shortterm-w0-fee-rebate-audit-2026-07-22the venue taker fee re-fitted on OUR OWN fills = exactly 0.07; rebates live in separate data-api activity rows (2026-07-22): the usdcSize − price·size = C·p·(1−p)·size identity (see the data-api gotchas) fits C = 0.0700 with zero dispersion over 3,399 of our live BUY fills — independent of the competitor’s 190k-fill fit. GOTCHA: pmv2_autotrade_orders does NOT surface fee reality — it books 0.10 (43% high, [[crypto-shortterm-w0-fee-rebate-audit-2026-07-22|babylon #1233]]) and contains no rebate rows at all; TAKER_REBATE credits (16 rows, $39.49 across bandi/balu, 0 for levi/gyula) arrive as separate data-api activity rows invisible to any P&L gauge on the orders table. Wallets from public.pmv2_wallets (all dry_run); scratchpad rebate_tally.py/fee_fit.py.

Debugging & Bug Fixes

  • crypto-shortterm-maker-sim-gate-build-complete-2026-07-22two durable environment gotchas from the maker-sim build (2026-07-22): (1) *.polymarket.com Cloudflare TLS-resets this workstation since ~11:00Z 07-22 (after ~3k morning API calls) AND blocks agent sandboxes → live fetches must route through the deploy/infra VM (babylon 1243; scripts resumable); (2) sqlx + transaction-mode pooler (:6543) breaks prepared statements at process rerun (statement-name collisions across pooled sessions) → gate runs must use the session-mode pooler (:5432); the same latent issue exists in walkforward.rs. Also: the review loop caught two bugs in the plan’s own reference code (unsorted-prints self-inconsistency; unresolved-CLOB-market silent Down-label) — a case for trusting the review loop over a plan’s sample code.
  • crypto-shortterm-polymarket-token-overflow-fix — Polymarket token ID u128 overflow: silently zeroed market cache → 0 emits; fixed to digit-string check; also corrected GammaMarket serde field names (orderMinSize, orderPriceMinTickSize); commit 7bfe3a0.
  • crypto-emit-max-fires-cap-clear-2026-06-25 — Pattern A → B cutover residue (~19:25Z 2026-06-25): 50 pre-cutover rows in crypto_shortterm.emitted_signals + default EMIT_MAX_FIRES=50 hydrated the BLOCKER-3 in-process counter to 50 at boot, leaving emit paused for ~22h. TRUNCATE alone insufficient (hydration is one-shot at boot); must also systemctl restart. NATS subject-capture proof recipe captured. Operational corollary now in crypto-shortterm-emit-guardrails BLOCKER-3 section.
  • crypto-shortterm-algo-accuracy-audit-2026-07-02CRITICAL fidelity gap (2026-07-02): live emit dropped the validated edge-vs-ask conditionemit.rs fires on is_regime(τ,p_cal) alone; the gate-clearing rule (walkforward.rs:32) also required p_cal − (ask+slip) − fee > 0. 26% of live BTC fires had pred≤ask (−EV net of fees); restoring the gate = +60–90% EV/fire at ≈ equal-or-higher gross total (confirmed OOS on the 4 alt lanes). Also EMIT_MAX_ASK unset on all 10 lanes (fires up to ask 0.979 vs backtested 0.85 cap). Fidelity fix, not a new regime.
  • crypto-shortterm-fak-nomatch-root-cause-2026-07-02FAK no-match root cause (2026-07-02, babylon #942): NOT empty books (1/~2200) — the ask reprices ABOVE our own directive limit_price = ask_at_emit + EMIT_PRICE_BUFFER(0.02) within ~0.7s (UP 19–25%, DOWN 29–38% — explains PM’s DOWN-skew); why widening PM slippage_cap_bps 200→500 did nothing.
  • crypto-shortterm-down-side-money-path-fixes-2026-06-28down-side money-path fix pass (feat/down-side, 2026-06-28): BookView refactor closes the “Down-reads-UP-book” copy-paste bug classObservation carries up/down: BookView (not 16 flat pm_*/down_* fields), book_cols() returns a BookView (kills the positional 8-tuple BookCols transposition hazard), emit picks per-side params via pure fire_params(side,obs,market) (test asserts Down⇒down book/token_down/down_outcome_index/SOURCE_DOWN/“Down”). Also probe_schema_column startup fail-fast (“apply migration 0006”) instead of failing every INSERT in the loop; ingest poll_book’s three error arms raised debug!warn! (were invisible at prod RUST_LOG=info) with side+token; probe_window now treats crypto_5m_algo_down rows (store p_cal=P(up) next to the Down ask) as expected. Tooling gotcha: rtk cargo hook mangles cargo clippy --all-targets -- -D warnings (-D taken as a filename → “multiple input filenames”) → run clippy + fmt --check via rtk proxy.
  • crypto-shortterm-pnl-attribution-corrections-2026-07-03#1031 REFUTED — zero-delta (2026-07-03): the prior handover/LOG claim that PM realized_pnl_usd was “biased negative” with “7 false losses” (premature winner-flag read) is wrong — @deploy CLOB-re-checked all 7 (tokens[].winner = payout oracle = ground truth), we LOST all 7; PM’s −cost_basis booking was CORRECT; the artifact was a flipped token-side cross-ref in an earlier crypto-side session, NOT a PM bug. realized_pnl_usd (CLOB/winner-flag) is the trustworthy P&L label.
  • crypto-shortterm-lane-state-adverse-fill-2026-07-05btc-up is ADVERSE FILL, not a broken signal (2026-07-05; REVISES the “adverse selection at signal level” framing incl. babylon #1048): decisive test (Jul 3, actual CLOB winners) — the 8 btc-up fires we FILLED won 25%, the 14 we FAILED to fill (FAK no-match, ask ran away) would have won 100%; the signal is fine (~73–84% actual on fired windows), we systematically fill the losers (cheap ask = market knows it loses) and miss the winners (ask runs away). Loss is EXECUTION. Dry btc-up will look profitable = a mirage — do NOT re-arm on dry results; the fix is execution-side (needs the @simulator fill harness). n=22, one day.
  • crypto-shortterm-pnl-onchain-cash-truth-2026-07-06wallet2 “2× under-booking” (#1054) = a BOOKING LAG, not a bug (2026-07-06): @positionmanager traced the winner-flag sweep is wallet-agnostic (can’t be wallet2-only) and overnight the booked total caught up to on-chain cash (~288 cash) → realized_pnl_usd lags at resolution then reconciles; NOT the (separately-refuted, zero-delta) #1031 mechanism. 836/837 on-chain conditions matched PM-placed → also refutes the “Balu manual activity” hypothesis (majors algo-dedicated, size_scale=1.0, 1 manual Paraguay bet).
  • crypto-shortterm-chainlink-harness-timeout-fix-2026-07-06missing HTTP timeout on Chainlink eth_call (2026-07-06): ingest::chainlink::eth_call_result issued its eth_call with no reqwest timeout → the backtest_run Chainlink round-walk hung forever on the free publicnode RPC; fixed (analysis worktree) with a 12s timeout + 4 retries with backoff. Reusable gotcha: any free-public-RPC read needs an explicit timeout + retry (production settlement uses reliable Alchemy). Next optimization: connection pooling (a fresh client per call is slow for long ranges).
  • crypto-shortterm-emit-publish-first-latency-2026-07-09producer-side latency leak: the emit DB claim INSERT gated the NATS publish (2026-07-09): the synchronous emitted_signals claim INSERT (logged claim_ms) commits before publish_entry, so a 234–301ms median / p90 ~1–2.5s / max ~3s cross-region round-trip (Zurich emit → Dublin eu-west-1 Supabase) sits on every fire’s critical path, ahead of the Directive. Diagnostic signature: a per-fire timer (claim_ms) whose p50 alone exceeds the ~128ms budget ⇒ the DB write, not the model, is the bottleneck. Fix = flag-gated publish-first + async record + DLQ (feat/emit-publish-first-dlq @ 6cd9487, not rolled); safe only after JetStream dedup is confirmed (see the Execution & Signal Emission entry).
  • crypto-shortterm-observations-window-id-not-asset-uniquemissing asset predicate → asset-blind depth guardrail false alarm (2026-07-09): scripts/depth_guardrail.sh (commit 326bc2f) joined observations on window_id only (no asset); since emitted_signals has no asset column and the touch subquery used ORDER BY abs(Δt) LIMIT 1, it picked a near-arbitrary lane → reported median_touch=33 vs BTC’s in-regime ~658 → tripped alert=TRUE and drove a spec rewrite to rev 2.1. Diagnostic signature: per-asset medians suspiciously uniform across assets known to differ by an order of magnitude ⇒ suspect a missing asset predicate (grouping the outer query by the fire’s asset can’t fix an asset-blind subquery — the fix is AND o.asset = f.asset in the subquery, with f.asset derived from source via CASE). Schema detail + full source→asset map in the Data & APIs entry.
  • crypto-shortterm-loss-investigation-real-vs-onchain-edge-2026-07-10loss investigation: NO code regression, a 3-day slide not a one-day blowout (2026-07-10): the 07-09 emit commits (E1 nats.rs Pub-Ts header, E4 emit.rs claim_ms/pub_lag_ms) are telemetry-only + dedup-safe (Nats-Msg-Id still =order.id, unit-tested), E2/E3 are offline analysis scripts, and publish-first is flag-OFF/dark → not the cause. Model healthy (on-chain signal-win 85–88% every day incl. 07-09 85.7%, fires ~880–920/day, asks ~0.72). Live realized_pnl_usd: 07-05 +15 / 07 +120 / 09 −170 partial07-08 was already negative, contradicting the repo HANDOVER.md “+448 on 07-09”. Un-peer-reviewed (single-session read-only).
  • crypto-shortterm-w0-fee-rebate-audit-2026-07-22pmv2 over-books taker fees by 43% (fleet-wide, babylon #1233, 2026-07-22): pmv2_autotrade_orders.fee_usd = exactly 0.10·p·(1−p)·size on all 5,322 fee>0 rows, but the venue charges exactly 0.07 (fitted on 3,399 of our own live fills via usdcSize − price·size; median=p10=p90=0.0700, zero dispersion; matches the competitor’s 190k-fill fit) → every pmv2-booked strategy’s realized_pnl_usd is systematically pessimistic (our lane −368 true). Our own observe::fee (0.07) was never wrong — the bug is in pmv2’s booking, not the producer. Diagnostic signature: a booked fee coefficient with zero dispersion across a large fit ⇒ a hard constant, so a median≠your-model-constant is a booking bug not noise. Rebate credits ($39.49 across 4 wallets) are not surfaced in the orders table at all.

Empire UI & CRM

  • crypto-shortterm-empire-ui-crm-topology-2026-07-06the empire UI IS the Levandor CRM; a crypto lane-ops view = a NEW CRM TAB, not new React (2026-07-06): the central operator UI is the Levandor CRM (React + Vite + Supabase + Clerk, built by @crm), which already renders pmv2_*/pm_* tables directly (as never casts, absent from database.types.ts) in a Polymarket surface (tabs Scout / Copy Lane / Longshot / Bets). One Supabase project (mgmt ref mkofmdtdldxgmmolxxhc) holds the CRM + the pmv2/pm_* tables + our isolated crypto_shortterm schema; the CRM reads it directly. So crypto’s deliverable = public SQL views/RPCs (bridge crypto_shortterm→PostgREST, likely via public) + a cash-truth ingester + a CRM_DASHBOARD_PROMPT.md-style build-prompt for @crm — likely no React written by crypto. Code pattern web/src/lib/* + .../hooks/* + web/src/pages/polymarket/* w/ unit tests. Pending: CRM repo path/remote; is @crm on babylon?; is crypto_shortterm PostgREST-exposed. Source: polymarket_fetch/CRM_DASHBOARD_PROMPT.md.

Execution & Signal Emission

  • crypto-shortterm-phase1-bet-sizingPhase-1 sizing decision (2026-06-26, Andras): double the bet 5→10 shares (EMIT_SIZE_MULTIPLIER=2) + raise daily cap 200 to hold ~20–30 latency fills — the cap is a reject-GATE (reserve.rs:146CapSrcDaily), not a resizer, so per-trade size and cap are independent levers. New env knob EMIT_SIZE_MULTIPLIER in directive.rs build_entry (default/unset/<1.0/bad → 1.0 no-op; floor-safe via .filter(is_finite&&>=1.0)+helper .max(1.0)). Key finding: @positionmanager honors the producer’s size_shares directly (pricing.rs:217: size_usd=limit_price×size_shares, no config override) — supersedes the 62-Directive-era “PM sizes from its own config” note; size_shares IS the per-trade lever (units = outcome-token shares). Still dry until Andras’s live flip; code built + gated green, NOT yet committed.
  • crypto-shortterm-handover-2026-06-26producer LIVE, dry-validate PASSED end-to-end (2026-06-26): emit publishes a pmv2-contracts schema_2 EntryOrder to NATS pmv2.order.crypto_shortterm_latency_test.entry → @positionmanager consumes on stream PMV2_ORDERS → eff=Dry → DryRehearsed (build+sign, NO POST) → telegram. Wire: source=crypto_shortterm_latency_test, id=Nats-Msg-Id=crypto_shortterm_latency_test|<window_id>, Limit arm, size_shares=5. EMIT_MAX_FIRES 50→1000; PM mode min(global,source) ignores enabled (live = both flips). v1 = UP-only by design (EMIT_BOTH_SIDES=false) — emit only polls the Up-token book; Down deferred (poll No-book + flip flag). Executor = @positionmanager (not @polymarket).
  • crypto-shortterm-phase1-execution-decisionPhase-1 execution decision (2026-06-22): crypto-shortterm is a producer — publishes a Directive (source=crypto_shortterm_latency_test) to NATS cohort.signals; pmv2’s position_manager places the order via CLOB (no own wallet/key/order path; per-fill size from pmv2 global base-size). polymarket’s verdict: ≲128ms is LIKELY NOT achievable over the REST order path (sub-128ms needs a co-located ws/FIX path pmv2 lacks) → live test expected to measure a miss. **Staged 20 live tranche → read latency → early-exit on confirmed miss; spend capped by EMIT_MAX_FIRES + pmv2 daily_spend_cap_usd=$100. Deployed for dry-validate (#264, mode=dry_run).
  • crypto-shortterm-phase1-latency-budget — publish→fill target 128ms (p90 adverse drift); sensitivity HIGH; <50ms strongly recommended; 1s poll means true budget may be tighter.
  • crypto-shortterm-phase1-emit — Phase-1 live signal emitter (SHA 5e92c7f; pmv2 schema aligned c12c830): DRY refactor of observe engine into lib.rs; CalibrationMap, Directive structs; NATS publish to "cohort.signals" or shadow-log; regime τ∈[60,150)s / |p_cal−0.5|≥0.30; single-fire HashSet + EMIT_MAX_FIRES cap; records to emitted_signals table. Directive schema now confirmed (c12c830): id="clt-{window_id}", yes_token_id String (not i64), condition_id from Gamma API, max_price tick-rounded/clamped, Nats-Msg-Id dedup header; UP-only v1 (EMIT_BOTH_SIDES=false); valid_until_ts = latency drop signal. calibration.json must be generated via cal_export before deploy. Pre-live code review + hardening (commit bc38734, review on pin c12c830): 3 BLOCKERs (condition_id slug fallback, wrong-token-by-index, guardrails reset on restart) + 3 HIGH (stale/zero/NaN ask, NATS-failure-marks-fired) + medium/low all fixed; 21 tests green. Pattern: build→review→fix is the standing pre-live discipline for money-path code; final delta review planned before the live flip.
  • crypto-shortterm-emit-guardrails — 13 money-safety guardrails (commit bc38734): 3 BLOCKERs (condition_id 0x guard, YES token by outcome label not index, fired_windows DB hydration on restart), 3 HIGH (book staleness 5s, zero/NaN ask, NATS failure skips before fired_windows.insert), 4 MEDIUM (valid_until freshness, Gamma 5s HTTP timeout, calibration p clamp, market window-match), 3 LOW (include_str! calibration, INSERT double-bind fix + migration 0005, Binance staleness Option<(f64, DateTime)>). Data model: BookTop +window_id, Observation +pm_book_as_of/pm_book_window_id/last_binance_ts.
  • crypto-shortterm-emit-prelive-pass2Pre-live Review Pass 2 (commit 89e354e, 2026-06-19): 1 BLOCKER (migrate compile-time migrations via include_str!, all 5 embedded, no CWD dependency); 2 HIGH (NATS NKey auth hard-wired, Binance staleness gate clock-source fixed to local-clock-to-local-clock); 3 MEDIUM (discover_active_market removed from hot path → 30s background watch channel, outcome label hardening + token_down u128 validation, User-Agent + 5s timeout on poll_book); 2 LOW (EnvFilter "info" fallback, ON CONFLICT confirmed). Confirmed live labels ["Up", "Down"]. 7 new tests; all gates clean.
  • crypto-shortterm-loss-filter-analysis-2026-06-26loss-filter analysis (PRELIMINARY, n=4, 2026-06-26): one entry-time filter survives EV scrutiny — shat_mom_30 ≥ 0 (“don’t buy UP when BTC fell over the last 30s”), skips 2/4 losses / costs 2/27 wins; a physical-state feature (corr w/ pm_ask 0.17) so it leaves the model-vs-market disagreement edge intact. Bonus lever: raise emit τ-floor to ~τ65 for ~3.6s latency headroom (the τ=59 fill came from emit@τ62 + latency). Shadow-test only — do NOT live-deploy a bet-dropping filter on 4 points.
  • crypto-shortterm-crypto-5m-algo-both-sides-2026-06-27both-sides DECISION + PLAN (2026-06-27, code NOT built): enable the DOWN side (EMIT_BOTH_SIDES=true) — symmetric regime |p_cal-0.5|>=0.30, so DOWN = p_cal<=0.20 → buy the Down token at the Down-token book ask (NOT the synthetic complement); and split source crypto_shortterm_latency_testcrypto_5m_algo_up + crypto_5m_algo_down so PM dry/live-arms + caps each direction independently. Scope = pmv2 sources/subjects ONLY (schema/services/repo names unchanged). Reused unchanged: calibration (covers Down bins), subjects derive from order.source, single-fire (Up XOR Down) + emitted_signals.source col, PM outcome-agnostic (zero PM code). Structural: thread side feed→engine→Observation→emit, poll BOTH books, migration 0006 (6 down-book cols + emitted_signals.source); 8 TDD tasks. Plan docs/superpowers/plans/2026-06-27-crypto-5m-algo-both-sides.md (commit d61983b). Coordination: @deploy DM #819 (permits→0006+redeploy→retire), @positionmanager DM #820 (two dry rows, $100 cap each, confirm pmv2.order.> wildcard + outcome-agnostic Down), pmv2 post #821.
  • crypto-shortterm-algo-accuracy-audit-2026-07-02the emit fidelity fix (2026-07-02): restore net-edge-vs-ask firing (p_cal − (ask+slip) − fee > 0, optionally +δ) — halves fires/FAK exposure/fee drag/spend-cap burn at +60–90% EV/fire; plus set EMIT_MAX_ASK=0.85 on all 10 lanes (deploy config). This is a disagreement requirement (preserves the validated edge), NOT the rejected pm_ask≥0.80 agreement gate.
  • crypto-shortterm-fak-nomatch-root-cause-2026-07-02recommended PM spec (2026-07-02): re-priced FAK retry at the new ask (WR conditional on repricing ≈ unconditional 87–88% → +5–7c/share on recovered fills) with absolute ceiling ~0.88 + valid_until respect; same-price 1s retry mostly won’t fill. Producer lever = sub-second fire evaluation (emit due_obs is 1s-quantized).
  • crypto-shortterm-competitor-wowitsamazing-refuted-2026-07-03book-side re-validation of the live gates (2026-07-03): the dissection’s book-calibration audit shows the buyable zone (ask ≤0.90, tight spread) is efficiently priced — favorite realized-win exceeds its ask by ≈ exactly the fee in every ask bin (net ≈0 by construction), and the 0.95+ “overpricing” is a stale-wide-quote artifact (realized 0.468 @ ask≈0.99, 0.24 spreads — placeholder quotes) → independently validates EMIT_MAX_ASK 0.85 + the net-edge-vs-ask gate; our +EV comes from the p_cal gate selecting in-cell exceptions, not broad favorite-buying. Selector kill test: no reproducible slice of the competitor’s flow beats the contemporaneous ask OOS.
  • crypto-shortterm-down-side-money-path-fixes-2026-06-28C1 persist-before-publish invariant (feat/down-side, 2026-06-28): emit runs the emitted_signals INSERT (ON CONFLICT (window_id) DO NOTHING) BEFORE publishing to NATS — the DB row is the dedup authority. Pure helper fire_decision(Option<u64>) -> {Publish|SkipDuplicate|SkipError} (None=INSERT err → log+no-publish+retry; Some(0)=already claimed → no publish; Some(1)=claim owned → publish). A publish failure after a successful claim is logged loudly and never retried — the written row is a detectable MISSED trade. Invariant: never a duplicate real-money trade, worst case a detectable miss; fired_windows/total_fires advance right after the claim, before publish (conservative spend). Supersedes the old publish-then-mark ordering (bc38734, crypto-shortterm-emit-guardrails). FireSide enum deleted → select_side(p_cal) -> Option<Side> (two arms: ≥0.80 Up / ≤0.20 Down / else None); regime gate FROZEN τ∈[60,150)s ∧ |p_cal−0.5|≥0.30.
  • crypto-shortterm-disagreement-ceiling-nogo-2026-07-03the disagreement tail’s live loss is EXECUTION, not selection (2026-07-03): the low-ask/high-disagreement tail (~60% of fills, ask ~0.62 vs p_side ~0.865) is +EV at the ask (buy 0.62 → win pays 0.38) yet books the entire live loss because it fills 3.3c ABOVE the emit-ask — the break-even limit_price (observe::fire_limit, df6f500) chases the reprice up (~2.3c/share drag) vs 1.7c BELOW ask on the core — plus a depressed FILLED win 0.639 vs 0.674 signal (adverse fill selection); ties to the FAK-reprice finding. Actionable lever = the limit/fill path: cap fire_limit near the ask on low-ask fires (don’t chase), NOT the fire selector (edge-band selection is OOS-rejected).
  • crypto-shortterm-lane-state-adverse-fill-2026-07-05btc-up set DRY (2026-07-04) + adverse-fill root cause (2026-07-05): btc-up (crypto_5m_algo_up) live BUYS off but emit STILL FIRES (→ dry_run rows, filled_size=0, realized_pnl_usd=NULL, shadow only). Loss is EXECUTION not signal — filled fires won 25% vs failed-to-fill 100% (a sharper filled-vs-failed-labeled version of the disagreement-ceiling execution-toxic finding + the FAK-reprice thread). Do NOT re-arm on dry results (mirage). Contrast sol-down = thin/decaying SIGNAL (fill fine), not adverse fill.
  • crypto-shortterm-time-of-day-filter-nogo-2026-07-06do NOT arm a time-of-day fire filter (2026-07-06): overnight-print / US-open-bleed looked strong in-sample (~5d July) but the 21-day OOS check (actual CLOB labels, at-ask EV) flipped the sign (US-open +0.016/fire, overnight −0.018/fire) → hour-of-day P&L is noise. A fire-time overlay joins edge-band selection and don’t-chase as an OOS-rejected overlay — fire selection stays the frozen [60,150)s regime, nothing bolted on.
  • crypto-shortterm-emit-publish-first-latency-2026-07-09producer-side latency leak — the emit DB claim INSERT gated the NATS publish (2026-07-09): emit.rs runs a synchronous emitted_signals claim INSERT (logged claim_ms) and publishes the Directive only after it commits → 234–301ms median / p90 ~1–2.5s / max ~3s on every fire’s critical path, caused by cross-region Zurich emit → Dublin (eu-west-1) Supabase. Fix feat/emit-publish-first-dlq @ 6cd9487 (pushed, NOT rolled) behind EMIT_PUBLISH_FIRST (default OFF): publish first, record async, DLQ on failure (crates/observe/src/dlq.rs, drainer retries 60s, shared insert_signal/emit_directive + dlq_lock). Safety linchpin: publish-first surrenders the C1 DB-claim dedup → only safe if JetStream message-dedup (≥~2min window) is confirmed on the crypto entry stream (PMV2_ORDERS, babylon pmv2 #1160) else double-fire on a deploy roll. Third chapter of the publish-ordering saga. Producer-side complement to PM’s R0–R6.
  • crypto-shortterm-per-wallet-size-scale-2026-07-06per-wallet bet sizing already exists in pmv2 — pmv2_wallets.size_scale, no crypto code (2026-07-06): pmv2_wallets.size_scale NUMERIC NOT NULL DEFAULT 1.0 is a per-wallet GLOBAL multiplier that is BOOT-LOADED — NOT hot-read (a DB change needs a position_manager restart; verified 2026-07-06 when a 1.0→2.0 write left live fills unchanged at 10 shares/$8) (pmv2_source_wallets only maps source→wallet — NO per-source scale), layered atop the producer-side per-trade [[crypto-shortterm-phase1-bet-sizing|size_shares]] lever (migration dated 2026-07-01, newer). Scaling crypto’s bet = one DB column + a position_manager restart — no crypto code, no migration — requested on babylon pmv2 #1065 (sibling of the mode command: ledgered, clamped [0.5,3]; the command MUST force a registry reload — a bare DB write is ignored until restart). GOTCHA: bump size_scale AND that wallet’s daily_spend_cap_usd together, or the cap (a reject-GATE, not a resizer) silently clips the larger bets.
  • crypto-shortterm-order-type-fak-verdict-2026-07-09order-type question SETTLED (2026-07-09): keep FAK marketable limits at the BE ceiling — do NOT switch to market/FOK or resting GTC. PM’s order is a hardcoded price-pinned FAK marketable limit (polymarket-clob/src/lib.rs:502 buys/:513 sells; no per-source order-type config; vendored client supports GTC/GTD/FOK if ever needed); limit = floor_tick(min(max_price, fresh best_ask)), FAK-v2 retries reprice upward capped at max_price (pricing.rs:58-64); 0/9,047 attempts ever above the ceiling. “Adverse fills” decomposes: (a) refusals = the EV guard working (90.5% price-refusals, +5.4¢ avg above the BE ceiling — a latency-conversion loss); (b) realized fills clean (repriced fills win 87–88% ≈ population, ≥3¢ model edge guaranteed by BE pricing); (c) partial/under-fill = the open E3 watch. Market/FOK would buy the above-BE −EV pocket (the 38%-of-fires lesson); GTC maker = free option to sub-second bots vs our 2.78s p50 requote + voids the validated taker economics (full gate re-run).
  • crypto-shortterm-loss-investigation-real-vs-onchain-edge-2026-07-10loss fingerprint = side-specific INTRADAY adverse fill (2026-07-10): on each loss day ONE side’s real (realized_pnl_usd) fill-win collapses below breakeven while the other holds ~74–77% — Up 07-08 65% & 07-10 46%; Down 07-09 64% (profitable days both sides ~74–76%, breakeven ~73%); visible even on the optimistic label (losing-side filled opt-win 11–22pt below all-signal opt-win; today’s Up filled 56% vs all-Up-signal 78%). Generalises the btc-up adverse-fill signature to whichever side is pushed intraday. NOT a daily trend (market up-rate ~48–50%) and NOT a chop regime (near-ties did NOT track losses — 07-05 had the most, 42.9%, yet was most profitable). ~50%/day FAK no-match = separate conversion loss, stable across win/loss days. ⚠ Tension: the FAK verdict’s “fills win 87–88%, no adverse selection” is on the on-chain label — re-measure on realized_pnl_usd split by side+day.
  • crypto-shortterm-loss-decomposition-fill-adverse-selection-2026-07-10decisive FILL adverse-selection verdict (2026-07-10, real CLOB labels, 100% coverage / 4857 windows): the 07-08→07-10 loss is execution, not signal — signal ceiling at emit-ask +3.68¢/share / 77.1% (stable ~77%/day, no collapse; full 07-04→now +4.46¢/78%) vs realized **−3.87¢/share / 70.8% / −459 of −$641). Corrects the FAK verdict (forward-pointer callout added there, body intact): the ~50%/day no-matches are the +EV winners we MISS (winning-side ask runs away), not −EV trades the EV guard dodged. Only lever = fill-capture (not order type / selector / size); the filled subset’s at-ask ceiling is already ~−1.9¢ so the +EV is in the unfilled tail (chasing = prior NO-GO).
  • crypto-shortterm-overnight-gate-a0-lever-rearm-2026-07-10A0 first-touch is the toxic fill; the fill-policy is the real lever (2026-07-10, PM #1191): splitting the filled book by attempt index, A0 (first-touch, at emit-ask) = −5.70¢/sh @ 69.4% win (−EV) while A1+ repriced = +1.30¢ @ 75.3%removing A0 flips the 2-day book +EV. This pinpoints where in the fill sequence the adverse selection lives (the instant first-touch = the losers) and corrects/extends the FAK verdict: its clean “repriced fills win 87–88%, no adverse selection” is the A1+ subset — right about those; the toxicity is the A0 blend it averaged over on the optimistic label. Order-type conclusion still stands (no market/FOK/GTC); the lever is a fill-policy that avoids the toxic A0, not an order-type swap. A0-toxicity is SEPARATE from time-of-day (A0-share 80.1% overnight vs 82.8% daytime = +2.7pp) → orthogonal, additive to the overnight tilt, and the better-supported lever. PM’s 45fa0eb telemetry-fix (best_ask_at_snap was a req.limit proxy at attempt 0) rolls with the re-arm so forward fills measure the real book.
  • crypto-shortterm-a0-fill-policy-offline-scope-nogo-2026-07-12A0-avoidance fill policy = offline NO-GO; the “A0 first-touch is structurally toxic” claim is a TELEMETRY/REGIME ARTIFACT (2026-07-12): pm_fak_attempts.attempt_no=0 telemetry only exists post-45fa0eb = only the 07-09/10/11 drawdown (zero A0 on the 5 green days), so A0-toxicity can’t be separated from a regime toxic to everything. Like-for-like inside the clean window A1+ = −0.5¢ (breakeven), NOT +1.30¢ (the flattering figure was green-day reprices); A0 +0.36¢ POSITIVE on 07-09, −7.21/−6.67 on 07-10/11 (not stable); asset-concentrated (btc −1.1¢/eth −2.0¢ ~breakeven vs doge −10.5¢/xrp −9.1¢ = thin-book signature). Skip-A0 counterfactual unobservable (FAK stops on fill); optimistic bound only ~breakeven. EV validated vs booked realized_pnl_usd (A0 −6.21¢/share). DON’T build (6th in-sample-overfit NO-GO); pre-register re-test after ~5 green-regime days of A0 telemetry. The general loss-at-fill thesis STANDS; the A0-SPECIFIC structural claim is downgraded. Open levers unaffected: EMIT_MAX_ASK 0.85→0.78–0.80, doge/xrp thin-alt pocket.
  • crypto-shortterm-discriminator-catchability-ask-drift-2026-07-13prize real but not catchable — no cheap fill-capture lever adds EV (2026-07-13): the unfilled-would-win discriminator is VALIDATED (unfilled 80.6% vs filled 73.4%, ~7.2pt, positive in all 6 assets and all 7 days, survives conviction) and the missed winners are +EV at the quoted ask (0.5→+17.6pt … 0.7→+10.4). BUT ask-drift kills the speed lever: 99.9% of real-ask no_match rows had the ask genuinely repriced ABOVE our limit (median +0.07 above emit ask), and the ~7-tick lift is FRONT-LOADED — identical at attempt 1 & 2 (p50 0.07), so it completes during emit→first-touch latency and plateaus (a tighter FAK ladder can’t help). Catchable fills = stale-ask losers (A0); +EV fills need a sub-latency race (RTT 117–260ms, co-lo shelved OOS); chasing +7 ticks ≈ breakeven at 0.72, −EV above 0.78 → the break-even limit correctly refuses. Honest fill levers = quality-not-quantity (EMIT_MAX_ASK 0.85→0.78–0.80, refuse doge/xrp thin-book); independently re-confirms co-lo shelving on EV grounds.
  • crypto-shortterm-canary-confirmed-fill-ev-live-2026-07-16fill-data canary confirms fill −EV LIVE (2026-07-15/16): a bounded −EV canary (w1 @1×, ~18h37m, validated rule unchanged) to generate fresh fills for the A0/drift re-tests booked **−58 early → −1 sizes, PM crash-guard feat/usdc-size-decimal-fix @ ca07ba5 fixed it; residual ~1% sub-1); attempt-0 real best_ask only ~1/3 populated (PM 2f0ec6ad gap) so drift re-test stayed blocked; EMIT_MAX_FIRES is cumulative-all-time (NOT a bound), only kill = wallet→dry; direct DB now IPv6-only, use the pooler. Next lever = the size/depth bid-structuring study (size DOWN to avoid stale-depth reach) — expected to SHAVE not CURE; if NO-GO → edge not capturable as a taker, pivot market/timeframe.
  • crypto-shortterm-size-depth-study-liquidity-not-size-nogo-2026-07-17size/depth bid-structuring study = NO-GO — it’s LIQUIDITY, not size (2026-07-16/17): held order size ~constant (~10 shares in EVERY book-depth bucket) yet per-share net EV swings −8¢ (thin best_ask_sz 10–25) → −0.15¢ (deep >150, ~breakeven, 76% win) → fill EV is driven by exogenous BOOK DEPTH, our size doesn’t vary, so size-down can’t help (you can’t size a thin book into a deep one). Joins the depth-aware sizing NO-GO from the other direction. Depth-reach is NON-monotone (0.5–1.0 worse than reach>1 → “small orders fill better” was a deep-book confound). Only partial survivor = depth SELECTIVITY (fill gate best_ask_sz ≥ ~50): holds for majors (btc deep −1.4¢ vs thin −6.7¢; eth +0.8 vs −9.0; sol +0.4 vs −2.9), NOT xrp (+2.2¢ regardless) or doge (n=20 noisy) — shaves majors to breakeven only, costs volume, calm-regime confound uncontrolled. The fill-structuring space is now exhausted with rigor (A0, EMIT_MAX_ASK, latency/capture, size all negative/marginal) → leaning toward CALLING IT and pivoting to a new edge where we’re not the structurally-picked-off taker. Method: 1398 fills, 100% book-joined, 16% exhaust top-of-book.

Fees & Execution Economics

  • crypto-shortterm-maker-sim-gate-spec-grounding-2026-07-22 — maker-sim spec grounding: maker-rebate=$0 (pure takers), maker-rewards applicability to 5m unverified; PM fee fix eee211e (books 0.07, removes 2 fee RTTs); historical fee backfill gated on Andras
  • crypto-shortterm-data-sources — taker fee = C·0.07·p(1−p) (peaks ~2.5% at p=0.5, tiny near 0/1), maker 0 + 20% rebate, FOK/FAK, 425/503 engine modes, EIP-712 order path.
  • crypto-shortterm-strategy-design — fee-aware regime selection (near-expiry primary, mid-window p≈0.5 fee-killed).
  • crypto-shortterm-competitor-wowitsamazing-refuted-2026-07-03fee identity empirically verified on ~190k real fills (2026-07-03): per-fill usdcSize − price·size = 0.07·x·(1−x)·size (ratio ≈1.0, corr 0.9915, $87.5k lifetime); fee-era cutover ~2026-06-13 (no fee before); rebates claw back ~16% → 1.72% effective fee (vs 2.06% headline); a zero-fee-clearing-edge taker loses exactly the fee → the 0.07·eff·(1−eff) term of the live net-edge gate is venue-exact. NEW follow-up: check whether OUR wallet accrues taker rebates — if yes, realized costs beat the model (free EV, zero code).
  • crypto-shortterm-w0-fee-rebate-audit-2026-07-22W0 fee/rebate audit CLOSED — pmv2 over-books fees 43%; our rebates are tiny; verdict unchanged (2026-07-22): answers the ↑ “do WE accrue rebates?” follow-up and closes the free W0 item from the shelve verdict. (1) pmv2 FEE-BOOKING BUG (fleet-wide, babylon #1233): pmv2_autotrade_orders.fee_usd = exactly 0.10·p·(1−p)·size on all 5,322 fee>0 rows, but the venue’s ACTUAL charge (fitted on 3,399 of our own live fills via usdcSize − price·size) is exactly 0.07 (median=p10=p90=0.0700, zero dispersion; matches the competitor’s 190k-fill fit) → booked fees 43% high, realized_pnl_usd pessimistic for EVERY pmv2-booked strategy (our lane −368 true, −0.92¢→−0.47¢/share). Our observe::fee (0.07) was always correct — the validated net-edge gate needs no change. (2) TAKER REBATES real but TINY: 16 TAKER_REBATE rows = **22.55, balu 0 (pure takers); credits not represented in pmv2’s orders table. Net: true economics less bad but still net-negative → lane stays shelved. Provenance: data-api activity paging (rebate_tally.py/fee_fit.py), data/w0_rebate_fee_reconciliation_2026-07-21.csv.

Oracle Settlement & Basis

  • crypto-shortterm-data-sources — settlement is the Chainlink BTC/USD print read on-chain on Polygon via Alchemy RPC (not Binance, not paid Data Streams); close ≥ open → Up, ties → Up; UMA ≥2h resolution lock-up.
  • crypto-shortterm-phase0-codebase-complete — first measured basis near expiry ≈ -$40 (~6 bps, Chainlink below Binance) — real, non-trivial, corroborates the Rev-2 reframe (thin: 2 windows).
  • crypto-shortterm-phase0-live-milestone — Chainlink on-chain read verified live (~1s poll); K=63,596 set at a witnessed window open.
  • crypto-shortterm-strategy-design — Ŝ/K from Chainlink, Binance as predictor, Binance↔Chainlink basis as the core risk (largest near expiry).
  • crypto-shortterm-competitor-wowitsamazing-refuted-2026-07-03Chainlink Data Streams hypothesis FALSIFIED 3 ways (2026-07-03): the competitor performs at the stale-print ceiling (never above); universe print precision is flat in print-age at 60–150s (a live oracle value ≈ a 40s-stale print 3 min out); entries not synced to print arrivals → Data Streams demoted to a label-quality concern only. Re-confirmed: our on-chain settle disagrees with CLOB truth on 12.6% of windows (35% within 2bps of strike) — actual-resolution labels stay binding for all analyses. Print-state now closed from three directions (Phase-0 detector ≈ ask; his at-ceiling print-following; refit H4 actively harmful).
  • crypto-shortterm-pnl-attribution-corrections-2026-07-03resolved_up ≠ settlement truth (2026-07-03): our outcomes.resolved_up (on-chain Chainlink settle≥K) over-books near-tie wins vs the market’s Chainlink Data Streams settlement — on the doubled-vol day ~15% of resolved fills disagreed resolved_uprealized_pnl_usd, concentrated entirely in sub-5bps near-ties (disputed median |settle−K| 0.9–4.8bps vs agreed-win 8.9bps). BINDING: use realized_pnl_usd for P&L/sizing/certainty tiers, never resolved_up (a trading gate, not truth); reconstructing from resolved_up is optimistic (Jul-3 +88) → reinforces the Data Streams licensing track as the real label fix.
  • crypto-shortterm-market-expansion-scan-2026-07-09the moat is settlement velocity (2026-07-09): the timestamp-slug {asset}-updown-{5m,15m,4h} crypto family is the ONLY automatic, dispute-free, minutes-to-redemption settlement on Polymarket (Chainlink, ~2 min to redeemable); every other family resolves via the UMA optimistic oracle (proposal 12–16 min post-close + ~2h liveness ≈ 2.25h lock/fire) — with the BUY-only/no-exit pipeline a 45–70× capital-velocity penalty that killed all 25 expansion candidates. Named-hour crypto series = Binance-candle truth via UMA (zero oracle basis, but the lock dominates); WTI monthly touch = Pyth-settled.

Implementation & Build Status

  • crypto-shortterm-phase1-bet-sizingEMIT_SIZE_MULTIPLIER knob + rollout (2026-06-26): pure helper compute_size_shares(min_size, multiplier) in crypto_algo/crates/observe/src/directive.rs build_entry, floor-safe (env .filter(is_finite&&>=1.0) + .max(1.0)). Executor sizing confirmed in position_manager/crates/position_manager/src/pricing.rs:217 (size_usd=limit_price×size_shares); daily-cap reject at reserve.rs:146 (CapSrcDaily). Built + gated green (build/test/clippy/fmt), NOT yet committed. Rollout: commit/push → @deploy sets EMIT_SIZE_MULTIPLIER=2 in CRYPTO_SHORTTERM_ENV + redeploys emit → @positionmanager bumps daily_spend_cap_usd 100→200 for crypto_shortterm_latency_test.
  • crypto-shortterm-repo-rename-pmv2-rearchrepo rename + relocation (2026-06-22): wowjeeez/crypto-fetchwowjeeez/pmv2-crypto-algo (origin/main=7bfe3a0, GitHub redirects old→new); /Users/levander/coding/crypto_fetch/Users/levander/coding/pmv2/crypto_algo (git history + .env/.mcp.json moved, builds clean). pmv2 = one self-contained repo per component: crypto_algo (producer), cohort_algo/us_weather_algo/as_weather_algo (producers), position_manager (shared executor), telegram_connector (notifications).
  • crypto-shortterm-phase0-codebase-completePhase-0 codebase COMPLETE (codebase commit 97f238d): full stack built/tested/committed, analysis report-gen runs (phase0-report.md). (Repo since renamed to wowjeeez/pmv2-crypto-algo; this milestone was pinned a11ce63.) Continuous run coordinated with @deploy (build-on-VM, polymarket-infra, Frankfurt). Remaining work is data, not code.
  • crypto-shortterm-phase0-edge-analysiscrates/analysis/src/bin/edge.rs added in commit 54ab6d0; window_id is TEXT (not UUID) in the live DB schema — use String in Rust.
  • crypto-shortterm-phase0-depthaware — audit of depthaware.rs (commit a3e0468): hardcoded "523" literal replaced with live n_windows; 31_536_000.0 replaced with types::SECS_PER_YEAR; n_candidate_windows split into n_raw_candidate_windows/n_oos_candidate_windows for report clarity.
  • crypto-shortterm-phase1-emit — Phase-1 emitter build (SHA 5e92c7f): observe/src/lib.rs extracted for DRY reuse; new crates calibration.rs, directive.rs, bin/emit.rs, migrations/0003_emitted_signals.sql, cal_export.rs; async-nats = "0.37" added; 8 new unit tests; 0 failures; build/clippy/fmt clean. pmv2 schema alignment (c12c830): Directive struct finalized; polymarket.rs extracts condition_id/neg_risk/tick_size/min_size from Gamma API; migrations/0004 adds id+yes_token_id, makes size nullable. Pre-live review hardening (commit bc38734, pin c12c830): 3 BLOCKER + 3 HIGH + medium/low fixed; condition_id 0x-or-skip, token-by-outcome-label + u128 validate, guardrails hydrated from emitted_signals on restart, book/binance staleness gates, NATS-publish-then-mark-fired, emitted_signals schema reconciled (migrations 0004+0005); 21 tests green.
  • crypto-shortterm-emit-guardrails — comprehensive safety pass (commit bc38734): BookTop.window_id added to types; Observation gains pm_book_as_of, pm_book_window_id, last_binance_ts; EngineState::last_binanceOption<(f64, DateTime<Utc>)>; calibration.rs gains from_json + p clamp; emit.rs full rewrite; migrations/0005 drops token_id+size columns. 7 new unit tests in observe, 3 in ingest.
  • crypto-shortterm-emit-prelive-pass2Pre-live Review Pass 2 (commit 89e354e): migrate all-5-migrations embedded via include_str!; NATS NKey auth; Binance staleness clock-source fix; hot-path market cache via watch channel; outcome label .trim()/warn; poll_book User-Agent + timeout. 7 new tests. All gates clean.
  • crypto-shortterm-polymarket-token-overflow-fix — Polymarket token ID u128 overflow bug: discover_active_market silently returned Ok(None) on every poll → 0 emits; fix + GammaMarket serde renames + 3 regression tests (commit 7bfe3a0).
  • crypto-shortterm-phase0-live-milestoneobserve pipeline BUILT & VERIFIED LIVE end-to-end (commit f50b084): ~5-min run wrote to the isolated crypto_shortterm schema (row counts, the four-feed live architecture, and the three findings). The access blocker is resolved.
  • crypto-shortterm — status now Phase 1 — live latency test in progress (Phase-0 offline gate PASSED). Codebase at /Users/levander/coding/pmv2/crypto_algo, repo wowjeeez/pmv2-crypto-algo @ 7bfe3a0.
  • crypto-shortterm-crypto-5m-algo-both-sides-2026-06-27both-sides structural PLAN (2026-06-27, NOT yet built): thread a side through feed→engine→Observation→emit, poll BOTH token books (Up + Down), record the down book — migration 0006 adds 6 down-book observation cols + emitted_signals.source. 8 TDD code tasks + staged dry→live (Approach A: live-validated). Plan committed at docs/superpowers/plans/2026-06-27-crypto-5m-algo-both-sides.md (d61983b); producer code unwritten.
  • crypto-shortterm-down-side-money-path-fixes-2026-06-28down-side fix-pass build state (2026-06-28): the both-sides plan is now being implemented on branch feat/down-side — 3 commits (0d5324f ingest warn-logging, 1aef0ef probe_window, 90808d0 observe core); whole-workspace gates green (build clean, 84 tests / 3 ignored live-smoke, clippy -D warnings clean, fmt --check clean); NOT pushed, NOT deployed, no live-DB writes. DRY/test-integrity: is_regime()/max_price() now shared between emit.rs and the lib tests (a test can no longer pass while the real gate regresses); deleted hand-copied is_candidate_test/compute_max_price. recorder::Row::Observation stays FLAT — BookView mapped to flat fields in observe/src/main.rs (do NOT push BookView across the recorder/SQL boundary).

Latency & Performance

  • crypto-shortterm-maker-sim-gate-spec-grounding-2026-07-22 — sim latency tiers set to book-snap cadence multiples {1.3,2.6,3.9}s (1.3s is the observation floor, no sub-second tiers measurable); PM: sub-500ms feasible after fee-param caching, sub-300ms needs WS book (#1189)
  • crypto-shortterm-phase1-latency-budget — adverse drift analysis on 143k obs pairs in the candidate regime; 29.2% of 1s steps breach 0.5¢; publish→fill target = 128ms (p90); <50ms recommended; commit 2f5fb4d.
  • crypto-shortterm-loss-filter-analysis-2026-06-26loss-filter analysis (PRELIMINARY, n=4, 2026-06-26): one of the 4 live losses (…466500) was a latency/thin artifact — emit in-regime at τ≈62 + ~3.3s fill latency → fill at τ=59 with a thin cushion. Lever: raise emit τ-floor to ~τ65 for headroom. Realized emit→fill ~3.6s median, but second-granular + includes Polygon block time → cannot measure the 128ms REST budget (needs CLOB match timestamps).
  • crypto-shortterm-fak-nomatch-root-cause-2026-07-02live latency stack quantified (2026-07-02): emit fire-evaluation is 1s-quantized (due_obs gate — up to 1s self-inflicted) + PM ~100ms + Polymarket’s mandated ~250ms taker delay; the ask reprices above our limit within ~0.7s. Speed alone can’t win — sub-second fire evaluation in emit is the producer lever; shaving PM’s 100ms is noise.
  • crypto-shortterm-order-type-fak-verdict-2026-07-09the ~50%/day FAK no-match refusals are LATENCY-CONVERSION losses, not adverse fills (2026-07-09): 90.5% are price-refusals where the repriced ask sat avg +5.4¢ above the break-even ceiling — every refused directive was fillable at emit by construction; the fix lane is latency (PM R-items, config cache 733ms→10ms, babylon 1157), not a different order type (our requote path is 2.78s p50 vs sub-second Binance-watching competitors).
  • crypto-shortterm-loss-decomposition-fill-adverse-selection-2026-07-10the loss lever is TIME-TO-FILL, not order type or depth (2026-07-10): on 100% real-label coverage the +EV winners reprice above our limit before the FAK matches — unfilled would’ve won 84.9% vs 70.8% filled (+14.1pt every asset) — so the only lever is cutting time-to-fill to catch the winning tail (slippage is negligible ~0.08¢ — pure adverse selection, nothing to recover on price). Sharpens the latency-conversion framing on real CLOB labels: the no-match tail is missed winners and the filled subset is already ~−1.9¢ at-ask → the win is faster to the winning-side ask (sub-second fire eval), not paying up (chasing was a NO-GO).
  • crypto-shortterm-overnight-gate-a0-lever-rearm-2026-07-10the fill-capture lever localised to the attempt index — A0 first-touch is the −EV fill (2026-07-10, PM #1191): the toxic fills are the ones that fill instantly at the original emit-ask (A0): −5.70¢/sh @ 69.4%; the repriced retries (A1+) are clean: +1.30¢ @ 75.3% (remove A0 ⇒ book flips +EV). So “cut time-to-fill” resolves into which attempts to accept — a fill-policy that avoids the toxic first-touch, distinct from raw speed. Separate from time-of-day (A0-share 80.1% overnight vs 82.8% daytime, +2.7pp — the overnight window does NOT avoid A0). PM’s telemetry-fix 45fa0eb (best_ask_at_snap was a req.limit proxy at attempt 0) rolls with the overnight re-arm so forward attempt-index/slippage reads are against the real book (any pre-45fa0eb A0 read inherits the proxy caveat).
  • crypto-shortterm-fill-space-closed-15m-pivot-proposal-2026-07-18mechanism named: STRUCTURAL LAST-LOOK ⇒ producer-side speed is non-binding on the 5m band (2026-07-18): our PUBLIC-info signal (Binance+Chainlink) is repriced by sub-second makers inside the venue’s mandated ~250ms taker protective delay; the clean-window A1+ reprice fills ≈ −0.5¢ breakeven are the price we get AFTER the reprice → even infinite producer-side speed only reaches that repriced ask, so the fill ceiling is breakeven regardless of latency. Unifies why co-lo (shelved OOS) and the front-loaded ask-run both bottom out identically. Escaping it needs a non-public / faster-than-last-look signal, a different microstructure, or a slower-reprice timeframe (the PROPOSED 15m bet).

Liquidity & Tradeability Risk

  • crypto-shortterm-phase1-emit — pre-live review (commit bc38734) added tradeability guards on the live emit path: book staleness gate (5s) + binance staleness gate (30s) + finite/>0 ask guard before pricing max_price, and valid_until_ts ≥ now+10s so signals can’t arrive already-expired — the order won’t fire against a stale or empty top-of-book.
  • crypto-shortterm-phase0-depthprofilethe top risk is WEAKENED (2026-06-18): 360 windows of recorded book depth in the candidate regime (τ∈[60,150)s, c≥0.30) show take-side touch median ~5,109 and 3¢ cumulative ~432/trade) is circular (rests on the unverified 7¢ edge), and 1s-snapshot depth ≠ depth surviving ~150ms latency (needs real fills). Next: depth-aware re-run capping fills to recorded sizes.
  • crypto-shortterm-phase0-depthawareunfillable-mirage hypothesis REJECTED (2026-06-19): two-tier depth-cap fill model (touch tier + 3¢ sweep tier, unfilled = zero) applied to 524 windows; edge clears Bonferroni at all sizes ≤2000 shares with monotonically declining ¢/share — a physically consistent liquidity-bounded edge. Remaining risk is latency survival (1s snapshot depth ≠ live depth 150ms after signal); bounds latency cost → next gate is a funded real-fill test.
  • crypto-shortterm-phase0-codebase-completeTOP RISK: first measured Polymarket book spread ≈ 0.98 (bid ~0.01 / ask ~0.99 = effectively empty/untradeable); challenges the tradeable-edge premise if it holds (echoes ~$150–250 touch depth). Thin (2 windows) — must be resolved by the continuous run.
  • crypto-shortterm-data-sources — the ~$150–250 touch-depth snapshot finding it echoes; taker capacity limits.
  • crypto-shortterm-strategy-design — the edge premise (a crossable book near expiry) this risk threatens; half-spread term in the entry threshold.
  • crypto-shortterm-fak-nomatch-root-cause-2026-07-02no-match ≠ empty books (2026-07-02): ask side empty in only 1/~2,200 fires; the failure mode is repricing above our limit within ~0.7s (DOWN worse: +2.4–3.1c avg move vs +1.4–1.9c UP).
  • crypto-shortterm-exit-loss-cut-study-2026-07-01exit-side liquidity is the killer (2026-07-02): 52–63% of wanted exits can’t fill — the moment a loser turns, its bid collapses (same thin-book reality as FAK no-match). One of the two reasons exits are NO-GO.
  • crypto-shortterm-depth-aware-sizing-nogo-2026-07-10depth-reach is NOT the binding constraint at live size (2026-07-10): scaling the clip to touch depth (clamp(FRAC × side_best_ask_sz, 5, MAX)) is an offline NO-GO — at 1× the ~5–10-share clip sits far inside a ~25+-share median touch (and ~400× below the 2000-share capacity ceiling), so there is no depth-reach loss to recover; the configs that beat 1× only size UP 1.9×–4.7× with no ¢/share gain. Live depthwatch shadow: ~90% of fires would size up (15.3 vs 5 sh, ~3×). The real loss driver is adverse fill + the ~10pt label mask, not depth-reach.
  • crypto-shortterm-loss-decomposition-fill-adverse-selection-2026-07-10the tradeable +EV lives in the UNFILLED tail, and it’s latency-locked (2026-07-10): on 100% real-label coverage the filled subset is adversely selected (at-ask ceiling ~−1.9¢) while the unfilled no-match windows would’ve won 84.9% — the winners are exactly the ones whose ask ran away. Confirms depth is not the binding constraint (ties the depth-aware NO-GO): the liquidity problem is winner-capture / reprice hazard, not touch depth or clip size.
  • crypto-shortterm-a0-fill-policy-offline-scope-nogo-2026-07-12the A0 first-touch loss is a thin-book/liquidity signature, concentrated in doge/xrp — not universal first-touch selection (2026-07-12): within the clean 07-09→11 window A0 net ¢/share is near-breakeven on the liquid legs (btc −1.10¢, eth −1.97¢) but blows out on the thin alts (doge −10.45¢, xrp −9.13¢), echoing the depth and reprice liquidity findings. Part of why the “A0 is structurally toxic” claim is downgraded to regime/asset-confounded (NO-GO to build the A0-avoidance policy). Independent liquidity-side lever: the doge/xrp thin-alt fill pocket.
  • crypto-shortterm-canary-confirmed-fill-ev-live-2026-07-1613.6pt adverse-selection gap confirmed on fresh LIVE fills (2026-07-15/16): the bounded −EV canary booked signal 83.8% vs fill 70.2% (below breakeven), the cleanest live confirmation that the tradeable +EV is lost at the fill (winner-capture / reprice hazard), not the model. The only untested liquidity lever left = the size/depth bid-structuring study (size DOWN to avoid stale-depth reach), expected to SHAVE not CURE; if NO-GO → edge not capturable as a taker, pivot market/timeframe.
  • crypto-shortterm-size-depth-study-liquidity-not-size-nogo-2026-07-17fill EV is BOOK DEPTH, not our size — sizing NO-GO, depth-selectivity only shaves to breakeven (2026-07-16/17): order size held ~constant (~10 shares) across all depth buckets yet per-share net EV runs −8¢ thin (best_ask_sz 10–25) → ~breakeven deep (>150, 76% win) — pure exogenous liquidity, so size-down can’t help (can’t size a thin book into a deep one); closes the sizing lever from the other side. Depth-reach NON-monotone (0.5–1.0 worse than reach>1). A depth-conditioned fill gate (best_ask_sz ≥ ~50) is the only partial lever: real for btc/eth/sol (deep −1.4/+0.8/+0.4¢ vs thin −6.7/−9.0/−2.9¢) → shaves to breakeven; fails for xrp (+2.2¢ regardless) and doge (n=20 noisy); costs volume; calm-regime confound uncontrolled. Fill-structuring space now exhausted → pivot candidate.
  • crypto-shortterm-fill-space-closed-15m-pivot-proposal-2026-07-18the 5m [60,150)s taker fill-structuring space is FORMALLY CLOSED (2026-07-18, consolidation): every fill lever is now negative or shave-to-breakeven — A0-avoidance, exits ×2, chase/limit-raise, market/FOK/GTC-maker, co-lo, depth-aware sizing UP, size-down/depth-selectivity, recalibration, EMIT_MAX_ASK tighten, time-of-day — unified by structural last-look (public-info signal repriced inside the ~250ms protective delay; A1+ ≈ −0.5¢ breakeven ceiling independent of our speed). No further taker bid-structuring studies on this band. Confirmed live by the 13.6pt canary gap; joins the depth NO-GO as closing evidence. Escape = pivot to a microstructure/timeframe where we’re not the picked-off taker (the PROPOSED 15m gate).

Multi-Asset Expansion

  • crypto-shortterm-multi-asset-status-babylon-2026-07-02rollout LIVE end-to-end (2026-07-02): 10 containers (BTC live + eth/sol/xrp/doge × Up/Down dry), pipeline verified by dry order rows; source literals {asset}_5m_algo_{up,down} (BTC legacy crypto_5m_algo_*, resolved 887 via #943); EngineState uncertainty defaults (s_sigma 50.0/k_sigma 1.0 absolute dollars) are wrong scale for alts — affects only the p_lo/p_hi band. Plan docs/superpowers/plans/2026-06-29-multi-asset-crypto-algo.md.
  • crypto-shortterm-algo-accuracy-audit-2026-07-02cross-asset calibration transfer CONFIRMED (2026-07-02): BTC’s frozen 20-bin map on eth/sol/xrp/doge dry lanes (n≈430–445 each) — pred ~0.88 vs realized 0.865–0.903, within ~2 SE everywhere; the oracle-lag edge generalizes, per-asset refits are fine-tuning not blockers.
  • crypto-shortterm-lane-state-adverse-fill-2026-07-05current lane state (2026-07-05): btc-up DRY (since 2026-07-04 ~20:13 UTC, Andras, babylon #1048; @deploy-confirmed from the pmv2 side 1051dry_run in DB, PM DryRehearsed, last real submit 2026-07-04 20:01Z; live BUYS off, emit still fires as shadow); sol-down LIVE, ON WATCH (re-eval on first full day Jul 5: full-day WR <70% → dry-shadow, ≥70% → keep; small mag ~−$20–40/day; full days Jul 3=72%/Jul 4=71%, Jul 5 partial 63.6% too noisy); all other 8 lanes live/armed unchanged. btc-up = adverse fill, sol-down = thin signal — different diseases, different treatment.
  • crypto-shortterm-bnb-expansion-eval-2026-07-05BNB = the 6th and FINAL 5m asset — observe lane now LIVE (2026-07-05): the Polymarket 5m universe is exactly btc/eth/sol/xrp/doge + bnb (38 coins probed via Gamma {asset}-updown-5m, only these 6 active) → BNB is the only untapped 5m coin. BNB was skipped by enum inheritance, not decision; it passes every gate — feeds verified (Binance bnbusdt; on-chain Chainlink BNB/USD 0x82a6c4AF830caa6c97bb504425f6A66165C2c26e = “BNB / USD” ~128k ≈ doge). Code feat/bnb-observe merged to main 2026-07-05 (@deploy 336bebea, “PR #1”), observe-only + safety hardening: emit_supported now needs an explicit {Btc,Eth,Sol,Xrp,Doge} allowlist AND window_secs==300 (was 300-only, which would not have refused a new 5m asset) → bnb observe-only by construction, no 5m asset auto-arms. babylon pmv2 #1049 → 1053 DONE: merged (336bebea) + observe-only ASSET=bnb container rolled + recording VERIFIED end-to-end (786 rows / 4 windows, avg K 575.08 matches on-chain BNB/USD, p_fair 0.568 zero-nulls). Open go/no-go = frozen-BTC-calibration transfer to BNB within ~2 SE — now UNBLOCKED (BNB p_fair accruing from the live container; bank a few days → one-query check). Expected doge-sized ($5–30/day). ARMED LIVE 2026-07-05 13:22 CEST — before the calibration gate: bnb_5m_algo_up/_down set live/enabled in pmv2_autotrade_sources (promoted past observe-only-by-construction); early ~breakeven (~21 resolved) + an early adverse-fill hint (17–19 CEST signal 10/11 vs fills 7/11 @0.668 = the btc-up signature); wallets carry manual BNB (Balu) → attribution caveat.
  • crypto-shortterm-market-expansion-scan-2026-07-09venue-wide expansion scan → NEGATIVE (2026-07-09): 0/25 candidates across 8 Polymarket families; hourly up/down (id 10114, 0 liq today — inherits our exact infra when it gets flow; first change to the “exactly 6 assets” fact)**; 4h cadence all assets but 392k vol24h). Best growth axis = depth in the current lane, not breadth on the venue.

Open Questions

  • crypto-shortterm-open-questions — Phase-0 CONFIRM gates (hard blockers) + modeling/strategy/execution questions.
  • crypto-shortterm-phase0-codebase-complete — sharpens gate 5 (empty-book / 0.98-spread = top risk); confirms T19 exit decision + funded $5 fee-at-match are now data-gated on the continuous run.
  • crypto-shortterm-phase0-live-milestone — resolves Chainlink access + 5-min-market existence; surfaces the recorder-batching prerequisite.
  • crypto-shortterm-order-type-fak-verdict-2026-07-09E2 cheap question (proposed 2026-07-09): win rate of price-refused vs filled directives — measures adverse selection on CONVERSION; quantifies what recovered conversion (the latency work) is actually worth. Joins pm_fak_attempts × emitted_signals × pmv2_autotrade_orders.
  • crypto-shortterm-db-index-audit-2026-07-09binance_ticks pkey correctness (2026-07-09, unresolved): pkey (trade_ts, price) has NO asset column — if multi-asset ticks land in the table, cross-asset same-price ticks silently dedup; confirm BTC-only-by-construction or add an asset column.

Overview

  • crypto-shortterm — project index: Rev 2 thesis, scope, design-approved status, phasing, working areas.

Phasing & Status

  • crypto-shortterm-handover-2026-06-26authoritative current-state snapshot (2026-06-26, mirrors repo HANDOVER.md): producer LIVE on the Zurich VM, dry-validate PASSED end-to-end (DryRehearsed, no money); live real-money NOT armed. VM moved Frankfurt→Zurich to clear a Polymarket GEOLOCK — so the autotrade “didn’t work” because of geolock, NOT latency: the ~128ms latency-capturability is STILL UNTESTED. Andras’s manual Zurich trades = net profit (signal validated, small sample). Architecture v2/Pattern B (wowjeeez/pmv2-crypto-algo, main 36592cd+). Open: latency arm (Andras’s $100 switch, ~20–30 fills), Down side, emitted_signals(58+) vs outcomes vs manual-fill reconciliation.
  • crypto-shorttermPhase 1 — producer LIVE; dry-validate PASSED end-to-end; live real-money NOT armed (v2/Pattern B, repo wowjeeez/pmv2-crypto-algo @ 36592cd+). Phase-0 offline gate PASSED. Latency STILL untested (geolock, not latency, was the Frankfurt blocker) — now testable in Zurich via Andras’s $100 live arm. v1 UP-only by design.
  • crypto-shortterm-phase1-execution-decisionPhase-1 execution decision (2026-06-22): producer/executor split, 128ms budget vs polymarket’s REST “can’t hit it” verdict, the staged $100 / 5-fill plan, dry-validate deploy (#264).
  • crypto-shortterm-phase0-codebase-complete — the milestone that took Phase 0 from “observe live” to “codebase complete; report-gen runs; first thin data”; remaining work is data-gated (T19 + funded fee-at-match).
  • crypto-shortterm-phase0-edge-analysisT19 exit gate OPEN / validation-in-progress (2026-06-11; prior “PASSED” verdict corrected): live edge analysis shows a real directional signal but the after-cost edge is likely contaminated by near-expiry leakage and is NOT confirmed. Open gate (explain +2% baseline, exclude last 60s, realistic fills, walk-forward + deflated Sharpe, forward paper-trade) blocks any GO.
  • crypto-shortterm-phase0-validationT19 exit gate OPEN / validation-in-progress (2026-06-12) via validate.rs: OFFLINE forecast edge confirmed in the ≥60s non-leaky region (de-risks the +2.08% leakage concern), but live-capturability UNCONFIRMED (optimistic fills overstate a latency edge; slippage-fragile; single split). Remaining: purged walk-forward + deflated Sharpe, depth/capacity read, forward paper-trade.
  • crypto-shortterm-phase0-walkforwardwalk-forward completed (2026-06-12): K=6, 750 OOS windows, τ≥60s, 1% slip; t=1.46 < 3.0; 5/5 folds positive; EDGE FRAGILE / LIKELY OVERFIT. Do not promote to Phase 1. Need more data (est. N≥3,100 windows) or a stronger signal to clear t≥3.
  • crypto-shortterm-phase0-selectivityT19 CONDITIONAL pass (2026-06-12): selectivity sweep isolated a robust OOS signal in τ∈[60,150)s / conviction≥0.30 (t=4.61, 5/5 folds, clears Bonferroni); direction confirmed but ~7%/trade magnitude is a fill-realism mirage (1s top-of-book ≠ fillable; no book depth recorded). NOT a GO — record book sizes → depth-aware re-run → tiny real-fill test in that one cell; snapshot paper-lane still rejected.
  • crypto-shortterm-phase0-depthprofileT19 STILL CONDITIONAL, but #1 risk weakened (2026-06-18): depth profile of the new book columns (pin 69b84b1, bin depthprofile.rs, commit 35aa202) over 360 candidate-regime windows shows real size at the touch (~6,171 median) — the unfillable-mirage hypothesis is no longer the path of least resistance. Not a GO: capacity ceiling is circular, latency-survival unverified, decay curve must be sane. Next gate = depth-aware selectivity re-run (cap fills to recorded best_*_sz, plot edge-vs-size); preliminary now (360 windows), decisive ~1 week (~800); then a tiny funded real-fill test. Snapshot paper-lane still rejected.
  • crypto-shortterm-phase0-depthawareT19 SURVIVES offline depth-cap gate (2026-06-19): depth-aware selectivity re-run (bin depthaware.rs, commit bba5739); 524 windows; Bonferroni t≥2.99 cleared at all sizes ≤2000 shares; decay shape sane; unfillable-mirage hypothesis REJECTED. Remaining open gate: funded real-fill test to bound latency cost before building live machinery. Capacity ceiling 2000 shares / 2.61¢ per share.
  • crypto-shortterm-phase1-emitPhase-1 emitter committed (SHA 5e92c7f, 2026-06-19); targets τ∈[60,150)s / c≥0.30 regime from selectivity sweep; shadow mode available (no NATS needed); condition_id PROVISIONAL (slug, not confirmed CLOB ID); calibration.json must be generated before deploy.
  • crypto-shortterm-phase0-live-milestone — the milestone that moved Phase 0 from “blocked on access” to “live & accruing”; remaining work is operational + analysis.
  • crypto-shortterm-open-questions — the CONFIRM gates that gate Phase 1 + capital; T19 still OPEN (offline edge confirmed, live-capturability unconfirmed).
  • crypto-shortterm-crypto-5m-algo-both-sides-2026-06-27both-sides graduation DECISION + PLAN (2026-06-27): the producer goes from single UP-only latency-test source → real two-sided strategy (DOWN enabled + source split crypto_5m_algo_up/crypto_5m_algo_down, independent per-side dry/live arm + cap). PLAN + babylon coordination DONE (DMs 821); code NOT yet implemented. Scope = pmv2 sources/subjects only (schema/services/repo names stay). Dry→live remains Andras’s explicit per-side switch.
  • crypto-shortterm-multi-asset-status-babylon-2026-07-02current status (2026-07-02): multi-asset rollout LIVE end-to-end — 10 lanes (BTC live + 4 alts × 2 dirs dry); babylon #942 (FAK answer to PM #917), #943 (source naming, resolved 887), #944 (stale URGENT #832 resolved as superseded — half-open-Binance-WS hypothesis, TODO idle-watchdog + startup-announce rate-limit). Supersedes the index’s UP-only/not-armed framing.
  • crypto-shortterm-lane-state-adverse-fill-2026-07-05live lane state (2026-07-05): btc-up DRY (shadow-only since 2026-07-04 — adverse-fill not signal, do NOT re-arm on dry), sol-down LIVE on watch (pre-registered 70%-full-day rule), other 8 lanes live unchanged; plus realized_pnl_usd confirmed == CLOB truth (24/24) so live P&L tables need no backfill.
  • crypto-shortterm-loss-decomposition-fill-adverse-selection-2026-07-10LIVE-STATE CHANGE: ALL crypto_5m_algo lanes DRIED to dry_run (2026-07-10, Andras → @deploy, babylon pmv2 #1187): the 7 live lanes (btc-down, eth-up/down, sol-up, xrp-down, doge-up/down) → dry_run; the other 5 were already off → no crypto lane places real orders. Reason: all 8 fill-bearing lanes −4.6 to −18.1¢/share on real labels (migration 0011). Reversible — re-arm lane-by-lane when a lane’s real edge crosses +EV; monitored via depthwatch + dry fires scored on real labels (the manual daily-loss backstop the system structurally lacked). Migration 0011 (real-edge crypto_lane_health cols) is committed on branch worktree-agent-af81d3911fd13808c, NOT applied live.
  • crypto-shortterm-overnight-gate-a0-lever-rearm-2026-07-10LIVE-STATE CHANGE: the 7 lanes RE-ARMED overnight-only (2026-07-10, Andras → @deploy, babylon pmv2 1195) — supersedes the same-day all-lanes-dried state. Scheduler RESTORED; the 7 previously-live lanes (btc-down, eth-up/down, sol-up, xrp-down, doge-up/down) are LIVE 20:00–07:00 UTC (22:00–09:00 CEST) and DRY daytime 07:00–20:00 UTC; the old 13–16 CEST daytime slice explicitly REMOVED (−EV); levi/gyula (wallets 3 & 4) stay OFF; wallets 1×. Rationale: an underpowered-but-directional OOS read (overnight +EV / daytime −EV, robust leg = “daytime worse”) on the known-winner lanes = a low-risk provisional tilt, not a validated rule (re-test ~2–3 wk); the real edge-recovery lever is the A0 fill-policy, run in parallel. PM’s 45fa0eb telemetry-fix rolls alongside so overnight-forward fills are measured real.
  • crypto-shortterm-fill-space-closed-15m-pivot-proposal-2026-07-18strategic decision-point: 5m fill space CLOSED, 15m pivot PROPOSED (2026-07-18, PENDING Andras): all live lanes remain dry_run (canary #1210 aftermath confirmed closed, kill confirmed, sources back to dry). The 5m [60,150)s taker fill-structuring space is formally closed (structural last-look), and a W0–W3 program (taker-rebate check → honest-fill harness → 15m offline gate → 5m τ∈[150,300) falsification) with a pre-committed shelve rule (W2+W3 fail under honest fills → shelve the lane, keep observe as a data asset) is proposed. No decision taken, no code/config/live change. Babylon open task #1189 (positionmanager exec-latency decomposition, READY @ 45fa0eb) = the latency-parameter source for W1; reply deferred until direction is set.

Risk Management

  • crypto-shortterm-risk-management — net-of-fee portfolio Kelly (≤0.5×, pessimistic band edge), confidence band (moneyness-conditional near expiry — narrows clearly ITM/OTM, explodes near-the-money), circuit-breaker, kill switch, capacity, key security, WAL as financial source of truth.
  • crypto-shortterm-prediction-research — volatility circuit-breaker and the Market-Maker’s-Dilemma toxic-fill guard.
  • crypto-shortterm-exit-loss-cut-study-2026-07-01loss-cut/early-exit is a settled NO-GO (2026-07-02, two independent runs): hold-to-settlement is the policy; the ~13% loss tail is not cuttable (collapsing bid + weak loser-lead). Risk effort belongs on entry (edge-vs-ask gate, EMIT_MAX_ASK) and sizing, not exits.
  • crypto-shortterm-per-wallet-size-scale-2026-07-06per-wallet size_scale turns the ~2026-07-09 2× decision into a CONTROL EXPERIMENT (2026-07-06): pmv2_wallets.size_scale (per-wallet global multiplier) lets you set wallet1.size_scale=2.0 vs wallet2=1.0 baseline — both wallets are crypto-dedicated + trade the same windows/sides, so it’s a clean 2×-across-all-crypto A/B, not an all-or-nothing flip. Risk gotcha: the doubled bets get silently clipped unless wallet1.daily_spend_cap_usd is bumped to match (the cap is a reject-GATE, not a resizer — the cap levers finding). Command requested on babylon pmv2 #1065 (ledgered, clamped [0.5,3]).
  • crypto-shortterm-loss-investigation-real-vs-onchain-edge-2026-07-10the 3-day slide ran unchecked: no live daily-loss circuit breaker + a 4-wallet amplifier (2026-07-10): the edge is razor-thin (~1–3pt over breakeven), so side-specific intraday adverse fill flipped 07-08→07-10 negative (326 / −$170) with no model change. 07-09 amplifier: wallets 3 & 4 (levi/gyula) were live only 07-08 20:02 → 07-09 12:58 UTC (152/154 fills each), exactly spanning the US-open blowout → 07-09 ran on 4 wallets = 2× exposure into a correlated down-side loss (risk unit = the window); pulled back to 2, but 07-10 still bled (amplifier, not cause). No backstop reacted: the daily_spend_cap/total_exposure_cap caps are dead code (deferred) → nothing halted the slide as it developed.
  • crypto-shortterm-depth-aware-sizing-nogo-2026-07-10depth-aware dynamic sizing is a size-up, not a de-risk → NO-GO, keep fixed 1× (2026-07-10): the only per-window clamp(FRAC × side_best_ask_sz, 5, MAX) configs that out-earn fixed 1× raise exposure 1.9×–4.7×/window (best-t ~1.97×, ~4.1) with flat-to-worse ¢/share — buying P&L with capital, not skill, straight into the no-circuit-breaker reality. Best delta t=2.60 < 3.08 bar. Shelved (supersedes HANDOVER item 5); risk effort belongs on fill selection + a daily-loss breaker, not clip-shape.
  • crypto-shortterm-loss-decomposition-fill-adverse-selection-2026-07-10the manual daily-loss backstop, applied: all lanes DRIED (2026-07-10): with the edge at the fill razor-thin and no live circuit breaker (caps are dead code), Andras dried all live lanes to dry_run (babylon pmv2 #1187) because all 8 fill-bearing lanes are −4.6 to −18.1¢/share on real labels. Dry-everything → watch the real-label edge (depthwatch + dry fires) → re-arm lane-by-lane on +EV evidence; migration 0011 adds the edge_per_share_cents gauge to make it data-gated (committed, not applied). The risk lever is fill selection, not sizing (the depth-sizing NO-GO confirmed).
  • crypto-shortterm-overnight-gate-a0-lever-rearm-2026-07-10manual risk tilt: re-arm overnight-only, keep wallets 1×, keep the amplifier off (2026-07-10): with no live daily-loss circuit breaker (caps are dead code) and the edge razor-thin, the re-arm is a hand-applied risk shape — LIVE only in the observed-profitable overnight window (20:00–07:00 UTC) on the known-winner lanes, DRY across the robustly-−EV daytime, the −EV 13–16 CEST slice removed, levi/gyula OFF (the 07-09 exposure amplifier), and wallets 1× (no size-up — consistent with the depth-sizing NO-GO). Bounded, reversible, explicitly provisional; the durable risk lever remains fill selection (avoid the toxic A0 first-touch), not the clock or clip size.
  • crypto-shortterm-honest-recalibration-edge-gate-verdict-2026-07-11actionable risk shape from the honest-recalibration verdict + a live de-risk (2026-07-11): the durable edge is in cheap asks (<0.75), the 0.78–0.85 tail is thin near-breakevenlower EMIT_MAX_ASK 0.85→~0.78–0.80 and re-gate when re-arming (tightens, not removes, the validated bound; keep EMIT_MAX_ASK + buffer ≤ EMIT_MAX_LIMIT). Recalibrate ONLY for sizing-honesty (frozen over-sizes ~10pt), never for EV. Genuine-erosion re-check trigger: frozen-gated FILL win-rate <73% sustained over a full ≥5-day window (per-asset). LIVE-STATE: all lanes DRY (no exposure); the overnight re-arm was PULLED after night-1 lost −$189 (directional) — within the underpowered-noise band that note flagged. Risk lever remains fill selection (A0 fix), not sizing, not the clock, not recalibration.
  • crypto-shortterm-a0-fill-policy-offline-scope-nogo-2026-07-12the A0 risk lever itself is now PARKED — “avoid the toxic A0 first-touch” is a regime artifact, NO-GO to build (2026-07-12): the durable risk lever” framing repeated across the 07-10/11 risk notes rests on A0 telemetry that exists only for the 3-day drawdown — so it can’t be separated from a toxic regime. Building the A0-avoidance policy would be a 6th in-sample-overfit NO-GO. Skip-A0 produces no +EV book even optimistically (~breakeven). Pre-registered re-test after ~5 green-regime days of A0 telemetry. Remaining risk-lever candidates that survive: EMIT_MAX_ASK 0.85→0.78–0.80 and the doge/xrp thin-alt fill pocket — the general fill-selection thesis stands, only the A0-specific claim is downgraded.

Signals & Microstructure

  • crypto-shortterm-strategy-design — fair-value model (P_fair) as the primary signal; moneyness-conditional near-expiry τ→0 handling (band explodes near-the-money, narrows clearly ITM/OTM); σ warm-up (prior σ=0.6 until 30 samples, validate in Phase 0); adverse-flow veto (Binance OFI/OBI, takers too).
  • crypto-shortterm-prediction-research — cited survey of short-horizon BTC microstructure: OFI, OBI/Market-Maker’s-Dilemma, VPIN/CVD, lead-lag, vol clustering; what’s useless at ≤5 min; backtest traps.
  • crypto-shortterm-canary-confirmed-fill-ev-live-2026-07-16signal healthy on fresh LIVE data, loss is microstructural at the fill (2026-07-15/16): the bounded −EV canary shows signal would-win 83.8% vs fill-win 70.2% (13.6pt adverse-selection gap), reaffirming that the model/signal is fine and the money is lost at the fill (winning-side ask reprices away). Early +128 with win-rate mean-reverting 92.6%→70% is a reminder that short windows are dominated by regime noise, not signal decay.

Strategy Design

  • crypto-shortterm-strategy-design — Rev 2 oracle-lag thesis, P_fair model, near-expiry handling, edge logic, phasing.
  • crypto-shortterm-prediction-research — evidence base for the adverse-flow veto.
  • crypto-shortterm-disagreement-ceiling-nogo-2026-07-03edge-band fire selection is a DEAD END in BOTH directions (2026-07-03): a FLOOR (raising EMIT_MIN_EDGE) was already wrong and a CEILING (skip the high-disagreement/low-ask tail) is now OOS-rejected — the frozen rule’s at-ask EV is thin-but-positive and slicing it by edge-band does NOT isolate +EV from −EV (every band is ~breakeven at the ask). The disagreement tail’s live loss is execution (break-even limit chasing low-ask reprices up), not selectable flow — fix the fill/limit path, not the selector.
  • crypto-shortterm-time-of-day-filter-nogo-2026-07-06time-of-day overlay OOS-rejected → the edge is the [60,150)s pocket, nothing else (2026-07-06): an overnight-print / US-open-bleed filter reversed sign OOS (in-sample +245 US-open → OOS overnight −5); 4th in-sample-great/OOS-fail overlay this session. Durable lesson: the market efficiently prices every overlay (selection, execution timing, time-of-day) — don’t look for alpha on top of the frozen regime.
  • crypto-shortterm-fill-space-closed-15m-pivot-proposal-2026-07-18PROPOSED pivot: 5m fill-structuring closed → hunt a 15m edge on an honest harness (2026-07-18, PENDING decision): with the 5m taker fill space exhausted under structural last-look, the proposed direction is a W0–W3 program — W0 taker-rebate check, W1 honest-fill harness, W2 (primary) a 15m offline gate with its own fit-then-frozen calibration + band, W3 a cheap 5m τ∈[150,300) falsification — with a pre-committed shelve rule if W2+W3 fail under honest fills (observe stays running as a data asset; the two pre-registered 5m re-tests stay dormant unless a materially faster path or venue-structure change appears). Rejected: canary #2 now, maker/MM flip (we’d BE the stale quote), more latency spend, shave-stack re-arm, longshot-fade, HYPE now. No decision taken.

Trade Journal & Results

  • crypto-shortterm-phase0-edge-analysis — first quantitative results from live data: calibrated +7.28% avg net PnL, 54.4% hit, Sharpe 0.17 overall; +19.46% in the 0–30s τ-bucket — but NOT a confirmed edge (likely near-expiry leakage; T19 OPEN).
  • crypto-shortterm-phase0-validation — validation results: ≥60s gated strategy +1.61%/trade (0 slip) / +0.81% (1% slip); ≥60s baseline −3.21% (no edge = correct sign, so +2.08% was leakage). T19 OPEN — offline edge confirmed, live-capturability UNCONFIRMED (optimistic fills, slippage-fragile, single split; needs walk-forward + depth read + forward paper-trade).
  • crypto-shortterm-phase0-walkforward — walk-forward results: mean PnL +2.77 / stddev 52 / t=1.46 / per-window Sharpe 0.0533; 5/5 folds positive. EDGE FRAGILE / LIKELY OVERFIT — T19 OPEN; ~+0.8%/trade from the 70/30 split does not survive K=6 purged CV at t≥3 with 1% slippage.
  • crypto-shortterm-trade-journal — realized vs expected at each promotion gate; self-correction.
  • crypto-shortterm-loss-filter-analysis-2026-06-26first live UP-token fill batch (PRELIMINARY, n=4, 2026-06-26): 32 trades on wallet 0xAdAc…aEb2, 31 BUYs → 27 wins / 4 losses = 87.1% (12.9% < ~15% priced = healthy). The 4 losses = 3 phenomena: 2 rollover-from-peak (Andras’s “climbed too fast then fell back” — CONFIRMED + the only cleanly filterable), 1 latency/thin, 1 irreducible coinflip (…473700 settled $2 below strike; three wins had thinner cushions). n=4 → hypotheses only; re-run at n≥20.
  • crypto-shortterm-perf-dashboard-2026-07-05live-algo performance dashboard (per-lane W/L + net P&L, 2026-07-05): built from pmv2_autotrade_orders.realized_pnl_usd (CLOB-settled, net of fees). Two reusable scripts — dashboard_data.py (JSON pull from the live DB via duckdb+postgres READ-ONLY) + build_dashboard.py (self-contained dark HTML) — currently in the session scratchpad (ephemeral; persist to repo scripts/ if kept); deployed as a claude.ai artifact = SNAPSHOT, not live (no network → refresh = re-run + redeploy). Snapshot: booked ~+307; xrp/doge both-sides green (~78%), sol-down/eth-down the soft down cluster, btc-up the −$171 drag (now dry).
  • crypto-shortterm-pnl-onchain-cash-truth-2026-07-06realized-cash truth + current state (2026-07-06): three P&L metrics disagree — on-chain cash (TRUTH = Σ REDEEM+SELL−BUY) > realized_pnl_usd (correct but lags at resolution, reconciles overnight) > PM UI “profit” (INFLATED 2–6×: MTM + gross of fees; wallet1 UI 90). Current: combined realized cash **0 idle USDC.
  • crypto-shortterm-loss-investigation-real-vs-onchain-edge-2026-07-10the 3-day sub-breakeven slide, on CLOB-truth realized_pnl_usd (2026-07-10): 07-05 +15 / 07 +120 / 09 −170 (partial) (live lanes) — a slide from 07-08, not a self-contained 07-09 blowout; corrects the repo HANDOVER.md “+448”. The real money-at-risk edge is razor-thin ~1–3pt over breakeven (consistent with the 73.7% WR vs ~73% BE); the on-chain resolved_up gauges read ~10pt too healthy on the filled subset (see Data & APIs). Un-peer-reviewed, read-only.