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>
From the automated-writer clobber audit (3-agent workflow):
- sync_floors now ACTUALLY mirrors floor_pin into backtest.json (the comment
claimed it; the code never did — so a paper pin diverged from the backtest's
dynamic p80, defeating calibration). Kruto 80 now consistent across all 3.
- sync_floors warns loudly when about to revert an UNPINNED floor that looks
hand-edited (>5 and >15%) — floor_pin is the only protected key, so a direct
edit used to vanish silently at 08:00.
- validate_timing logs the sharps add/drop delta and documents watch_sharps.json
as generated-only (format kept a plain list — dashboard/discord read it so).
- daily.sh warns if copybot.paper.json vs backtest.json class_pct desync.
Audit verdict otherwise CLEAN: sync_floors is the only pipeline step that
mutates a manual-knob file, and it round-trips the whole JSON touching only
floor — all other knobs (caps, guard, depth_gate, follow set, band) survive.
config.live.example.json is untouched by every automated writer (safe by
neglect). No second floor_pin-class bug exists.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The 08:00 daily sync_floors.py unconditionally overwrote every paper-book
floor with the trusted p80 — silently reverting Kruto 80→125.61 the morning
after the deliberate lowering, so the paper book stopped matching the live
book (which reads a different config) and the 'catch more Kruto flow'
experiment ran on real money only. sync_floors now honors a per-wallet
floor_pin; Kruto pinned to 80 in paper + backtest (live already 80 via
per_wallet_min_usd). All three books gate Kruto at 80 again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Diagnosis of the 122s paper avg (user report): RTDS SAW every slow fill at
~0.3s (shadow ledger proof) but the copy landed 130-305s later — because
on_wallet_activity threw the RTDS payload away and re-fetched from the
data-api, whose indexer lagged that long on badaf/1kto1m crypto+index
markets, so the push was wasted and the 300s backstop poll did the copy.
Fix (option B as augmentation): the RTDS message carries every field
handle_trade needs, so seed it into on_wallet_activity's candidate set
(deduped by tx). The re-fetch + fill-split merge still run — the seed just
guarantees the trade is present at ~1s. detect_lag now reflects true RTDS
delivery (~1s) instead of indexer lag. 3 stub paths pass (seed-copies-on-
empty-data-api, dedup, no-seed-backstop-unaffected).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- _fetch_since_cursor cold start (no cursor) now seeds at now-600s like the
pre-cursor fetch — the 02:10 boot walked 500 rows/wallet of history through
the funnel and spammed ~230 phantom 'too slow (20,000m late)' missed rows
per book (user saw them on the dashboard). Purged from both books
(116 paper + 114 live; genuine misses remain).
- feed lag tile falls back to the LIFETIME average when the 24h window is
empty (the live page showed '—' after a copy-less day).
- bet records now carry lag_s so the dashboard shows per-copy exec lag.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The 4dp bound (sub-penny fix) violated tick conformity on 1c books —
'max_price must conform to tick size 0.01' failed a winning SPX copy at
14:36Z. The quoted price is always a tick multiple, so its own decimal
count is the finest safe precision: bound rounds to quote precision
(coarser is always valid on finer ticks, never the reverse). Verified
across 2dp/3dp/sub-penny quotes both sides.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>