Occams · adr
status: decided 2026-09-13 — adopted by the author the day it was drafted; the rule is in both engines (`limit_through_the_open`) with a test on a gapped bar in each, the vendored module untouched; `breakout_low` is measurable from the next grid (M12.9 closed)

A resting limit that the bar opens through fills at the open

The fill is derived, never declared (M3.7): an order is placed against the bars, and occams/core/execution.py says where it filled. That module is the donor's, vendored at a recorded commit (PROVENANCE.json, 2026-09-10) and never edited here. Its fill() has two rules for a resting order:

The second rule is right inside a session and wrong across one. A buy limit resting at 102.6 overnight, on a bar that opens at 102.4, is filled by the opening auction at 102.4: nothing printed at 102.6 that morning. The obtainability auditor (M5.5, overnight_gap) says exactly this — it refuses a fill booked at its level when the level lies strictly between the action-restated prior close and the open — and the engine's contract refuses the whole run on the first five such fills.

What the first survey showed. grid-001 runs breakout_low as a buy limit at the lookback low (price_template: OrderType.LIMIT for a breakout other than BREAKOUT_HIGH; signal() returns the minimum low of the lookback as the level). Every one of its 6,528 cells — 1,632 in each of four universes, four lookbacks, both horizons, every regime and geometry — was refused by the overnight-gap auditor, the first problem in the words "bar 424 DIA: fill booked at level 102.6 inside the overnight gap 102.7 → 102.4; nothing traded there — the obtainable fill is the open." The kind that ADR-0037 admitted to the enum is unmeasurable as the engine stands. The same auditor also refused 112 breakout_high cells on the Dow, every one on the same CVX bar: a stop fill booked at its level inside a gap measured from the prior close restated for an action, where the raw prior close was on the other side of it. The rule below is stated on the restated basis so that it covers this case too; the bar is to be looked at when the rule is implemented.

The direction of the correction. For a buy limit that the bar gaps down through, the open is below the level: the obtainable fill is a better entry than the booked one. This correction is not the worse-case rule; it is the obtainable-price rule. What it does to a cell's EV is the measurement's to say. What it does to the engine is make its fills the ones a venue with an opening auction would have given, which is the only standard the auditor holds (F4).

Decision (adopted 2026-09-13)

A resting limit order that the bar opens through fills at the open; otherwise at its level. On the fill bar i, a buy limit fills at min(opens[i], level) and a sell limit at max(opens[i], level) — the mirror of the stop rule the module already has — with the open taken on the same basis the level was stated on (the box's basis after actions, ADR-0021).

Where the rule lives: **in the engines, not in core.** occams/engine/day_boxed.py and occams/engine/position_boxed.py own the Fill signature (M5.6: prior close, open, high, low, volume, next open) and already restate the market for the placement check; they apply the rule to what ex.fill returns. The vendored module is untouched — a change to it is a re-vendor with a new PROVENANCE, and the donor is a read-only reference.

The auditor is unchanged. It remains the check that the rule is right: the corrected fill passes it, and the fixture that carries the old fill is refused by name.

Consequences

Considered options