Files
Aura/docs/design/contracts/c15-resampling-sessions.history.md
T
claude 8688a60ded docs(ledger): split the design ledger into an INDEX map, per-contract live files, and history sidecars
The single-file ledger had grown to 2968 lines / ~42k tokens, mixing
current design law with accreted history: 59 cycle-stamped realization
blocks, 18 [HISTORY] passages, 22 supersession markers, and the C10 /
C22 / C24 reframe sagas layered several supersessions deep. A
code-grounding audit (31 agents, adversarially verified) confirmed 11
defects stated as current truth: stale crate homes from the C28 #288
roster split (cost nodes, PositionManagement, PositionEvent, Session),
the renamed InputSpec->PortSpec, the pre-#241 project model in C16 and
the open-threads section, a stale HarnessKind retirement deferral in
C24, and three C28-internal inconsistencies.

New shape, per the ailang precedent:

- INDEX.md stays the sole addressable entry point: foundation, external
  components, a C-id-keyed contract map (one line per contract), and
  only the genuinely open architectural threads.
- contracts/cNN-<slug>.md carries each contract's current truth only:
  Guarantee / Forbids / Why with ratified refinements integrated, plus
  a code-anchored Current state. All confirmed defects are fixed here;
  crate anchors were re-verified against the tree.
- contracts/cNN-<slug>.history.md (18 sidecars) and INDEX.history.md
  preserve every superseded block verbatim, stamps and issue refs
  intact, under a frozen-record banner. Nothing was deleted: superseded
  design intent remains an addressable working-tree artifact, off the
  per-cycle audit walk.
- Ledger discipline is now stated in INDEX.md: live files are edited in
  place at cycle close, superseded text moves verbatim to the sidecar,
  and a supersession marker in a live file is itself an audit finding.

Every contract file was verified against its old text by an independent
zero-loss pass (statement-by-statement) plus a code-accuracy spot check;
C-ids and contract titles are unchanged, so existing C-id citations in
code, tests, and issues resolve as before.
2026-07-21 16:40:36 +02:00

2.7 KiB

C15 — Resampling-as-node; sessions/calendars: history

FROZEN HISTORICAL RECORD. Each block below was true as of its cycle/date stamp and may be superseded; this file is NOT current truth and NOT a grounding surface. Current contract: c15-resampling-sessions.md.

Realization (instrument specs, 2026-06, #22 → #124). The "instrument specs are metadata" half of this contract is realized by the recorded geometry sidecar: instrument_geometry(server, symbol), over data-server's symbol_meta, returns neutral broker-agnostic InstrumentGeometry (the raw provider JSON never enters this repo) — non-scalar reference data held beside the hot path, keyed by symbol, feeding the sim-optimal broker's pip divisor (C10). The real-path pip is sourced from InstrumentGeometry.pip_size; refuse-don't-guess on absent geometry. History: cycles 0022/0063 first carried a Rust-authored vetted floor (InstrumentSpec — a single pip_size, later a six-field deploy-grade row instrument_id, contract_size, pip_value_per_lot, min_lot, lot_step, quote_currency, plus tick_size/digits), cross-checked against the sidecar geometry. Cycle 0074 removed that floor: with the sidecar geometry supplying the real-path pip, the authored table was redundant, so InstrumentSpec / instrument_spec / the vetted list were deleted. The speculative deploy-grade fields and the override/floor tiers of the #124 hierarchy (tier 1 authored override, tier 3 authored floor) are deferred until a consumer — the cost model's currency→R normalization (C10), or the live deploy edge (real broker) — needs them, read from the sidecar geometry then. The quote_currency runtime-type transition is likewise deferred to that consumer; #124 collapses to recorded sidecar geometry → refuse in the meantime.

Realization (SessionNode — bars_since_open only, by design; #154). The session-context half of this contract ships one scalar stream, not the three the Guarantee lists: Session (crates/aura-std/src/session.rs) emits only bars_since_open: i64 (tz-aware, DST-correct, baked Frankfurt open). This is a deliberate narrowing pinned in the node's own contract — "there is no separate in-session bool gate, bars_since_open alone is the contract": a downstream EqConst(== N) gate subsumes the in_session: bool stream (pre-open instants give <= 0, which never match), and session_open_ts: timestamp has no consumer. The two streams the Guarantee names remain the original design intent, deferred until a consumer needs them (default-simple; forward-queued as #154). The stream model is untouched — session context is still exposed as scalar streams fed from beside the hot path.