From 0167c73d6433e56188f16948a0b9d24a99f104e4 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 13 Jul 2026 16:19:35 +0200 Subject: [PATCH] =?UTF-8?q?docs(handover):=20Fable=20EOD=202026-07-13=20?= =?UTF-8?q?=E2=80=94=20live=20state=20+=20full=20TODO=20ladder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- prod/docs/HANDOVER_20260713_FABLE_EOD.md | 95 ++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 prod/docs/HANDOVER_20260713_FABLE_EOD.md diff --git a/prod/docs/HANDOVER_20260713_FABLE_EOD.md b/prod/docs/HANDOVER_20260713_FABLE_EOD.md new file mode 100644 index 0000000..2fa75fe --- /dev/null +++ b/prod/docs/HANDOVER_20260713_FABLE_EOD.md @@ -0,0 +1,95 @@ +# HANDOVER — Fable, 2026-07-13 EOD (token-limit divert) + +Written at operator order at 96% token budget. State + ALL open TODOs as Fable sees them. + +## LIVE STATE (as of 16:15 CEST) + +- **F5 RUNNING**: PID 237222, `/root/dolphin_logs/uv_prime_flight5.log`, launched via + `uv_prime_launch5.sh` (setsid-detached). Open position at writing: TRXUSDT SHORT + 5108cf2b entry 0.3255 qty 3038 (~−0.20% at 16:13). +- **GATE RELAXED ON PURPOSE**: `DOLPHIN_VOL_P60_THRESHOLD=0.00001` (launcher line 26). + **Operator order 2026-07-13: DO NOT TIGHTEN YET.** Sequence: (1) characterize exit + MECHANICS with relaxed gate = high sample rate on VST, (2) vol-gate parity + (restore 0.00026414) as the LAST rung. +- Exit mechanics observed today: 7 ADVSL losers (−0.05..−0.51%), **1 FIXED_TP winner + ADAUSDT +0.4416% @15:02** (vs 0.20 configured → overshoot-study datapoint), earlier + 4 ADVSL losers (MFE ≤ +0.013%). Heartbeat healthy: polls ~15k, tick lane live. + +## COMMITTED TODAY (all local — NOT pushed) + +- `bdc54fb` (canonical /mnt): INDETERMINATE submit fix — unknown is never flat. + http.py effect classes, bingx_direct point-lookup (NOT a reconcile), venue.py + VenueIndeterminateError(VenuePostAckError), bingx_venue escalation, 14 tests. + Suite 3416 passed/19 skip/3 xfail. +- `54cd5d5` (uv-wt refactor): vendored side + VENDOR.lock repin. Sync gate refused + 93v92 → ported test UP to canonical, proved zero .py drift, then --force. Drift + verify green, dita_v2 collection gate green. +- `f2e7d41`: POST_FINISH research entries (dvol sweep × regime, cadence effects, + streak wave-phase). +- TODO: `h5i share push` both repos; Gitea push (broken Windows post-receive hook, + memory: violet_unified_repo). + +## IN-FLIGHT (next command, prepped) + +**Apply UV DDL**: `dolphin_uv.max_hold_ingress` + `tp_exit_ingress` DDLs EXIST at +`prod/clickhouse/uv/04_max_hold_ingress.sql` + `05_tp_exit_ingress.sql` but were +NEVER APPLIED → F5 404s every scan, mechanics data spool-only +(`/root/dolphin_logs/uv_journal_spool.jsonl`, 1,576 rows). +Run: `cd /root/uv-wt/refactor && python3 prod/clickhouse/uv/apply_uv_ddl.py` +(idempotent, IF NOT EXISTS). Then: confirm 404s stop next scan; check whether the +journal lane auto-drains the spool or rows need manual JSONEachRow replay +(journal.py:328 — fsynced-sidecar ack + spool compaction; verify it replays old rows). + +## TODO LADDER (Fable's full view) + +1. **UV DDL apply + spool drain** (above). Unblocks the mechanics characterization + the relaxed gate is paying for. +2. **Vol-gate parity restore = LAST rung** (operator sequence): launcher line 26 → + 0.00026414, restart F5 **while flat** (TPSL REHYDRATE exists but don't test it + with money). Then tag the relax-window trades DO_NOT_ACCOUNT for the parity + ledger (window = F5 launch→restore; ADA winner + all ADVSL losers included). +3. **ADVSL staleness guard**: `_last_price` has NO max-age — if fetches fail after + first success, ADVSL decides on a fossil price forever (tpsl_ticker.py on_bar + reads it; only never-fetched case falls back to entry). Fix = stamp age, skip + ADVSL on stale (like no-price). Small, mutation-testable. Awaiting go. +4. **Clock findings (research done, delivered)**: SL/TP evaluate on 1s tick + (UV_TPSL_POLL_S, floor 0.5 in code); TP/SL *modulation* recomputed per tick via + set_tp_resolver (tpsl_ticker.py:167 → brain_tpsl.py:334); ADVSL/MAX_HOLD on scan + bar ~11.06s vs BLUE NG7 pinned 5.97s → all bar-denominated constants stretched + 1.85× in wall-clock. OPEN QUESTION: bar constants = hold-TIME or evidence-COUNT + (N OBF observations)? Decides time-normalize vs cadence-match. Fable rec: attack + WHY UV scan is 11.06s (cadence-match beats constant-scaling for parity). +5. **OBF freshness (post-parity)**: ingress provider called per tick but returns + scan-stale snapshot; OBF native cadence ~300-500ms — refresh ingress at native + rate once parity certified. No structural blocker. +6. **Venue-side catastrophic SL backstop**: BingX placeOrder supports attached + stopLoss/takeProfit JSON on SAME request (workingType MARK_PRICE). Pro pattern = + software-primary + venue-resident wide backstop (~2× software SL) as dead-man's + brake (our HZ silent-death history!). Cost: FSM must accept a non-kernel-originated + exit fill via E-feed; attached-stop auto-cancel on close needs VST verification + (orphan-order risk). Our serializer lacks the attach params (execution.py has + standalone conditionals only). Belongs in exec-router workstream. +7. **Exec friction (POST_FINISH SEQUENCED, first upon parity)**: adjudicate PINK + ExecutionRouter (maker/taker policy, 265 tests) ∪ BLUE SmartPlacer (OB-aware + placement) vs prod/docs/BingX_FILL_CHARACTERIZATION_AND_ADVANTAGES.md. Router + under 1s steel clock = maker orders actually managed. +8. **Indeterminate sweep codebase-wide** (belled to codex, napped): cancel/ + cancel_async, EKBridge, e_feed, ch_writer, ExecutionRouter, promotion receipts, + every `except: pass` after venue I/O — same NOT_ATTEMPTED/REFUSED/INDETERMINATE + triage as bdc54fb. +9. **TIER-B inversion** (open): asex_kernel_executor.py:319 enqueues account/fill + at P4 below ENTER P3 — execution truth must outrank entries. +10. **Research studies** (logged POST_FINISH): dvol sweep × regime (PREREQ: persist + per-trade dvol at entry — same field DDSketch self-tuning gate needs); cadence + effects; streak wave-phase vs vel_div. TP-overshoot split (cadence-luck vs + modulation): measure exit_pct − tp_effective_pct on BLUE TP exits; today's ADA + +0.44 is a UV datapoint. +11. **Missing venue truth**: dolphin_uv.exec_journal etc. fine; but relax-window + trades need DO_NOT_ACCOUNT tags before parity ledger consumes them. + +## DOCTRINE REMINDERS (cost blood today) + +- Never edit vendored copies; sync-gate REFUSE = port UP + prove zero drift before + --force. New test files must exist CANONICALLY first. +- Rollback only on proven absence: NOT_ATTEMPTED/REFUSED yes, INDETERMINATE never. +- Argos MCP unreachable this session; verify_no_fake_done done by hand (no stubs).