Multi-agent adversarial review (verified findings) — the top finding (dead orbit
drag) fable had already fixed in 3e36a0c; these are the rest, composing on top of
fable's 228caf2/3e36a0c:
- scale.js viewFromEcl: allocation-free + alias-safe (read x/y/z into locals before
writing out) — it ran per body per frame and allocated an object each call (§11).
- planets.js + comets.js: refill orbit paths on any P change, not just
isTransitioning() — the MEGA↔TRUE tween's FINAL frame (P settled, tween nulled)
was skipped, leaving body/orbit desync (§12).
- almanac.js: a moon's heliocentric position adds its true orbital offset, so the
Moon's "From Earth" is its real ~384,400 km / 1.3 s light, not 0.
- asteroids.js: guard refresh() against null geometry when toggled on before the
SBDB load completes (was a TypeError).
- serve.py: CAD close-approach responses are never cached immutable — the database
keeps growing for past dates as new NEOs are discovered (only Horizons ephemeris
is truly immutable).
Re-verified: 13/13 gates green; orbit zoom dollies 82→73 finite; Moon From Earth
0.003 AU; layer toggles throw nothing; no console errors.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- pendingCam now restores heading+pitch (inverse of serializeHash spherical),
not just distance — pasted URLs reproduce the exact view (Stage 2 gate)
- bodyWorld.sun allocated once, not per frame (§11 zero-alloc tick rule)
- spacecraft/comet label DOM writes throttled ≤5 Hz (§11); geometry still per-frame
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Stage 6. almanac.js: on-focus grimoire card — physical fact sheet, hand-written
prose (grimoire voice), MODELBEAST portrait, and LIVE computed facts free from the
ephemeris: distance from Sun & Earth, sunlight age, vis-viva orbital speed, day &
year length. Earth easter egg → GODSIGH world view (:8137). Real Solar System Scope
2k textures (CC BY, 6.1 MB) now paint every world + the Milky Way skybox; ephem
gains semiMajor() for vis-viva. Generated grimoire portraits (FLUX via MODELBEAST,
10 bodies, seed logged in art/PROMPTS.md) are the AESTHETIC layer only — real
worlds get real maps (truth boundary). README with layer table + quickstart +
verify; docs/hero.jpg. Also lands the Stage-3 planets label fix (obj.visible).
Gate: every clickable body has a card; quickstart works from a fresh clone.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Stage 5. asteroids.js: 1500-strong main-belt sample from SBDB (sb-class=MBA),
propagated by the shared Kepler core, one Points cloud refreshed ≤10 Hz, off by
default. comets.js: 1P/2P/67P/96P from SBDB (elliptical only) with full drawn
orbits, marker + anti-sunward tail scaled 1/r², on by default. neos.js: CAD ±30d
close-approach radar around Earth, colored by miss distance, clickable, lunar-
distance labels, off by default. All fail-soft. verify.html gate: belt view-radii
12.1–13.9 ∈ (Mars 10.7, Jupiter 17.4); Halley aphelion 35.3 AU > Neptune. Also
serialized verify's live Horizons checks (burst-throttle fix) → 13/13 green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Stage 4. spacecraft.js: Voyager 1/2, New Horizons, JWST, Parker, Juno, Lucy,
Psyche. Fetches VECTORS (heliocentric ecliptic AU) over a multi-year span through
serve.py's cache, Catmull-Rom interpolated per frame; glowing diamond marker +
fading trail + label with live distance from Sun and one-way light-time from
Earth. Fail-soft per craft. Robustness: sequential fetch (Horizons throttles
bursts), serve.py skips caching non-$$SOE (error) responses, and span
auto-recovery clamps START/STOP to a craft's SPK coverage from Horizons' own
"prior to / after" hints (Psyche pre-launch, Juno past coverage) → 8/8 tracked.
Gate: Voyager 1 @2026-07-15 = (-32.07,-136.21,98.55) Δ0.002 AU; JWST Δ0.011 AU
from Earth. verify.html gates 10-11 green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Stage 3. moons.js: 21 moons as lit spheres with local per-parent compression
(clear the exaggerated parent, ordering preserved), retrograde via negative
period. rings.js: Saturn textured annulus (true 74500–140220 km scaled with
parent) + Uranus thin schematic ring, tilted with axial tilt, DoubleSide. Moons
draw at the parent's exaggeration so Io/Jupiter ≈ 0.026 ratio holds. Label
visibility gated via CSS2DObject.visible (CSS2DRenderer clobbers div.style.display
every frame — fixed). Gate: Galilean laps 1.00:0.50:0.25 (1:2:4), Triton
retrograde (Δθ<0), moons ordered io<europa<ganymede<callisto.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Stage 1. ephem.js: JPL SSD approximate elements (Table 1 + 2a/2b plumbing),
Newton Kepler solver, reusable eclFromElements core (planets + small bodies),
orbitPath sampler. planets.js: 8 planets + Pluto as textured exaggerated spheres
on MEGA-compressed orbits with labels, rebuild-on-drift. verify.html: 9 gates all
green IN BROWSER incl. live Horizons via proxy — Mars @2026-07-15 Δ3.3e-4 AU,
Jupiter Δ2.9e-3, Earth Δ3.9e-5; Mars @J2000 vs live Δ4.8e-5; Jupiter @1900 Δ2.0e-3.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Stage 0. Zero-dependency serve.py (static + allowlisted horizons/sbdb/cad proxy,
sha256 disk cache with past-span immutability). Three.js via pinned importmap,
logarithmic depth, procedural starfield sky (+ Milky Way panorama swap-in), Sun
with additive glow, OrbitControls, brass-and-void HUD, scrubbable time bar,
central bodyWorld position pass, focus/camera system, hash state. Boots clean,
no console errors.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Full execution spec for Opus 4.8: Three.js compressed-scale explorer on
GODSIGH's architecture DNA. Authoritative JPL Standish element tables,
Horizons ground-truth verification gates, 7 stages GENESIS→RESONANCE.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>