Skip to content

RFC-0003: Multiverse analyses — in-file universes and cross-universe artifact references - #65

Open
EiffL wants to merge 12 commits into
mainfrom
rfc/0003-multiverse-analyses
Open

RFC-0003: Multiverse analyses — in-file universes and cross-universe artifact references#65
EiffL wants to merge 12 commits into
mainfrom
rfc/0003-multiverse-analyses

Conversation

@EiffL

@EiffL EiffL commented Aug 5, 2026

Copy link
Copy Markdown
Member

Adds RFC-0003: Multiverse analyses — in-file universes and cross-universe artifact references (status: Draft), Step 2 of the RFC process for the change discussed in #52. Reconciled with the alternative draft posted on the tracking issue.

Summary

ASTRA can describe a multiverse but cannot analyze one: universes live outside astra.yaml, and every Output.inputs edge implicitly means "same universe as me." This RFC proposes:

  1. universes in astra.yaml — universes become addressable elements, declared in full or as explicit diffs of one another (base: + partial decisions). The universes/ directory is removed (breaking; migration is a mechanical move).
  2. multiverses — named sets of universes, via selection (universes: — exact ids, nested multiverses, regex over declared ids), generation (base + decisions option selectors; decisions: "*" for the full valid space), or the union of both.
  3. artifact#selector references — pin an input to one universe (f1_score#svm_standard) or fan out across a set (religiosity_p#full_multiverse), with universe scoping inferred recursively and cut by the # selector. @ is reserved for a future sources RFC (revisions), so the axes compose.

Design principles: no universe is privileged by the spec — no implicit defaults-derived baseline, no reserved ids (naming a universe baseline is author convention); generated universes are anonymous — identity is the effective selection, and addressing a grid point means declaring it. The . hierarchy separator is kept.

Grounded in the working prototypes astra-multiverse-example and astra-multiverse-example-steegen-2 (@anthonyozerov).

Main open questions (see the RFC's Questions or objections)

  • One collection entry per universe, or per distinct realization?
  • Combinatorial guardrails for decisions: "*".
  • Remaining divergences from the alternative draft, recorded in Questions: defaults completion (this RFC requires explicit base) and the : separator (rejected here).

Discussion happens here while the PR is a draft, per the RFC process.

Tracking issue: #52

🤖 Generated with Claude Code

https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT

EiffL and others added 5 commits July 30, 2026 11:32
…se references

Drafts the RFC for the change discussed in #52, grounded in the
astra-multiverse-example prototype (Steegen et al. 2016 Figure 1
reproduction). Also syncs the RFC index status for RFC-0002 (Accepted).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT
… diffs

Universes become diffs against an implicit all-defaults baseline (new
'from:' slot, partial decisions); multiverses gain a base/vary generator
form alongside enumeration and '*'; formal reference grammar and field
tables added.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT
Universes are declared in full or as explicit diffs of one another
(from: required for partial declarations); generators require an
explicit base when vary is partial; Decision.default is demoted to a
presentational hint. Records the rejected implicit-baseline design and
grounds the principle in the multiverse/PCS stance (Yu & Kumbier 2020).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT
- @ qualifier restricted to Output references (external Inputs don't vary)
- universe scoping defined recursively: decisions or unqualified refs to
  scoped artifacts propagate it; @ cuts it; invariant recipes forbid
  {decisions.*}
- multiverses are sets; when-deactivated decisions make the space a tree
  (inactive decisions omitted from selections and derived ids)
- shared universe/multiverse id namespace; declared ids may not spell a
  different selection's derived id
- only in-file universes are addressable; enumeration accepts derived ids
- validator checklist synced with all of the above

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1

QR code for preview link

🚀 View preview at
https://LightconeResearch.github.io/astra-spec/pr-preview/pr-65/

Built to branch gh-pages at 2026-08-05 14:26 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

EiffL and others added 7 commits August 5, 2026 14:51
'from' and 'base' were one concept with two names; worse, ASTRA's
existing 'from' means pure re-export aliasing (no overrides), while
universe diffing is inherit-and-override. Rename Universe.from to base,
note the deliberate contrast with the alias idiom, and state the
generator equivalence: vary is decisions generalized to option sets.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT
… ids

The option-join id grows unboundedly for '*' over wide decision spaces
and leaks into every artifact path; making it addressable also forced
collision/shadowing rules. Identity now rests solely on the effective
selection; addressing a grid point means declaring it (a three-line base
diff); storage spelling (join vs digest) becomes a runner convention.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT
Adopt '#' as the selector sigil (reserving '@' for a future sources
RFC), regex multiverse membership, nested multiverses, union of
selection and generation, scalar option selectors, and the tree-wide
shared namespace. Remove the universes/ directory entirely (breaking;
major bump). Keep the no-privileged-universe stance (explicit base, no
defaults completion; 'baseline' is a naming convention only) and the '.'
hierarchy separator, recording both divergences in Questions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT
…into Questions

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ah3BGphV5NgkGEhkR3yZDT
@EiffL
EiffL marked this pull request as ready for review August 5, 2026 14:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant