use-seam residues: instance-param ganging, gang-knob binding at splice, open-run rendering, --unwired on use-docs #339

Open
opened 2026-07-24 19:51:30 +02:00 by claude · 1 comment
Collaborator

Collective residue issue — #317 use-seam polish items

Four small, accepted residues from the #317 cycle (audit close 2026-07-24),
bundled per the fieldtest-routing consolidation practice. None is a bug;
each is a capability or rendering gap recorded in commit bodies and now
given its forward-queue home. Evidence anchors are the #317 cycle commits
(7392075..audit close).

  1. Instance params are not gangable. gang refuses a spliced instance's
    member path (OpError::BadParam/UnknownParam on the instance node —
    pinned by gang_of_a_spliced_instance_member_path_refuses,
    crates/aura-engine/src/construction.rs). Fusing params across/into used
    instances (e.g. two instances' lengths under one knob) would need
    path-qualified gang members; today the docs state the refusal honestly.

  2. A used subgraph's gang knob is unbindable at the use seam. use's
    bind reaches leaf params (and refuses ganged members via
    BindOpError::AlreadyGanged), but the gang's own public knob (e.g.
    channel_length) cannot be bound at splice time — it stays open/sweepable
    only. Binding it would be the natural pairing with residue 1.

  3. Run-boundary rendering of an open blueprint's refusal. aura run on
    an open pattern (bare-tap path) refuses at bootstrap with the raw Debug
    form UnboundRootRole { role: 0 } (index, not role name) — pinned as-is
    by running_an_open_blueprint_refuses_at_bootstrap. An index→name
    rendering at the run boundary would make the refusal by-identifier (C29
    posture). Related: on the bias arm, wrap_r re-roots the signal, so
    openness surfaces as a role-binding refusal instead — a different (also
    pre-existing) shape; worth one prose line where run errors are described
    if this confuses in the field.

  4. graph introspect --unwired refuses use-bearing documents. The
    build-free introspection paths pass &|_| None as the subgraph resolver,
    so a document containing use fails there, rendering the ref (possibly a
    label) as "content id". Either resolve refs in introspection too (store
    access from a build-free path — a small design call) or state the
    limitation in the surface's help/refusal.

context: #317 audit close — architect drift items given a tracker home;
depends on: nothing (each item is independently actionable).

## Collective residue issue — #317 use-seam polish items Four small, accepted residues from the #317 cycle (audit close 2026-07-24), bundled per the fieldtest-routing consolidation practice. None is a bug; each is a capability or rendering gap recorded in commit bodies and now given its forward-queue home. Evidence anchors are the #317 cycle commits (7392075..audit close). 1. **Instance params are not gangable.** `gang` refuses a spliced instance's member path (`OpError::BadParam`/`UnknownParam` on the instance node — pinned by `gang_of_a_spliced_instance_member_path_refuses`, crates/aura-engine/src/construction.rs). Fusing params across/into used instances (e.g. two instances' lengths under one knob) would need path-qualified gang members; today the docs state the refusal honestly. 2. **A used subgraph's gang knob is unbindable at the use seam.** `use`'s `bind` reaches leaf params (and refuses ganged members via `BindOpError::AlreadyGanged`), but the gang's own public knob (e.g. `channel_length`) cannot be bound at splice time — it stays open/sweepable only. Binding it would be the natural pairing with residue 1. 3. **Run-boundary rendering of an open blueprint's refusal.** `aura run` on an open pattern (bare-tap path) refuses at bootstrap with the raw Debug form `UnboundRootRole { role: 0 }` (index, not role name) — pinned as-is by `running_an_open_blueprint_refuses_at_bootstrap`. An index→name rendering at the run boundary would make the refusal by-identifier (C29 posture). Related: on the bias arm, `wrap_r` re-roots the signal, so openness surfaces as a role-binding refusal instead — a different (also pre-existing) shape; worth one prose line where run errors are described if this confuses in the field. 4. **`graph introspect --unwired` refuses use-bearing documents.** The build-free introspection paths pass `&|_| None` as the subgraph resolver, so a document containing `use` fails there, rendering the ref (possibly a label) as "content id". Either resolve refs in introspection too (store access from a build-free path — a small design call) or state the limitation in the surface's help/refusal. context: #317 audit close — architect drift items given a tracker home; depends on: nothing (each item is independently actionable).
Author
Collaborator

Fieldtest evidence (composites-use, 2026-07-24)

  • Item 1 (instance-param ganging): F1 — the refusal a consumer actually
    meets is node xover has no param "fast.length", which reads as a typo
    hint, not as "instance-member ganging is unsupported". When the target
    node IS a spliced instance, the refusal should name the rule (the
    no-such-open-param shape is technically true but misleading). Repro:
    fieldtests/composites-use/cu_4_gang_instance_member.ops.json.
  • Item 3 reframed (open-run rendering): S1 — on the real run path the
    bootstrap UnboundRootRole almost never surfaces: the harness binds
    roles by name first (an open pattern with matching role names simply
    runs — ratified, see #317), and what a consumer meets is the bias/tap
    gate, the free-knob refusal, or the role-column refusal. The index→name
    rendering is still worth having for the compile-level backstop, but it
    is lower-value than item 3 originally suggested.
## Fieldtest evidence (composites-use, 2026-07-24) - **Item 1 (instance-param ganging):** F1 — the refusal a consumer actually meets is `node xover has no param "fast.length"`, which reads as a typo hint, not as "instance-member ganging is unsupported". When the target node IS a spliced instance, the refusal should name the rule (the no-such-open-param shape is technically true but misleading). Repro: `fieldtests/composites-use/cu_4_gang_instance_member.ops.json`. - **Item 3 reframed (open-run rendering):** S1 — on the real run path the bootstrap `UnboundRootRole` almost never surfaces: the harness binds roles by name first (an open pattern with matching role names simply runs — ratified, see #317), and what a consumer meets is the bias/tap gate, the free-knob refusal, or the role-column refusal. The index→name rendering is still worth having for the compile-level backstop, but it is lower-value than item 3 originally suggested.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/Aura#339