From 395b613f824d50c1affb6bd20ff04eb1e9447b2b Mon Sep 17 00:00:00 2001 From: Senrokai Date: Tue, 29 Sep 2026 19:10:35 +0200 Subject: [PATCH] Stop telling the reader that the moons drawn without a map were never imaged MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit provenanceFor ended every derived surface with "Not an observation — no image of this world exists", a sentence written for exoplanets. The branch added eleven solar-system bodies with no map in the catalogue, and eight of them are moons spacecraft photographed: Voyager 2 imaged Miranda, Ariel, Umbriel, Titania, Oberon, Proteus and Nereid, Cassini Hyperion (26 Sep 2005, from about 500 km). The textures README says so itself. Hubble sees Eris, Haumea and Makemake too, as points. Only an exoplanet now gets that sentence. A moon or dwarf planet drawn from its measurements says "no global map of this world is used here", which is true of all eleven. Read off the live pages: Titania, Hyperion and Eris end with it, and an exoplanet keeps the old wording. Controls: giving every derived surface the exoplanets' sentence fails "says a moon without a map is illustrated, without saying it was never imaged"; giving it to none fails "says an exoplanet has never been imaged". Co-Authored-By: Claude Opus 5.5 (1M context) --- src/app/features/body-detail/body-readouts.ts | 9 +++++++-- .../features/body-detail/body-view-model.spec.ts | 13 +++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/app/features/body-detail/body-readouts.ts b/src/app/features/body-detail/body-readouts.ts index 9953ade..82ff9a7 100644 --- a/src/app/features/body-detail/body-readouts.ts +++ b/src/app/features/body-detail/body-readouts.ts @@ -72,12 +72,17 @@ export function bodyReadouts(body: BodyDetailViewModel): BodyReadouts { /** * The derived surface is a reasoned illustration, and a panel of real measurements sitting next * to it is exactly the context in which it could be mistaken for another one. + * + * Only an exoplanet has never been imaged. A moon or dwarf planet drawn this way has been — Voyager + * 2 photographed Uranus's five large moons, Proteus and Nereid, Cassini Hyperion, and Hubble sees + * Eris, Haumea and Makemake as points — but has no global map this app can use. */ function provenanceFor(body: BodyDetailViewModel): string { if (body.hasPhotography) { return 'Surface: NASA/ESA/USGS photography.'; } + const why = body.kind === 'exoplanet' ? 'no image of this world exists' : 'no global map of this world is used here'; return body.appearance.equilibriumTemperatureK === null - ? 'Surface illustrated from this body’s measured size and mass. Its host star is not in the catalogue, so no temperature could be derived. Not an observation — no image of this world exists.' - : 'Surface illustrated from the measurements above — size, density and the temperature derived from its star’s output and its orbit. Not an observation — no image of this world exists.'; + ? `Surface illustrated from this body’s measured size and mass. Its host star is not in the catalogue, so no temperature could be derived. Not an observation — ${why}.` + : `Surface illustrated from the measurements above — size, density and the temperature derived from its star’s output and its orbit. Not an observation — ${why}.`; } diff --git a/src/app/features/body-detail/body-view-model.spec.ts b/src/app/features/body-detail/body-view-model.spec.ts index 91a1e69..8c96c22 100644 --- a/src/app/features/body-detail/body-view-model.spec.ts +++ b/src/app/features/body-detail/body-view-model.spec.ts @@ -72,6 +72,19 @@ describe('buildBodyViewModel', () => { expect(bodyReadouts(buildBodyViewModel('luna', catalogues)!).provenance).toContain('Orbit: JPL SSD satellite mean elements, epoch 2000 Jan 1.'); }); + it('says a moon without a map is illustrated, without saying it was never imaged', () => { + // luna has no map under that id. Voyager and Cassini photographed every moon drawn this way. + const provenance = bodyReadouts(buildBodyViewModel('luna', catalogues)!).provenance; + expect(provenance).toContain('Not an observation — no global map of this world is used here.'); + expect(provenance).not.toContain('no image of this world exists'); + }); + + it('says an exoplanet has never been imaged', () => { + const exoplanet: ExoplanetRecord = { id: 'x', hostStarId: SUN_STAR_ID, hostStarName: 'Sol', name: 'X b', orbit: { semiMajorAxisAu: 0.05 } }; + const model = buildBodyViewModel('x', { bodies: [], exoplanets: [exoplanet], stars: [sun] })!; + expect(bodyReadouts(model).provenance).toContain('Not an observation — no image of this world exists.'); + }); + it('marks a published exoplanet period as measured, not derived', () => { const exoplanet: ExoplanetRecord = { id: 'kepler-22-b',