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 + thecontextDeepLinkFnwalker),ExploreScalePicker.svelte(ShellIdswitch), 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:84 — parent: 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:
scale-shell-controller.ts— append the id toCTX_ORDER(theShellIdunion +planShellJumpbound auto-extend; raise the 6-step guard to N).context-graph.ts— add aContextentry (units,scenePerUnit, inner/outer boundary); re-point the previous outermost shell'sparentto the new id; the new outermost getsparent: null.explore-scene-host.ts— add camera constants (*_CAM_R_MIN/MAX, far plane), anensure<Shell>()lazy scene builder,crossOutTo<Shell>()+crossInTo<Prev>(), a new branch in the wheel-handler ceiling (replace the clamp at~1922with acrossOutTo<Shell>()call), and newcur === Ncases in thecontextDeepLinkFnwalker.ExploreScalePicker.svelte— the rail auto-grows fromCTX_ORDER; add thelabelFor()switch case (exhaustive union → TS enforces this).+page.svelte— add the honesty-badge{#if contextId === '<shell>'}block (with a learn-more link — see Contract D) + breadcrumb crumb.- Scene module —
src/lib/universe/<shell>-scene.ts(thelocal-group-scene.tstemplate: sprites + labels + a "you are here" anchor for the inner shell). - Data file —
static/data/universe/<shell>.json(Contract B schema) + schema +validate-dataregistration. - 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.tsprovides 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 aslocal-group.jsondoes. Honest-not-to-scale is non-negotiable (PRD-030 principle 2). - Schema extensions (additive, back-compat):
deep-sky-objects.schema.json/ a newgalaxy-clusterrecord: add optionalcluster_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.jsonentries 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.jsonas 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_appcross-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
→ sciencelearn 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
LayerKeywith alearn: {tab, section}link (the existingmetaFor()contract inScienceLayersPanel).
6 · Contract E — the learning surface (frozen set + tab decision)
- New cosmology articles (full shape: formula, diagram, narrative, tiered links,
see_in_appinto 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
cosmologytab): the ~11 cosmology articles land in a newcosmologyscience tab (the 15th), not anobservationexpansion — the topics are a coherent group andSCIENCE_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)
RESOLVED 2026-08-08: newcosmologytab vsobservationexpansion (§6) — recommend new tab.cosmologytab. 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.- Cosmic-web data source: schematic hand-authored vs a decimated public catalogue (2MRS / IllustrisTNG) — provenance + weight trade-off.
- 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.