@essrt/physics 7.0.0 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +2 -2
  2. package/package.json +4 -2
  3. package/src/constants/coefficients.d.ts +1 -38
  4. package/src/constants/coefficients.js +2 -5
  5. package/src/constants/generated.d.ts +109 -25
  6. package/src/constants/generated.js +226 -96
  7. package/src/earth/deep-orbital-history.cjs +10 -0
  8. package/src/earth/frame-of-date.cjs +105 -0
  9. package/src/eclipse/besselian.cjs +41 -17
  10. package/src/eclipse/sun-planetary-completion.cjs +55 -14
  11. package/src/index.js +9 -1
  12. package/src/model.js +262 -124
  13. package/src/moon/apparent.cjs +45 -126
  14. package/src/moon/deep-ecc-channel.cjs +59 -12
  15. package/src/moon/deep-modes-artifact.cjs +4 -2
  16. package/src/moon/month-chain.cjs +21 -10
  17. package/src/moon/series-extension.cjs +2 -1
  18. package/src/moon/series.cjs +21 -4
  19. package/src/planets/chain-artifact.js +2 -2
  20. package/src/planets/fibonacci-laws.cjs +7 -42
  21. package/src/planets/model.cjs +10 -13
  22. package/src/planets/secular-shape.cjs +36 -0
  23. package/src/planets/spin-channel.cjs +391 -0
  24. package/types/constants/coefficients.d.ts +1 -38
  25. package/types/constants/generated.d.ts +109 -25
  26. package/types/earth/deep-orbital-history.d.cts +2 -0
  27. package/types/earth/frame-of-date.d.cts +37 -0
  28. package/types/eclipse/besselian.d.cts +5 -7
  29. package/types/eclipse/sun-planetary-completion.d.cts +14 -10
  30. package/types/index.d.ts +3 -1
  31. package/types/model.d.ts +26 -0
  32. package/types/moon/apparent.d.cts +7 -68
  33. package/types/moon/deep-ecc-channel.d.cts +31 -2
  34. package/types/moon/deep-modes-artifact.d.cts +2 -0
  35. package/types/moon/month-chain.d.cts +4 -0
  36. package/types/planets/fibonacci-laws.d.cts +0 -29
  37. package/types/planets/model.d.cts +10 -4
  38. package/types/planets/secular-shape.d.cts +30 -0
  39. package/types/planets/spin-channel.d.cts +193 -0
  40. package/src/planets/predict.cjs +0 -324
  41. package/types/planets/predict.d.cts +0 -88
@@ -1,27 +1,37 @@
1
1
  /**
2
- * Moon apparent position — THE shared implementation (Phase 8.2-7, the
3
- * final lunar layer). The D5 derived optics + the post-hoc RA/Dec override:
2
+ * Moon scene position — the ecliptic → equatorial conversion of the series
3
+ * output, THE shared implementation (Phase 8.2-7). Since plan 06 R3 item 1 it
4
+ * is ONLY that conversion: the rendered Moon is the GEOMETRIC series Moon
5
+ * (moon/series.cjs sceneEvalAt, the derived extension inside), on the same
6
+ * convention as the rendered Sun and planets.
4
7
  *
5
- * - sunGeoVecEqD5: framework-native geocentric Sun vector (equatorial km).
6
- * e(T) from the anchored observed eccentricity + drift; EoC coefficients
7
- * DERIVED from e via the Kepler series (2e − e³/4, (5/4)e², (13/12)e³ —
8
- * the identity the D1 laboratory proved at 2 ppm); mean-longitude rate =
9
- * framework tropical year; mean-anomaly rate = that minus the H/16
10
- * perihelion rate; R from the AU distance; ε from the framework
11
- * obliquity. One J2000 anchor: sunMeanLongitudeJ2000_deg.
12
- * - moonAberrationRaDec: central-difference v_E/c annual aberration,
13
- * SUBTRACTED (delta TO the aberration-removed direction u − v/c).
14
- * - overrideRaDec: ecl→eq (Meeus eq. 13.3/13.4) on the series output,
15
- * then framework-native analytic aberration + the small fitted residual
16
- * (MOON_CORRECTION_RESIDUAL), or the legacy 3-argument fitted
17
- * MOON_CORRECTION in pure-Meeus A/B mode.
18
- *
19
- * LOAD-BEARING: the correction patch's hard-coded linear arguments
20
- * (297.850 + 12.19074912·dJD, 134.963 + 13.06499295·dJD,
21
- * 357.529 + 0.98560028·dJD) are DELIBERATELY independent of the argument
22
- * skeleton — the fitted coefficients were produced against THIS form
23
- * (coefficients and runtime form are a matched pair). Do not "unify" them
24
- * with the args dispatcher.
8
+ * WHAT LEFT, and the measurement that retired it (record; the values stay in
9
+ * git history and docs/retired-record.md):
10
+ * - the "D5 derived optics" — the annual aberration v_E/c applied to the
11
+ * Moon's direction ("moonAberrationRaDec"). That operation turns the
12
+ * geometric Moon into its ASTROMETRIC place (the body at emission time,
13
+ * the observer's aberration not applied — Horizons quantity 1, a
14
+ * star-chart convention 20″·cos D from both the geometric and the
15
+ * apparent Moon). D5 had validated against exactly that reference and
16
+ * so applied the REFERENCE'S convention to the RENDERED Moon. The scene
17
+ * is an orrery of where the bodies are — geometric: Earth's shadow is
18
+ * cast by the geometric Sun and the Moon enters it at its geometric
19
+ * place — so the conversion belongs to the comparison instrument (the
20
+ * pipeline verifier bridges it, tools/lib/optimizer.js), not to the
21
+ * scene. Measured over 1970–2049: the bare series + extension against
22
+ * Horizons' APPARENT Moon (≡ geometric − 0.7″ for a co-moving body)
23
+ * −1.0″ ± 1.5″ flat in elongation; the D5-shifted rendered Moon +32.5″ +
24
+ * 20″·cos D against the same. (Plan 06 R3 scene conventions — the
25
+ * earlier wording "wrong physics" over-reached: astrometric is a valid
26
+ * convention, applied on the wrong side of the boundary.)
27
+ * - the fitted RA/Dec patches MOON_CORRECTION (pure-Meeus A/B) and
28
+ * MOON_CORRECTION_RESIDUAL (the post-D5 remainder, dominated by a −5.1″
29
+ * raCosMp term): fitted around the layer above at syzygies; the series +
30
+ * extension carry a ~1.3″ cos M′ structure against Horizons and no fitted
31
+ * value replaces it.
32
+ * - the fitted mean-longitude anchor moonMeeusLpCorrection (+32.75″, now 0,
33
+ * model-parameters.json): the eclipse tier's mean Sun compensated (κ +
34
+ * the I2 long inequality + the trend-ΔT offset), see eclipse/besselian.cjs.
25
35
  *
26
36
  * S8 (obliquity source) stays ENGINE-INJECTED per call: the browser passes
27
37
  * its live scene value (o.obliquityEarth, refreshed in updatePositions);
@@ -32,122 +42,31 @@
32
42
  'use strict';
33
43
 
34
44
  /**
35
- * @typedef {{raSinD: number, raCosD: number, raSinMp: number, raCosMp: number,
36
- * raSinMs: number, raCosMs: number, decSinD: number, decCosD: number,
37
- * decSinMp: number, decCosMp: number, decSinMs: number, decCosMs: number}} MoonCorrectionTable
38
- */
39
-
40
- /**
41
- * @param {{
42
- * constants: {
43
- * j2000JD: number,
44
- * julianCenturyDays: number,
45
- * sunMeanLongitudeJ2000Deg: number,
46
- * perihelionLongitudeJ2000Deg: number,
47
- * eccentricityJ2000: number,
48
- * eccentricityDotJ2000: number,
49
- * d5RateLDegPerDay: number,
50
- * d5RatePeriDegPerDay: number,
51
- * speedOfLight: number,
52
- * },
53
- * fns: {
54
- * computeObliquityEarth: (year: number) => number,
55
- * getAuDistanceKm: () => number,
56
- * isFrameworkNative: () => boolean,
57
- * getCorrectionResidual: () => (MoonCorrectionTable | null),
58
- * getCorrectionLegacy: () => (MoonCorrectionTable | null),
59
- * },
60
- * }} deps — the D5 rates are the engines' J2000-frozen values (the year
61
- * globals are deep-time-mutable, same pattern as FW_A2_RATE); the AU
62
- * distance is a GETTER (browser-mutable under deep time).
45
+ * No dependencies since R3 item 1 (the former D5 optics constants and the
46
+ * fitted-patch getters are gone); the factory shape is kept for the two
47
+ * scene twins' call sites.
48
+ * @param {object} [_deps] ignored
63
49
  */
64
- function createMoonApparent({ constants, fns }) {
65
- const {
66
- j2000JD, julianCenturyDays, sunMeanLongitudeJ2000Deg,
67
- perihelionLongitudeJ2000Deg, eccentricityJ2000, eccentricityDotJ2000,
68
- d5RateLDegPerDay, d5RatePeriDegPerDay, speedOfLight,
69
- } = constants;
70
- const {
71
- computeObliquityEarth, getAuDistanceKm, isFrameworkNative,
72
- getCorrectionResidual, getCorrectionLegacy,
73
- } = fns;
74
-
75
- /** Framework-native geocentric Sun vector, equatorial km.
76
- * @param {number} jd @returns {[number, number, number]} */
77
- function sunGeoVecEqD5(jd) {
78
- const T = (jd - j2000JD) / julianCenturyDays;
79
- const d = jd - j2000JD;
80
- const L0 = sunMeanLongitudeJ2000Deg + d5RateLDegPerDay * d;
81
- const M = ((L0 - (perihelionLongitudeJ2000Deg + d5RatePeriDegPerDay * d)) + 180) * Math.PI / 180; // geocentric-perigee convention (Sun perigee = Earth perihelion + 180°)
82
- const e = eccentricityJ2000 + eccentricityDotJ2000 * T;
83
- const Ceq = ((2 * e - Math.pow(e, 3) / 4) * Math.sin(M)
84
- + 1.25 * e * e * Math.sin(2 * M)
85
- + (13 / 12) * Math.pow(e, 3) * Math.sin(3 * M)) * 180 / Math.PI; // deg (Kepler EoC series)
86
- const lam = (L0 + Ceq) * Math.PI / 180;
87
- const v = M + Ceq * Math.PI / 180;
88
- const R = (1 - e * e) / (1 + e * Math.cos(v)) * getAuDistanceKm();
89
- const eps = computeObliquityEarth(2000 + d / 365.2425) * Math.PI / 180;
90
- return [R * Math.cos(lam), R * Math.sin(lam) * Math.cos(eps), R * Math.sin(lam) * Math.sin(eps)];
91
- }
92
-
93
- /** Annual-aberration delta (central difference, v_E/c SUBTRACTED).
94
- * @param {number} jd @param {number} ra @param {number} dec
95
- * @returns {{dRA: number, dDec: number}} */
96
- function moonAberrationRaDec(jd, ra, dec) {
97
- const h = 0.02; // days (central difference)
98
- const a = sunGeoVecEqD5(jd - h), b = sunGeoVecEqD5(jd + h);
99
- const s = 1 / (2 * h * 86400 * speedOfLight);
100
- const kx = -(b[0] - a[0]) * s, ky = -(b[1] - a[1]) * s, kz = -(b[2] - a[2]) * s; // v_E/c
101
- const cd = Math.cos(dec);
102
- const ux = cd * Math.cos(ra), uy = cd * Math.sin(ra), uz = Math.sin(dec);
103
- const wx = ux - kx, wy = uy - ky, wz = uz - kz; // SUBTRACT the aberration content
104
- const wr = Math.sqrt(wx * wx + wy * wy + wz * wz);
105
- let dRA = Math.atan2(wy, wx) - ra;
106
- dRA = Math.atan2(Math.sin(dRA), Math.cos(dRA));
107
- return { dRA, dDec: Math.asin(Math.max(-1, Math.min(1, wz / wr))) - dec };
108
- }
109
-
110
- /** The post-hoc RA/Dec override on the series output. Returns EQUATORIAL
111
- * radians — the engines own their scene storage conventions (the browser
112
- * stores dec as π/2 − dec, phi form).
113
- * @param {{lonDeg: number, betRad: number, meeusT: (number | undefined), obliquityDeg: number}} p
50
+ function createMoonApparent(_deps) {
51
+ /** The RA/Dec of the series output — ecliptic → equatorial (Meeus eq. 13.3,
52
+ * 13.4) on the injected obliquity. Returns EQUATORIAL radians — the engines
53
+ * own their scene storage conventions (the browser stores dec as π/2 − dec,
54
+ * phi form). `meeusT` is accepted for call-site stability and unused.
55
+ * @param {{lonDeg: number, betRad: number, meeusT?: (number | undefined), obliquityDeg: number}} p
114
56
  * @returns {{raRad: number, decRad: number}} */
115
- function overrideRaDec({ lonDeg, betRad, meeusT, obliquityDeg }) {
57
+ function overrideRaDec({ lonDeg, betRad, obliquityDeg }) {
116
58
  const eps = obliquityDeg * (Math.PI / 180);
117
59
  const cosE = Math.cos(eps), sinE = Math.sin(eps);
118
60
  const lamR = lonDeg * (Math.PI / 180);
119
61
  const sinLam = Math.sin(lamR), cosLam = Math.cos(lamR);
120
62
  const sinBet = Math.sin(betRad), cosBet = Math.cos(betRad);
121
-
122
- // Ecliptic → equatorial (Meeus eq. 13.3, 13.4)
123
63
  let newRA = Math.atan2(sinLam * cosE - Math.tan(betRad) * sinE, cosLam);
124
64
  if (newRA < 0) newRA += 2 * Math.PI;
125
- let newDec = Math.asin(sinBet * cosE + cosBet * sinE * sinLam);
126
-
127
- if (isFrameworkNative()) {
128
- const ab = moonAberrationRaDec(j2000JD + (meeusT || 0) * julianCenturyDays, newRA, newDec);
129
- newRA += ab.dRA;
130
- newDec += ab.dDec;
131
- }
132
- const mc = isFrameworkNative() ? getCorrectionResidual() : getCorrectionLegacy();
133
- if (mc) {
134
- const d2r = Math.PI / 180;
135
- const dJD = (meeusT || 0) * julianCenturyDays;
136
- // MATCHED-PAIR arguments — fitted against these exact linear forms.
137
- const Dc = (297.850 + 12.19074912 * dJD) * d2r;
138
- const Mpc = (134.963 + 13.06499295 * dJD) * d2r;
139
- const Msc = (357.529 + 0.98560028 * dJD) * d2r;
140
- newRA -= (mc.raSinD * Math.sin(Dc) + mc.raCosD * Math.cos(Dc)
141
- + mc.raSinMp * Math.sin(Mpc) + mc.raCosMp * Math.cos(Mpc)
142
- + mc.raSinMs * Math.sin(Msc) + mc.raCosMs * Math.cos(Msc)) * d2r;
143
- newDec -= (mc.decSinD * Math.sin(Dc) + mc.decCosD * Math.cos(Dc)
144
- + mc.decSinMp * Math.sin(Mpc) + mc.decCosMp * Math.cos(Mpc)
145
- + mc.decSinMs * Math.sin(Msc) + mc.decCosMs * Math.cos(Msc)) * d2r;
146
- }
65
+ const newDec = Math.asin(sinBet * cosE + cosBet * sinE * sinLam);
147
66
  return { raRad: newRA, decRad: newDec };
148
67
  }
149
68
 
150
- return { sunGeoVecEqD5, moonAberrationRaDec, overrideRaDec };
69
+ return { overrideRaDec };
151
70
  }
152
71
 
153
72
  module.exports = { createMoonApparent };
@@ -45,14 +45,41 @@
45
45
  'use strict';
46
46
 
47
47
  /**
48
+ * THE SLOPE ANCHOR (owner-approved model change, after the Moon panels).
49
+ * The 18-term table reproduces the attractor and the 405-kyr beat, but
50
+ * nothing constrained its local DERIVATIVE at J2000: measured, its ė read
51
+ * −5.00e-5/cy against the run's own −4.24e-5 (and the observed −4.20e-5),
52
+ * a 19 % slope error that the lunar chain multiplied straight into the
53
+ * perigee and node curvature (−44″/cy² against Meeus's −37″/cy² — the
54
+ * "18 % split" the Moon precession panels showed). Against the ±10-Myr
55
+ * series the table compresses, the error is a LINEAR vector drift of
56
+ * 2.25e-4 per kyr out to ±20 kyr (an unresolved ultra-long mode), then
57
+ * spectrum-class either way. So the anchored form gains a second,
58
+ * BOUNDED term of the same class as the constant remainder:
59
+ *
60
+ * z(t) = Σ … + (z_J2000 − Σ(0)) + (ż_J2000 − Σ̇(0))·I(t),
61
+ * I(t) = ∫₀ᵗ cos²(π τ / 2T_q) dτ (the arguments' taper: linear near
62
+ * J2000, saturating at ±T_q/2 beyond |t| ≥ T_q)
63
+ *
64
+ * — ż_J2000 is the run's own z-rate at J2000 (script-written into the
65
+ * artifact by generate.mjs from the banked series: "we are the source"),
66
+ * T_q the H/12 taper the arguments' rate anchors ride. Inside the canon it
67
+ * restores the run's slope exactly; beyond ±T_q it is a constant vector
68
+ * offset of ~3e-3, the size of the table's own spectrum-class scatter
69
+ * there, never a growing polynomial. Absent the two fields (an older
70
+ * artifact), the channel is the value-anchored form above, unchanged.
71
+ *
48
72
  * @param {{
49
73
  * earthZ: ReadonlyArray<{omegaRadPerYr: number, re: number, im: number}>,
50
74
  * anchorE: number,
51
75
  * anchorPeriEclipticDeg: number,
76
+ * anchorZDotPerYr?: ReadonlyArray<number>,
77
+ * slopeTaperYears?: number,
52
78
  * }} artifact — the embedded deep-modes artifact (earth z-modes + the J2000
53
- * anchor pair joined from the chain artifact's one home).
79
+ * anchor pair joined from the chain artifact's one home, + the J2000
80
+ * z-rate pair and the taper from the series' one home).
54
81
  */
55
- function createDeepEccChannel({ earthZ, anchorE, anchorPeriEclipticDeg }) {
82
+ function createDeepEccChannel({ earthZ, anchorE, anchorPeriEclipticDeg, anchorZDotPerYr, slopeTaperYears }) {
56
83
  const D2R = Math.PI / 180;
57
84
  const zA = [anchorE * Math.cos(anchorPeriEclipticDeg * D2R), anchorE * Math.sin(anchorPeriEclipticDeg * D2R)];
58
85
  /** @param {number} tYr @returns {[number, number]} */
@@ -65,27 +92,47 @@ function createDeepEccChannel({ earthZ, anchorE, anchorPeriEclipticDeg }) {
65
92
  }
66
93
  return [re, im];
67
94
  };
95
+ /** dΣ/dt (per year) — analytic. @param {number} tYr @returns {[number, number]} */
96
+ const modeSumRate = (tYr) => {
97
+ let dx = 0, dy = 0;
98
+ for (const m of earthZ) {
99
+ const c = Math.cos(m.omegaRadPerYr * tYr), s = Math.sin(m.omegaRadPerYr * tYr);
100
+ dx += m.omegaRadPerYr * (-m.re * s - m.im * c);
101
+ dy += m.omegaRadPerYr * (m.re * c - m.im * s);
102
+ }
103
+ return [dx, dy];
104
+ };
68
105
  const s0 = modeSum(0);
69
106
  const R = [zA[0] - s0[0], zA[1] - s0[1]]; // the constant remainder
107
+ // the slope anchor: the run's J2000 z-rate minus the table's, through the taper
108
+ const Tq = (anchorZDotPerYr && typeof slopeTaperYears === 'number' && slopeTaperYears > 0) ? slopeTaperYears : 0;
109
+ const sDot0 = modeSumRate(0);
110
+ const DZ = Tq > 0 && anchorZDotPerYr ? [anchorZDotPerYr[0] - sDot0[0], anchorZDotPerYr[1] - sDot0[1]] : [0, 0];
111
+ /** ∫₀ᵗ cos²(π τ / 2T_q) dτ, saturating at ±T_q/2. @param {number} t */
112
+ const iEnv = (t) => {
113
+ if (Tq <= 0) return 0;
114
+ if (Math.abs(t) >= Tq) return Math.sign(t) * Tq / 2;
115
+ return t / 2 + (Tq / (2 * Math.PI)) * Math.sin(Math.PI * t / Tq);
116
+ };
117
+ /** cos²(π t / 2T_q), 0 beyond |t| ≥ T_q — dI/dt. @param {number} t */
118
+ const env = (t) => (Tq <= 0 || Math.abs(t) >= Tq) ? 0 : Math.cos(Math.PI * t / (2 * Tq)) ** 2;
70
119
 
71
120
  /** Earth's e at tYr years from J2000 (negative = past).
72
121
  * @param {number} tYr @returns {number} */
73
122
  function eccAt(tYr) {
74
123
  const [x, y] = modeSum(tYr);
75
- return Math.hypot(x + R[0], y + R[1]);
124
+ const I = iEnv(tYr);
125
+ return Math.hypot(x + R[0] + DZ[0] * I, y + R[1] + DZ[1] * I);
76
126
  }
77
127
 
78
- /** de/dyear — analytic from the mode sum: d|z|/dt = (z·ż)/|z|.
79
- * @param {number} tYr @returns {number} */
128
+ /** de/dyear — analytic: d|z|/dt = (z·ż)/|z|, the slope anchor's
129
+ * tapered rate included. @param {number} tYr @returns {number} */
80
130
  function eccRateAt(tYr) {
81
131
  const [x0, y0] = modeSum(tYr);
82
- const x = x0 + R[0], y = y0 + R[1];
83
- let dx = 0, dy = 0;
84
- for (const m of earthZ) {
85
- const c = Math.cos(m.omegaRadPerYr * tYr), s = Math.sin(m.omegaRadPerYr * tYr);
86
- dx += m.omegaRadPerYr * (-m.re * s - m.im * c);
87
- dy += m.omegaRadPerYr * (m.re * c - m.im * s);
88
- }
132
+ const I = iEnv(tYr), E = env(tYr);
133
+ const x = x0 + R[0] + DZ[0] * I, y = y0 + R[1] + DZ[1] * I;
134
+ const [dx0, dy0] = modeSumRate(tYr);
135
+ const dx = dx0 + DZ[0] * E, dy = dy0 + DZ[1] * E;
89
136
  const r = Math.hypot(x, y);
90
137
  return r === 0 ? 0 : (x * dx + y * dy) / r;
91
138
  }
@@ -7,7 +7,9 @@
7
7
  * emitted VERBATIM, plus the J2000 anchor pair (e, ϖ) joined from
8
8
  * data/nbody-secular-frequencies.json j2000AnchorElements.earth — the
9
9
  * anchor's ONE home, plus the per-planet leading proper ζ modes (″/yr,
10
- * the C-4 s-lines for the zoom labels — doc 109 §19). Two gates guard
10
+ * the C-4 s-lines for the zoom labels — doc 109 §19), plus the J2000
11
+ * z-rate pair from data/nbody-secular-series.json (the slope anchor of
12
+ * the deep eccentricity channel) and its H/12 taper. Two gates guard
11
13
  * the chain: check:artifacts pins artifact ↔ engine; generate.mjs
12
14
  * check mode pins this embed ↔ artifact.
13
15
  * CJS because the lunar-chain consumers are CommonJS modules.
@@ -16,6 +18,6 @@
16
18
 
17
19
  const DEEP_MODES_ARTIFACT_HASH = "77e0baf779e85de5";
18
20
 
19
- const DEEP_MODES_ARTIFACT = Object.freeze({"meta":{"integrator":"wh","order":2,"dtDays":2,"spanYears":20000000,"sampleDays":20000,"gr":true,"seed":"JPL Horizons J2000 heliocentric state vectors (tools/explore/j2000-state.mjs, the one home)","masses":"DE440 mass ratios (astro-reference physicalConstants)","runCommand":"node tools/explore/lattice-long-window-test.mjs years=20000000 integrator=wh dt=2 order=2 gr=1 frame=both sample=20000","dumpFile":"tools/explore/lattice-long-window-ecliptic-20000000-gr.local.json (untracked, 337 MB)","dumpSha256":"686d6af51a689f7bd64ac1e2d8b26c243a4beccdacd3167adfeeae078e8b990f","conservationMaxDE":1.2738960401328902e-8,"decimation":4,"naffTerms":18,"naffZetaTerms":16,"naffZetaTermsEra":8,"frame":"ecliptic-J2000 (z-modes for the lunar-chain e; ζ-modes for the Stage-C obliquity hybrid — the invariable-frame ζ table remains unbanked, no consumer)","laskarRef":"Laskar, J. et al. (2004), A&A 428, 261–285, Table 3 (theory reference labels)"},"verdict":{"strongestBeatPeriodKyr":405.625567477903,"strongestBeatArcsecPerYr":3.195064867479295,"la2004BeatPeriodKyr":405.6972922210049,"rockMetronomeKyr":405.6,"companion124Kyr":123.84617993487997,"companion95Kyr":94.87791796545507,"earthLeadingModesArcsecPerYr":[4.257358971029763,7.452423838509057,17.917017907389138,17.368946405872247],"topBeatLines":[{"periodKyr":405.625567477903,"productAmp":0.0003123310080848341},{"periodKyr":94.87791796545507,"productAmp":0.00024338439758855827},{"periodKyr":123.84617993487997,"productAmp":0.00020980875877847502},{"periodKyr":98.84386665157218,"productAmp":0.00016694824937892253},{"periodKyr":130.6909747037068,"productAmp":0.00014391721626151482},{"periodKyr":2364.6549700414625,"productAmp":0.00011214770251987629},{"periodKyr":972.3103697584877,"productAmp":0.00007218142389142678},{"periodKyr":695.9670418382926,"productAmp":0.00006222377072471454}],"note":"g5 matches La2004 to 0.0002 ″/yr; the beat gap vs 405.6 is g2 (chaotic-diffusion window sensitivity + omitted separate-Moon/asteroid terms) — the anatomy is the plan’s Stage-B record."},"earthZ":[{"omegaRadPerYr":0.000020640258745496456,"re":0.01640837548946667,"im":0.00964771830356857},{"omegaRadPerYr":0.00003613037034336034,"re":-0.015519645105303494,"im":-0.005327718511512781},{"omegaRadPerYr":0.00008686415406186803,"re":-0.011108307303646387,"im":0.0063324002417276355},{"omegaRadPerYr":0.00008420702844025169,"re":0.005504442820656899,"im":-0.006828487155118338},{"omegaRadPerYr":0.000027102377738159537,"re":0.0005990602912422896,"im":0.0037445139104202996},{"omegaRadPerYr":0.00008284690006982035,"re":0.002385900412412394,"im":0.0008687520930649916},{"omegaRadPerYr":0.00008551634076169395,"re":0.0012667960543480752,"im":0.001284547912075711},{"omegaRadPerYr":0.00008156882804453768,"re":-0.0003413759390549155,"im":0.0016823570425905205},{"omegaRadPerYr":0.000033456117700854,"re":-0.0012412588643094782,"im":0.0009318258971565654},{"omegaRadPerYr":0.00013693625799603712,"re":-0.0009261214276803977,"im":0.0011910509606790575},{"omegaRadPerYr":0.00008736463294475958,"re":0.0013199280789047622,"im":0.0009530586967429039},{"omegaRadPerYr":0.00008630679999141721,"re":-0.00038871245410104777,"im":0.0009912036911146165},{"omegaRadPerYr":0.000026453632677170472,"re":-0.00032615534646350156,"im":-0.0018102501817831135},{"omegaRadPerYr":0.000034145978925786535,"re":0.0009480778866315119,"im":-0.0008230502200947101},{"omegaRadPerYr":0.00003548085475024487,"re":-0.0013007947815593653,"im":-0.00042439393044846465},{"omegaRadPerYr":0.00008951127418467436,"re":-0.0010559339979945592,"im":-0.000005975184481501219},{"omegaRadPerYr":0.00008814769888639652,"re":-0.0003392982459796931,"im":-0.00126615007571311},{"omegaRadPerYr":0.000027692559180942054,"re":0.0004455147622140075,"im":0.0013147856084997915}],"earthZeta":[{"omegaRadPerYr":-6.480692835562015e-14,"re":-0.004134427250631887,"im":0.013144207689667023},{"omegaRadPerYr":-0.00009139020514696892,"re":-0.003762846299946732,"im":-0.007417313993526907},{"omegaRadPerYr":-0.00002707802193107254,"re":0.004228758817782956,"im":0.001552899971393225},{"omegaRadPerYr":-0.00008608086641122392,"re":0.0012161313006493822,"im":-0.0038454411181687697},{"omegaRadPerYr":-0.00003414305478233622,"re":-0.0030829972319892183,"im":0.002522672469285971},{"omegaRadPerYr":-0.00008873899569559657,"re":-0.00020769480131372744,"im":-0.0026850953462850356},{"omegaRadPerYr":-0.00003333897395226539,"re":0.0006468387853619108,"im":-0.0008212555187612507},{"omegaRadPerYr":-0.000034707554013716744,"re":0.0012115602030611985,"im":-0.0008603813396121053},{"omegaRadPerYr":-0.00009404694793046069,"re":0.001124843496312146,"im":0.0009724617908785189},{"omegaRadPerYr":-0.00002647193861971907,"re":0.001606075294689031,"im":0.0005931944911952478},{"omegaRadPerYr":-0.00003277702706161178,"re":0.0005051745779261483,"im":-0.0006705412769950699},{"omegaRadPerYr":-0.00012773805775388969,"re":-0.0008122347824469044,"im":0.0010593881606687687},{"omegaRadPerYr":-0.00009269956713813446,"re":-0.0006909282558950976,"im":0.0004135096481099148},{"omegaRadPerYr":-0.000014507597324441827,"re":-0.0006470785128404058,"im":0.00057746649029071},{"omegaRadPerYr":-0.000033761896788929335,"re":0.001157822428032179,"im":-0.000690971407290411},{"omegaRadPerYr":-0.000028297573329000286,"re":-0.0011184968821771682,"im":-0.0003885179122647609}],"earthZetaEra":[{"omegaRadPerYr":-6.480692835562015e-14,"re":-0.004136170228858843,"im":0.013147349898750587},{"omegaRadPerYr":-0.00009139020514696892,"re":-0.0037451120264298888,"im":-0.007367103224447289},{"omegaRadPerYr":-0.00002707802193107254,"re":0.004192460536906565,"im":0.0015465498581850507},{"omegaRadPerYr":-0.00008608086641122392,"re":0.0012039767467140353,"im":-0.0038572667358382287},{"omegaRadPerYr":-0.00003414305478233622,"re":-0.0032014533879969596,"im":0.0025701217059533803},{"omegaRadPerYr":-0.00008873899569559657,"re":-0.00021856508120855303,"im":-0.002669820778092242},{"omegaRadPerYr":-0.00003333897395226539,"re":0.0003478573166468341,"im":-0.0006130210720886913},{"omegaRadPerYr":-0.000034707554013716744,"re":0.0012188003710118757,"im":-0.000879354385952938}],"planetLeadingZetaArcsecPerYr":{"mercury":-5.583654095308831,"venus":-18.85062201283722,"earth":-18.850582957521933,"mars":-17.75551746317749,"jupiter":-26.34785064223289,"saturn":-26.34785063789155,"uranus":-2.992403454072025,"neptune":-0.6916261380439003},"planetZ":{"mercury":[{"omegaRadPerYr":0.000027101464787379005,"re":0.036443059874745144,"im":0.15312012416846857},{"omegaRadPerYr":0.00002645682320158395,"re":-0.014115236278813163,"im":-0.07933183704397909},{"omegaRadPerYr":0.000027695768774324655,"re":0.014883065162550294,"im":0.04770421699238349},{"omegaRadPerYr":0.000020608825679123343,"re":0.0339424735092415,"im":0.0205886131133393},{"omegaRadPerYr":0.00003613198806683821,"re":0.026373724217244415,"im":0.007998632845938181},{"omegaRadPerYr":0.000025943085765069145,"re":-0.00008287402030671245,"im":0.01382534867142278},{"omegaRadPerYr":0.000021259366308985905,"re":-0.010921101889740678,"im":-0.005391042758241112},{"omegaRadPerYr":0.000033442897144222473,"re":-0.006298873452719107,"im":0.004846731368887027},{"omegaRadPerYr":0.000027342847424225136,"re":-0.031441801079617394,"im":-0.0012828182325896284},{"omegaRadPerYr":0.000026863603353307064,"re":-0.0023658597755055214,"im":0.03845436133115692},{"omegaRadPerYr":0.000029077390952304336,"re":-0.0056672065762804385,"im":0.008668504999729803},{"omegaRadPerYr":0.000025324686199132127,"re":-0.005942232736715857,"im":-0.012274661661212959},{"omegaRadPerYr":0.00002979754974875923,"re":0.0008097924308674098,"im":-0.0064472013829302505},{"omegaRadPerYr":0.000019992412184743173,"re":0.012472217201012077,"im":0.00359833652112381},{"omegaRadPerYr":0.00002454697962536287,"re":0.0020556509667169235,"im":0.0009916346793612978},{"omegaRadPerYr":0.00002812715748715012,"re":-0.002051758629227311,"im":-0.0033287955771129805},{"omegaRadPerYr":0.000019449369227596397,"re":-0.0038021090567115627,"im":-0.0028426209995905025}],"venus":[{"omegaRadPerYr":0.00003613032718771122,"re":-0.020105324941805183,"im":-0.006917696377202324},{"omegaRadPerYr":0.000020639950705137238,"re":0.017068955357371025,"im":0.010006500628836495},{"omegaRadPerYr":0.00008686450325171618,"re":0.011426811376444728,"im":-0.006520605414974846},{"omegaRadPerYr":0.00008420762005329659,"re":-0.006892443369184228,"im":0.008472548929406779},{"omegaRadPerYr":0.000027101843398089462,"re":0.0009492363872320767,"im":0.005898626241129876},{"omegaRadPerYr":0.00008284929259321451,"re":-0.0030327325912061806,"im":-0.0010976776908548803},{"omegaRadPerYr":0.00008156590133143486,"re":0.0004654494107565469,"im":-0.002280587631810283},{"omegaRadPerYr":0.00003345630943302872,"re":-0.0017828402597892042,"im":0.0012954758789217673},{"omegaRadPerYr":0.00008551538095828359,"re":-0.0011609215700463195,"im":-0.0012677518151850962},{"omegaRadPerYr":0.00002645314323665865,"re":-0.0005187468879242992,"im":-0.0028561425016264542},{"omegaRadPerYr":0.000034145633629733906,"re":0.0012933573208605794,"im":-0.001139818586425855},{"omegaRadPerYr":0.00002769519215699273,"re":0.000692247567326856,"im":0.0020562801187020375},{"omegaRadPerYr":0.00003548134649993586,"re":-0.0017504367473210652,"im":-0.0005759353131695786},{"omegaRadPerYr":0.00008736396981192052,"re":-0.0013474628838071549,"im":-0.000992885318268049},{"omegaRadPerYr":0.00008630854715331631,"re":0.0003763610849158857,"im":-0.0010611470059873186},{"omegaRadPerYr":0.00003678579378710168,"re":0.0015965344500683718,"im":0.0003260227593096117},{"omegaRadPerYr":0.00008814539612129297,"re":0.00043027029421162,"im":0.0012698103607611786},{"omegaRadPerYr":0.00009215946508724939,"re":-0.0008157163462856423,"im":-0.0001752965015353975}],"mars":[{"omegaRadPerYr":0.00008686194427246272,"re":0.04150468181977603,"im":-0.02235805720891878},{"omegaRadPerYr":0.00008420997062723613,"re":0.024191159406394575,"im":-0.02897798440552211},{"omegaRadPerYr":0.000020640675066908026,"re":0.01752920390659033,"im":0.010379054381833624},{"omegaRadPerYr":0.00008155902048560256,"re":-0.005126487019269018,"im":0.017498780322239615},{"omegaRadPerYr":0.00008951470797098792,"re":0.012453460704855819,"im":-0.0011162639997386022},{"omegaRadPerYr":0.00008286071984936754,"re":0.012151786749976757,"im":0.005285572685028835},{"omegaRadPerYr":0.00008552376356754678,"re":-0.008207026797923043,"im":-0.006506174683766466},{"omegaRadPerYr":0.00013693612216296713,"re":-0.004303426290032767,"im":0.005495751915005897},{"omegaRadPerYr":0.0000863140674359666,"re":0.003378196925346155,"im":-0.0035707297870487854},{"omegaRadPerYr":0.00009216418711866517,"re":0.004180141329638833,"im":0.001239878529646219},{"omegaRadPerYr":0.00008815294634884687,"re":0.0015478422945863473,"im":0.005394318221250823},{"omegaRadPerYr":0.00008737006869414014,"re":-0.004859264335556832,"im":-0.002468706141182086},{"omegaRadPerYr":0.00008474936320624016,"re":-0.0037175110079883836,"im":0.0005712305102614905},{"omegaRadPerYr":0.00003613060911836741,"re":-0.002878165082426005,"im":-0.0009813871463689},{"omegaRadPerYr":0.00008323445042360793,"re":-0.0021030674464516,"im":0.002382835034113347},{"omegaRadPerYr":0.00008591714206468895,"re":0.00033705398396163035,"im":-0.0031641077910174956},{"omegaRadPerYr":0.00008022543440532314,"re":0.0014077256319658448,"im":0.00023992196561432362},{"omegaRadPerYr":0.0000900335871717643,"re":-0.0007652388036231974,"im":-0.0015581764537776826}],"jupiter":[{"omegaRadPerYr":0.00002064075395335189,"re":0.038028034576741906,"im":0.022474419029067216},{"omegaRadPerYr":0.00013693627466777967,"re":0.009616177715621049,"im":-0.012410735192913122},{"omegaRadPerYr":0.000014970699552264387,"re":-0.0009276176888746422,"im":0.0015645820896462246},{"omegaRadPerYr":0.00025323179539978545,"re":0.0004059157737100984,"im":0.00040456376985595945},{"omegaRadPerYr":0.0001312662749926737,"re":-0.00015614354905163857,"im":-0.00012183629827031596},{"omegaRadPerYr":0.0001426061431474546,"re":-0.00015326196073912603,"im":-0.00011811188348776635},{"omegaRadPerYr":0.00014000309579914057,"re":0.00010317940519689781,"im":0.00006505029768233116},{"omegaRadPerYr":0.00013386863466366606,"re":0.00007960628300069755,"im":0.0000757581826985722},{"omegaRadPerYr":0.0012496810113814863,"re":3.5498901583457483e-9,"im":7.528217439557287e-9}],"saturn":[{"omegaRadPerYr":0.00013693627469533272,"re":-0.02951381641782599,"im":0.038116342187048506},{"omegaRadPerYr":0.000020640753964721574,"re":0.028361784183640975,"im":0.016761738089661193},{"omegaRadPerYr":0.0002532317954411971,"re":-0.0013588658390314074,"im":-0.0013542513704600167},{"omegaRadPerYr":0.000014970698207898392,"re":-0.0007732461228524056,"im":0.0013033726384504506},{"omegaRadPerYr":0.00013126626734545323,"re":0.000471597345592877,"im":0.0003662972802790016},{"omegaRadPerYr":0.00014260613959102947,"re":0.00046558535071819594,"im":0.0003604428232502375},{"omegaRadPerYr":0.0012496810120112478,"re":-2.2413816213183782e-8,"im":-4.3761227707856587e-8}],"uranus":[{"omegaRadPerYr":0.000020640753931894893,"re":-0.03238248798724911,"im":-0.019137541918709554},{"omegaRadPerYr":0.00001497070511159062,"re":-0.014798949407797135,"im":0.024975442503237483},{"omegaRadPerYr":0.000003264464996922227,"re":0.00045075801975650074,"im":0.0016050091168723338},{"omegaRadPerYr":0.00013693627457864556,"re":0.0009471352229324553,"im":-0.0012234989208774374},{"omegaRadPerYr":0.00000929092310040761,"re":-0.0004015633445553787,"im":-0.0002340983045129561},{"omegaRadPerYr":0.00002631265778975313,"re":0.00022664443272842668,"im":-0.0003767093309339966},{"omegaRadPerYr":0.000014377069742263513,"re":0.00005819778777828242,"im":-0.00005910629719132463},{"omegaRadPerYr":0.000630109378889249,"re":-1.1513321171782036e-7,"im":2.121111820496366e-7}],"neptune":[{"omegaRadPerYr":0.000003264141494649585,"re":0.0024665853980857314,"im":0.008775596228059238},{"omegaRadPerYr":0.000014970655663003607,"re":0.0018888606403837439,"im":-0.0031894015693886913},{"omegaRadPerYr":0.00002064075339053921,"re":0.001629524897365034,"im":0.0009616466536353474},{"omegaRadPerYr":-0.00011593914172939557,"re":7.926785905418971e-8,"im":-4.6685992002385664e-8}]},"planetZeta":{"mercury":[{"omegaRadPerYr":-0.000027070318959890106,"re":0.03509799360084889,"im":0.012514361334229175},{"omegaRadPerYr":-0.000034136904111019706,"re":0.02695969560580955,"im":-0.02182848736661456},{"omegaRadPerYr":-0.000034710315380555884,"re":-0.012559168496773116,"im":0.008299078079729882},{"omegaRadPerYr":-0.00002646765287895232,"re":0.015448524016084493,"im":0.005987672372630069},{"omegaRadPerYr":-0.00003340798156431758,"re":-0.006455019023356067,"im":0.006226120154816196},{"omegaRadPerYr":5.384799590336571e-11,"re":-0.0039804878272654606,"im":0.013070100663895403},{"omegaRadPerYr":-0.000032847026422583094,"re":-0.0057003023891457685,"im":0.005259105004808747},{"omegaRadPerYr":-0.00003594792939956603,"re":-0.0012961241060881503,"im":0.0016159947697806383},{"omegaRadPerYr":-0.000025076126902622893,"re":0.0009463621131951934,"im":0.004877886245061111},{"omegaRadPerYr":-0.00003524962055187364,"re":0.0036108114629212922,"im":-0.004623693257308201},{"omegaRadPerYr":-0.000024475658963257535,"re":0.000022935888716433717,"im":-0.004353014017229704},{"omegaRadPerYr":-0.00003379278995294136,"re":-0.007806785352862373,"im":0.004006431979329447},{"omegaRadPerYr":-0.00003218755893963215,"re":-0.003704818024406685,"im":0.0011960062285103251},{"omegaRadPerYr":-0.000028313967733473683,"re":-0.007360063597313632,"im":-0.002796682485956438},{"omegaRadPerYr":-0.000027441506455909732,"re":0.005714284626147598,"im":-0.00031320953109534994},{"omegaRadPerYr":-0.000025718824169110346,"re":-0.00022772395090882533,"im":-0.00196911848110608}],"venus":[{"omegaRadPerYr":-1.6493179814802074e-12,"re":-0.0041316378307605294,"im":0.013147230899595441},{"omegaRadPerYr":-0.00009139039449248062,"re":0.004107318311959544,"im":0.008097727638340723},{"omegaRadPerYr":-0.000027077829093903624,"re":0.005723184464233101,"im":0.002103989760517981},{"omegaRadPerYr":-0.0000860809730098796,"re":-0.0017575781212555862,"im":0.005497182235759365},{"omegaRadPerYr":-0.00003414333446857137,"re":-0.0036683665695228925,"im":0.0029729549111848722},{"omegaRadPerYr":-0.0000887389845132903,"re":0.00017437292720263114,"im":0.002839346558623874},{"omegaRadPerYr":-0.00003332402755350087,"re":0.0008226456090349229,"im":-0.000990196523458664},{"omegaRadPerYr":-0.00003470699633273722,"re":0.0013981977987789472,"im":-0.0010036696718058783},{"omegaRadPerYr":-0.00002647213755615405,"re":0.002192723581813546,"im":0.0008156688371823413},{"omegaRadPerYr":-0.00009404722529229626,"re":-0.001310202146639285,"im":-0.0011534120915617934},{"omegaRadPerYr":-0.00003276165702381588,"re":0.0005497404769706646,"im":-0.0007663000693998108},{"omegaRadPerYr":-0.00009269906010008638,"re":0.000774314512799505,"im":-0.0004388675219967948},{"omegaRadPerYr":-0.00003375443573456643,"re":0.0014500491408612449,"im":-0.0008824349886108636},{"omegaRadPerYr":-0.000014507610514643914,"re":-0.0007092452594379532,"im":0.000644027430133631},{"omegaRadPerYr":-0.00002829966619518156,"re":-0.0015021530175610535,"im":-0.0005258063199032051},{"omegaRadPerYr":-0.00003214220556483202,"re":0.0006661181436053425,"im":-0.0002653316593905635}],"mars":[{"omegaRadPerYr":-0.00008608117781327729,"re":0.01021076871109231,"im":-0.03356452939087538},{"omegaRadPerYr":-0.00009138911102981668,"re":0.006448673929855857,"im":0.013039152420792278},{"omegaRadPerYr":4.816071417209985e-13,"re":-0.004136702437859971,"im":0.013131620521733377},{"omegaRadPerYr":-0.00008873924259238756,"re":0.000719141598532243,"im":0.006332417454417071},{"omegaRadPerYr":-0.00008342553512204505,"re":-0.003385387773112122,"im":0.004320169865314299},{"omegaRadPerYr":-0.00012773796958870522,"re":-0.002768952254262225,"im":0.0036533714419055593},{"omegaRadPerYr":-0.00008732462124121245,"re":0.002315330060230354,"im":0.00021373005960354581},{"omegaRadPerYr":-0.00008533729428600537,"re":0.0000662084835502976,"im":0.0014041635383156973},{"omegaRadPerYr":-0.0000927013779034122,"re":0.0012004630656653568,"im":-0.0007842461095443991},{"omegaRadPerYr":-0.00008675666306804544,"re":0.0007084511153542455,"im":-0.0008188292363296188},{"omegaRadPerYr":-0.00008568093272163965,"re":-0.0022269947606386804,"im":-0.0002915189256492408},{"omegaRadPerYr":-0.0000920127905544982,"re":-0.00012713738691022227,"im":0.0011838067237884178},{"omegaRadPerYr":-0.00008937418687447559,"re":-0.0002755627620382867,"im":0.0007026683188238479},{"omegaRadPerYr":-0.00002707848026399503,"re":0.0008884002528900317,"im":0.00034005750138313076},{"omegaRadPerYr":-0.00009092889696047022,"re":-0.00043281332848104276,"im":0.0003922132913606256},{"omegaRadPerYr":-0.00009004802546465118,"re":0.0008966966123701487,"im":-0.0005174229841345629}],"jupiter":[{"omegaRadPerYr":3.8532251623886294e-13,"re":-0.0041611376264940984,"im":0.013131043712311021},{"omegaRadPerYr":-0.0001277379845918518,"re":0.0019098261437600508,"im":-0.002505661007425496},{"omegaRadPerYr":-0.000003353110004279269,"re":0.0005277820779376669,"im":0.000232885172945674},{"omegaRadPerYr":-0.000014507601866590341,"re":-0.0003702089817814631,"im":0.00030787406163905093},{"omegaRadPerYr":-0.00013080293768331143,"re":-0.000017471248168841094,"im":-0.00001634692544524867},{"omegaRadPerYr":-0.000011442276716160314,"re":0.000012459821928796665,"im":0.00001269474660145274},{"omegaRadPerYr":0.0004016105340997148,"re":0.000008813036156379482,"im":-0.00001120905836048329},{"omegaRadPerYr":-0.00000882703119796523,"re":0.000007828457504338726,"im":0.000007811495266844502},{"omegaRadPerYr":-0.00002707681546885972,"re":-0.000009044718068424064,"im":-0.0000033400395822585094},{"omegaRadPerYr":-0.0000201768700641032,"re":0.000006156498033523465,"im":0.00000751705596830829},{"omegaRadPerYr":0.0002853150225305461,"re":0.000007292599938644516,"im":0.0000043773896212603925},{"omegaRadPerYr":-0.0002440335075107546,"re":0.000006274454282046377,"im":0.0000036485466831589452},{"omegaRadPerYr":0.00016901949668819092,"re":-0.000002519428503521004,"im":0.000005678550409035692},{"omegaRadPerYr":-0.0000027587103410433805,"re":0.000005899853582363865,"im":8.409148783838858e-7},{"omegaRadPerYr":-0.000034144381407487655,"re":0.000004719652715449978,"im":-0.0000037247689900126893},{"omegaRadPerYr":-0.00013340793710151563,"re":0.0000036153371332643194,"im":0.0000026473096931137383}],"saturn":[{"omegaRadPerYr":3.404546335777438e-13,"re":-0.004160815341357166,"im":0.01313037085706424},{"omegaRadPerYr":-0.0001277379845708044,"re":-0.004757531229884148,"im":0.0062418570697877025},{"omegaRadPerYr":-0.000003353103939425025,"re":0.0005082525979425591,"im":0.0002243582817470411},{"omegaRadPerYr":-0.000014507604683407504,"re":-0.0003003418401293427,"im":0.0002498658928695802},{"omegaRadPerYr":-0.00013080297316369022,"re":0.00004462521372870775,"im":0.00004172396328086738},{"omegaRadPerYr":0.0004016105342059343,"re":-0.000021890424766638027,"im":0.00002784479607678065},{"omegaRadPerYr":0.00028531501227593826,"re":-0.000016971705234483944,"im":-0.000010207779625167536},{"omegaRadPerYr":0.00016901949653661777,"re":0.000006353117499272568,"im":-0.000014464465864357296},{"omegaRadPerYr":-0.00002707712299185719,"re":-0.000011819853659803773,"im":-0.000004343694032290057},{"omegaRadPerYr":-0.00008608110335393078,"re":-0.0000038556316501964585,"im":0.000012260170759195859},{"omegaRadPerYr":-0.00013340770427701983,"re":-0.000008291647540272973,"im":-0.0000060449324319747485},{"omegaRadPerYr":-0.00012206708504485138,"re":-0.000007846468613598666,"im":-0.000006177485716796176},{"omegaRadPerYr":-0.000008827506775295263,"re":0.000006912239479621683,"im":0.0000070997530164759055},{"omegaRadPerYr":-0.00024403351156152198,"re":-0.000006770600853713768,"im":-0.000003936350447344142},{"omegaRadPerYr":-0.0009675113430843807,"re":-0.000004521653063656594,"im":-0.000006119593231226156},{"omegaRadPerYr":-0.000034143979713964837,"re":0.000006837682774689789,"im":-0.000005331591672335383}],"uranus":[{"omegaRadPerYr":1.609741252182826e-12,"re":-0.004160857683169045,"im":0.01312987468744944},{"omegaRadPerYr":-0.000014507581339335488,"re":0.006819771098312077,"im":-0.005674555448618447},{"omegaRadPerYr":-0.0000033533175354118582,"re":-0.0005101607663847248,"im":-0.00022431030942694354},{"omegaRadPerYr":-0.00012773798595007094,"re":0.00021390993605577627,"im":-0.00028068024741796866},{"omegaRadPerYr":-0.000011442390269999423,"re":-0.00021565535141600253,"im":-0.0002150430588126844},{"omegaRadPerYr":-0.000020175380767861024,"re":-0.00012178417740316124,"im":-0.0001456136848907788},{"omegaRadPerYr":-0.00000883157541584528,"re":-0.00012271282922940013,"im":-0.0001340577820362881},{"omegaRadPerYr":-0.000015103884918843288,"re":-0.00005803301762598432,"im":0.000026178909117342292},{"omegaRadPerYr":-0.000005772310491116802,"re":0.000018629424113074064,"im":-0.000018786863001070623},{"omegaRadPerYr":0.000055789019292025894,"re":-0.000003583719865681113,"im":0.00001877185158848246},{"omegaRadPerYr":0.00005011887511064967,"re":0.000011951449395631811,"im":0.000002279724016800827},{"omegaRadPerYr":-0.000027076655469348425,"re":0.000008609833687019483,"im":0.0000039638140159356984},{"omegaRadPerYr":-0.00013080298640432038,"re":-0.000007760607234183951,"im":-0.000007178734351197981},{"omegaRadPerYr":-0.000009192811893081681,"re":-0.000006996875336880973,"im":0.000009870536991923898},{"omegaRadPerYr":-0.000014175491386338482,"re":-0.00001270447511881092,"im":0.000007778091287202746},{"omegaRadPerYr":0.00010178796581047778,"re":-0.000004042702368549757,"im":-0.000006403994609904075}],"neptune":[{"omegaRadPerYr":-5.309966632404278e-12,"re":-0.004159721990836072,"im":0.013130987686676325},{"omegaRadPerYr":-0.000003353098139366354,"re":-0.005314734202759442,"im":-0.0023457634229809878},{"omegaRadPerYr":-0.000014507473764320118,"re":-0.0008167253455895104,"im":0.000679803323619701},{"omegaRadPerYr":-0.00001144267951307936,"re":0.00004103714819598339,"im":0.00004000434297961395},{"omegaRadPerYr":-0.0000027576446795887367,"re":-0.00006149846188777267,"im":-0.000008691440917605258},{"omegaRadPerYr":-0.000127737982036136,"re":0.000022941259364012485,"im":-0.000030013884419629694},{"omegaRadPerYr":-0.00002017340325592398,"re":0.00001785684479351327,"im":0.000021295006716797693},{"omegaRadPerYr":-0.000008980453563447026,"re":-0.0000018701512064522262,"im":0.000017342410863083055},{"omegaRadPerYr":0.0000022940676061081706,"re":-0.000008135256823034523,"im":0.0000159660700897465},{"omegaRadPerYr":-0.000005773430993827179,"re":-0.000010150670472290044,"im":0.000012347455189860531},{"omegaRadPerYr":-0.0000036886914876550886,"re":-0.000013289694939214323,"im":-0.000004967461981751487},{"omegaRadPerYr":-0.000015103364422159208,"re":0.000008447715112089554,"im":-0.0000038128138702162122},{"omegaRadPerYr":0.0000029055921239641946,"re":1.0991164784154305e-8,"im":-0.00000667040982519229},{"omegaRadPerYr":0.000050117959348442586,"re":-0.000005129825896938048,"im":-0.0000010095666431561402},{"omegaRadPerYr":0.0000389783728602118,"re":-0.000002068034832737985,"im":0.000002775618631657745}]},"anchorE":0.016702435651957018,"anchorPeriEclipticDeg":462.9179213996577,"anchorInclEclipticDeg":0.00010345820355474172,"anchorAscNodeEclipticDeg":140.29217988414328});
21
+ const DEEP_MODES_ARTIFACT = Object.freeze({"meta":{"integrator":"wh","order":2,"dtDays":2,"spanYears":20000000,"sampleDays":20000,"gr":true,"seed":"JPL Horizons J2000 heliocentric state vectors (tools/explore/j2000-state.mjs, the one home)","masses":"DE440 mass ratios (astro-reference physicalConstants)","runCommand":"node tools/explore/lattice-long-window-test.mjs years=20000000 integrator=wh dt=2 order=2 gr=1 frame=both sample=20000","dumpFile":"tools/explore/lattice-long-window-ecliptic-20000000-gr.local.json (untracked, 337 MB)","dumpSha256":"686d6af51a689f7bd64ac1e2d8b26c243a4beccdacd3167adfeeae078e8b990f","conservationMaxDE":1.2738960401328902e-8,"decimation":4,"naffTerms":18,"naffZetaTerms":16,"naffZetaTermsEra":8,"frame":"ecliptic-J2000 (z-modes for the lunar-chain e; ζ-modes for the Stage-C obliquity hybrid — the invariable-frame ζ table remains unbanked, no consumer)","laskarRef":"Laskar, J. et al. (2004), A&A 428, 261–285, Table 3 (theory reference labels)"},"verdict":{"strongestBeatPeriodKyr":405.625567477903,"strongestBeatArcsecPerYr":3.195064867479295,"la2004BeatPeriodKyr":405.6972922210049,"rockMetronomeKyr":405.6,"companion124Kyr":123.84617993487997,"companion95Kyr":94.87791796545507,"earthLeadingModesArcsecPerYr":[4.257358971029763,7.452423838509057,17.917017907389138,17.368946405872247],"topBeatLines":[{"periodKyr":405.625567477903,"productAmp":0.0003123310080848341},{"periodKyr":94.87791796545507,"productAmp":0.00024338439758855827},{"periodKyr":123.84617993487997,"productAmp":0.00020980875877847502},{"periodKyr":98.84386665157218,"productAmp":0.00016694824937892253},{"periodKyr":130.6909747037068,"productAmp":0.00014391721626151482},{"periodKyr":2364.6549700414625,"productAmp":0.00011214770251987629},{"periodKyr":972.3103697584877,"productAmp":0.00007218142389142678},{"periodKyr":695.9670418382926,"productAmp":0.00006222377072471454}],"note":"g5 matches La2004 to 0.0002 ″/yr; the beat gap vs 405.6 is g2 (chaotic-diffusion window sensitivity + omitted separate-Moon/asteroid terms) — the anatomy is the plan’s Stage-B record."},"earthZ":[{"omegaRadPerYr":0.000020640258745496456,"re":0.01640837548946667,"im":0.00964771830356857},{"omegaRadPerYr":0.00003613037034336034,"re":-0.015519645105303494,"im":-0.005327718511512781},{"omegaRadPerYr":0.00008686415406186803,"re":-0.011108307303646387,"im":0.0063324002417276355},{"omegaRadPerYr":0.00008420702844025169,"re":0.005504442820656899,"im":-0.006828487155118338},{"omegaRadPerYr":0.000027102377738159537,"re":0.0005990602912422896,"im":0.0037445139104202996},{"omegaRadPerYr":0.00008284690006982035,"re":0.002385900412412394,"im":0.0008687520930649916},{"omegaRadPerYr":0.00008551634076169395,"re":0.0012667960543480752,"im":0.001284547912075711},{"omegaRadPerYr":0.00008156882804453768,"re":-0.0003413759390549155,"im":0.0016823570425905205},{"omegaRadPerYr":0.000033456117700854,"re":-0.0012412588643094782,"im":0.0009318258971565654},{"omegaRadPerYr":0.00013693625799603712,"re":-0.0009261214276803977,"im":0.0011910509606790575},{"omegaRadPerYr":0.00008736463294475958,"re":0.0013199280789047622,"im":0.0009530586967429039},{"omegaRadPerYr":0.00008630679999141721,"re":-0.00038871245410104777,"im":0.0009912036911146165},{"omegaRadPerYr":0.000026453632677170472,"re":-0.00032615534646350156,"im":-0.0018102501817831135},{"omegaRadPerYr":0.000034145978925786535,"re":0.0009480778866315119,"im":-0.0008230502200947101},{"omegaRadPerYr":0.00003548085475024487,"re":-0.0013007947815593653,"im":-0.00042439393044846465},{"omegaRadPerYr":0.00008951127418467436,"re":-0.0010559339979945592,"im":-0.000005975184481501219},{"omegaRadPerYr":0.00008814769888639652,"re":-0.0003392982459796931,"im":-0.00126615007571311},{"omegaRadPerYr":0.000027692559180942054,"re":0.0004455147622140075,"im":0.0013147856084997915}],"earthZeta":[{"omegaRadPerYr":-6.480692835562015e-14,"re":-0.004134427250631887,"im":0.013144207689667023},{"omegaRadPerYr":-0.00009139020514696892,"re":-0.003762846299946732,"im":-0.007417313993526907},{"omegaRadPerYr":-0.00002707802193107254,"re":0.004228758817782956,"im":0.001552899971393225},{"omegaRadPerYr":-0.00008608086641122392,"re":0.0012161313006493822,"im":-0.0038454411181687697},{"omegaRadPerYr":-0.00003414305478233622,"re":-0.0030829972319892183,"im":0.002522672469285971},{"omegaRadPerYr":-0.00008873899569559657,"re":-0.00020769480131372744,"im":-0.0026850953462850356},{"omegaRadPerYr":-0.00003333897395226539,"re":0.0006468387853619108,"im":-0.0008212555187612507},{"omegaRadPerYr":-0.000034707554013716744,"re":0.0012115602030611985,"im":-0.0008603813396121053},{"omegaRadPerYr":-0.00009404694793046069,"re":0.001124843496312146,"im":0.0009724617908785189},{"omegaRadPerYr":-0.00002647193861971907,"re":0.001606075294689031,"im":0.0005931944911952478},{"omegaRadPerYr":-0.00003277702706161178,"re":0.0005051745779261483,"im":-0.0006705412769950699},{"omegaRadPerYr":-0.00012773805775388969,"re":-0.0008122347824469044,"im":0.0010593881606687687},{"omegaRadPerYr":-0.00009269956713813446,"re":-0.0006909282558950976,"im":0.0004135096481099148},{"omegaRadPerYr":-0.000014507597324441827,"re":-0.0006470785128404058,"im":0.00057746649029071},{"omegaRadPerYr":-0.000033761896788929335,"re":0.001157822428032179,"im":-0.000690971407290411},{"omegaRadPerYr":-0.000028297573329000286,"re":-0.0011184968821771682,"im":-0.0003885179122647609}],"earthZetaEra":[{"omegaRadPerYr":-6.480692835562015e-14,"re":-0.004136170228858843,"im":0.013147349898750587},{"omegaRadPerYr":-0.00009139020514696892,"re":-0.0037451120264298888,"im":-0.007367103224447289},{"omegaRadPerYr":-0.00002707802193107254,"re":0.004192460536906565,"im":0.0015465498581850507},{"omegaRadPerYr":-0.00008608086641122392,"re":0.0012039767467140353,"im":-0.0038572667358382287},{"omegaRadPerYr":-0.00003414305478233622,"re":-0.0032014533879969596,"im":0.0025701217059533803},{"omegaRadPerYr":-0.00008873899569559657,"re":-0.00021856508120855303,"im":-0.002669820778092242},{"omegaRadPerYr":-0.00003333897395226539,"re":0.0003478573166468341,"im":-0.0006130210720886913},{"omegaRadPerYr":-0.000034707554013716744,"re":0.0012188003710118757,"im":-0.000879354385952938}],"planetLeadingZetaArcsecPerYr":{"mercury":-5.583654095308831,"venus":-18.85062201283722,"earth":-18.850582957521933,"mars":-17.75551746317749,"jupiter":-26.34785064223289,"saturn":-26.34785063789155,"uranus":-2.992403454072025,"neptune":-0.6916261380439003},"planetZ":{"mercury":[{"omegaRadPerYr":0.000027101464787379005,"re":0.036443059874745144,"im":0.15312012416846857},{"omegaRadPerYr":0.00002645682320158395,"re":-0.014115236278813163,"im":-0.07933183704397909},{"omegaRadPerYr":0.000027695768774324655,"re":0.014883065162550294,"im":0.04770421699238349},{"omegaRadPerYr":0.000020608825679123343,"re":0.0339424735092415,"im":0.0205886131133393},{"omegaRadPerYr":0.00003613198806683821,"re":0.026373724217244415,"im":0.007998632845938181},{"omegaRadPerYr":0.000025943085765069145,"re":-0.00008287402030671245,"im":0.01382534867142278},{"omegaRadPerYr":0.000021259366308985905,"re":-0.010921101889740678,"im":-0.005391042758241112},{"omegaRadPerYr":0.000033442897144222473,"re":-0.006298873452719107,"im":0.004846731368887027},{"omegaRadPerYr":0.000027342847424225136,"re":-0.031441801079617394,"im":-0.0012828182325896284},{"omegaRadPerYr":0.000026863603353307064,"re":-0.0023658597755055214,"im":0.03845436133115692},{"omegaRadPerYr":0.000029077390952304336,"re":-0.0056672065762804385,"im":0.008668504999729803},{"omegaRadPerYr":0.000025324686199132127,"re":-0.005942232736715857,"im":-0.012274661661212959},{"omegaRadPerYr":0.00002979754974875923,"re":0.0008097924308674098,"im":-0.0064472013829302505},{"omegaRadPerYr":0.000019992412184743173,"re":0.012472217201012077,"im":0.00359833652112381},{"omegaRadPerYr":0.00002454697962536287,"re":0.0020556509667169235,"im":0.0009916346793612978},{"omegaRadPerYr":0.00002812715748715012,"re":-0.002051758629227311,"im":-0.0033287955771129805},{"omegaRadPerYr":0.000019449369227596397,"re":-0.0038021090567115627,"im":-0.0028426209995905025}],"venus":[{"omegaRadPerYr":0.00003613032718771122,"re":-0.020105324941805183,"im":-0.006917696377202324},{"omegaRadPerYr":0.000020639950705137238,"re":0.017068955357371025,"im":0.010006500628836495},{"omegaRadPerYr":0.00008686450325171618,"re":0.011426811376444728,"im":-0.006520605414974846},{"omegaRadPerYr":0.00008420762005329659,"re":-0.006892443369184228,"im":0.008472548929406779},{"omegaRadPerYr":0.000027101843398089462,"re":0.0009492363872320767,"im":0.005898626241129876},{"omegaRadPerYr":0.00008284929259321451,"re":-0.0030327325912061806,"im":-0.0010976776908548803},{"omegaRadPerYr":0.00008156590133143486,"re":0.0004654494107565469,"im":-0.002280587631810283},{"omegaRadPerYr":0.00003345630943302872,"re":-0.0017828402597892042,"im":0.0012954758789217673},{"omegaRadPerYr":0.00008551538095828359,"re":-0.0011609215700463195,"im":-0.0012677518151850962},{"omegaRadPerYr":0.00002645314323665865,"re":-0.0005187468879242992,"im":-0.0028561425016264542},{"omegaRadPerYr":0.000034145633629733906,"re":0.0012933573208605794,"im":-0.001139818586425855},{"omegaRadPerYr":0.00002769519215699273,"re":0.000692247567326856,"im":0.0020562801187020375},{"omegaRadPerYr":0.00003548134649993586,"re":-0.0017504367473210652,"im":-0.0005759353131695786},{"omegaRadPerYr":0.00008736396981192052,"re":-0.0013474628838071549,"im":-0.000992885318268049},{"omegaRadPerYr":0.00008630854715331631,"re":0.0003763610849158857,"im":-0.0010611470059873186},{"omegaRadPerYr":0.00003678579378710168,"re":0.0015965344500683718,"im":0.0003260227593096117},{"omegaRadPerYr":0.00008814539612129297,"re":0.00043027029421162,"im":0.0012698103607611786},{"omegaRadPerYr":0.00009215946508724939,"re":-0.0008157163462856423,"im":-0.0001752965015353975}],"mars":[{"omegaRadPerYr":0.00008686194427246272,"re":0.04150468181977603,"im":-0.02235805720891878},{"omegaRadPerYr":0.00008420997062723613,"re":0.024191159406394575,"im":-0.02897798440552211},{"omegaRadPerYr":0.000020640675066908026,"re":0.01752920390659033,"im":0.010379054381833624},{"omegaRadPerYr":0.00008155902048560256,"re":-0.005126487019269018,"im":0.017498780322239615},{"omegaRadPerYr":0.00008951470797098792,"re":0.012453460704855819,"im":-0.0011162639997386022},{"omegaRadPerYr":0.00008286071984936754,"re":0.012151786749976757,"im":0.005285572685028835},{"omegaRadPerYr":0.00008552376356754678,"re":-0.008207026797923043,"im":-0.006506174683766466},{"omegaRadPerYr":0.00013693612216296713,"re":-0.004303426290032767,"im":0.005495751915005897},{"omegaRadPerYr":0.0000863140674359666,"re":0.003378196925346155,"im":-0.0035707297870487854},{"omegaRadPerYr":0.00009216418711866517,"re":0.004180141329638833,"im":0.001239878529646219},{"omegaRadPerYr":0.00008815294634884687,"re":0.0015478422945863473,"im":0.005394318221250823},{"omegaRadPerYr":0.00008737006869414014,"re":-0.004859264335556832,"im":-0.002468706141182086},{"omegaRadPerYr":0.00008474936320624016,"re":-0.0037175110079883836,"im":0.0005712305102614905},{"omegaRadPerYr":0.00003613060911836741,"re":-0.002878165082426005,"im":-0.0009813871463689},{"omegaRadPerYr":0.00008323445042360793,"re":-0.0021030674464516,"im":0.002382835034113347},{"omegaRadPerYr":0.00008591714206468895,"re":0.00033705398396163035,"im":-0.0031641077910174956},{"omegaRadPerYr":0.00008022543440532314,"re":0.0014077256319658448,"im":0.00023992196561432362},{"omegaRadPerYr":0.0000900335871717643,"re":-0.0007652388036231974,"im":-0.0015581764537776826}],"jupiter":[{"omegaRadPerYr":0.00002064075395335189,"re":0.038028034576741906,"im":0.022474419029067216},{"omegaRadPerYr":0.00013693627466777967,"re":0.009616177715621049,"im":-0.012410735192913122},{"omegaRadPerYr":0.000014970699552264387,"re":-0.0009276176888746422,"im":0.0015645820896462246},{"omegaRadPerYr":0.00025323179539978545,"re":0.0004059157737100984,"im":0.00040456376985595945},{"omegaRadPerYr":0.0001312662749926737,"re":-0.00015614354905163857,"im":-0.00012183629827031596},{"omegaRadPerYr":0.0001426061431474546,"re":-0.00015326196073912603,"im":-0.00011811188348776635},{"omegaRadPerYr":0.00014000309579914057,"re":0.00010317940519689781,"im":0.00006505029768233116},{"omegaRadPerYr":0.00013386863466366606,"re":0.00007960628300069755,"im":0.0000757581826985722},{"omegaRadPerYr":0.0012496810113814863,"re":3.5498901583457483e-9,"im":7.528217439557287e-9}],"saturn":[{"omegaRadPerYr":0.00013693627469533272,"re":-0.02951381641782599,"im":0.038116342187048506},{"omegaRadPerYr":0.000020640753964721574,"re":0.028361784183640975,"im":0.016761738089661193},{"omegaRadPerYr":0.0002532317954411971,"re":-0.0013588658390314074,"im":-0.0013542513704600167},{"omegaRadPerYr":0.000014970698207898392,"re":-0.0007732461228524056,"im":0.0013033726384504506},{"omegaRadPerYr":0.00013126626734545323,"re":0.000471597345592877,"im":0.0003662972802790016},{"omegaRadPerYr":0.00014260613959102947,"re":0.00046558535071819594,"im":0.0003604428232502375},{"omegaRadPerYr":0.0012496810120112478,"re":-2.2413816213183782e-8,"im":-4.3761227707856587e-8}],"uranus":[{"omegaRadPerYr":0.000020640753931894893,"re":-0.03238248798724911,"im":-0.019137541918709554},{"omegaRadPerYr":0.00001497070511159062,"re":-0.014798949407797135,"im":0.024975442503237483},{"omegaRadPerYr":0.000003264464996922227,"re":0.00045075801975650074,"im":0.0016050091168723338},{"omegaRadPerYr":0.00013693627457864556,"re":0.0009471352229324553,"im":-0.0012234989208774374},{"omegaRadPerYr":0.00000929092310040761,"re":-0.0004015633445553787,"im":-0.0002340983045129561},{"omegaRadPerYr":0.00002631265778975313,"re":0.00022664443272842668,"im":-0.0003767093309339966},{"omegaRadPerYr":0.000014377069742263513,"re":0.00005819778777828242,"im":-0.00005910629719132463},{"omegaRadPerYr":0.000630109378889249,"re":-1.1513321171782036e-7,"im":2.121111820496366e-7}],"neptune":[{"omegaRadPerYr":0.000003264141494649585,"re":0.0024665853980857314,"im":0.008775596228059238},{"omegaRadPerYr":0.000014970655663003607,"re":0.0018888606403837439,"im":-0.0031894015693886913},{"omegaRadPerYr":0.00002064075339053921,"re":0.001629524897365034,"im":0.0009616466536353474},{"omegaRadPerYr":-0.00011593914172939557,"re":7.926785905418971e-8,"im":-4.6685992002385664e-8}]},"planetZeta":{"mercury":[{"omegaRadPerYr":-0.000027070318959890106,"re":0.03509799360084889,"im":0.012514361334229175},{"omegaRadPerYr":-0.000034136904111019706,"re":0.02695969560580955,"im":-0.02182848736661456},{"omegaRadPerYr":-0.000034710315380555884,"re":-0.012559168496773116,"im":0.008299078079729882},{"omegaRadPerYr":-0.00002646765287895232,"re":0.015448524016084493,"im":0.005987672372630069},{"omegaRadPerYr":-0.00003340798156431758,"re":-0.006455019023356067,"im":0.006226120154816196},{"omegaRadPerYr":5.384799590336571e-11,"re":-0.0039804878272654606,"im":0.013070100663895403},{"omegaRadPerYr":-0.000032847026422583094,"re":-0.0057003023891457685,"im":0.005259105004808747},{"omegaRadPerYr":-0.00003594792939956603,"re":-0.0012961241060881503,"im":0.0016159947697806383},{"omegaRadPerYr":-0.000025076126902622893,"re":0.0009463621131951934,"im":0.004877886245061111},{"omegaRadPerYr":-0.00003524962055187364,"re":0.0036108114629212922,"im":-0.004623693257308201},{"omegaRadPerYr":-0.000024475658963257535,"re":0.000022935888716433717,"im":-0.004353014017229704},{"omegaRadPerYr":-0.00003379278995294136,"re":-0.007806785352862373,"im":0.004006431979329447},{"omegaRadPerYr":-0.00003218755893963215,"re":-0.003704818024406685,"im":0.0011960062285103251},{"omegaRadPerYr":-0.000028313967733473683,"re":-0.007360063597313632,"im":-0.002796682485956438},{"omegaRadPerYr":-0.000027441506455909732,"re":0.005714284626147598,"im":-0.00031320953109534994},{"omegaRadPerYr":-0.000025718824169110346,"re":-0.00022772395090882533,"im":-0.00196911848110608}],"venus":[{"omegaRadPerYr":-1.6493179814802074e-12,"re":-0.0041316378307605294,"im":0.013147230899595441},{"omegaRadPerYr":-0.00009139039449248062,"re":0.004107318311959544,"im":0.008097727638340723},{"omegaRadPerYr":-0.000027077829093903624,"re":0.005723184464233101,"im":0.002103989760517981},{"omegaRadPerYr":-0.0000860809730098796,"re":-0.0017575781212555862,"im":0.005497182235759365},{"omegaRadPerYr":-0.00003414333446857137,"re":-0.0036683665695228925,"im":0.0029729549111848722},{"omegaRadPerYr":-0.0000887389845132903,"re":0.00017437292720263114,"im":0.002839346558623874},{"omegaRadPerYr":-0.00003332402755350087,"re":0.0008226456090349229,"im":-0.000990196523458664},{"omegaRadPerYr":-0.00003470699633273722,"re":0.0013981977987789472,"im":-0.0010036696718058783},{"omegaRadPerYr":-0.00002647213755615405,"re":0.002192723581813546,"im":0.0008156688371823413},{"omegaRadPerYr":-0.00009404722529229626,"re":-0.001310202146639285,"im":-0.0011534120915617934},{"omegaRadPerYr":-0.00003276165702381588,"re":0.0005497404769706646,"im":-0.0007663000693998108},{"omegaRadPerYr":-0.00009269906010008638,"re":0.000774314512799505,"im":-0.0004388675219967948},{"omegaRadPerYr":-0.00003375443573456643,"re":0.0014500491408612449,"im":-0.0008824349886108636},{"omegaRadPerYr":-0.000014507610514643914,"re":-0.0007092452594379532,"im":0.000644027430133631},{"omegaRadPerYr":-0.00002829966619518156,"re":-0.0015021530175610535,"im":-0.0005258063199032051},{"omegaRadPerYr":-0.00003214220556483202,"re":0.0006661181436053425,"im":-0.0002653316593905635}],"mars":[{"omegaRadPerYr":-0.00008608117781327729,"re":0.01021076871109231,"im":-0.03356452939087538},{"omegaRadPerYr":-0.00009138911102981668,"re":0.006448673929855857,"im":0.013039152420792278},{"omegaRadPerYr":4.816071417209985e-13,"re":-0.004136702437859971,"im":0.013131620521733377},{"omegaRadPerYr":-0.00008873924259238756,"re":0.000719141598532243,"im":0.006332417454417071},{"omegaRadPerYr":-0.00008342553512204505,"re":-0.003385387773112122,"im":0.004320169865314299},{"omegaRadPerYr":-0.00012773796958870522,"re":-0.002768952254262225,"im":0.0036533714419055593},{"omegaRadPerYr":-0.00008732462124121245,"re":0.002315330060230354,"im":0.00021373005960354581},{"omegaRadPerYr":-0.00008533729428600537,"re":0.0000662084835502976,"im":0.0014041635383156973},{"omegaRadPerYr":-0.0000927013779034122,"re":0.0012004630656653568,"im":-0.0007842461095443991},{"omegaRadPerYr":-0.00008675666306804544,"re":0.0007084511153542455,"im":-0.0008188292363296188},{"omegaRadPerYr":-0.00008568093272163965,"re":-0.0022269947606386804,"im":-0.0002915189256492408},{"omegaRadPerYr":-0.0000920127905544982,"re":-0.00012713738691022227,"im":0.0011838067237884178},{"omegaRadPerYr":-0.00008937418687447559,"re":-0.0002755627620382867,"im":0.0007026683188238479},{"omegaRadPerYr":-0.00002707848026399503,"re":0.0008884002528900317,"im":0.00034005750138313076},{"omegaRadPerYr":-0.00009092889696047022,"re":-0.00043281332848104276,"im":0.0003922132913606256},{"omegaRadPerYr":-0.00009004802546465118,"re":0.0008966966123701487,"im":-0.0005174229841345629}],"jupiter":[{"omegaRadPerYr":3.8532251623886294e-13,"re":-0.0041611376264940984,"im":0.013131043712311021},{"omegaRadPerYr":-0.0001277379845918518,"re":0.0019098261437600508,"im":-0.002505661007425496},{"omegaRadPerYr":-0.000003353110004279269,"re":0.0005277820779376669,"im":0.000232885172945674},{"omegaRadPerYr":-0.000014507601866590341,"re":-0.0003702089817814631,"im":0.00030787406163905093},{"omegaRadPerYr":-0.00013080293768331143,"re":-0.000017471248168841094,"im":-0.00001634692544524867},{"omegaRadPerYr":-0.000011442276716160314,"re":0.000012459821928796665,"im":0.00001269474660145274},{"omegaRadPerYr":0.0004016105340997148,"re":0.000008813036156379482,"im":-0.00001120905836048329},{"omegaRadPerYr":-0.00000882703119796523,"re":0.000007828457504338726,"im":0.000007811495266844502},{"omegaRadPerYr":-0.00002707681546885972,"re":-0.000009044718068424064,"im":-0.0000033400395822585094},{"omegaRadPerYr":-0.0000201768700641032,"re":0.000006156498033523465,"im":0.00000751705596830829},{"omegaRadPerYr":0.0002853150225305461,"re":0.000007292599938644516,"im":0.0000043773896212603925},{"omegaRadPerYr":-0.0002440335075107546,"re":0.000006274454282046377,"im":0.0000036485466831589452},{"omegaRadPerYr":0.00016901949668819092,"re":-0.000002519428503521004,"im":0.000005678550409035692},{"omegaRadPerYr":-0.0000027587103410433805,"re":0.000005899853582363865,"im":8.409148783838858e-7},{"omegaRadPerYr":-0.000034144381407487655,"re":0.000004719652715449978,"im":-0.0000037247689900126893},{"omegaRadPerYr":-0.00013340793710151563,"re":0.0000036153371332643194,"im":0.0000026473096931137383}],"saturn":[{"omegaRadPerYr":3.404546335777438e-13,"re":-0.004160815341357166,"im":0.01313037085706424},{"omegaRadPerYr":-0.0001277379845708044,"re":-0.004757531229884148,"im":0.0062418570697877025},{"omegaRadPerYr":-0.000003353103939425025,"re":0.0005082525979425591,"im":0.0002243582817470411},{"omegaRadPerYr":-0.000014507604683407504,"re":-0.0003003418401293427,"im":0.0002498658928695802},{"omegaRadPerYr":-0.00013080297316369022,"re":0.00004462521372870775,"im":0.00004172396328086738},{"omegaRadPerYr":0.0004016105342059343,"re":-0.000021890424766638027,"im":0.00002784479607678065},{"omegaRadPerYr":0.00028531501227593826,"re":-0.000016971705234483944,"im":-0.000010207779625167536},{"omegaRadPerYr":0.00016901949653661777,"re":0.000006353117499272568,"im":-0.000014464465864357296},{"omegaRadPerYr":-0.00002707712299185719,"re":-0.000011819853659803773,"im":-0.000004343694032290057},{"omegaRadPerYr":-0.00008608110335393078,"re":-0.0000038556316501964585,"im":0.000012260170759195859},{"omegaRadPerYr":-0.00013340770427701983,"re":-0.000008291647540272973,"im":-0.0000060449324319747485},{"omegaRadPerYr":-0.00012206708504485138,"re":-0.000007846468613598666,"im":-0.000006177485716796176},{"omegaRadPerYr":-0.000008827506775295263,"re":0.000006912239479621683,"im":0.0000070997530164759055},{"omegaRadPerYr":-0.00024403351156152198,"re":-0.000006770600853713768,"im":-0.000003936350447344142},{"omegaRadPerYr":-0.0009675113430843807,"re":-0.000004521653063656594,"im":-0.000006119593231226156},{"omegaRadPerYr":-0.000034143979713964837,"re":0.000006837682774689789,"im":-0.000005331591672335383}],"uranus":[{"omegaRadPerYr":1.609741252182826e-12,"re":-0.004160857683169045,"im":0.01312987468744944},{"omegaRadPerYr":-0.000014507581339335488,"re":0.006819771098312077,"im":-0.005674555448618447},{"omegaRadPerYr":-0.0000033533175354118582,"re":-0.0005101607663847248,"im":-0.00022431030942694354},{"omegaRadPerYr":-0.00012773798595007094,"re":0.00021390993605577627,"im":-0.00028068024741796866},{"omegaRadPerYr":-0.000011442390269999423,"re":-0.00021565535141600253,"im":-0.0002150430588126844},{"omegaRadPerYr":-0.000020175380767861024,"re":-0.00012178417740316124,"im":-0.0001456136848907788},{"omegaRadPerYr":-0.00000883157541584528,"re":-0.00012271282922940013,"im":-0.0001340577820362881},{"omegaRadPerYr":-0.000015103884918843288,"re":-0.00005803301762598432,"im":0.000026178909117342292},{"omegaRadPerYr":-0.000005772310491116802,"re":0.000018629424113074064,"im":-0.000018786863001070623},{"omegaRadPerYr":0.000055789019292025894,"re":-0.000003583719865681113,"im":0.00001877185158848246},{"omegaRadPerYr":0.00005011887511064967,"re":0.000011951449395631811,"im":0.000002279724016800827},{"omegaRadPerYr":-0.000027076655469348425,"re":0.000008609833687019483,"im":0.0000039638140159356984},{"omegaRadPerYr":-0.00013080298640432038,"re":-0.000007760607234183951,"im":-0.000007178734351197981},{"omegaRadPerYr":-0.000009192811893081681,"re":-0.000006996875336880973,"im":0.000009870536991923898},{"omegaRadPerYr":-0.000014175491386338482,"re":-0.00001270447511881092,"im":0.000007778091287202746},{"omegaRadPerYr":0.00010178796581047778,"re":-0.000004042702368549757,"im":-0.000006403994609904075}],"neptune":[{"omegaRadPerYr":-5.309966632404278e-12,"re":-0.004159721990836072,"im":0.013130987686676325},{"omegaRadPerYr":-0.000003353098139366354,"re":-0.005314734202759442,"im":-0.0023457634229809878},{"omegaRadPerYr":-0.000014507473764320118,"re":-0.0008167253455895104,"im":0.000679803323619701},{"omegaRadPerYr":-0.00001144267951307936,"re":0.00004103714819598339,"im":0.00004000434297961395},{"omegaRadPerYr":-0.0000027576446795887367,"re":-0.00006149846188777267,"im":-0.000008691440917605258},{"omegaRadPerYr":-0.000127737982036136,"re":0.000022941259364012485,"im":-0.000030013884419629694},{"omegaRadPerYr":-0.00002017340325592398,"re":0.00001785684479351327,"im":0.000021295006716797693},{"omegaRadPerYr":-0.000008980453563447026,"re":-0.0000018701512064522262,"im":0.000017342410863083055},{"omegaRadPerYr":0.0000022940676061081706,"re":-0.000008135256823034523,"im":0.0000159660700897465},{"omegaRadPerYr":-0.000005773430993827179,"re":-0.000010150670472290044,"im":0.000012347455189860531},{"omegaRadPerYr":-0.0000036886914876550886,"re":-0.000013289694939214323,"im":-0.000004967461981751487},{"omegaRadPerYr":-0.000015103364422159208,"re":0.000008447715112089554,"im":-0.0000038128138702162122},{"omegaRadPerYr":0.0000029055921239641946,"re":1.0991164784154305e-8,"im":-0.00000667040982519229},{"omegaRadPerYr":0.000050117959348442586,"re":-0.000005129825896938048,"im":-0.0000010095666431561402},{"omegaRadPerYr":0.0000389783728602118,"re":-0.000002068034832737985,"im":0.000002775618631657745}]},"anchorE":0.016702435651957018,"anchorPeriEclipticDeg":462.9179213996577,"anchorInclEclipticDeg":0.00010345820355474172,"anchorAscNodeEclipticDeg":140.29217988414328,"anchorZDotPerYr":[-8.21997e-7,-6.231489999999999e-7],"slopeTaperYears":27943.083333333332});
20
22
 
21
23
  module.exports = { DEEP_MODES_ARTIFACT, DEEP_MODES_ARTIFACT_HASH };
@@ -58,6 +58,8 @@
58
58
  * nNodalOfDateJ2000: number,
59
59
  * moonApsidalJ2000Seconds: number,
60
60
  * moonNodalJ2000Seconds: number,
61
+ * moonApsidalOfDateJ2000Seconds: number,
62
+ * moonNodalOfDateJ2000Seconds: number,
61
63
  * moonSiderealMonthJ2000Seconds: number,
62
64
  * sPerigee: number,
63
65
  * sNode: number,
@@ -82,7 +84,9 @@ function createMoonMonthChain({ constants, fns }) {
82
84
  gmEarthMoonM3PerS2, massRatioEarthMoon, moonSiderealMonthInputDays,
83
85
  holisticYearJ2000, meanSiderealYearJ2000Seconds,
84
86
  nApsidalOfDateJ2000, nNodalOfDateJ2000,
85
- moonApsidalJ2000Seconds, moonNodalJ2000Seconds, moonSiderealMonthJ2000Seconds,
87
+ moonApsidalJ2000Seconds, moonNodalJ2000Seconds,
88
+ moonApsidalOfDateJ2000Seconds, moonNodalOfDateJ2000Seconds,
89
+ moonSiderealMonthJ2000Seconds,
86
90
  sPerigee, sNode,
87
91
  } = constants;
88
92
  const { meanLodSecondsAtAge, meanSiderealYearSecondsAtAge, meanHAtAge, modulation } = fns;
@@ -161,22 +165,29 @@ function createMoonMonthChain({ constants, fns }) {
161
165
  return nNodalOfDateJ2000 * Math.pow(hT / holisticYearJ2000, 2);
162
166
  }
163
167
 
164
- /** @param {number} tMa @returns {number | null} */
168
+ /** The of-date period from the H² counter: N ∝ H² and period = H·T_yr/N
169
+ * ⇒ period ∝ T_yr / H, anchored on the engine's own of-date J2000 period
170
+ * (the t_Ma === 0 fast path returns it EXACTLY, as the star-referenced
171
+ * anchors do). UNIT FIX: the earlier form rebuilt the period as
172
+ * H × sidereal-year seconds / N while N was counted in mean-SOLAR-year
173
+ * days — the sidereal/solar ratio 1.0000388 put the J2000 perigee cycle
174
+ * 2.9 h and the node 6.2 h above the anchors (found by the Formula
175
+ * Verification Moon panels against Meeus). The year RATIO carries the
176
+ * evolution; the anchor carries the unit. @param {number} tMa
177
+ * @returns {number | null} */
165
178
  function apsidalPrecessionSecondsOfDateAtAge(tMa) {
166
- const n = apsidalCyclesOfDateAtAge(tMa);
179
+ if (tMa === 0) return moonApsidalOfDateJ2000Seconds;
167
180
  const hT = meanHAtAge(tMa);
168
- const tYrS = meanSiderealYearSecondsAtAge(tMa);
169
- if (n === null || hT === null) return null;
170
- return hT * tYrS / n; // H in years × seconds/year / N
181
+ if (hT === null) return null;
182
+ return moonApsidalOfDateJ2000Seconds * (meanSiderealYearSecondsAtAge(tMa) / meanSiderealYearJ2000Seconds) * (holisticYearJ2000 / hT);
171
183
  }
172
184
 
173
185
  /** @param {number} tMa @returns {number | null} */
174
186
  function nodalPrecessionSecondsOfDateAtAge(tMa) {
175
- const n = nodalCyclesOfDateAtAge(tMa);
187
+ if (tMa === 0) return moonNodalOfDateJ2000Seconds;
176
188
  const hT = meanHAtAge(tMa);
177
- const tYrS = meanSiderealYearSecondsAtAge(tMa);
178
- if (n === null || hT === null) return null;
179
- return hT * tYrS / n;
189
+ if (hT === null) return null;
190
+ return moonNodalOfDateJ2000Seconds * (meanSiderealYearSecondsAtAge(tMa) / meanSiderealYearJ2000Seconds) * (holisticYearJ2000 / hT);
180
191
  }
181
192
 
182
193
  /** Perigee precession period in seconds — Brouwer–Clemence m² scaling ×
@@ -52,7 +52,8 @@
52
52
  * A1-class correlated-subsample effect (the tracked events sit −1.6″
53
53
  * below the +1.4″ fleet mean and sample the near-annual arguments at
54
54
  * correlated phases; the era-split refutes anchor double-counting and
55
- * the modern era improves most, 3.57 → 3.34). The ≤8″ api gate holds
55
+ * the modern era improves most, 3.57 → 3.34). The api gate (8″ then; 12″
56
+ * since plan 06 R3 item 1 — the physical ΔT-convention floor) holds
56
57
  * (max 6.2″). Coefficients are stored with the run→real argument
57
58
  * mapping already applied (the extraction's heliocentric-planet vs
58
59
  * geocentric-sun π-offset is folded into the signs).
@@ -26,6 +26,13 @@
26
26
 
27
27
  'use strict';
28
28
 
29
+ // Plan 06 R3 item 1: the DERIVED series-extension tail (the D2 planetary and
30
+ // node terms, moon/series-extension.cjs) is part of the ONE scene Moon —
31
+ // formerly added by the besselian tier alone, so the rendered Moon and the
32
+ // eclipse-location Moon were two different Moons. The truncated finder forms
33
+ // below stay bare by certified design.
34
+ const { moonSeriesExtensionDeg } = require('./series-extension.cjs');
35
+
29
36
  /**
30
37
  * @typedef {Array<[number, number, number, number, number]>} MeeusTermTable
31
38
  */
@@ -164,10 +171,17 @@ function createMoonSeries({ constants, fns }) {
164
171
  * owns the UT→TT conversion — engine timing conventions differ).
165
172
  * Returns everything the scene blocks write:
166
173
  * thetaAddRad — the hierarchy θ increment (EoC-half-subtracted Σl);
167
- * lonDeg — full ecliptic longitude incl. moonMeeusLpCorrection;
168
- * latRad/latDeg — Σb with all six corrections (BOTH computed from Σb
169
- * directly: the browser stores radians, the Node engine degrees, and
170
- * (x·D2R)/D2R is not bit-exactly x); distKm — two-term ellipse; T.
174
+ * lonDeg — full ecliptic longitude (GEOMETRIC, mean equinox of date)
175
+ * incl. the derived series-extension tail and moonMeeusLpCorrection
176
+ * (retired to 0 at plan 06 R3 item 1: measured against Horizons' apparent
177
+ * Moon over 1970–2049 the series needs no anchor, −1.0″ ± 1.5″ flat in
178
+ * elongation; the former +32.75″ was the eclipse tier's mean Sun
179
+ * compensated — its aberration κ, the I2 long inequality and the trend-ΔT
180
+ * offset — not a property of the Moon);
181
+ * latRad/latDeg — Σb with all six corrections plus the extension (BOTH
182
+ * computed from Σb directly: the browser stores radians, the Node engine
183
+ * degrees, and (x·D2R)/D2R is not bit-exactly x); distKm — two-term
184
+ * ellipse; T.
171
185
  * @param {number} dDaysTT
172
186
  * @returns {{thetaAddRad: number, lonDeg: number, latRad: number, latDeg: number, distKm: number, T: number}} */
173
187
  function sceneEvalAt(dDaysTT) {
@@ -180,9 +194,11 @@ function createMoonSeries({ constants, fns }) {
180
194
  const E = eFactorForD(d, T, T2);
181
195
  const E2 = E * E;
182
196
  const { A1, A2, A3 } = additionalArgs(T, d);
197
+ const ext = moonSeriesExtensionDeg(T); // derived tail, degrees → the tables' 1e-6° units
183
198
 
184
199
  let Sl = sumTable(moonL, Dr, Mr, Mpr, Fr, E, E2);
185
200
  Sl += 3958 * Math.sin(A1) + 1962 * Math.sin(Lp - Fr) + 318 * Math.sin(A2);
201
+ Sl += ext.dLonDeg * 1e6;
186
202
  // Subtract the EoC portion the off-centre orbit geometry already provides.
187
203
  const eocHalf = getEccentricityBase() / 2;
188
204
  Sl -= (2 * eocHalf / D2R * 1e6) * Math.sin(Mpr);
@@ -193,6 +209,7 @@ function createMoonSeries({ constants, fns }) {
193
209
  Sb += -2235 * Math.sin(Lp) + 382 * Math.sin(A3);
194
210
  Sb += 175 * Math.sin(A1 - Fr) + 175 * Math.sin(A1 + Fr);
195
211
  Sb += 127 * Math.sin(Lp - Mpr) - 115 * Math.sin(Lp + Mpr);
212
+ Sb += ext.dLatDeg * 1e6;
196
213
  const latRad = Sb * 1e-6 * D2R;
197
214
  const latDeg = Sb * 1e-6;
198
215