Files
winning-wallet-finder/HANDOFF.md
T
jaxperro 43de3845a7 payouts: exact on-chain resolution timestamps via Etherscan V2 (resolution_time)
CTF ConditionResolution logs, full-range topic query (Alchemy free tier
caps getLogs at 10 blocks), cached forever in resolution_times. Verified:
Brewers Jul-7 market truly resolved 2026-07-08 04:51 — the cached
endDate-metadata res_t was 29h wrong; Kruto's sell provably 365 min
pre-resolution. Key = etherscan_key (gitignored config). Migration of
trust/validate/portfolio onto true res_t queued in HANDOFF.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 18:05:21 -04:00

109 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Session handoff — 2026-07-08 (rev 3: books aligned, Set E live, fresh $1k)
Self-contained pickup for a fresh session (human or AI). Read
[README.md](README.md) gotchas 115, [FINDINGS.md](FINDINGS.md) (especially
the three 2026-07-08 sections at the end), and [LIVE_ROLLOUT.md](LIVE_ROLLOUT.md).
The repo is authoritative; project memory has deeper history.
## Where things stand (all green)
- **Live paper bot**: Fly.io `wwf-copybot`, region `arn` (Stockholm), push
mode, ONE machine. Following **Set E** (7 volume wallets): LSB1,
imwalkinghere, Kruto2027, 0xbadaf319, gkmgkldfmg, AIcAIc, 1kto1m.
`flyctl logs --app wwf-copybot`.
- **The book is a fresh $1,000, reset 2026-07-08 ~20:45 UTC** — this is the
CALIBRATION EXPERIMENT: measure the live-to-backtest ratio for Set E with
every fix live from day one; that ratio (not the replay %) sizes real money.
Old book (Jun 25 → Jul 8, +$229.79) is in git history +
`archive/copybot_fills.pre-reset-2026-07-08.jsonl`.
- **The three books agree by construction** (2026-07-08 alignment work):
same W/L/R/S taxonomy (win% = held-to-resolution only), same
sold-vs-redeem price discriminator (redeem prints exactly the payout), same
pinned floors, same follow set. Row-level cross-check bot↔backtest: 7/9
exact, 0 absent, 2 legit execution diffs. Sharps table reproduces PM's
per-position books to the dollar; PM's LEADERBOARD is the biased number.
- **Dashboards**: [jaxperro.com/trading](https://jaxperro.com/trading) =
paper book + backtest + sharps; [jaxperro.com/live](https://jaxperro.com/live)
= REAL MONEY page (NOT STARTED until Phase 2). Shared renderer:
`jaxperro/trading/copybot-section.js`. `?botFeed=`/`?rmFeed=` query params
override feeds for local testing.
- **Watchdog live (2026-07-08)**: Fly `/health` check auto-restarts a dark
machine; GH Actions `watchdog.yml` probes from GitHub's infra and pings
Discord after 3 failed probes. `copytrade.py` now lives at repo root
(archive/ is 100% retired code again).
- **Daily pipeline** (Mac launchd 08:00, fires on wake — typically ~10:00,
caffeinate-wrapped)
appends one live-vs-model row/day to `live/history/calibration.csv` and
re-derives everything under the new rules: entries cursors now invalidate
daily, `_open_split` folds by the `redeemable` flag, `rtally` splits SOLD.
- **Backtest**: `portfolio.py` takes `--bank` (backtest.json `"bank"`).
Published feed stays at $1,000 to match the paper book. $500 run: +2728%
(small banks compound faster — their-bet ceilings bind later).
## Queued next-session work (in value order)
1. **Exact-res_t migration**: `payouts.resolution_time(cond)` (Etherscan V2,
wired+verified 2026-07-08) gives true resolution timestamps; migrate
trust.py / validate_timing / portfolio.py to consume them instead of
endDate metadata. Alignment-grade change — same care as the 2026-07-08
audit. Backfill throttled ≤5 req/s (Etherscan free tier).
2. **Empirical fill model**: every copy now logs a `book` snapshot (spread +
5c depth) to the fills ledger; once a few weeks accumulate, fit slippage
vs stake/depth and replace portfolio.py's flat SLIP haircut; add a depth
gate before real-money sizing.
3. **Funding-cluster tracer port** to Etherscan logs (Alchemy free tier now
caps getLogs at 10 blocks — insider.py's ring detection is degraded
until then).
## Watch list (the standing question: does Set E hold up?)
- **AIcAIc** — held-win only 42%; his edge is sell-timing (most lag-fragile
class). First demotion candidate.
- **1kto1m** (z=2.4) and **gkmgkldfmg** (z=2.05) — near the gate floor;
strong month, shallow statistical edge.
- Re-ranking is cheap: the per-wallet replay harness pattern is in FINDINGS
("Aligning the three books"); `python3 live/portfolio.py --wallets 0x…
--days 30 --out /tmp/w.json` per candidate, then combined-set runs.
- Rejected-with-evidence (don't re-add without new facts): oliman2 (true
lifetime ~$19k), leegunner (negative to copy), 0xb0E43B/ArbTraderRookie
(refund harvesters — real edge, uncopyable margins), lma0o0o0o (negative in
the shared book), Winnertraders (6.6-day capital locks).
## Next: Phase 2 — funding (USER ONLY)
Phase 1 is 8/8 complete (LIVE_ROLLOUT.md). Before funding, the user should
decide the stranding tolerance explicitly: real money turns the primary risk
from P&L into the ACCOUNT (US person routing orders via Stockholm through the
geoblock — a frozen wallet is a different loss category than a losing bet).
Caps stay $5/trade · $25/day · $30 exposure until Phase 6. Then Phase 3
preflight (`preflight_live.py`) → Phase 4 supervised first fill → Phase 5
edge-case matrix. The typed-phrase interlock is the human checkpoint — never
automated.
## Standing to-dos (user-only or external)
- **None open.** Alchemy key ROTATED 2026-07-08: old app "Jax's First App"
(key `…OdWgOi`, the one leaked to public git history) deleted; new app
`wwf-rpc-2026-07` (key `…w0BxV5`) wired into gitignored `config.json` +
the `ALCHEMY_RPC_URL` Fly secret. Verified: old key → HTTP 401 (the key
in git history is now dead, so no history rewrite needed), new key serves
Polygon, bot rebooted with settle-fallback ON and made a live copy, Notify
webhook `wh_blf4qjjvfdbqs9mc` survived (app-delete doesn't touch Notify
resources) — 7 addresses in sync. Railway project deleted (purges 07-10).
## Operational quick-reference
- **Change the follow set**: edit `live/copybot.paper.json` wallets →
`./live/deploy_bot.sh` (validates → pins floors → syncs Alchemy webhook →
restarts Fly → confirms banner). Keep `backtest.json` mirrored.
- **State surgery (reset/repair the book)**: `flyctl machine stop` FIRST,
push the new state, `flyctl apps restart`, then VERIFY the first heartbeat
shows the book you wrote (gotcha 15: the bot's memory wins conflicts by
design, and a boot clone can read a stale GitHub replica for a few seconds).
- Never 2 Fly machines (`flyctl scale count 1`) — one book, one writer.
- Cache is single-writer; don't run cache-touching scripts during the daily
pipeline or a regen. Three cursors per wallet (gotcha 12).
- Bot commits its own state/feed — `git pull --rebase --autostash` before
pushing. Image changes (fly.Dockerfile, host/) need
`flyctl deploy --remote-only`; code/config changes just push + restart.