Realize C24 — "the blueprint is a serializable, World-owned data value" (the topology data format), settled in docs/design/INDEX.md (commit f80571a). The blueprint becomes a value the World owns: serialized, loaded, generated, structurally searched, and reproduced — closing the graph-as-data loop (today only the blueprint -> data half exists, via model_to_json in crates/aura-engine/src/graph_model.rs). This milestone resolves the format half of #109.
Scope: the on-disk format + the data -> blueprint loader (bit-identical round-trip, C1), additive forward-compatibility, the introspectable fail-fast construction service that emits blueprints, and content-addressed run identity. Node logic stays Rust (C17); only topology becomes data.
Out of scope (separate milestones): the project-as-crate authoring layer (aura new / Aura.toml / cdylib — the #109 authoring thread) and the composable-orchestration half. The hard-wired aura-cli harnesses (HarnessKind / *_sweep_family) are scaffolding retired once those land.
Container for the ripe subset of the full open-backlog triage of 2026-07-09: all 25 open issues (body + comment thread) were re-verified against the tree at 68317ec — code, design ledger, and commit history. The members below are the items that are ready now: the design is settled or the defect is confirmed, and each carries a dated assessment comment with file:line evidence.
Members, ripeness in one line each:
- #218 — the dissolved verbs (sweep/mc/walkforward/generalize) bypass the "needs a project" gate the explicit campaign-run path enforces, so a run outside any project writes a relative
runs/store into cwd; confirmed defect, small fix (gate the four sugar entry points). - #168 —
--traceon a blueprint sweep/walkforward silently does nothing while the help text promises tap persistence; run/mc already refuse the flag, so an honest fix is small and precedented. - #215 — plateau selection in the campaign walk_forward stage is an already-decided relaxation (decision 4 of the verb-dissolution design, #210); the sweep stage already dispatches plateau, so the walk_forward branch is a bounded extension.
- #28 —
aura graphis the last verb still bound to the built-in sample; both blockers named in its 2026-06-18 deferral (blueprint deserialization, project load boundary) have shipped, so rendering a consumer's own blueprint file follows the pattern of every sibling verb. - #183 — the
aura newscaffold teaches only a param-less node; a parameterized starter (model: the std Scale node) closes the highest-value fieldtest gap in the authoring loop. - #61 — an explicit param-ganging construct (one knob fanning out into several child slots under one injective address); since the blueprint-generic verbs (#220), an un-ganged pair forces unintended asymmetric axis grids, so the gap now costs sweep quality.
- #190 — the declared-metric vocabulary is hand-copied in three rosters plus one map with no test against the shipped metric types; the minimum fix is a cross-crate serde-enumeration pin in aura-campaign.
Deliberately outside this container:
- #216 (risk-regime discoverability) is under active work independently.
- #211 (cdylib wall on std-only validate) resolves inside the pending role-homes / load-boundary design pass tracked in #188, not as a per-verb patch.
- #213 (generalize no-window semantics) is an open design fork without urgency.
- #159 and #60 are assessed done/superseded — evidence in dated comments on those issues; closing them is hygiene, not work.
- The chart cluster #110/#112/#150 bundles with the next cycle that touches the chart surface.
- Parked design records stay parked (#147, #124, #149, #152, #154); #72 (stale body, see its reconciliation comment), #77, #125, #172 and #191 are valid but not near-term.
The milestone closes when the seven members are closed.
Dissolve the four standalone orchestration verbs (sweep, mc, walkforward, generalize) into the campaign path per the #188 fork-A user decision: each verb is re-cut as thin sugar over a generated campaign document once the campaign substrate reproduces its behaviour. Anchor issue carries the coverage map and decision log.
Walking skeleton
The first milestone from the design ledger (docs/design/INDEX.md): the walking
skeleton — ingest -> one signal -> exposure/intent -> sim-optimal broker ->
synthetic pip-equity signal-quality metric.
The streaming substrate (node contract, deterministic loop, firing policies +
k-way merge, record output, sink recording) shipped under the closed
"Producer/consumer/sink substrate" milestone (cycles 0001-0006). This milestone
closes the skeleton: it turns the substrate into a runnable backtest that
measures SIGNAL QUALITY. A strategy DAG emits an intent/exposure stream (one
bounded signed value per cycle, C10); a sim-optimal broker node integrates
exposure*return into a synthetic pip-equity stream (C10); that reduces to summary
metrics + a run manifest (C18); a real data-server source is wired at the
ingestion boundary (C3); and an aura run CLI bootstraps and runs a sample harness
end-to-end (C14/C17/C22).
C10 was reframed in cycle 0007: the strategy's primary, backtestable output is
the exposure stream (the DAG expresses one state per cycle, C8), and the
broker-independent position-event table is a decoupled, derived position-
management layer for realistic brokers / deploy — not the DAG output and not the
signal-quality measure.
Each item is one brainstorm -> planner -> implement cycle; the spec is written
per cycle by brainstorm. Ordering is judgement per session, not fixed by the
queue.
The World constructs and RUNS harnesses from serialized topology-data (C24 blueprints) and orchestrates FAMILIES of them reproducibly — the C21 differentiator (the meta-level is the product), not the single backtest. This turns C24's topology-as-data into actual runs.
Scope (three cycles, dependency-ordered)
- Run-from-data (keystone):
aura run <blueprint.json> [--params]— load → compile (injected resolver) → bootstrap → run → manifest, bit-identical to the Rust-builder path; manifest carriestopology_hash(Tier-1 optional, #156). Ships demo blueprints in-repo as runnable examples. - Families-from-data: sweep / MC / walk-forward accept a loaded blueprint + axes, orchestrate parallel members, aggregate to the same FamilyRunRecord shape.
- Reproduce (#158): content-addressed
topology_hash(SHA256 of the canonical #164 form) as the reproducibility anchor; a stored manifest re-derives the FlatGraph bit-identically.
Deferred (NOT in this milestone), with homes
- Retiring the hard-wired aura-cli harnesses (#159) + the project-as-crate authoring layer (
aura new/Aura.toml/ cdylib / experiment-builder API) → a FOLLOW-ON milestone. Retiring the harnesses before a local authoring path exists would leave no way to author strategies (invariant 12); in-repo demo blueprints cover examples meanwhile. - RunReport genericity (#147) — one-implementor speculation; deferred until a second cross-domain consumer exists.
- #124 (instrument/cost resolution), the visual/web face, parameter/structural search → separate threads.
Charter point — the resolver-injection boundary (invariant 9 on the data plane)
#160's closed-set guard is mandatory at the engine's data-plane face (fails safe, UnknownNodeType); the project/ecosystem marketplace boundary (what an injected project resolver may resolve) is a charter point for the project-as-crate follow-on — the engine stays domain-free. Recorded in the C24 ledger "Enforcement shift" note.
Invariant watch
C1 determinism (pure blueprint→FlatGraph), inv. 8 frozen reframed (research-plane generation + deploy-plane freeze), inv. 9 (#160 guard), inv. 5 (construction gates before instantiation), C18 (topology_hash anchor), #156 Tier-1 for the new manifest field.
Settled in a cycle-0091 design analysis (adversarially verified) and ratified by the user ("macht alles sinn, leg los" — 2026-06-30).