Make the Session node reachable from blueprints #261

Closed
opened 2026-07-13 18:06:14 +02:00 by claude · 1 comment
Collaborator

crates/aura-std/src/session.rs implements the session node (Frankfurt session bar index, tz-aware/DST-correct, bars_since_open: i64) and it is exported from the crate, but it is not in the closed vocabulary: its construction config (open time, timezone, period) is structural, not scalar, so the zero-arg roster macro cannot build it — crates/aura-std/src/vocabulary.rs names it in the roster-exclusion comment alongside LinComb(arity) / CostSum(n_costs) / SimBroker(pip_size).

Consequence: no session/time-of-day stream is reachable from a data-only project, so time-of-day conditioners — one of the orthogonal conditioner families for the confirm/refute research model — are not constructible as blueprints at all.

Possible shapes: preset rostered variants (e.g. a Frankfurt-baked Session with period_minutes as its one scalar param), or extending the param vocabulary to cover baked construction config. Claim (unverified): the node logic itself is complete and only the reachability question is open.

`crates/aura-std/src/session.rs` implements the session node (Frankfurt session bar index, tz-aware/DST-correct, `bars_since_open: i64`) and it is exported from the crate, but it is not in the closed vocabulary: its construction config (open time, timezone, period) is structural, not scalar, so the zero-arg roster macro cannot build it — `crates/aura-std/src/vocabulary.rs` names it in the roster-exclusion comment alongside `LinComb(arity)` / `CostSum(n_costs)` / `SimBroker(pip_size)`. Consequence: no session/time-of-day stream is reachable from a data-only project, so time-of-day conditioners — one of the orthogonal conditioner families for the confirm/refute research model — are not constructible as blueprints at all. Possible shapes: preset rostered variants (e.g. a Frankfurt-baked `Session` with `period_minutes` as its one scalar param), or extending the param vocabulary to cover baked construction config. Claim (unverified): the node logic itself is complete and only the reachability question is open.
claude added the feature label 2026-07-13 18:06:14 +02:00
Author
Collaborator

Design reconciliation (autonomous run, 2026-07-13)

The issue's open shape question — preset rostered variants vs. extending the param vocabulary to cover baked construction config — resolves as a derived decision: the preset variant. A Frankfurt-baked zero-arg builder (open 09:00, Europe/Berlin baked as literals) enters the closed roster with period_minutes as the node's one scalar ParamSpec, bound post-construction exactly like the rostered cost nodes' single knobs (carry_per_cycle/cost_per_trade/slip_vol_mult — the proven pattern in crates/aura-std/src/{carry_cost,constant_cost,vol_slippage_cost}.rs).

Basis: derived — the alternative requires non-scalar params (a timezone is a string), breaching the four-scalar param discipline outright, while the preset keeps the vocabulary closed and is precisely the "later, additive extension" the roster-exclusion comment in crates/aura-std/src/vocabulary.rs anticipates (#156/C20). Recon verified nothing structural blocks it: the node's trigger input wires through the ordinary graph-edge convention, and the clock comes from Ctx::now(), which every node receives.

Scope note: the issue's unverified claim ("the node logic itself is complete, only reachability is open") verified TRUE — Session ships tz-aware/DST-correct with bars_since_open: i64; the deferred in_session/session_open_ts outputs stay deferred (#154, untouched by this decision). With the fork decided, the remaining work is test-specifiable (a blueprint over the rostered preset builds and evals); no further design residue.

## Design reconciliation (autonomous run, 2026-07-13) The issue's open shape question — preset rostered variants vs. extending the param vocabulary to cover baked construction config — resolves as a **derived decision: the preset variant**. A Frankfurt-baked zero-arg builder (open 09:00, Europe/Berlin baked as literals) enters the closed roster with `period_minutes` as the node's one scalar `ParamSpec`, bound post-construction exactly like the rostered cost nodes' single knobs (`carry_per_cycle`/`cost_per_trade`/`slip_vol_mult` — the proven pattern in `crates/aura-std/src/{carry_cost,constant_cost,vol_slippage_cost}.rs`). Basis: derived — the alternative requires non-scalar params (a timezone is a string), breaching the four-scalar param discipline outright, while the preset keeps the vocabulary closed and is precisely the "later, additive extension" the roster-exclusion comment in `crates/aura-std/src/vocabulary.rs` anticipates (#156/C20). Recon verified nothing structural blocks it: the node's `trigger` input wires through the ordinary graph-edge convention, and the clock comes from `Ctx::now()`, which every node receives. Scope note: the issue's unverified claim ("the node logic itself is complete, only reachability is open") verified TRUE — `Session` ships tz-aware/DST-correct with `bars_since_open: i64`; the deferred `in_session`/`session_open_ts` outputs stay deferred (#154, untouched by this decision). With the fork decided, the remaining work is test-specifiable (a blueprint over the rostered preset builds and evals); no further design residue.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/Aura#261