audit: cycle 0105 tidy (drift-clean after two doc-mirror alignments)

Architect drift review (range 7b429f9..57f401f): drift_found (low/medium
only), resolved inline as close-fixes:
- crates/aura-std/src/vocabulary.rs — the roster-site doc now names BOTH
  count pins a node addition trips (the in-crate shape test and aura-cli's
  cross-boundary --vocabulary count e2e); the singular phrasing understated
  the cross-crate lockstep the extra e2e introduced.
- docs/design/INDEX.md — the C24 enforcement-shift passage gains the 0105
  delivery note: resolver-vs-list drift closed by construction via the
  roster macro; the un-rostered-node residual stays fail-safe.

Noted, no action: spec/plan predicted 884 (no new test) but delivery added
one e2e (885) — consciously superseded, disclosed in the iter commit body;
the artifacts are ephemeral and removed below.

What holds (architect): byte-preserving refactor confirmed against the
diff (22 keys/order exact, signatures and module doc untouched, every
consumer unchanged); invariant 9 / C24 preserved (compile-time expansion,
no registry); the new e2e count pin is genuinely roster-tied.

Regression gates (all green): cargo build clean; cargo test --workspace
885 passed / 0 failed (884 baseline + 1 new e2e); clippy --all-targets
-D warnings clean; cargo doc --no-deps 0 warnings.

Ephemeral cycle artifacts removed per project convention (git rm):
docs/specs/0105-std-vocabulary-roster-macro.md,
docs/plans/0105-std-vocabulary-roster-macro.md.

refs #180
This commit is contained in:
2026-07-02 22:00:36 +02:00
parent 57f401f2ab
commit bd32c4fcb3
4 changed files with 8 additions and 424 deletions
+6 -1
View File
@@ -2053,7 +2053,12 @@ logic — C17), and `std_vocabulary` stays a compiled-in dispatch table, not a r
its enforcement **degrades from compiler-guaranteed to resolver-seam discipline**. Two
consequences: (1) **#160** (the guard that the closed vocabulary stays honest) is no longer
droppable hygiene — it guards the data-plane face of the boundary (its own drift direction
still fails *safe*, `UnknownNodeType`). (2) The **injected per-project resolver** (C16) is
still fails *safe*, `UnknownNodeType`). **Delivered cycle 0105:** the
`std_vocabulary_roster!` macro expands the resolver match and the enumerable
`std_vocabulary_types()` list from one roster, closing the resolver-vs-list drift mode by
construction; the residual (a new zero-arg node never rostered at all) stays fail-safe,
guarded by the one-line maintainer surface plus the count pins (the in-crate shape test and
aura-cli's cross-boundary `--vocabulary` count e2e). (2) The **injected per-project resolver** (C16) is
the genuinely new, *deferred* invariant-9 surface: nothing structurally stops a project
resolver from accepting arbitrary type-ids, or a project from layering a blueprint
*marketplace* (store + type-discovery API) **on top of** the format — one layer *above* the