Reconcile the sweep-axis namespace: sugar graph.<node>.<param> vs document <node>.<param> (open-only)
#328
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?
Observed (binary-only M1 milestone fieldtest, 2026-07-24, binary
d26f0c8)The two layers disagree about what a sweep axis is called — and about which params are sweepable at all:
aura sweep <bp> --list-axespresentsgraph.fast.length:I64 default=5(bound params are overridable axes per #246;graphis the blueprint's default name) and--axis graph.fast.length=…is accepted.campaign validaterejects that exact name — "axis "graph.fast.length" is not in the param space". A campaign axis must be an OPEN param named WITHOUT the prefix (fast.length), as reported bygraph introspect --params— which prints nothing at all for a fully-bound blueprint.So a consumer who learns an axis name from the sugar cannot author the canonical document form without discovering, by trial, (a) a different namespace and (b) that bound params are not campaign axes. No surface reconciles the two.
Why this is load-bearing now
#319 (ratified 2026-07-24) retires the sugar in favour of document-first authoring: the document form becomes the only form, so its axis vocabulary must absorb what the sugar expresses today (bound-override, #246) or the retirement loses capability. Reconciling the namespace — one axis name valid in both layers, or an explicit surface stating the mapping — is a prerequisite for (or the first slice of) the retirement.
Repro corpus:
fieldtests/m1-self-description/s4_document_ramp/(fieldtest finding class: spec_gap).Triage (2026-07-24)
Sorted into the new Sugar retirement milestone as its first item: the ratified #319 retirement makes the document form the only sweep-axis surface, so this reconciliation must land before the sugar goes. Queued after the Data-authorability boundary milestone per the ratified backlog plan.
Design reconciliation (specify)
Spec: axis-namespace. The forks below are listed open on this issue; this records their resolution. All are derived orchestrator decisions (rationale given), open to owner veto.
<node>.<param>, splice paths included:anchor.sess.period_minutes); the wrapped/prefixed form is retired from the user surface. Basis: derived — C23 makes the blueprint name a non-load-bearing debug symbol, and a debug symbol must not be the canonical address inside a committed intent document; the document layer (the #319 survivor) already speaks raw, and the sugar's own auto-generated campaign documents are already written raw (validate_and_register_axesstrips the prefix today) — the wrapped form exists only on two sugar surfaces (--list-axesprint,--axisparse). Consequence for #331: the blueprint name does NOT belong in axis paths; #331 narrows to registry/trace-dir naming.--list-axesprints raw (open bare, bound withdefault=as today);--axisaccepts raw as the only form; a wrapped input gets a targeted translation refusal (naming the raw candidate) rather than a silent alias. Basis: derived — accepted form IS canonical form (the #271 strict-form precedent); a silent strip would keep two syntaxes for one vocabulary alive, which is #319's harm 2.campaign validate's "axis X is not in the param space" refusal gains a did-you-mean when stripping one leading segment yields a param-space hit. Basis: derived — the issue names "an explicit surface stating the mapping" as an acceptable resolution half; old transcripts quoting wrapped names remain in circulation and the refusal is where their authors land.graph introspect --paramsadditionally lists bound params with thedefault=suffix, making it line-identical to the reconciled--list-axes. Basis: derived — the m1 fieldtest showed a fully-bound blueprint prints nothing, so a document-first author cannot discover overridable bound params without the sugar; the information (bound_param_space()) and thedefault=lexicon both already exist.param_space()ORbound_param_space()); no schema flag is added; the contract gets documented in C18/glossary. Basis: derived — the behaviour exists and is pinned green (referential_tier_accepts_a_kind_correct_axis_over_a_bound_param), so absorption is ratification-plus-documentation, not construction; #319's "not a second home for intent" clause reads on the surviving executor-verb flag residue, not on document axes — the document IS the intent home ("while the document stays the base").bind_axessuffix matching); no blueprint-name op (that is #331); fieldtests/ archival transcripts keep their historicalgraph.prose (frozen corpus convention). Basis: derived — the disagreement is a surface/prosa/pin problem; touching the coordinate internals would widen blast radius with no capability gain.Skeptic correction to the reconciliation minute (2026-07-25)
An adversarial skeptic pass refuted the v1 spec's "surface-only, two sites" mechanics premise; the fork decisions stand, fork 6's scope statement is corrected:
validate_and_register_axesandbind_axesentirely (main.rs:2353-2367->run_blueprint_sweep) and resolves axes wrapped (override_paths, member.rs:743-758; SweepBinder verbatim-by-name, family.rs:450-473), leaking wrapped names into the user-visible run manifest (manifest.params, pinned main.rs:3583). The two sweep routes disagree internally today (real resolves raw viabind_axes; synthetic resolves wrapped) — the cycle now unifies them on the raw frame the real route already uses, and the manifest records raw.raw_matches_wrappedalso matches on equality, so it cannot be the acceptance gate (a wrapped name would pass silently — dead refusal ladder). The spec now defines an explicit raw-first predicate: accept iff the name is in the one-segment-stripped open set or the raw bound set; refuse-with-translation iff it is an exact wrapped hit.--axisliteral in the test corpus flips to raw (enumerated by grep as a batch discipline), plus the synthetic family units (main.rs:3541/3572) and the manifest pin (3583).Basis: derived — skeptic evidence at family.rs:420-473, member.rs:700-761, main.rs:1679-1717/2332-2367/3541-3589, axes.rs:34-46; the unification rationale is consistency (one resolution convention across both sweep routes) rather than convenience.