23 Commits

Author SHA1 Message Date
jaxperro 377192c4bf copybot: per-niche FAK re-quote waits from measured crater-refill times
The flat 10s retry was calibrated to nothing; the tape now says craters
refill at very different speeds (research requote_timing, 775k crater
prints): crypto 94% within 4s, esports 83% within 10s, sports only 70% at
10s but 76% by 25s, geo/politics tails run minutes (price guard is the
protection there, not the retry). Waits move to FAK_RETRY_NICHE_DEFAULT
{crypto 4, esports 10, sports/geo/politics/other 25}, classified by the
validated research niche patterns (esports before sports so 'LoL: A vs B'
doesn't fall through on ' vs '). cfg fak_retry_niche_s overrides per key;
fak_retry_s stays the fallback (tennis: no measurement yet) and 0 still
disables the feature. Paper-parity: same map both bots. test t8 covers the
map, first-match classing, fallback, and config override.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 17:45:32 -04:00
jaxperro 01687f4a44 copybot: one-shot 10s re-quote retry for FAK no-match OPENs
'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>
2026-07-20 14:52:16 -04:00
jaxperro ce52cef482 redeem: auto_redeem OFF — phantom-cash fix shipped, but the gasless relay needs a builder key (reopened #4, platform auto-redeems anyway)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 17:01:02 -04:00
jaxperro 5070c234f2 redeemer rewritten for the pUSD stack: gasless redeemPositions from the deposit wallet via the executor's SecureClient, measured-delta reporting, calldata proven by on-chain simulation; auto_redeem re-enabled (closes #4)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 16:43:09 -04:00
jaxperro baa4182343 audit hardening: book fully serialized, chain-gated sweep, boot-id single-writer guard, TLS on user-ws, atomic valuebot state, hot-path throttle, newest-kept seen_tx, daily lock, ingest txn, AIcAIc pin
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 14:07:43 -04:00
jaxperro 7795424abb reconcile: fold +$7.14 chain-over-book (platform auto-redemptions), purge BetBoom ghost residual, auto_redeem off until web3+env-RPC land
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 12:42:28 -04:00
jaxperro bcad32a814 live: auto_redeem ON — the $1.90 'dust' is resolved winners awaiting redemption (curPrice 1.0), reclaim via redeem not sell
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 23:34:10 -04:00
jaxperro 50cca7459b deposit rebook: bankroll = capital contributed $66.42, adjustment shrinks to the $0.02 float — fixes double-count (realized -44 / drift -38.91)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 21:53:10 -04:00
jaxperro e6e13dc64d live mirrors paper exactly (user directive): max_price 0.99, floors synced, dead follow block removed; docs sweep + gotcha 15 corollary
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 21:41:24 -04:00
jaxperro d1b8e7fa55 bankroll rebase: +$44.14 user deposit via BTC bridge — cash=chain $50.53, bankroll $22.28→$61.21 (equity at rebase)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 21:23:11 -04:00
jaxperro 43d26b4704 follow set rev 4: AIcAIc re-added (EWC catalyst, +22% forward since drop); bench Vahan88/EdwardIN not promoted
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 17:22:55 -04:00
jaxperro f048022860 follow set rev 3: AIcAIc → BikesAreTheBikes (backtest + forward decision)
30-day backtest replay of all 11 proving wallets: Bikes leads at +$7,804
(slow geopolitics/novelty markets — the most copyable flow profile in the
set: 12 conviction bets >$100 in his last 60 trades, no in-play delay, no
5-min races). AIcAIc out: weakest incumbent forward (+$32 paper, −$9.5
live, only negative wallet) and his sell-timing class is the one most
flattered by zero-lag backtest fills — benched in backtest.json to re-prove.
badaf keeps his seat: +105% ROI on invested and 6-0 forward. LSB1 (+$55)
and imwalkinghere (uncopyable) stay out — both validated by this replay.
42021 cut from the bench (+$15 dud). Bench now: Vahan88, EdwardIN, LSB1,
imwalkinghere, AIcAIc.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 17:30:27 -04:00
jaxperro 4ffe20d6b8 follow set: drop imwalkinghere + demote LSB1, Kruto floor 126.84→80, bench 4
5-day forward sample (101 paper + 31 live copies): imwalkinghere produced
ZERO copies — his flow is 5-min BTC Up/Down markets that resolve faster
than any copy can act, and his missed bets would have LOST $390. LSB1 is
the worst forward performer (−$397, 2-4; misses also negative) → demoted
to backtest.json for re-proving. Kruto: +$736 from TWO copies at the
highest z on the table (19.3) — floor lowered to catch more flow. Bench
adds to backtest for forward proving: Vahan88, 42021, BikesAreTheBikes,
EdwardIN. badaf vindicated (+$310, 6-0 + the 0.001 counterfactual) and
stays; AIcAIc gets a week under RTDS before judgment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 22:19:27 -04:00
jaxperro c88618f220 no price floor: min_price 0.01 → 0 (both books), cap stays 0.95
User call 2026-07-13 after a big 0.001 longshot was floor-blocked (the
same band class that blocked the 16x Hive copy at 0.05). Executor's
protected prices now round to 4dp and scale with the price — the old 2dp
rounding zeroed the bound on sub-penny books (BUY never bounds below the
quoted cross; SELL never above the quoted bid; verified at 0.001/0.002).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 21:48:20 -04:00
jaxperro 3784b288cd hardening trio: exit-retry (1.6), RTDS shadow ledger, boot clone-guard
- failed mirror-exits queue for up to 10 heartbeat retries (recovered
  exits ping Discord; exhaustion pages ⚠ EXIT STUCK and the position
  rides knowingly; in-play holds hand to the pending registry). 3 stub
  paths pass incl. the 1.6 spec's fail-fail-fill.
- every RTDS Set E detection appends a durable shadow-ledger row
  (lat_s + which trigger won) that rides the publish commit — the 24h
  go/no-go data for flipping RTDS on the live app.
- start.sh verifies the boot clone's HEAD against the GitHub API and
  re-clones stale replicas (bit twice today).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 18:43:22 -04:00
jaxperro 705f8b2c39 live retune (user 2026-07-10): caps off, 4% paper-parity, abs guard, pending registry
1. Caps retired: risk block mirrors the paper sentinels; sizing is the
   paper bot's 4%-of-equity (class_pct 0.04/0.12), floored at the venue's
   $1 min order (4% of a $22 book is $0.89 — sub-min stakes died at the
   gate). bankroll rebased to the real $22.28 equity; spend tracker reset
   (the confusing $35 is gone with the daily cap).
2. Price guard is now ABSOLUTE +0.05 (both books): 0.14→0.15 follows,
   0.14→0.20 skips. The relative 5% blocked one-tick moves on cheap
   in-play books.
3. Pending-order registry: in-play 'delayed' holds are no longer cancelled
   at 20s — the executor hands them to state.pending_orders with full copy
   context; the heartbeat resolver adopts the fill whenever it lands
   (bets/my_pos/cash/ledger, TTL 600s → cancel + honest miss). Recovers
   Rune-Eaters-class holds (+$7.50 forfeited by the old cancel).
   5 stub-client paths pass incl. adopt + expire.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 17:17:26 -04:00
jaxperro ba977c5b80 live risk: min_price 0.05 -> 0.01, aligned with paper/backtest (user-approved)
The band — not detection — blocked Kruto's 3c Hive dip-buy that the
paper book mirrored for +$722 (16x). Dollar risk unchanged: the $5
trade cap binds, not the band. LIVE_ROLLOUT rule 0.6 amendment recorded
here; every other cap untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 14:06:08 -04:00
jaxperro 82b0acd5f1 preflight: walk recent trades for a live book; auto_redeem off until the EOA is gassed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 00:31:08 -04:00
jaxperro 95998aaca4 live env credentials: strip pasted whitespace; bankroll = actual $24.73 deposit
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 00:30:07 -04:00
jaxperro ab2a160fb8 live config: bankroll $32 (actual deposit) @ 15.625% = $5 stakes, caps unchanged
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 23:34:19 -04:00
jaxperro 58b89c106a real-money worker scaffolding (LIVE_ROLLOUT Phase 3 prep)
- start.sh: COPYBOT_ROLE=live — unarmed (missing LIVE_PRIVATE_KEY /
  LIVE_FUNDER_ADDRESS / LIVE_CONFIRM) idles in geocheck, no clone, no
  book, no orders; armed runs config.live.example.json + own state file
  copybot_state.live.json, --live, poll mode (webhook stays on paper).
- confirm_live: accepts the phrase from LIVE_CONFIRM env — the USER
  types it into flyctl secrets set (rule 0.7 human checkpoint, headless);
  wrong value aborts, unset disarms at next boot.
- config.live.example.json: Set E + pinned floors (mirrors paper),
  bankroll $50 @ 10% = $5 stakes, caps untouched (rule 0.6), leaked
  Discord webhook URL removed (ROTATE it — was committed publicly).
- fly.live.toml: separate app wwf-copybot-live, arn, no inbound, no
  checks, role env baked.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 23:17:36 -04:00
jaxperro b6cb2e53b2 SECURITY: drop leaked alchemy_key from config.live.example.json
The key does not belong in any committed file — the worker reads the RPC
from ALCHEMY_RPC_URL env (or the gitignored config.json locally). Rotating
the key is the real fix (it hit the public repo history); this removes it
from HEAD.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:02:14 -04:00
jaxperro 686c1cfcce config.live.example.json: committed secret-free live-test config (Phase 1.7)
config.live.json is gitignored (holds the key) so the Fly worker can't see
it. This committed twin carries the synced 8-wallet follow set + $5 test
caps + separate feed/fills; the worker reads it and injects the key via
LIVE_PRIVATE_KEY env (copybot 1.2). Mac path: cp to config.live.json, fill
the key. Fixes 'stale shisan888 follow set' + the cloud-config gap.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:01:27 -04:00