venue.py:43 location + 2026-07-13 date corrected in-place. §11 added: truth audit, missing-seam table (cancel, lev SET, promo receipts, e-feed, exit legs, ch_writer, broad-except), NO-RECONCILE guardrail on the P0 background task. Handover item 8 updated to fleet-ready. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
128 lines
8.3 KiB
Markdown
128 lines
8.3 KiB
Markdown
# 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 — NOW SPECCED FOR FLEET**: pi red-teamed
|
||
the class (`COMPREHENSIVE_UV_EDGE_CASE_THEORETICALS.md`); Fable reviewed
|
||
2026-07-13 eve: doc FAITHFUL (2 factual errors fixed in-place: venue.py:43
|
||
location, 07-13 date), submit seam fully covered, **7 missing seams
|
||
enumerated in its §11 (M1–M7)**: cancel, leverage SET, promotion receipts,
|
||
E-feed gaps, exit legs, ch_writer dups, broad-except sweep. §11 carries the
|
||
NO-RECONCILE guardrail for the P0 background task. Fleet-ready: one seam
|
||
per agent; test pattern = test_indeterminate_submit.py.
|
||
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.
|
||
|
||
## ANOMALIES — "that's odd" caught at spark level (operator order: log before fire)
|
||
|
||
1. **E-TRIPWIRE capital anchor drift** — 17:20:21 CEST at DASH fill
|
||
(0c2ee114): expected 49,550.8744 vs observed 49,561.5166 = **+$10.64 (~2bps)**.
|
||
Promo metadata then anchored capital at the OBSERVED value. Likely fee/timing
|
||
accounting at fill, but capital = anchor + Σ deltas is sacred (zombie-trades
|
||
lesson) — reconcile which side is right before it compounds.
|
||
2. **Leverage clamp mystery** — promotion line said `lev=3 raw_conv=8.0`
|
||
(intent c16ae587), venue log line: `leverage SET symbol=DASH-USDT 1→→2`, and
|
||
the next intent journaled `leverage=2`. Something between bridge sizing and
|
||
venue SET clamps 3→2 (venue max for DASH-USDT? sizing bridge internal_lev
|
||
0.637?). Money-path arithmetic — verify deliberate, not silent.
|
||
**OPERATOR RULING 2026-07-13: can wait AS LONG AS the clamp bugs DOWNWARD
|
||
and/or stays within the 3x cap.** Observed instance was 3→2 = downward =
|
||
within ruling. If any instance clamps UPWARD or breaches 3x → immediate.
|
||
3. **KERNEL_REJECTED over-entry, live confirmation** — 17:22:40 brain re-fired
|
||
DASHUSDT SHORT while slot 0 already held DASH short (13 bars). Pre-wire FSM
|
||
refusal (same-millisecond receipt, no HTTP). Guard WORKS; upstream
|
||
position-blindness (PRIME 2.7× over-entry finding) remains the disease.
|
||
4. **EXIT-mislabel parade confirmed live** — exec_journal writes an EXIT BRIDGE
|
||
row per no-entry scan (uv-trade-* ids, ~12s apart, no real exits). Known
|
||
cosmetic item, now confirmed polluting exec_journal volume/queries.
|
||
5. **Bar cadence is BIMODAL, not slow** — BAR pulse instrumentation (cc01d28)
|
||
shows consecutive scan numbers with dt ≈ 6s OR ≈ 12s (exact doubles), nothing
|
||
between. The "11.06s average" = ~6s base clock (matches NG7's 5.97 pin) with
|
||
frequent double-length beats. Cadence question is now: WHERE does UV lose
|
||
every other scan (NG7 emission jitter / HZ pickup / dedup gate)?
|
||
|
||
## 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).
|