Commit Graph

2960 Commits

Author SHA1 Message Date
jaxperro 41ba871629 copybot: enrich metadata-less RTDS seeds + repair cond-less books each settle pass (closes #18)
Root cause of the 07-20 CASH≠CHAIN -$1.75: some markets stream RTDS
trades with empty title/outcome/conditionId; the seed stored them
verbatim, on_wallet_activity's 'tok not in self.conds' guard made the
empty value sticky, and settle_resolved's 'if not cond' skip left the
position silently unsettleable until the venue auto-redeemed it.

Three-layer fix:
- RTDS seed: when the payload lacks conditionId/title, enrich from the
  token id via _token_market (gamma, cached) before dispatch; the copy
  still goes through on a miss.
- conds write: falsy-overwrite instead of key-presence, so a later,
  richer source repairs an empty entry.
- repair_market_meta (called at the top of every settle pass, holding
  the lock): re-resolves empty conds for my_pos AND open missed entries,
  backfills position/bet/missed records, 300s per-token lookup backoff,
  and a once-per-token alarm when a position has sat unsettleable >1h.
  A repaired token settles in the SAME pass — the Odyssey bet would have
  self-healed the moment the market resolved.

The paper book currently carries 4 empty conds and both books have
cond-less open missed entries — the repair pass fixes those on the first
cycle after deploy. tests/test_meta_repair.py covers backfill, backoff,
the single alarm, recovery, and the end-to-end repair->settle un-stick;
full suite 8/8.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 11:31:38 -04:00
jaxperro 01cc9e88b5 research: nightly waits for fresh tape + absolute python
2026-07-21 first firing failed two ways: launchd's bare python3 has no
duckdb (framework python does), and 09:15 preceded the sleep-delayed daily
pipeline's tape ingest, so even a clean run would have scored a stale
tape. nightly.sh now uses the framework python and polls tape max-ts until
it is <6h old (15min polls, 8h deadline, then scores anyway and logs the
staleness).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 11:26:26 -04:00
copybot[bot] 05b17c52ad copybot: live paper feed [skip ci] 2026-07-21 14:31:00 +00:00
copybot[bot] 26e2d59b8e copybot: live paper feed [skip ci] 2026-07-21 14:20:32 +00:00
copybot[bot] 0b15441ea0 copybot: live paper feed [skip ci] 2026-07-21 14:18:21 +00:00
copybot[bot] f98861b5cd copybot: live paper feed [skip ci] 2026-07-21 14:17:54 +00:00
copybot[bot] 81abef5636 copybot: live paper feed [skip ci] 2026-07-21 10:40:28 +00:00
copybot[bot] 23e00ec485 copybot: live paper feed [skip ci] 2026-07-21 10:38:58 +00:00
copybot[bot] 6539719c41 copybot: live paper feed [skip ci] 2026-07-21 10:14:19 +00:00
copybot[bot] 5b463aba43 copybot: live paper feed [skip ci] 2026-07-21 10:13:18 +00:00
copybot[bot] fe5638c096 copybot: live paper feed [skip ci] 2026-07-21 09:36:52 +00:00
copybot[bot] 7f5289527a copybot: live paper feed [skip ci] 2026-07-21 09:36:33 +00:00
copybot[bot] 02e7456ada copybot: live paper feed [skip ci] 2026-07-21 09:36:33 +00:00
copybot[bot] 40481e62d9 copybot: live paper feed [skip ci] 2026-07-21 09:12:51 +00:00
copybot[bot] 33fdd558a6 copybot: live paper feed [skip ci] 2026-07-21 05:14:05 +00:00
copybot[bot] e83739b01c copybot: live paper feed [skip ci] 2026-07-21 05:01:12 +00:00
copybot[bot] c22f37cd4b copybot: live paper feed [skip ci] 2026-07-21 05:00:46 +00:00
copybot[bot] a33e2fe1b3 copybot: live paper feed [skip ci] 2026-07-21 02:12:52 +00:00
copybot[bot] c5527ec93a copybot: live paper feed [skip ci] 2026-07-21 01:33:42 +00:00
copybot[bot] 519720fb9d copybot: live paper feed [skip ci] 2026-07-21 01:32:12 +00:00
copybot[bot] 1a34c510b1 copybot: live paper feed [skip ci] 2026-07-21 01:06:49 +00:00
copybot[bot] 14fd64279a copybot: live paper feed [skip ci] 2026-07-21 01:05:48 +00:00
copybot[bot] aebcfa2d24 copybot: live paper feed [skip ci] 2026-07-20 23:33:52 +00:00
copybot[bot] b9faf6c3f8 copybot: live paper feed [skip ci] 2026-07-20 23:20:55 +00:00
copybot[bot] f86adc4029 copybot: live paper feed [skip ci] 2026-07-20 23:02:01 +00:00
jaxperro fb631e7ba4 live: 2026-07-20 reconcile — settle empty-cond Odyssey auto-redeem, fold $0.05 rounding (refs #18)
CASH≠CHAIN -$1.75 root-caused: the 07-16 BikesAreTheBikes copy booked with
empty title/outcome/cond, so settle_resolved could never resolve it; the
venue auto-redeemed $1.694914 on-chain (tx 0x4f303e0e…) while the book
held it open. Hand-settled exactly as settle_resolved would (won @ 1.0,
pnl +$0.68, my_pos/conds cleaned, metadata backfilled from the venue
record) and folded the +$0.050314 fill-rounding remainder as an
adjustments entry (non-trading income, zeroes CASH≠CHAIN, cash credited).
Post: cash == chain $49.324270 (3 RPCs agree), raw drift +0.0003 (0.00).
Machine stopped + heartbeats watched to cessation per the HANDOFF ops
procedure; root cause filed as #18.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 19:01:22 -04:00
jaxperro 16d8deb878 docs: tape-era findings + research silo across FINDINGS/HANDOFF/README
FINDINGS: 'The tape era opens' section (sharp screen 742/742 proxy
validation, Study A identity-null, Study B winner's curse, crater refill
clock) + scorecard rows for the two forward-window studies + research/ in
repo layout. HANDOFF: #16/#17 in the open queue, research silo + nightly
launchd in snapshot/ops. README: research/ directory row.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 18:39:19 -04:00
copybot[bot] 0f2368f049 copybot: live paper feed [skip ci] 2026-07-20 22:24:39 +00:00
copybot[bot] c5a08c7024 copybot: live paper feed [skip ci] 2026-07-20 21:45:54 +00:00
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
copybot[bot] 83d1d8397a copybot: live paper feed [skip ci] 2026-07-20 21:40:48 +00:00
copybot[bot] 528a926e7e copybot: live paper feed [skip ci] 2026-07-20 21:39:55 +00:00
copybot[bot] d8ae11624f copybot: live paper feed [skip ci] 2026-07-20 21:35:40 +00:00
jaxperro 2f4f2ccbbe research silo: edge factory — calibrated sim, Study A/B, forward ledger (#2, #16, #17)
research/ is a hard silo (README rules): read-only tape, no bot imports,
own launchd (com.jaxperro.research-nightly 09:15, after daily ingest).

- tape.py: proxy-resolution (the 742/742-validated method), niche + crypto
  strike/expiry/sprint parsers, tick loaders
- sim.py: FAK execution replayer; hold_s=3 fitted on 29 real labeled live
  attempts (79% fill/miss classification), price noise 2-4c, measured
  OPTIMISM BIAS -2c/fill carried into every verdict threshold
- requote.py: crater refill timing per niche (crypto 94% <4s, esports 83%
  <10s, sports needs ~25s, geo/politics minutes) -> params/requote_timing.json
- study_flow.py + robustness: in-play surge momentum. Identity NULL result:
  10 pooled controls +23.85/fill == informed +23.68 -> hypothesis revised at
  freeze, surge-EV primary, identity secondary (#16)
- study_oracle.py: oracle digital fair value. 86% craters, winner's-curse
  inversion at big edges, nothing frozen (no cell at 30 fills) (#17)
- forward.py + nightly.sh: re-scores frozen studies on last 3 tape days,
  appends forward_ledger.jsonl; verdicts ONLY from post-freeze rows

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 17:34:22 -04:00
copybot[bot] 832e768e75 copybot: live paper feed [skip ci] 2026-07-20 21:08:51 +00:00
copybot[bot] 3017a5831d copybot: live paper feed [skip ci] 2026-07-20 21:03:13 +00:00
copybot[bot] a9901f3fa3 copybot: live paper feed [skip ci] 2026-07-20 21:02:21 +00:00
copybot[bot] 61e66b7929 copybot: live paper feed [skip ci] 2026-07-20 20:47:54 +00:00
copybot[bot] 63f8659a99 copybot: live paper feed [skip ci] 2026-07-20 20:47:13 +00:00
copybot[bot] 20a42c8fc1 copybot: live paper feed [skip ci] 2026-07-20 20:41:22 +00:00
copybot[bot] 1ff789da99 copybot: live paper feed [skip ci] 2026-07-20 20:40:48 +00:00
copybot[bot] 545b3910fd copybot: live paper feed [skip ci] 2026-07-20 20:32:09 +00:00
jaxperro 008b3138cc tape research: first sharp screen over the RTDS firehose (#2)
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>
2026-07-20 15:36:01 -04:00
copybot[bot] d35d960254 copybot: live paper feed [skip ci] 2026-07-20 19:25:29 +00:00
copybot[bot] 7e91b56590 copybot: live paper feed [skip ci] 2026-07-20 19:25:16 +00:00
copybot[bot] 35d9b7d96c copybot: live paper feed [skip ci] 2026-07-20 18:53:15 +00:00
copybot[bot] 497de4427f copybot: live paper feed [skip ci] 2026-07-20 18:52:53 +00: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
copybot[bot] 57b549abb0 copybot: live paper feed [skip ci] 2026-07-20 18:49:14 +00:00
copybot[bot] cb3aba3911 copybot: live paper feed [skip ci] 2026-07-20 18:49:08 +00:00