Registry lineage for orchestration families: store walk-forward/MC runs as related records (C18) #70
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?
C18's lineage clause is currently design-only: aura-registry (lib.rs) stores flat RunReports with no links between them. A family (sweep / MC / walk-forward) is a set of runs with a common origin — they should be stored as related records (run←inputs lineage: which blueprint, which base point, which window/seed produced each), so a family can be re-listed, compared, and re-derived as a unit rather than as loose runs.
Build
aura mc,aura walkforward, and a family-awareaura runs).Depends on
Acceptance
A family run writes related records; the family can be listed and ranked as a unit; lineage round-trips (the stored links re-derive the family).
Contracts
C18 (run registry + lineage), C21.
Design constraint (World-II eager-agnostic firewall — refs #71)
Keep lineage producer-agnostic. Re-derivation of a family run must mean RE-RUNNING from (blueprint commit + base point + window + seed), never replaying a stored input artifact: do NOT add an input-stream field (recorded blob, file path, byte payload) to
RunManifestor the lineage record. Thewindow: (Timestamp, Timestamp)must be a producer-supplied INPUT, not derived by scanning a materialized Vec (today'sprices.first()/.last()at the run_one call-site). A lazy producer knows its bounds without materializing, so the stored lineage stays byte-identical whether the source is eager or streamed. (C18 + C6.)Design reconciliation (specify, in-context entry)
Spec: 0045-registry-lineage-families. The fork below is still listed open on this issue (the body says only "a family id / parent reference"); it was resolved in the in-context design discussion.
Fork: family_id form -> name + counter:
family_id = "{name}-{counter}", wherenameis author-supplied (a builder-function argument, surfaced on the CLI as--namewith a per-kind default such asmc/sweep/walkforward) andcounteris a per-name run-index assigned at persistence (the smallestkfor which"{name}-{k}"is not already in the family store). NOT a reproducible content-hash, NOT a UUID.Rationale (from the discussion): the id is used only as (1) the grouping key for the round-trip (
group_families) and (2) the user-facing CLI lookup handle (aura runs family <id>). Neither use needs reproducibility, so the content-hash's only extra property is unused this cycle (and, against an append-only store, would silently merge two identical-input runs). A counter avoids both a new dependency and nondeterministic entropy (which a UUID would introduce, against the engine's seeded-determinism discipline) while staying human-typable; a user-supplied name makes the registry human-navigable, matching the "World = named experiments" framing (C21).Provenance: user decision in-session 2026-06-15 — verbatim "ja, name + counter, stell die Spec um", following the user's own narrowing "reicht nicht ein einfacher Counter?" and "Koennte ein Praefix vom User kommen?".
Done — shipped in cycle 0045 and audited clean.
A sweep / Monte-Carlo / walk-forward run now persists as a family: related
FamilyRunRecords sharing afamily_id = "{name}-{counter}"in a siblingfamilies.jsonl, leaving the flatruns.jsonlAPI byte-for-byte unchanged.group_familiesre-derives a family from the stored links (the round-trip), so a family is re-listable and rankable as a unit (C18/C21).CLI:
aura mc(new),aura runs families,aura runs family <id> [rank <metric>];aura sweep/walkforward/mctake an optional--name.Producer-agnostic per the #71 firewall: a member's window is supplied by
Source::bounds()/window_of(eager or streamed → byte-identical lineage), never a materialized-Vecscan; no input-stream artifact enters a manifest or lineage record — the manifest is the sole re-derivation recipe.Commits:
1d9555c(engine + registry core),bcd1072(CLI surface),a168f07(audit). Ledger:docs/design/INDEX.mdC18 realization note (cycle 0045).Follow-up filed as #73 (the now-CLI-unwritten flat-store path: give
aura runa persisting path, or retireruns list/rank).