live/tape_sharps.py — insider.py's improbability z transplanted onto the
3-day tape (13.8M fills, ALL wallets, no survivorship bias): proxy-resolve
tokens from terminal-VWAP convergence (0.97/0.03, 2h quiet, sibling veto),
net held positions per wallet-token, z = (W - Σp)/sqrt(Σp(1-p)) over
proxy-resolved held bets, then payouts.py chain-truth overlay on the
shortlist (refunds count as neither). Copyable/algo split: discrete-entry
conviction bettors (<= 6 fills/bet, <= 90 bets, med >= $50) vs continuous
flow accounts that score huge but can't be mirrored at 3-17s lag.
First run (tape through 2026-07-20 16:59): 2,360 wallets screened, 561
score z >= 2 with pnl > 0, 25 copyable candidates at z 4.0-5.5 — chain
validation 742 payout vectors, ZERO proxy flips. Benchmark sanity: benched
sharps (LSB1 +3.28, EdwardIN +2.38) land positive, benched losers negative.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
'no orders found to match with FAK order' is the #1 miss class (13 of the
last 48h's misses) — the copy lands in the crater the sharp just swept,
before makers requote. Instead of recording the miss at the first
rejection, hand the OPEN to Copybot.fak_requote_retry: sleep fak_retry_s
(default 10, 0 disables) OUTSIDE the bot lock, then re-run the whole gated
buy path (fresh quote, price guard, depth gate) exactly once, mirroring
the webhook call site's fill drain so a retry fill books lag + bet rows.
A second rejection records the miss tagged 'twice (re-quote retry)'.
Paper-parity: the hook is installed in both modes, and PaperExecutor's
FAK model re-decides on the fresh book. tests/test_fak_retry.py covers
hook scheduling, no-double-count sizing (their_size=0 re-entry), ADD and
non-FAK bypasses, and the end-to-end retry thread.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ingest: sftp needs stdin=DEVNULL under launchd (no tty) — without it, empty/partial files decoded to 0 lines and the missing integrity guard MARKED+DELETED them (36 segments lost). Guard: a >200B gz that yields 0 lines is a failed fetch, left on box to retry.
digest: retry+backoff moved INTO _post so the digest send (not just the start ping) survives the post-wake DNS gap; ingest ping gets the same.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>