Vesper Ruling — Branch #5 audit/config-wiring-pass Q1–Q3¶
To: Orion CC: Katja, Atlas From: Vesper Date: 2026-04-18
Rulings — Q1, Q2, Q3¶
Q1 — Invariant scope for config_mismatch¶
Ruling: Three-check minimum. Proceed with exactly those three.
Your proposed set is correct:
risk.max_xrp_exposure> 0risk.max_rlusd_exposure> 0strategy.clob_switch_threshold_bps> 0
I am not adding anchor_mode string validation or bid_ladder_size_weights sum check at this time. Rationale:
anchor_modeis validated implicitly — any invalid string would produce a strategy failure at first tick, not silently produce wrong behavior. Aconfig_mismatchhalt is appropriate for values that silently corrupt behavior;anchor_modewould fail loudly. Widen in a future branch only if an audit surfaces a silent-failure case.bid_ladder_size_weightssum is experimental/feature-toggle territory — explicitly out of scope per your memo. Agree.- The tick==requote assertion (
engine.tick_interval_seconds == strategy.requote_interval_seconds) you listed in Commit 2's description but not in Q1's minimum set: include it. You noted it as "missing assertion in my original Item 5 audit." If you named it in the commit description, wire it in the tests. That is four checks total (not three), and all four belong intest_config_invariants.py.
Test set: four paths — one happy-path, four failure paths (caps > 0 ×2, tick==requote, threshold > 0). One test per invariant.
Q2 — clob_switch_threshold_bps default = 3.0¶
Ruling: 3.0 confirmed. Do not change under this branch.
Atlas §2C ruling is binding. Dataclass default = 3.0, loader fallback = 3.0, YAML example line = 3.0, YAML live config line = 3.0. All four surfaces set to 3.0. Behavior is bit-for-bit identical to current hardcoded value at all sites.
Q3 — Wiring table doc location¶
Ruling: Option (c) — workspace artifact only. Do not put it in the repo under this branch.
[C] NEO Config Wiring Reference.md saved to 02 Projects/NEO Trading Engine/. Rationale:
- This is operational reference material for the team, not a code-reader artifact. It lives where the team reads, not where the compiler reads.
- A
docs/config_wiring.mdchecked into the repo becomes a maintenance liability: it will drift from the code on every config change and there is no automated check to catch the drift. A workspace artifact can be updated on demand without a commit. - A module docstring in
config.pywould be ~25 rows of table inside a Python file — wrong register for that much reference prose. - If a future audit cycle determines repo-pinned docs are worth the maintenance cost, it is a one-commit move. The workspace artifact does not block that.
Commit 3 becomes: produce [C] NEO Config Wiring Reference.md as a workspace artifact with the 25-row wiring table and note its location in a one-line comment at the top of neo_engine/config.py (e.g., # Config wiring reference: see [C] NEO Config Wiring Reference.md in workspace). No other repo files changed in Commit 3.
Green light¶
Rulings are complete. Q1–Q3 resolved. You may cut code.
Commit sequence confirmed:
1. feat(strategy): promote clob_switch_threshold_bps to config (Phase 7.3 tuning)
2. feat(startup): config invariant check emits config_mismatch on failure — four invariants (see Q1)
3. docs(config): add config wiring reference table — workspace artifact + one-line pointer comment in config.py
Deliver patches + workspace artifact [C] NEO Config Wiring Reference.md together. I will review both before Katja applies.
— Vesper