drive_loop.py transcribes pink_direct.py:1089 (the 10-step expiry sequence) warts-and-all against injected ports (ExecPort seam: clock+kernel+venue), so no ambient state (C1). Carries the scar tissue: pump-before-cancel, re-classify-after-cancel (fill races cancel), EXIT never strands→MARKET, slot-busy double-entry guard, fail-safe venue-truth requote gate. SEAM learnings preserved as referenced comments (zero-silent-suppression rule). Decimal sizes (H1). - working.py: WorkingRegistry + WorkingOrder, injected clock, rejected→expire_now (one shared path). contract.py: client_order_id_core(attempt) — unique per attempt (audit H4/FIX). - _constants.py: REQUOTE_HOT_WINDOW_S=5.0 (prov: 2026-06-10 double-entry). - inventory §6: audit build items BI-1..5 folded in. - test_drive_loop.py: 15 scar-tissue tests. Mutation-verified RED under exit-no-escalate (kills 3) and no-hot-window (kills double-entry guard). Full exec_unified suite: 77 green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
37 lines
1.9 KiB
Python
37 lines
1.9 KiB
Python
"""Policy constants — from data, never vibes (spec §6 closing note).
|
||
|
||
Every constant cites its provenance. Where a number is not yet backed by an L8/L10
|
||
characterization row it is marked PROVISIONAL and must be calibrated before the smart
|
||
path arms with real capital — a provisional constant is a known-unknown, not a vibe.
|
||
|
||
Cadence is NEVER hardcoded here (no literal 1 s): the drive loop takes its clock
|
||
injected (spec §7, C1). These are policy magnitudes, not periods.
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from decimal import Decimal
|
||
|
||
# PROTECT: "maker at touch, one reprice, ≤2 s total, then cross" (spec §6).
|
||
PROTECT_REPRICE_LIMIT: int = 1
|
||
PROTECT_MAX_MS: int = 2_000
|
||
|
||
# HARVEST: "maker at target ± offset, chase ≤ N; give up when regression eats X%
|
||
# of unrealized → cross" (spec §6). N and X are PROVISIONAL — no characterization
|
||
# row fixes them yet (§17 open question: chase bounds from bookDepth replay).
|
||
HARVEST_MAX_CHASES: int = 3 # PROVISIONAL — calibrate vs L8 fill_sim
|
||
HARVEST_GIVEUP_REGRESSION_FRAC: Decimal = Decimal("0.25") # PROVISIONAL — 25% of unrealized
|
||
|
||
# ACQUIRE: "patient maker inside spread; abandon, never chase" (spec §6, §4-1:
|
||
# a missed entry is free, a chased entry is not). No chase budget by construction.
|
||
ACQUIRE_MAX_CHASES: int = 0
|
||
|
||
# Dead-man's stop default multiple of software SL distance (spec §10, §17 open
|
||
# question: 2× vs ATR-scaled). PROVISIONAL default.
|
||
PROTECTIVE_STOP_MULT_DEFAULT: Decimal = Decimal("2.0")
|
||
|
||
# Requote hot-window: after an OWN fill, refuse to re-quote for this long because the
|
||
# REST venue reconcile lags the WS fill by seconds — re-quoting inside it double-enters.
|
||
# Provenance: live double-entry, pink_direct.py:1055 / :1323 (2026-06-10). Measured in
|
||
# injected-clock seconds; the loop reads it, never a hardcoded literal in the branch.
|
||
REQUOTE_HOT_WINDOW_S: float = 5.0
|