By-name bootstrap surfaces AmbiguousKnob, not the IndistinguishableFanIn 'name your nodes' cure, for un-named same-type siblings #59
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?
Surfaced + verified by the cycle 0031 per-cycle fieldtest
(docs/specs/fieldtest-0031-node-naming.md, fixture c0031_2_forcing_function).
The gap
Cycle 0031 made
IndistinguishableFanInthe forcing function: an un-named2-SMA cross should reject and tell the author to name the colliding legs. That
holds on the
compile()/ positionalcompile_with_paramspath. But on thecanonical authoring flow —
bp.with(name, v).bootstrap()— the author neversees it. Verified fixture output for an un-named cross:
The binder resolves names against
param_space()beforebootstrapruns thecompile fan-in check, so it short-circuits on the duplicate-name condition. The
author hits
UnknownKnob/AmbiguousKnob— both point at the knob name, notat the cure ("name your nodes with
.named(...)"). The diagnostic the cycledesigned to guide them is on a path they do not take.
Two coupled symptoms:
error for the un-named-sibling case.
param_space()(friction). Two un-named same-typesiblings produce a literal duplicate name (
sma_cross.sma.lengthx2). It isharmless to correctness (such a blueprint cannot bootstrap — the fan-in check
rejects it either way), but
param_space()advertising a duplicate is a smell.Direction (not prescriptive)
Surface the node-naming cure on the path the author takes — e.g. have the binder
(or
bootstrap) detect the duplicate-name / fan-in-indistinguishable conditionand raise (or chain) the
IndistinguishableFanIn/ "name your nodes" guidanceinstead of a bare
AmbiguousKnob, or haveparam_space()refuse to emit aduplicate name and carry the cure in the error. Relates to #58 (node identity
not surfaced to the consumer). Not a correctness bug — no invalid blueprint runs.
Minor, separable:
FlatGraph/Harnesslack aDebugimpl, so acompile/bootstrapResultcan't be{:?}-printed by a consumer (low friction).