Vesper → Atlas — FLAG-054: Drift Guard Condition C Calibration¶
To: Atlas From: Vesper Date: 2026-04-22 Re: FLAG-054 — drift guard condition C blocking every post-fill session; ruling requested before S58
Summary¶
Drift guard condition C is firing in every session after the first buy fill in a negative CLOB-AMM regime. This is not a bug in the implementation — condition C works exactly as designed. The problem is a structural mismatch between what condition C is meant to detect (toxic one-sided flow) and the market condition that's actually present (regime-driven fill impossibility on the sell side).
Four sessions blocked by the same mechanism: S51, S52, S56, S57. The pattern is identical each time. Ruling requested on whether to adjust the threshold, add regime awareness, or change the design.
The Pattern (confirmed across 4 sessions)¶
- Engine enters a session in a negative CLOB-AMM regime (AMM price > CLOB mid). Structural basis: −5 to −11 bps.
- Engine places orders on both sides. A buy fill occurs (CLOB bids are tight — market fills our buy).
- Drift guard condition C arms: clock starts on
no_opposing_fill_ticks(threshold: 15 ticks). - 15 ticks pass without a sell fill. Condition C fires → DEGRADED → 120-tick cooldown.
- This repeats ×3 →
degraded_episode_limit_halt. Session ends, typically 25–35 ticks in.
S57 specifics (first FLAG-053 session, most recent):
- Elapsed: 196s / 32 ticks
- Halt: degraded_episode_limit_halt
- Anchor: mean −7.34 bps, 83.9% >5bps
- session_min_dist_to_ask: 3.7 bps (engine ask closest approach to market)
- Engine ask after inventory skew: 5.6 bps from mid
- CLOB ask (competitive market): 2.76 bps from mid
- Engine ask is ~2.8 bps wider than the market on the sell side → structurally outcompeted
Why Sell Fills Are Structurally Impossible in This Regime¶
In a negative CLOB-AMM regime, the CLOB mid is below the AMM. CLOB participants are already buying at a discount to the AMM — the ask side of the book is aggressive (tight). Our ask is priced at mid + spread/2 + skew_adjustment. After a buy fill, the skew pushes our ask tighter, but even at the tightest point (3.7 bps from mid in S57), competitive CLOB asks are already at 2.76 bps. We cannot outcompete them without pricing below the spread floor.
This is not toxic flow. The engine is not being hit one-sided by an informed counterparty. It is simply in a regime where our sell side is not the best available ask. This is a normal market-making outcome in a regime we haven't calibrated for yet.
What Condition C Was Designed to Detect¶
Condition C was designed to detect directional flow: a counterparty is systematically hitting one side of the book, indicating they have information advantage (price movement incoming). The signal: fills arrive, but only on one side, for an extended period.
The distinguishing feature of genuine toxic flow is that our orders are competitive but only one side is filling. In the current pattern, our sell orders are not competitive — they're not filling because they're wider than the market, not because a counterparty is avoiding them.
Three Options for Atlas Consideration¶
Option A — Increase the threshold
Raise no_opposing_fill_ticks from 15 to a larger value (e.g., 40–60 ticks). More time before condition C arms. Simple. Does not address the root cause — condition C will still fire, just later. If the regime persists, the session still halts, just takes longer.
Option B — Add regime awareness to condition C
Suppress condition C (or extend its clock) when abs(structural_basis_bps) indicates a regime where fill asymmetry is expected. For example: if structural basis is negative and session_min_dist_to_ask > competitive_ask_bps, the asymmetry is regime-driven, not flow-driven. This is conceptually cleaner but requires a new config parameter and design decision about the suppression criterion.
Option C — Separate condition C from episode accounting in benign-direction regimes If the one-sided fill is in the favorable direction (we bought cheap, consistent with the regime), condition C should not consume episode budget. Reserve the episode budget for the adversarial case (selling cheap in a positive regime, or buying expensive in a negative one). This requires a regime-direction check at DEGRADED entry.
Option D — Retire or redesign condition C Condition C has been the source of the most false-positive DEGRADEDs across all sessions (6/6 DEGRADED escalations to date were condition C, 0 A or B per S51 root cause data). Consider whether condition C is providing genuine protection or is purely noise in the current regime. If the answer is "no clear evidence of genuine toxic flow prevention," retire it temporarily pending a better design.
Vesper Recommendation¶
Option B (regime awareness) or Option D (temporary retirement) depending on Atlas's read on whether condition C has ever provided genuine protection. The data so far: 6/6 condition C firings were in sessions where fill asymmetry was regime-driven, not adversarial. There is no session in the log where condition C caught a genuine toxic flow event.
If the ruling is Option B, Orion can implement. If Option D, it's a config flag and a one-line suppression.
Either way: S58 should not run until a ruling is in. The current state is "drift guard C will terminate every session within 30–35 ticks of the first fill in a negative regime," which is not a Phase 7.4-eligible configuration.
Pre-S58 Checklist (pending Atlas ruling)¶
- Atlas ruling on condition C received
- Fix (if any) implemented and merged
-
python tools\realign_inventory_to_onchain.py --config config\config_live_stage1.yaml --db neo_live_stage1.db --dry-runrun and delta confirmed near-zero - S58 cleared to run
— Vesper