mirror of
https://github.com/jaxperro/winning-wallet-finder.git
synced 2026-07-28 00:07:47 +00:00
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>
This commit is contained in:
+25
-1
@@ -1,4 +1,28 @@
|
||||
# Session handoff — 2026-07-15 (rev 13: paper FAK parity; rev 12: chain-seed)
|
||||
# Session handoff — 2026-07-17 (rev 14: +$44 bankroll, exact paper-parity config; rev 13: FAK parity; rev 12: chain-seed)
|
||||
|
||||
## 2026-07-17: bankroll top-up + USER DIRECTIVE — live mirrors paper EXACTLY
|
||||
- **User deposited +$44.14** (Cash App → BTC → bridge, 70241 sats; ~$6 lost
|
||||
to Cash App spread + BTC conversion — Polygon USDC is the cheap route).
|
||||
Book rebased: cash = chain $50.53, bankroll $22.28 → **$61.21** (= equity
|
||||
at rebase, per the config rule). Adjustment logged as deposit-not-P&L.
|
||||
4%-sizing now ≈ $2.45/bet.
|
||||
- **USER DIRECTIVE (2026-07-16): the live bot mirrors the paper test
|
||||
EXACTLY.** Caps were already off (retired 07-10). Parity sync applied:
|
||||
risk.max_price 0.95 → **0.99** (paper's), wallet floors synced to paper's
|
||||
current pins, dead `follow.per_wallet_min_usd` block removed (overwritten
|
||||
at load by wallets[] — it had gone stale). DELIBERATE exception:
|
||||
min_order_usd stays $1 (venue physical minimum; paper's $5 never binds at
|
||||
its equity — copying it would force $2.45 signals up to $5 = 8% of equity,
|
||||
DIVERGING from the 4% rule). NOTE: nothing auto-writes the live config —
|
||||
floors drift from paper's nightly sync until manually re-synced; check at
|
||||
each Friday bench review.
|
||||
- **Ops lesson (now README gotcha 15, third corollary)**: `flyctl machine
|
||||
stop` reported stopped while the process ran 25 more minutes — the rebase
|
||||
boot came up stale with ⚠ CASH≠CHAIN −$44.12 (alarm correct, money safe).
|
||||
A plain restart after the push landed picked everything up cleanly. Before
|
||||
state surgery: watch heartbeats actually CEASE.
|
||||
- Docs sweep: README follow-set (Set E rev 4), chain-seed + FAK-parity +
|
||||
edge.py coverage, stale "tiny test caps" pointer fixed.
|
||||
|
||||
## Operating boundary set by the user (2026-07-13, "away for a while")
|
||||
**Full autonomy on BOTH bots**; real-money bot **stays ARMED**. Never touch
|
||||
|
||||
@@ -24,7 +24,7 @@ Three deployed pieces + one static dashboard:
|
||||
| piece | where it runs | what it does |
|
||||
|-------|--------------|--------------|
|
||||
| **daily pipeline** (`live/daily.sh`) | this Mac, launchd **08:00** (a `pmset repeat wakeorpoweron` RTC wake at **07:58** makes this run on time even from sleep — set 2026-07-08, undo with `sudo pmset repeat cancel`; job wrapped in `caffeinate -i` so mid-run idle-sleep can't kill it. Heads-up: the wake fires even lid-closed-in-a-bag — cancel it if the Mac travels) | refresh the bet cache → 5-gate skill scan → fee-aware sharp selection → conviction floors → backtest book → publish JSON feeds to GitHub |
|
||||
| **copybot worker** (`copybot.py` via `host/start.sh`) | **Fly.io app `wwf-copybot`, region `arn` (Stockholm), 24/7** — migrated off Railway 2026-07-06: Railway ran it in a US region, which Polymarket's IP geoblock would 403 the moment orders got real; Stockholm is unrestricted AND ~25ms from the CLOB's eu-west-2 primaries. Every boot self-checks the geo-gate (`host/geocheck.py`) and verifies the clone against `git ls-remote` (stale-replica guard) | **T0 = the RTDS trade stream** (gotcha 18): every platform trade, wallet-attributed, **~1s detection** (measured p50 0.8s over 22k msgs), silent-stale guard force-reconnects a quiet socket. Backstops: the Alchemy address-activity webhook (~3s, `POST /alchemy`, signature-verified), a 5-min backstop poll, and the reconcile janitor. Per-wallet **trade cursor** paginates the activity feed so clip bursts can't scroll past a fetch (H3). 60s heartbeat settles/publishes; paper-copies with real fees/lag/slippage; commits its book back to the repo |
|
||||
| **copybot worker** (`copybot.py` via `host/start.sh`) | **Fly.io app `wwf-copybot`, region `arn` (Stockholm), 24/7** — migrated off Railway 2026-07-06: Railway ran it in a US region, which Polymarket's IP geoblock would 403 the moment orders got real; Stockholm is unrestricted AND ~25ms from the CLOB's eu-west-2 primaries. Every boot self-checks the geo-gate (`host/geocheck.py`) and verifies the clone against `git ls-remote` (stale-replica guard) | **T0 = the RTDS trade stream** (gotcha 18): every platform trade, wallet-attributed, **~1s detection** (measured p50 0.8s over 22k msgs), silent-stale guard force-reconnects a quiet socket. Backstops: the Alchemy address-activity webhook (~3s, `POST /alchemy`, signature-verified — **T0b chain seed** 2026-07-14: its tx hashes decode straight from the receipt's OrderFilled logs when the data-api indexer lags, so RTDS-silent markets still copy at push speed), a 5-min backstop poll, and the reconcile janitor. Per-wallet **trade cursor** paginates the activity feed so clip bursts can't scroll past a fetch (H3). 60s heartbeat settles/publishes; paper-copies with real fees/lag/slippage AND live-FAK thin-book reality (**paper FAK parity** 2026-07-16: a quote with no ask inside the protected band books a MISS, not a fill — keeps the live-vs-paper per-signal ratio honest; `live/edge.py` turns it into the daily bankroll-decision verdict in `history/edge.csv` + the Discord digest footer); commits its book back to the repo |
|
||||
| **REAL-MONEY worker** (same code, `COPYBOT_ROLE=live`) | **Fly.io app `wwf-copybot-live`, `arn`, 24/7, ARMED 2026-07-10** — separate app so the two books never share a process, state file, or failure mode. Trades the signer's **Deposit Wallet** `0x455e…45a1` (pUSD collateral) via the unified SDK (`polymarket-client`) | Same T0 RTDS detection (`RTDS_DETECT=1`) + Alchemy/poll backstops; **own-fill push** via the CLOB user channel (`userws` in the heartbeat) makes in-play pending holds adopt the moment they match — ws events only *trigger* the resolver, `get_order` stays the arbiter (gotcha 17). Paper-parity sizing (4% of equity, $1 venue floor, no price floor, hard caps retired — the **depth gate** is the scaling rail: skip spread>0.08 or ask5c<$50, stake ≤10% of 5c depth). Every placement/exit/settle pings Discord. Disarm: `flyctl secrets unset LIVE_CONFIRM -a wwf-copybot-live` |
|
||||
| **Discord digest** (`live/discord_daily.py`) | end of the daily pipeline | one message/day: the sharp list with profile links + 30-day conviction stats (per-trade pings retired 2026-07-04 for PAPER; the LIVE book pings every real placement/exit/settle) |
|
||||
| **dashboard** | [jaxperro.com/trading](https://jaxperro.com/trading) + [jaxperro.com/live](https://jaxperro.com/live) (static, in the `jaxperro` repo) | `/trading` renders the paper book, backtest book and sharp table; `/live` is the REAL MONEY page (reads `live/copybot_live_real.json` — live since 2026-07-10). Both pages share `trading/copybot-section.js` — one renderer, no drift |
|
||||
@@ -32,14 +32,16 @@ Three deployed pieces + one static dashboard:
|
||||
**The calibration experiment (running now):** a fresh $1,000 paper book,
|
||||
**reset 2026-07-08** so it measures exactly one thing — the follow set in
|
||||
**`live/copybot.paper.json`** (the single source of truth) from a clean start,
|
||||
with every bookkeeping fix live from day one. The follow set is **Set E rev 2**
|
||||
(2026-07-13, curated on the 5-day forward sample): five volume wallets —
|
||||
**Kruto2027 (floor lowered to $80 — +$736 from 2 copies at z=19.3),
|
||||
0xbadaf319, gkmgkldfmg, AIcAIc, 1kto1m**. Dropped: imwalkinghere (his flow
|
||||
is 5-min BTC Up/Down markets that resolve faster than any copy — 0 copies,
|
||||
misses would have LOST) and LSB1 (worst forward P&L, −$397 — demoted to
|
||||
`backtest.json` to re-prove). The backtest additionally proves a bench:
|
||||
Vahan88, 42021, BikesAreTheBikes, EdwardIN. All are copied on their
|
||||
with every bookkeeping fix live from day one. The follow set is **Set E rev 4**
|
||||
(2026-07-16, weekly bench review — HANDOFF logs each revision's evidence):
|
||||
six volume wallets — **Kruto2027 (floor 80 PINNED — `floor_pin` survives the
|
||||
nightly p80 sync), 0xbadaf319, gkmgkldfmg, 1kto1m, BikesAreTheBikes
|
||||
(promoted 07-13), AIcAIc (dropped 07-13, re-added 07-16 on +22%-since-drop
|
||||
forward + the Esports World Cup catalyst)**. Out: imwalkinghere (his flow is
|
||||
5-min BTC Up/Down markets that resolve faster than any copy), LSB1 (−$438
|
||||
all-time paper). The backtest additionally proves the bench: Vahan88,
|
||||
EdwardIN (both negative forward at the 07-16 review — not promoted). All
|
||||
followed wallets are copied on their
|
||||
**conviction bets only** (top-20%-by-stake, floor pinned daily from the
|
||||
trusted cache p80 via `sync_floors.py`), 4% of equity/bet, **capped at the
|
||||
signal's own bet size** and by the **depth gate** (≤10% of visible 5c ask
|
||||
@@ -182,7 +184,7 @@ in [`live/README.md`](live/README.md).
|
||||
|------|-------|
|
||||
| `live/copybot.paper.json` | **committed** (no secrets): the live paper bot's wallet set + classes + follow/risk params — deploy with `live/deploy_bot.sh` |
|
||||
| `config.json` | `daily_webhook` (Discord digest) · `alchemy_notify_token` + `alchemy_webhook_id` (webhook address sync) · `alchemy_signing_key` (local push-mode runs) · Alchemy RPC key · a legacy curated watchlist + floors (`sync_floors.py`) |
|
||||
| `config.live.json` | live-trading credentials (`private_key`, `funder_address`) + tiny test caps — see `LIVE_TEST.md` |
|
||||
| `config.live.json` | live-trading credentials (`private_key`, `funder_address`); the Fly worker instead reads committed `config.live.example.json` + env secrets. Risk block is **paper-parity** (caps retired 2026-07-10 by user decision; bands/floors mirror `live/copybot.paper.json` — kept in sync MANUALLY, nothing auto-writes it) |
|
||||
| Fly `wwf-copybot` secrets | `GITHUB_TOKEN` (fine-grained PAT, contents-RW on this repo — the bot commits its state/feed back) · `ALCHEMY_SIGNING_KEY` (presence = push mode; remove it to fall back to 60s polling) · `DISCORD_WEBHOOK`. The webhook ingress is `https://wwf-copybot.fly.dev/alchemy` (Alchemy webhook `wh_blf4qjjvfdbqs9mc`, address list auto-synced by `deploy_bot.sh`) |
|
||||
|
||||
---
|
||||
@@ -388,6 +390,13 @@ runner is retired (GitHub throttled `*/5` to ~2h in practice — it copied 1 of
|
||||
corollaries: a state push while the bot runs WILL be overwritten, and a
|
||||
boot clone seconds after a push can read a stale GitHub replica — after
|
||||
any surgery, verify the first heartbeat shows the book you wrote.
|
||||
THIRD corollary (2026-07-17 bankroll rebase): `flyctl machine stop` can
|
||||
report "stopped" while the process keeps running for many more minutes
|
||||
(heartbeat cycle numbers kept incrementing 25 min past the "stop") — the
|
||||
machine then boots on whatever it cloned at ITS OWN restart moment, not
|
||||
yours. Before editing state, WATCH the heartbeats actually cease; if a
|
||||
surgery boot shows stale numbers, just restart again once your push is
|
||||
on origin (second boot picked it up cleanly).
|
||||
16. **The 2026 exchange stack: pUSD collateral + the unified SDK.**
|
||||
py-clob-client is ARCHIVED (May 2026) — reads/auth still work but the
|
||||
CLOB rejects its orders globally ('invalid order version'). Placement
|
||||
|
||||
@@ -9,13 +9,6 @@
|
||||
"follow": {
|
||||
"buy_only": true,
|
||||
"min_their_usd": 25.0,
|
||||
"per_wallet_min_usd": {
|
||||
"0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb": 80.0,
|
||||
"0xbadaf319415c17f28824a43ae0cd912b9d84d874": 44.98,
|
||||
"0xd7d36345c4aab150e59577e360696b01d01d698b": 304.34,
|
||||
"0xa1d57d329227c75b12b09f927fb3d6d6ef8f1343": 320.95,
|
||||
"0x215adbb63b47d0ca92f849fe2c2dc1adb0f6254c": 158.0
|
||||
},
|
||||
"min_entry": 0.0,
|
||||
"max_entry": 0.95,
|
||||
"class_pct": {
|
||||
@@ -31,7 +24,7 @@
|
||||
"max_open_positions": 1000,
|
||||
"max_per_event": 0,
|
||||
"min_price": 0.0,
|
||||
"max_price": 0.95,
|
||||
"max_price": 0.99,
|
||||
"min_order_usd": 1.0
|
||||
},
|
||||
"live": {
|
||||
@@ -53,25 +46,25 @@
|
||||
"wallet": "0xbadaf319415c17f28824a43ae0cd912b9d84d874",
|
||||
"name": "0xbadaf319",
|
||||
"class": "volume",
|
||||
"floor": 44.98
|
||||
"floor": 41.21
|
||||
},
|
||||
{
|
||||
"wallet": "0xd7d36345c4aab150e59577e360696b01d01d698b",
|
||||
"name": "gkmgkldfmg",
|
||||
"class": "volume",
|
||||
"floor": 304.34
|
||||
"floor": 470.51
|
||||
},
|
||||
{
|
||||
"wallet": "0xa1d57d329227c75b12b09f927fb3d6d6ef8f1343",
|
||||
"name": "1kto1m",
|
||||
"class": "volume",
|
||||
"floor": 320.95
|
||||
"floor": 328.77
|
||||
},
|
||||
{
|
||||
"wallet": "0x215adbb63b47d0ca92f849fe2c2dc1adb0f6254c",
|
||||
"name": "BikesAreTheBikes",
|
||||
"class": "volume",
|
||||
"floor": 158.0
|
||||
"floor": 227.2
|
||||
},
|
||||
{
|
||||
"wallet": "0x921433c93558b9a4ba807ec824d02aad7ea2ddbf",
|
||||
|
||||
Reference in New Issue
Block a user