Skip to content

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:

  1. risk.max_xrp_exposure > 0
  2. risk.max_rlusd_exposure > 0
  3. strategy.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_mode is validated implicitly — any invalid string would produce a strategy failure at first tick, not silently produce wrong behavior. A config_mismatch halt is appropriate for values that silently corrupt behavior; anchor_mode would fail loudly. Widen in a future branch only if an audit surfaces a silent-failure case.
  • bid_ladder_size_weights sum 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 in test_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.md checked 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.py would 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 failurefour 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