Skip to content

RFC-039 — The Known Universe: extending the /explore shell ladder to the observable universe

Status: Shipped (v0.8.0, 2026-08-27) · Implements: PRD-034 · builds on: #258 (scale picker) · #410 (message-objects) · RFC-032 (/explore v2 shells) · RFC-036 (/explore scene-host decomposition seam) · PRD-030 (Known Universe principles) · the 8-shell ladder, Milky-Way-first milestone, scale picker, time playback and cosmology lens all landed — see CHANGELOG [0.8.0].

Why this is an RFC. The /explore scale ladder is a hardcoded 4-rung contract touched by at least eight files in lockstep — scale-shell-controller.ts (CTX_ORDER), context-graph.ts (parent chain), explore-scene-host.ts (per-shell camera constants + crossOut*/crossIn* + the wheel-handler ceiling + the contextDeepLinkFn walker), ExploreScalePicker.svelte (ShellId switch), and +page.svelte (honesty badges + breadcrumb). Adding four new shells and a science lens on every shell is not four PRs that can each improvise — if the shell-seam contract, the coordinate system, the data schema, and the lens-wiring aren't frozen once, each tier PR will re-litigate them and the workstreams will fight (the exact failure RFC-036 was written to prevent for /fly). This also binds a new coordinate system (supergalactic), a schema extension (redshift/cluster-affiliation), and a taxonomy change (which chips are "science lens" vs "service") across the whole route. Freeze first, then slice.

1 · The problem (measured)

Per the PRD-034 audit (3 recon passes, 2026-08-08): the ladder terminates at Local Group (context-graph.ts:84parent: null); the wheel handler at the ceiling just clamps (explore-scene-host.ts:~1922); there is no cosmology data past the Local Group; the Milky Way shell has 2 clickable objects, no scale HUD, 1 science article, and zero science lenses; and cosmology is nearly absent from the 162-article learning surface. Decisions locked in PRD-034: extend /explore (not a new route), scale UX = extended 8-rung ladder (grow #258), Milky Way first.

2 · Contract A — the "add a shell" seam (frozen recipe)

Every new shell (Local Sheet, Virgo, Laniakea, Cosmic Web) is added by the same eight-touch recipe. This RFC freezes it so each tier PR is mechanical and identical:

  1. scale-shell-controller.ts — append the id to CTX_ORDER (the ShellId union + planShellJump bound auto-extend; raise the 6-step guard to N).
  2. context-graph.ts — add a Context entry (units, scenePerUnit, inner/outer boundary); re-point the previous outermost shell's parent to the new id; the new outermost gets parent: null.
  3. explore-scene-host.ts — add camera constants (*_CAM_R_MIN/MAX, far plane), an ensure<Shell>() lazy scene builder, crossOutTo<Shell>() + crossInTo<Prev>(), a new branch in the wheel-handler ceiling (replace the clamp at ~1922 with a crossOutTo<Shell>() call), and new cur === N cases in the contextDeepLinkFn walker.
  4. ExploreScalePicker.svelte — the rail auto-grows from CTX_ORDER; add the labelFor() switch case (exhaustive union → TS enforces this).
  5. +page.svelte — add the honesty-badge {#if contextId === '<shell>'} block (with a learn-more link — see Contract D) + breadcrumb crumb.
  6. Scene modulesrc/lib/universe/<shell>-scene.ts (the local-group-scene.ts template: sprites + labels + a "you are here" anchor for the inner shell).
  7. Data filestatic/data/universe/<shell>.json (Contract B schema) + schema + validate-data registration.
  8. i18n — new m.explore_ctx_<shell>() label key + the schematic-badge key, 14 locales.

Invariant: the scale picker (#258) remains the single scale control; no per-tier bespoke navigation. Mobile = the same collapse-to-"Scale ▾" popover, now 8 rungs.

3 · Contract B — coordinate system + data schema (frozen)

  • Supergalactic coordinates (SGL/SGB) are the frame for all super-Local-Group tiers (the natural frame for the supercluster plane). A new src/lib/universe/supergalactic.ts provides RA/Dec/dist → SG cartesian. Equatorial J2000 stays the frame for solar/neighborhood/MW as today.
  • Every position past the Local Group is schematic (real catalogue distance, illustrative direction), carrying a _note + provenance, exactly as local-group.json does. Honest-not-to-scale is non-negotiable (PRD-030 principle 2).
  • Schema extensions (additive, back-compat):
    • deep-sky-objects.schema.json / a new galaxy-cluster record: add optional cluster_id, supercluster_id, is_bcg, dist_mpc, redshift, recession_kms. Backfill the 34 null-distance Virgo galaxies (deep-sky-objects.json).
    • New per-tier data schemas (local-sheet.schema.json, virgo-cluster.schema.json, laniakea.schema.json, cosmic-web.schema.json) with a shared core (id, name, kind, dist_mpc, diam_kly, sgx/sgy/sgz, headliner) + tier-specifics (BCG flag, filament backbone points, void boundaries).
    • Provenance: data-sources.json entries for the catalogues used (McConnachie, Tully Cosmicflows, 2MRS/HyperLeda, Virgo Cluster Catalogue) — real citations, validate-data-checked.

4 · Contract C — Milestone 1: level the Milky Way (frozen scope)

The first build after this RFC. Raises the emptiest shell to the completeness bar and establishes the per-shell science-lens pattern the rest of the epic reuses. Scope:

  • Scene: add the galactic bar (the article already claims it), a globular-cluster layer (pin the ~30 already in deep-sky-objects.json as globular-cluster type at galactocentric positions), the Magellanic Clouds at the disc edge, and arm interactivity (each arm pickable → panel/article).
  • HUD: stop suppressing the scale HUD in the MW shell (+page.svelte:~2563); show a kpc scale readout.
  • Panels: fix the near-empty Sun panel (populate galactocentric distance from the schema root); give arms + globulars panels.
  • First MW science lens (Contract D): rotation-curve, dark-matter-halo, stellar-populations overlays behind the science lens.
  • Content: new MW science articles (galactic rotation, the galactic centre, stellar populations) + fill see_in_app cross-links; add the learn-more link the LG badge is missing.
  • Cadence: its own mock-gate for the enrichment look before build; science-reviewer on all new claims; 14-locale i18n at the end; e2e desktop+mobile.

5 · Contract D — science lens on every shell + chip reclassification (frozen)

  • Every /explore shell gets a science lens. Wire ScienceLayersPanel (or the neighborhood's inline lens-chip pattern) into the Milky Way, Local Group, and each new cosmology shell — today they have none. The lens is the single consistent home for "this teaches you something."
  • Chip taxonomy (frozen):
    • Service chips (always-on, no lens gate): PLANETS, DWARFS, COMETS, INTERSTELLAR — pure visibility toggles.
    • Teaching chips (move into / stay in the science lens): DEEP-SKY, CONSTELLATIONS, HR-DIAGRAM, LIGHT-CONES, and all new cosmology lenses (distance-ladder, Hubble-flow, dark-matter-web, redshift). PATHS is editorial-utility — stays a service chip but gains a → science learn link.
    • The neighborhood's inline lens chips (HR, causality) are refactored to the standard lens surface so the pattern is uniform.
  • New cosmology lenses (per tier): distance-ladder (parallax→Cepheid→SN Ia rungs), Hubble-flow (recession vectors), dark-matter-web (filament mass overlay), redshift (colour-by-z). Each is a LayerKey with a learn: {tab, section} link (the existing metaFor() contract in ScienceLayersPanel).

6 · Contract E — the learning surface (frozen set + tab decision)

  • New cosmology articles (full shape: formula, diagram, narrative, tiered links, see_in_app into the new tiers; 14 locales; science-reviewer-gated): Big Bang · primordial + stellar nucleosynthesis · the role of carbon / CNO cycle + carbon-based life · stellar evolution (full life cycle) · supernovae + standard candles · the cosmic distance ladder · redshift & Hubble's law · dark matter (dedicated) · dark energy · the CMB · large-scale structure / cosmic web.
  • Tab decision (RESOLVED 2026-08-08 → new cosmology tab): the ~11 cosmology articles land in a new cosmology science tab (the 15th), not an observation expansion — the topics are a coherent group and SCIENCE_TABS + the drift-test (science-tabs-vs-filesystem.test.ts) already support adding a tab cleanly. Per the WS-5-first sequencing (also resolved 2026-08-08), the tab is created with the first tier that needs it (Virgo/WS-5b), and each new tier ships with its backing article rather than front-loading all of WS-4.
  • Each new /explore tier ships with its backing article(s) — no tier without a story.

7 · Workstreams

  • WS-1 · seam + schema (Contracts A/B) — the extension recipe made real once (context-graph, supergalactic util, schemas, the first new crossing) so tiers are mechanical after.
  • WS-2 · Milky Way leveling (Contract C) — Milestone 1; blocks nothing, proves the bar + first lens.
  • WS-3 · science-lens framework + chip reclassification (Contract D) — shared, unblocks per-tier lenses.
  • WS-4 · cosmology learning surface (Contract E) — foundational articles lead; per-tier articles follow their tiers.
  • WS-5 · the four new tiers (Local Sheet → Virgo → Laniakea → Cosmic Web) — each a mechanical application of Contract A + its data + panel + lens + article, one at a time, mock-gated.
  • WS-6 · #411 grand-tour narration — LAST, on the completed arc.

8 · Non-goals / risks

  • Non-goals: real N-body cosmology; photorealistic to-scale rendering of 10²⁷ m; redesigning the solar-system shell; #411 (deferred to WS-6).
  • Risk — 8-rung rail height: if the extended #258 rail is too tall (esp. mobile), fall back to the C-hybrid spectrum (PRD-034 §UX) — scoped as a contained swap, not a redesign.
  • Risk — data honesty at Gpc scale: the cosmic-web tier must not imply precision; heavy schematic badging + a "this is a model" learn link are mandatory.
  • Risk — i18n + science-review volume: every tier adds strings + claims across 14 locales; budget the science-reviewer + translate passes into each tier's slice (the #410 cadence).

9 · Open questions (resolve before/within WS-1)

  1. cosmology tab vs observation expansion (§6) — recommend new tab. RESOLVED 2026-08-08: new cosmology tab. Sequencing also resolved: WS-5 tiers first, each with its backing article (tab created with Virgo/WS-5b), rather than front-loading all of WS-4.
  2. Cosmic-web data source: schematic hand-authored vs a decimated public catalogue (2MRS / IllustrisTNG) — provenance + weight trade-off.
  3. Proper-motion lens for the neighborhood (needs the star-shell schema to carry pm) — in this epic or deferred to a neighborhood-specific follow-up?

RFC-039 · draft · 2026-08-08 — freezes the shell-extension seam, the coordinate/data contract, the Milky-Way-first milestone, the science-lens-everywhere + chip taxonomy, and the cosmology learning set. UXS + the GitHub epic/children follow.

Orrery — architecture documentation · MIT · No tracking