Scaffold a parameterized starter node — a bound-param build closure is not learnable from public docs #183
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?
A new project's only node-authoring template is the scaffolded
Identitynode, which is param-less: its build closure never reads a bound param. There is no public example anywhere (README, project-layout, scaffold output) of a build closure consuming a bound param, so a downstream author cannot write their first tunable node — the core authoring act — from the public interface alone. The milestone fieldtest rated this its highest-value gap (finding F2,fieldtests/milestone-project-environment/FINDINGS.md, 2026-07-02): the fieldtester could author a param-lessNegatenode from the template, but a parameterized node would have required reading engine source, which the consumer contract forbids.Likely shape: extend the scaffold's starter
lib.rswith (or swap the template to) one small parameterized node — e.g. aScalenode with a boundfactor: f64— showing the param declaration, thebind-able schema, and the build closure reading the bound value; the starter blueprint can bind it soaura runexercises it out of the box. Per the #181 canon (templates are the canonical authoring shape and evolve freely; the 0102 fixture stays frozen), this is a template-side edit with no fixture churn.Triage 2026-07-09 (tree at
68317ec) — unchanged gap, and the model to copy now ships in-repo:params: vec![], build closure|_| Box::new(Identity::new())at crates/aura-cli/src/scaffold.rs:143, template :111-187).|p| Box::new(Scale::new(p[0].f64())), landed with257ab0b). aura-std is engine source, which the downstream-consumer contract excludes from the public surface, so the public-docs gap stands.aura runexercises the path.Design decision: swap the starter node, don't add a second one (/boss)
Fork: teach the bound-param build closure by (a) adding a
Scalenodealongside the existing param-less
Identityin the scaffold'ssrc/lib.rs, or(b) swapping
Identityout for one param-bearing node.Decision: (b) swap. The scaffold's
src/lib.rsships exactly one node, andit becomes param-bearing — a
Scalenode with a boundfactor: f64(namespaced<ns>::Scale, modeled on the stdScale), declaring thefactorParamSpecand reading it in the build closure (
|p| Box::new(Scale::new(p[0].f64()))). Thestarter blueprint's terminal passthrough node is retargeted from
<ns>::Identityto
<ns>::Scalewithfactorbound, soaura runexercises the bound-parampath out of the box. Basis: the single copyable node a newcomer learns from
should itself demonstrate the param-reading closure with no param-less decoy
beside it — the F2 gap is precisely "no public example of a build closure
consuming a bound param," and one tunable node teaches it with zero redundancy.
Per #181 this is template-side only; the frozen 0102 fixture is untouched.