From a168f07cbb1418ec9240cd9b6e811dd4d97a4a52 Mon Sep 17 00:00:00 2001 From: Brummel Date: Mon, 15 Jun 2026 18:35:21 +0200 Subject: [PATCH] =?UTF-8?q?audit:=20cycle=200045=20=E2=80=94=20registry=20?= =?UTF-8?q?lineage=20(C18=20ledger=20note;=20flat-store=20follow-up=20#73)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Architect drift review (eeba218..HEAD) + regression gate (the project's cargo test --workspace is the gate; no separate regression script). What holds (architect): C9 layering intact — aura-engine gains no registry dependency, lineage lives entirely in aura-registry. #71 firewall held — RunManifest/aura-core byte-untouched, no blob/path/payload field on FamilyRunRecord, the member window is producer-supplied via Source::bounds()/window_of, never a Vec scan. C2 clean — bounds() is cursor-independent (no look-ahead). Family store is a disjoint sibling of the flat store (pinned by a disjointness test). Regression gate green: 228 tests, clippy --workspace --all-targets -D warnings clean. Drift resolved: - [fix, this commit] C18 ledger gap: docs/design/INDEX.md C18 carried no realization note for the run registry. Added the cycle-0029 (flat registry) and cycle-0045 (lineage as related records / family store) realization notes, in the ledger's established per-cycle style. - [forward-queue] Flat-store CLI dead-end: after this cycle no CLI command writes the flat runs.jsonl (sweep/walkforward moved to the family store, aura run never persisted), so aura runs list / rank read an unfed store. This is a spec-accepted state (0045 kept runs list "for standalone runs only") and a genuine design fork (give aura run a persisting path vs. retire the flat-store CLI surface) with no clear default — filed as #73 rather than decided here. Recorded as a deferred follow-up in the C18 ledger note. - [carry-on] Low/cosmetic: family-wrapped CLI stdout alphabetizes nested manifest keys (serde_json::json!) vs. declaration order (to_json()); both valid JSON, the stored families.jsonl uses declaration order, round-trip unaffected. Noted as a sub-item on #73. refs #70 --- docs/design/INDEX.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/design/INDEX.md b/docs/design/INDEX.md index 43dda53..8cb712f 100644 --- a/docs/design/INDEX.md +++ b/docs/design/INDEX.md @@ -654,6 +654,36 @@ has no home in git/Gitea; determinism makes a structured registry cheap. Sequencing: the walking skeleton emits a manifest + metrics per run from day one; the registry/index is a later milestone over manifests that already exist. +**Realization (cycle 0029 — the flat run registry).** The experiments-&-results +plane shipped as `aura-registry`: an append-only JSONL store (`runs/runs.jsonl`), +one serde_json `RunReport` (`RunManifest{commit, params, window, seed, broker}` + +`RunMetrics`) per line, with a typed read-path (`load`) and best-first ranking +(`rank_by`/`optimize`). C9 holds — the registry depends on `aura-engine`, never +the reverse. + +**Realization (cycle 0045 — lineage as related records, #70).** The *lineage* +depth is now realized as a **family store**: a sweep / Monte-Carlo / walk-forward +run (the C12 axes) is persisted as a *set of related records* — each a +`FamilyRunRecord` (a `RunReport` stamped with a shared `family_id` + `kind` + +`ordinal`) — in a sibling JSONL (`families.jsonl`), leaving the flat `runs.jsonl` +path and its `append`/`load`/`rank_by`/`optimize` API byte-for-byte unchanged. +`family_id = "{name}-{counter}"` (an author-supplied name plus a per-name +generate-and-check run index — not a content hash; re-running the same family +mints a fresh id). `group_families` is the round-trip that re-derives a family +from the stored links (re-listable / rankable as a unit — C21). The manifest *is* +the re-derivation recipe (#71): no input-stream blob / path / payload enters a +record, and a member's window is **producer-supplied** via +`Source::bounds()`/`window_of` (eager or streamed → byte-identical lineage), +never a materialized-`Vec` scan at the call site. CLI surface: `aura mc`, +`aura runs families`, `aura runs family [rank ]`; `aura sweep` / +`walkforward` / `mc` persist via `append_family` with an optional `--name`. +Deferred (Non-goals): content-addressed identity + replay-dedup; the "run-diff" +depth and ranking families against each other (cross-family, vs. within-family); +and a live producer for the flat `runs.jsonl` standalone-run path — after this +cycle no CLI command writes it (sweep/walkforward moved to the family store, and +`aura run` does not persist), so `aura runs list` / `rank` await either a +persisting `aura run` or retirement (forward-queue follow-up). + ### C19 — Bootstrap: blueprint → instance (recursive) **Guarantee.** Construction is a distinct phase, recursive at every level. Each node type has a **factory** `params → sized concrete node` (e.g. `SMA(length)`