Stamp untouched bound defaults into the run manifest #249
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
A run manifest records in
paramsonly 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_paramsover the space). A bound param never named by an axis is merged back insidePrimitiveBuilder::build(crates/aura-core/src/node.rs:198), below every layer that writes a record, so it appears in NO outcome artifact: a plainaura runon a fully bound blueprint stamps"params": [](evidence:fieldtests/cycle-246-bound-override/bo_transcript.txt, example 1). The effective values are recoverable only by dereferencingmanifest.topology_hashinto the content-addressed store (runs/blueprints/<hash>.json) and reading the doc'sboundentries.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:
Consequence: the fix lands in the manifest, never in the blueprint.
Proposed shape
A new one-directionally widened field beside
paramsonRunManifest(crates/aura-engine/src/report.rs:29), e.g.defaults: Vec<(String, Scalar)>, carrying the signal's untouched bound values (enumerable since #246 viabound_param_space(); wrap-prefixed like axis names).paramskeeps its "what varied" semantics and remains the reproduce input (reproduce_family_inreads it back); old records read with an absentdefaults— theselection/instrument/topology_hashwidening idiom. The artifact-class principle above belongs in the design ledger alongside the change.