Commit Graph

1024 Commits

Author SHA1 Message Date
copybot[bot] 7a22ec4f15 copybot: live paper feed [skip ci] 2026-07-10 09:20:41 +00:00
copybot[bot] 1478788782 copybot: live paper feed [skip ci] 2026-07-10 09:10:58 +00:00
copybot[bot] f5b12e1820 copybot: live paper feed [skip ci] 2026-07-10 09:10:14 +00:00
copybot[bot] a3d8ba4910 copybot: live paper feed [skip ci] 2026-07-10 08:21:25 +00:00
copybot[bot] cb6762f612 copybot: live paper feed [skip ci] 2026-07-10 08:17:15 +00:00
copybot[bot] 9d1c4f42be copybot: live paper feed [skip ci] 2026-07-10 08:16:28 +00:00
copybot[bot] f2195bb4ad copybot: live paper feed [skip ci] 2026-07-10 06:38:01 +00:00
copybot[bot] 1ed80c21a7 copybot: live paper feed [skip ci] 2026-07-10 06:32:50 +00:00
jaxperro b82e6d1b12 HANDOFF rev 5.1: live app on push mode (own webhook, watchdog wired)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 01:47:03 -04:00
copybot[bot] 4156d6a554 copybot: live paper feed [skip ci] 2026-07-10 05:40:25 +00:00
copybot[bot] 928f5addb2 copybot: live paper feed [skip ci] 2026-07-10 05:37:00 +00:00
copybot[bot] f6c8568313 copybot: live paper feed [skip ci] 2026-07-10 05:34:52 +00:00
copybot[bot] 87b09bc9f3 copybot: live paper feed [skip ci] 2026-07-10 05:32:59 +00:00
jaxperro df3c750efe live app goes push-mode: own Alchemy webhook + health check + watchdog
60s poll's ~39s avg detection lag is slippage the copy edge pays; push is
~3s (paper-measured). fly.live.toml gains http_service + /health check
(self-heal); start.sh live role switches on ALCHEMY_SIGNING_KEY like paper
(poll fallback intact; push mode keeps the 60s heartbeat + 5min backstop
poll). sync_webhook.py syncs BOTH webhooks (alchemy_webhook_id_live).
watchdog.yml probes both apps; a disarmed live app paging is expected.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 01:32:22 -04:00
copybot[bot] 4bb5ccc52c copybot: live paper feed [skip ci] 2026-07-10 05:26:37 +00:00
copybot[bot] f4543162a3 copybot: live paper feed [skip ci] 2026-07-10 05:25:21 +00:00
jaxperro ca6661cb94 docs+cleanup: HANDOFF rev 5 (placement proven), gotcha 16, key self-revoke
Critical path closed: bridge conversion ($24.73→pUSD, fee-free), executor
ported and round-trip proven ($5 FAK both legs), armed bot restarted clean.
README gains gotcha 16 (pUSD stack: paused native-USDC onramp, bridge is
the sanctioned conversion, builder-key revocation semantics) + bridge/
relayer data-source rows. Probe & wrap scripts atexit-revoke their builder
keys (9 inert ones accumulated during bring-up).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 01:19:57 -04:00
copybot[bot] 34e58f3078 copybot: live paper feed [skip ci] 2026-07-10 05:10:07 +00:00
copybot[bot] 90f26063eb copybot: live paper feed [skip ci] 2026-07-10 05:08:42 +00:00
jaxperro c5b87afcab live executor ported to the unified SDK (polymarket-client)
py-clob-client is archived; the CLOB rejects its orders globally. New
LedgerLiveExecutor: SecureClient.create(private_key) — deposit wallet
auto-resolves, no api_key at runtime; place_market_order FAK/FOK with
protected prices (quoted ±live.max_slippage_pct, default 5%, clamped to
[0.01,0.99]); fills parsed from AcceptedOrder (BUY: making=USD given,
taking=shares got; SELL reversed — semantics PROVEN by today's $5 round
trip: buy matched 7.35294 @ 0.68, sell matched 7.35 @ 0.67). Still never
raises into the trade loop. chain_cash_gap repointed at the deposit
wallet's pUSD (was the emptied legacy proxy → CASH≠CHAIN +24.73 alarm).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 01:08:18 -04:00
jaxperro 0cf163abe5 host: flatten_positions.py + probe polls the indexer
First live fill (2026-07-10, $5 @ 0.68 UFC 329 main): buy leg FILLED on the
unified SDK but the probe's fixed 3s wait beat the data-api indexer, so the
sell-back never ran. Probe now polls up to 60s; flatten_positions.py is the
standalone sell-everything utility (and the emergency flatten).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 01:06:03 -04:00
copybot[bot] 32b85f07b3 copybot: live paper feed [skip ci] 2026-07-10 04:49:29 +00:00
copybot[bot] 71bb0aea89 copybot: live paper feed [skip ci] 2026-07-10 04:43:14 +00:00
copybot[bot] 3b13c49a5d copybot: live paper feed [skip ci] 2026-07-10 04:41:10 +00:00
copybot[bot] 971bd9dc50 copybot: live paper feed [skip ci] 2026-07-10 04:38:41 +00:00
jaxperro 67d2c00843 fly image: add unified SDK; probe reads positions from client.wallet
polymarket-client==0.1.0b16 baked into the worker image (py-clob-client
stays for legacy read paths). Probe: drop the manual-wrap block (bankroll
already converted to pUSD via the bridge — the onramp pauses native USDC)
and stop reading positions from LIVE_FUNDER_ADDRESS (the emptied legacy
proxy); the SDK-resolved deposit wallet is the position holder now.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 00:36:47 -04:00
jaxperro 555d49b961 wrap_via_bridge: delivery is pUSD — the bridge wraps on deposit
The $3 test slice landed as pUSD 3.00 (bridge did native→USDC.e swap then
the wrap itself, zero fees). Watch pUSD+USDC.e for delivery; zero USDC.e
residue is the success case (manual wrap kept only as fallback).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 00:32:04 -04:00
jaxperro c71448a090 host: wrap_via_bridge.py — bankroll conversion via the sanctioned bridge path
On-chain forensics (2026-07-10): pUSD accepts native USDC by contract, but
the public CollateralOnramp has native USDC PAUSED (paused()=1) — the exact
cause of the direct-wrap revert. Bridge native→USDC.e (Polymarket Bridge,
the UI deposit flow, ~$0.005 on $24.73 per quote), then gasless
approve+wrap USDC.e→pUSD. Stage-gated: $3 test slice first.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 00:10:36 -04:00
copybot[bot] 0934c907e6 copybot: live paper feed [skip ci] 2026-07-10 03:22:46 +00:00
copybot[bot] 7ef7d7b7fc copybot: live paper feed [skip ci] 2026-07-10 02:57:18 +00:00
copybot[bot] c9899ec8e5 copybot: live paper feed [skip ci] 2026-07-10 02:55:54 +00:00
copybot[bot] f694f1e51a copybot: live paper feed [skip ci] 2026-07-10 02:55:10 +00:00
copybot[bot] 693bdda3a1 copybot: live paper feed [skip ci] 2026-07-10 02:41:24 +00:00
copybot[bot] 42fd8f1614 copybot: live paper feed [skip ci] 2026-07-10 02:36:27 +00:00
copybot[bot] 9736fd26aa copybot: live paper feed [skip ci] 2026-07-10 01:04:46 +00:00
jaxperro 3a82c81484 HANDOFF rev 4: full rewrite for session handoff — critical path is the wrap + executor port
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:50:32 -04:00
jaxperro c8fdcf44a3 HANDOFF: live placement — wrap step is the sole remaining gap; funds safe; ts-sdk read next
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:44:54 -04:00
jaxperro fa7968d0bb probe: gasless approve+wrap of full USDC balance via the public wrapper periphery
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:42:34 -04:00
jaxperro 0ef5b9c2a2 probe: approve_erc20 correct kwargs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:39:30 -04:00
jaxperro aab3d1c965 probe: approve native USDC to the collateral contract (wrap-at-match path)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:38:53 -04:00
jaxperro a34b40e69f probe v2: setup_trading_approvals before first order (the SDK's onboarding call)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:37:08 -04:00
jaxperro f7b38f6f54 probe v2: in-process builder key for allowance recovery on first order
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:28:18 -04:00
jaxperro 0f670d44d0 HANDOFF: live placement root-caused — archived client + wallet architecture; deposit wallet deployed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:23:17 -04:00
jaxperro c278aebb9e host: deposit-wallet bootstrap probe (builder key + gasless deploy)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:22:17 -04:00
jaxperro 222bc0b80d probe v2: let the SDK derive the Deposit Wallet (maker-not-allowed fix)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:20:57 -04:00
jaxperro 8791591b48 order probe v2: new unified SDK (polymarket-client) — old client archived, orders 400
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:19:29 -04:00
jaxperro 99dcca1899 order probe: plain-binary market first (negRisk suspected in the 400)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:15:59 -04:00
jaxperro bf11de9759 live executor crash-proofed + baseline stops eating fresh trades + poll guard
Root cause of zero live placements: the FIRST two qualifying signals
(Kruto 21:21, badaf Epic 21:53) each CRASHED the bot inside the
unguarded live order path (machine events: exit_code=1 seconds after
each signal; tick-size rejection the likely thrower — price was rounded
to 3dp on 1c-tick books). Fly restarted it and boot baseline marked the
fresh trades seen-without-copying: crash -> restart -> trade eaten,
twice. Fixes: _order never raises (failures return ok:False and feed
the new missed-row instrumentation); tick-size-aware pricing (cached
get_tick_size, buys ceil / sells floor, 0.01 fallback valid on every
book); size floored to 2dp; per-wallet poll guard (parity with the push
handler); baseline exempts trades younger than the stale window so a
restart can never eat a copyable trade again. host/order_probe.py =
controlled end-to-end placement proof (~$2 round trip).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:14:38 -04:00
copybot[bot] 8aa5163e72 copybot: live paper feed [skip ci] 2026-07-10 00:13:12 +00:00
copybot[bot] 0f8485635c copybot: live paper feed [skip ci] 2026-07-10 00:11:09 +00:00