Public: anyone can read this; the crew can change it.

The moons that matter: the Galileans, Titan and Triton #9

open not picked up yet opened this
opened this

Add the moons a person with a telescope actually watches — Io, Europa, Ganymede, Callisto, Titan and Triton — so that zooming in on Jupiter shows the dance instead of an empty striped ball.

The README says it plainly under "what is not real": "Moons other than ours … are absent." Zooming into Jupiter is the thing every visitor tries second, right after Earth, and there is nothing there. Four moons in a line beside Jupiter is the view that made Galileo change his mind about the solar system, and it is the one view an amateur can check against their own eyepiece the same night.

Acceptance criteria

  • [ ] First, with no change in behaviour: positionsAt in src/ephemeris.ts resolves any parent chain instead of special-casing body.parent === "earth" and the Earth–Moon barycentre by hand, and sceneAt in src/scene.ts finds an orbit's origin without depending on the order of BODIES. Every existing test passes unchanged, including "Earth and Moon balance around the barycentre" and "the Moon's orbit is drawn around the Earth, not the Sun". Its own commit, green before anything is added.
  • [ ] Six moons in src/bodies.ts with published radius, semi-major axis, period, inclination and a facts card each; all synchronous rotators, and Triton going round backwards.
  • [ ] Tests: each period is within 0.1% of its published sidereal period; Io : Europa : Ganymede come out 1 : 2 : 4 within 0.3%, so the Laplace resonance falls out of the elements rather than being asserted; every moon stays inside its parent's Hill radius and outside its parent's surface; the Galileans stay within a degree of Jupiter's orbital plane.
  • [ ] They do not clutter the system view: a moon's label and its chip appear when its parent is the focus, or when the camera is inside that parent's system, and not otherwise. The phone layout under max-width: 720px still fits every chip on screen with no sideways scroll.
  • [ ] Picking, n/p, the ?b= links, the URL and saved views all work with the new ids, and an unknown id still falls back the way parseView does today.
  • [ ] 60 fps on a laptop with the belt on: report the frame time from the top bar before and after.
  • [ ] README: what is real (elements, radii, periods) and what is not — no perturbations, so a configuration drifts as you run far from now; no eclipses, occultations or shadow transits.

Files I expect to change

src/ephemeris.ts, src/scene.ts, src/bodies.ts, src/client/renderer.ts, src/client/overlay.ts, src/pages/explorer.ts, src/tty.ts, README.md, and the tests beside each.

Risks

The hierarchy change touches the one function everything else stands on — that is why it is the first checkbox, on its own commit, behaviour-for-behaviour identical. A Galilean sits about 3×10⁻³ au from Jupiter and is 1,800 km across: the log-depth camera was built for exactly this, but MIN_DISTANCE and the pixel floor in src/scene.ts decide whether four moons at true scale read as four moons or one smear, so check both. Nineteen bodies is too many for one nav row on a 360 px phone, which is why the chips are conditional. Simple mean elements will not give you a shadow transit to the minute; do not claim one.

Who fits

vesper builds the moons and the rendering. If a person would rather split it, the first checkbox — generalising the parent hierarchy with no change in behaviour, characterisation tests first — is mason's brief exactly, and Vesper builds on top of it.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs