Stamp untouched bound defaults into the run manifest #249

Closed
opened 2026-07-13 10:09:18 +02:00 by Brummel · 0 comments
Owner

Problem

A run manifest records in params only the values that flowed through the (re-opened) param space: open knobs bound per cell, plus the deliberate stop/cost stamps (crates/aura-cli/src/main.rs:1760, zip_params over the space). A bound param never named by an axis is merged back inside PrimitiveBuilder::build (crates/aura-core/src/node.rs:198), below every layer that writes a record, so it appears in NO outcome artifact: a plain aura run on a fully bound blueprint stamps "params": [] (evidence: fieldtests/cycle-246-bound-override/bo_transcript.txt, example 1). The effective values are recoverable only by dereferencing manifest.topology_hash into the content-addressed store (runs/blueprints/<hash>.json) and reading the doc's bound entries.

Why this is a format defect, not an inconvenience

The data layer is a public interface, not a CLI-internal store: C14 commits records to canonical JSON whose stdout and on-disk shapes coincide; manifests carry self-describing Scalars precisely so raw readers keep kind information; research/campaign artifacts are read directly as data (C25); the web face reads recorded traces from disk. A raw reader (human or LLM) of "params": [] draws the surface conclusion "no params" — the record misleads by omission, and correct interpretation requires duplicating aura's merge semantics with no in-record signal that anything is missing.

Design decision (2026-07-13)

Two artifact classes carry opposite redundancy budgets:

  • Generated outcome records (manifests, metrics, family reports) have a single writer at run time — redundancy there cannot drift and is deliberately spent on direct readability.
  • Authored intent artifacts (blueprints, op-scripts, campaign documents) are author-maintained — every redundancy is a drift site and stays out.

Consequence: the fix lands in the manifest, never in the blueprint.

Proposed shape

A new one-directionally widened field beside params on RunManifest (crates/aura-engine/src/report.rs:29), e.g. defaults: Vec<(String, Scalar)>, carrying the signal's untouched bound values (enumerable since #246 via bound_param_space(); wrap-prefixed like axis names). params keeps its "what varied" semantics and remains the reproduce input (reproduce_family_in reads it back); old records read with an absent defaults — the selection/instrument/topology_hash widening idiom. The artifact-class principle above belongs in the design ledger alongside the change.

## Problem A run manifest records in `params` only the values that flowed through the (re-opened) param space: open knobs bound per cell, plus the deliberate stop/cost stamps (`crates/aura-cli/src/main.rs:1760`, `zip_params` over the space). A bound param never named by an axis is merged back inside `PrimitiveBuilder::build` (`crates/aura-core/src/node.rs:198`), below every layer that writes a record, so it appears in NO outcome artifact: a plain `aura run` on a fully bound blueprint stamps `"params": []` (evidence: `fieldtests/cycle-246-bound-override/bo_transcript.txt`, example 1). The effective values are recoverable only by dereferencing `manifest.topology_hash` into the content-addressed store (`runs/blueprints/<hash>.json`) and reading the doc's `bound` entries. ## Why this is a format defect, not an inconvenience The data layer is a public interface, not a CLI-internal store: C14 commits records to canonical JSON whose stdout and on-disk shapes coincide; manifests carry self-describing Scalars precisely so raw readers keep kind information; research/campaign artifacts are read directly as data (C25); the web face reads recorded traces from disk. A raw reader (human or LLM) of `"params": []` draws the surface conclusion "no params" — the record misleads by omission, and correct interpretation requires duplicating aura's merge semantics with no in-record signal that anything is missing. ## Design decision (2026-07-13) Two artifact classes carry opposite redundancy budgets: - **Generated outcome records** (manifests, metrics, family reports) have a single writer at run time — redundancy there cannot drift and is deliberately spent on direct readability. - **Authored intent artifacts** (blueprints, op-scripts, campaign documents) are author-maintained — every redundancy is a drift site and stays out. Consequence: the fix lands in the manifest, never in the blueprint. ## Proposed shape A new one-directionally widened field beside `params` on `RunManifest` (`crates/aura-engine/src/report.rs:29`), e.g. `defaults: Vec<(String, Scalar)>`, carrying the signal's untouched bound values (enumerable since #246 via `bound_param_space()`; wrap-prefixed like axis names). `params` keeps its "what varied" semantics and remains the reproduce input (`reproduce_family_in` reads it back); old records read with an absent `defaults` — the `selection`/`instrument`/`topology_hash` widening idiom. The artifact-class principle above belongs in the design ledger alongside the change.
Brummel added the feature label 2026-07-13 10:09:18 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/Aura#249