From f655a4c0f79512c462d5ab03753797df7e46252e Mon Sep 17 00:00:00 2001 From: Senrokai Date: Tue, 29 Sep 2026 19:14:20 +0200 Subject: [PATCH] Turn Eris once in 15.77 days, locked to Dysnomia, not in the 25.9 hours the SBDB flags as unreliable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eris took its day from the SBDB's rot_per, 25.9 hours, whose own note reads "Result based on less than full coverage, so that the period may be wrong by 30 percent or so" (Roe et al. 2008). Eris is locked to Dysnomia: its light curve repeats every 15.771 +/- 0.008 days (Bernstein et al. 2023, PSJ 4, 115), Dysnomia's 15.78590-day orbit (Holler et al. 2021; Szakáts et al. 2023, A&A 669, L3). It was drawn turning 14.6 times too fast. Eris's BodySpec now carries that day, 378.504 hours, cited as its radius already cites Sicardy et al., and a spec's measured day comes before its source's. build.ts checks that Eris's day is Dysnomia's orbit within 0.2 per cent. In the running app Eris turns 5.707 degrees in six hours, as 15.771 days gives; on 25.9 hours it turned 83.4. Makemake's SBDB period, 22.83 hours, carries the same flag; it is Hromakina et al. 2019's own result and nothing later overturns it, so it is kept. Control: Eris on the SBDB's period fails the ETL: "Eris turns once in 1.079 days". Co-Authored-By: Claude Opus 5.5 (1M context) --- src/assets/data/bodies.json | 2 +- tools/etl/build.ts | 7 +++++++ tools/etl/fetchSolarSystem.ts | 13 +++++++++---- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/assets/data/bodies.json b/src/assets/data/bodies.json index adc1bed..7ff2a89 100644 --- a/src/assets/data/bodies.json +++ b/src/assets/data/bodies.json @@ -540,7 +540,7 @@ "argumentOfPeriapsisDegPerDay": 0 }, "orbitSource": "JPL SBDB osculating elements, epoch 2026 Jun 9", - "rotationPeriodHours": 25.9 + "rotationPeriodHours": 378.504 }, { "id": "haumea", diff --git a/tools/etl/build.ts b/tools/etl/build.ts index 7af145b..e6908d6 100644 --- a/tools/etl/build.ts +++ b/tools/etl/build.ts @@ -335,6 +335,13 @@ function validateBodies(bodies: BodyRecord[], horizonsOrbits: Map body.kind === 'dwarf').length; assertCondition(dwarfCount === 5, `Expected the IAU's 5 dwarf planets, found ${dwarfCount}.`); + // Eris keeps one face to Dysnomia, whose orbit takes 15.78590 days (Holler et al. 2021); its light + // curve gives 15.771 +/- 0.008 (Bernstein et al. 2023). The SBDB still gives 25.9 hours. + const erisDays = (bodies.find((body) => body.id === 'eris')?.rotationPeriodHours ?? NaN) / 24; + assertCondition( + Math.abs(erisDays / 15.7859 - 1) < 0.002, + `Eris turns once in ${erisDays.toFixed(3)} days; it is locked to Dysnomia's 15.786-day orbit — the SBDB's 25.9-hour period, which it flags as possibly 30 per cent wrong, was taken.` + ); console.log(` mean elements against Horizons, degrees: ${offsets.join(', ')}.`); console.log(` IAU rotation against Horizons (day as a fraction of it, tilt in degrees): ${spins.join(', ')}.`); } diff --git a/tools/etl/fetchSolarSystem.ts b/tools/etl/fetchSolarSystem.ts index e09f3a3..8b0d1ef 100644 --- a/tools/etl/fetchSolarSystem.ts +++ b/tools/etl/fetchSolarSystem.ts @@ -31,6 +31,8 @@ interface BodySpec { sbdb?: string; /** A measured mean radius, in km, for a body neither Horizons nor the SBDB gives one for. */ radiusKm?: number; + /** A measured sidereal day, in hours, where a later measurement overturns the one its source gives. */ + rotationPeriodHours?: number; /** A moon that does not keep one face to its planet: its page's own spin, or none, is kept. */ spinsFreely?: boolean; /** A moon heavy enough to move its planet round their barycentre visibly; see `BodyRecord.massRatio`. */ @@ -87,7 +89,12 @@ const BODY_SPECS: BodySpec[] = [ // 2017 (Nature 550, 219); drawn as a sphere, at the radius of the sphere of the same volume. // Makemake: 1434 km across its equator and 1422 across its projected pole, Brown 2013 (ApJ 767, // L7); the same mean. - { id: 'eris', name: 'Eris', kind: 'dwarf', horizonsCommand: '136199;', center: '500@10', sbdb: 'Eris', radiusKm: 1163 }, + // + // Eris's day is not the SBDB's 25.9 hours, a light curve of partial coverage (Roe et al. 2008) the + // SBDB itself flags as "may be wrong by 30 percent or so": it turns once in 15.771 +/- 0.008 days + // (Bernstein et al. 2023, PSJ 4, 115), locked to Dysnomia's 15.786-day orbit (Szakáts et al. + // 2023, A&A 669, L3). On the SBDB's figure it turned 14.6 times too fast. + { id: 'eris', name: 'Eris', kind: 'dwarf', horizonsCommand: '136199;', center: '500@10', sbdb: 'Eris', radiusKm: 1163, rotationPeriodHours: 15.771 * 24 }, { id: 'haumea', name: 'Haumea', kind: 'dwarf', horizonsCommand: '136108;', center: '500@10', sbdb: 'Haumea', radiusKm: 797.6 }, { id: 'makemake', name: 'Makemake', kind: 'dwarf', horizonsCommand: '136472;', center: '500@10', sbdb: 'Makemake', radiusKm: 715 }, { id: 'moon', name: 'Moon', kind: 'moon', horizonsCommand: '301', center: '500@399', parentBodyId: 'earth' }, @@ -206,9 +213,7 @@ export async function fetchSolarSystem(): Promise<{ bodies: BodyRecord[]; horizo // without W by. const rotationPeriodHours = result.tidallyLocked || (spec.kind === 'moon' && !spec.spinsFreely) ? (360 / mean.rates.meanMotionDegPerDay) * HOURS_PER_DAY - : smallBody - ? smallBody.rotationPeriodHours - : result.rotationPeriodHours; + : (spec.rotationPeriodHours ?? (smallBody ? smallBody.rotationPeriodHours : result.rotationPeriodHours)); const parentGm = spec.barycentric && spec.parentBodyId ? gmById.get(spec.parentBodyId) : undefined; if (spec.barycentric && (result.gmKm3PerS2 === undefined || parentGm === undefined)) { throw new Error(`${spec.name} and its planet need a GM each to place their barycentre.`);