SMA-cross by-name binding: promised fast/slow names + minimal bootstrap both need hand-added ParamAlias #56

Closed
opened 2026-06-11 09:12:26 +02:00 by Brummel · 0 comments
Owner

Surfaced by the milestone fieldtest "The World — parameter-space & sweep"
(docs/specs/fieldtest-milestone-the-world-param-sweep.md, scenario mw_1/mw_3).

Friction

A native-Rust author who follows the milestone's headline by-name example
verbatim — .with("sma_cross.fast", 2).with("sma_cross.slow", 4) — hits two
consecutive errors on a freshly-authored 2-SMA cross:

  1. The plain composite's param_space() emits sma_cross.length twice (the
    raw Sma factory param name, path-qualified only by the composite name), so
    .with("sma_cross.fast", 2) -> UnknownKnob("sma_cross.fast") and binding
    the real name -> AmbiguousKnob("sma_cross.length").
  2. The canonical 2-SMA cross does not even bootstrap in its minimal form:
    Sub fanning in two Smas with equal recursive signatures is rejected with
    IndistinguishableFanIn (the C9 fan-in-distinguishability guarantee).

Both are dissolved only by hand-adding two ParamAlias { name: "fast"/"slow" }
overlays — which the shipped CLI sample already carries (crates/aura-cli/src/main.rs).
So sma_cross.fast is not a free name; it is authored. The binding layer is
correct (it faithfully matches the exact param_space() name; aliasing is the
documented C23 authoring choice) — this is friction, not a bug. But the project's
running example cannot be run in its minimal form, and the acceptance evidence
(the code a by-name author actually writes) is longer than advertised.

Two directions (no decision made here)

  • (i) cheap / docs: make the worked example in the ledger + spec 0030 show the
    ParamAlias step explicitly, so sma_cross.fast is visibly earned.
  • (ii) substantive / design: give a primitive a per-instance recipe label
    (e.g. an Sma::builder() name argument). One label would satisfy fan-in
    distinguishability AND yield distinct param_space() names in a single step —
    no separate alias overlay. This is a design question (how sibling primitives
    acquire distinct identity) and would route through brainstorm if pursued.

Strikeable; no commitment. Cheapest mitigation is (i).

Surfaced by the milestone fieldtest "The World — parameter-space & sweep" (docs/specs/fieldtest-milestone-the-world-param-sweep.md, scenario mw_1/mw_3). ## Friction A native-Rust author who follows the milestone's headline by-name example verbatim — `.with("sma_cross.fast", 2).with("sma_cross.slow", 4)` — hits two consecutive errors on a freshly-authored 2-SMA cross: 1. The plain composite's `param_space()` emits `sma_cross.length` **twice** (the raw `Sma` factory param name, path-qualified only by the composite name), so `.with("sma_cross.fast", 2)` -> `UnknownKnob("sma_cross.fast")` and binding the real name -> `AmbiguousKnob("sma_cross.length")`. 2. The canonical 2-SMA cross does not even **bootstrap** in its minimal form: `Sub` fanning in two `Sma`s with equal recursive signatures is rejected with `IndistinguishableFanIn` (the C9 fan-in-distinguishability guarantee). Both are dissolved only by hand-adding two `ParamAlias { name: "fast"/"slow" }` overlays — which the shipped CLI sample already carries (crates/aura-cli/src/main.rs). So `sma_cross.fast` is not a free name; it is authored. The binding layer is **correct** (it faithfully matches the exact `param_space()` name; aliasing is the documented C23 authoring choice) — this is friction, not a bug. But the project's running example cannot be run in its minimal form, and the acceptance evidence (the code a by-name author actually writes) is longer than advertised. ## Two directions (no decision made here) - **(i) cheap / docs:** make the worked example in the ledger + spec 0030 show the `ParamAlias` step explicitly, so `sma_cross.fast` is visibly *earned*. - **(ii) substantive / design:** give a primitive a per-instance recipe label (e.g. an `Sma::builder()` name argument). One label would satisfy fan-in distinguishability AND yield distinct `param_space()` names in a single step — no separate alias overlay. This is a design question (how sibling primitives acquire distinct identity) and would route through brainstorm if pursued. Strikeable; no commitment. Cheapest mitigation is (i).
Brummel added the idea label 2026-06-11 09:12:26 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/Aura#56