@essrt/physics 1.15.0 → 1.17.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@essrt/physics",
3
- "version": "1.15.0",
3
+ "version": "1.17.0",
4
4
  "description": "ESSRT (Expanding Solar System Resonance Theory) physics core \u2014 pure, injectable-constants, no I/O, no globals, no DOM. The complete model incl. fitted coefficients; every published version immutably ships one recorded model identity.",
5
5
  "essrt": {
6
6
  "modelVersion": "v11.0",
@@ -764,8 +764,8 @@ export const REFERENCE_DATA = Object.freeze({
764
764
  "sunModelTrueErrorDeg": 0.003,
765
765
  "sunTropicalYearDiffSeconds": 0.1,
766
766
  "sunSiderealYearDiffSeconds": 0.02,
767
- "frameworkSunVsJplRmsArcsec": 0.95,
768
- "meeusCh25SunVsJplRmsArcsec": 1.28,
767
+ "frameworkSunVsJplRmsArcsec": 0.8,
768
+ "meeusCh25SunVsJplRmsArcsec": 1.22,
769
769
  "moonSeriesLonVsJplRmsArcsec": 2.84,
770
770
  "moonSeriesLatVsJplRmsArcsec": 0.35,
771
771
  "mercuryNewtonianArcsecCy": 532,
@@ -41,10 +41,21 @@
41
41
  * (ii) the J2000 phase anchors ARG_L0 / PERI / D0 — epoch initial
42
42
  * conditions ("anchored by design" class; the RATES are now
43
43
  * framework-derived, injected);
44
- * (iii) the 2lE term (+1.42″ sin 2lE) DECLARED FITTED, not derived: a
45
- * finder-annual artifact, measured chain-independent at E4/E5
46
- * (re-fit noise −0.12″/−0.03″). Everything else in this file is
47
- * derived. The Earth-around-EMB wobble is DERIVED: amplitude
44
+ * (iii) RETIRED (FQ-7-Sun annual-channel attribution): the former
45
+ * declared-fitted +1.42″ sin 2lE term. It was fitted against a
46
+ * Sun-ALONE JPL comparison bridged by the leading nutation term
47
+ * only, and the attribution measured it as the semiannual
48
+ * nutation term −1.32″ sin(2F−2D+2Ω) ≡ −1.32″ sin 2lE in disguise
49
+ * (2M residual 0.13″ under that bridge, 1.43″ ≡ the term's
50
+ * negative under the fuller bridge). Nutation in longitude is a
51
+ * frame rotation common to Sun AND Moon — this chain keeps both
52
+ * bodies MEAN-of-date (mean obliquity, mean sidereal time; see
53
+ * besselian.cjs), so a Sun-only nutation term is a frame
54
+ * inconsistency for elongation. Removed: the nutation-free syzygy
55
+ * fleet improves 3.877 → 3.756″ and the fuller-bridged Sun
56
+ * comparison 2.344 → 2.123″ (fq7s-jpl-preview.mjs --no-2le;
57
+ * fq7s-annual-channel.mjs). This file now carries ZERO fitted
58
+ * constants. The Earth-around-EMB wobble is DERIVED: amplitude
48
59
  * a_M·μ/AU with μ = 1/(1+M_E/M_M), injected by the model wiring
49
60
  * from live package constants (6.4399″ at current constants), sign
50
61
  * negative in the subtract convention.
@@ -175,9 +186,6 @@ const TERMS = [
175
186
  [[0, 0, 1, -1, 0, 0], [0, 0, -1, 0, 0, 0], -0.0353, -0.0379],
176
187
  ];
177
188
 
178
- /** The declared-fitted semiannual leftover (header (iii)): +1.42″ sin 2lE. */
179
- const FITTED_2LE_ARCSEC = 1.42;
180
-
181
189
  const D2R = Math.PI / 180;
182
190
 
183
191
  /**
@@ -222,8 +230,7 @@ function createSunPlanetaryCompletion({ embWobbleArcsec, carrierRatesDegPerCy })
222
230
  table += cA * Math.cos(th) + sA * Math.sin(th);
223
231
  }
224
232
  const D = (ARG_D0 + D1 * T) * D2R;
225
- const arcsec = -table - embWobbleArcsec * Math.sin(D)
226
- + FITTED_2LE_ARCSEC * Math.sin(2 * l[2]);
233
+ const arcsec = -table - embWobbleArcsec * Math.sin(D);
227
234
  return arcsec / 3600;
228
235
  }
229
236
  return { sunPlanetaryCompletionDeg };
package/src/model.js CHANGED
@@ -860,11 +860,28 @@ export function assembleModel(C, F) {
860
860
  // D2 completion table is unchanged (residual 2lE re-fit ≈ 0.1″ — noise).
861
861
  const sunL0Deg = C.earthOrbital.sunMeanLongitudeJ2000_deg;
862
862
  const sunTropicalRateDegPerCy = 360 * julianCenturyDays / meanSolarYearDays;
863
+ // FQ-7-Sun option C-small — ONE eccentricity law for Sun and Moon in the
864
+ // eclipse chain. Eccentricity is frame-invariant (e = |z|, z = e·e^{iϖ}),
865
+ // so it may carry only FIXED-FRAME lattice content: the H/3 line the Moon's
866
+ // E-factor already rides (moon/ecc-channel.cjs). H/16 is the OF-DATE
867
+ // perihelion period (13 + 3 = 16: the H/3 apsidal rotation seen from the
868
+ // H/13 equinox) — it belongs to ϖ_of-date, not to e. The previous form
869
+ // added the H/16 law's own slope (−0.84e-5/cy) on top of the H/3 line,
870
+ // and that slope WAS the measured Sun-side ė tension (annual channel
871
+ // T·sinM −3.7″/cy; JPL sides with the H/3 line: fq7s-ecc-consistency.mjs).
872
+ // Anchor: the H/16 law's J2000 value (the observed e, anchored by design),
873
+ // evaluated once — an explicit law change, not a hidden freeze; the
874
+ // cardinal-point path keeps the H/16 law (eccentricityAt) unchanged.
875
+ // Measured at the swap: JPL Sun 2.123 → 1.487″ (1900–2100), registry
876
+ // window 0.93 → 0.80″, syzygy fleet 3.756 → 3.719″, T·sinM −3.65 → −0.19″/cy,
877
+ // curvature term unchanged in size; the H/16 term at the corpus epochs
878
+ // detrends to 0.174 min — below the ancient corpus's discrimination.
879
+ const sunEccentricityJ2000 = eccentricityAt(2000);
863
880
  /** @param {number} year @returns {number} */
864
881
  const sunEccentricityAt = (year) => {
865
882
  const cos3 = -Math.cos(phaseRadians(balancedYear, year, 3));
866
883
  const cos3J2000 = -Math.cos(phaseRadians(balancedYear, 2000, 3));
867
- return eccentricityAt(year) + (eccentricityBase / 2) * (cos3 - cos3J2000);
884
+ return sunEccentricityJ2000 + (eccentricityBase / 2) * (cos3 - cos3J2000);
868
885
  };
869
886
  const sunMeanLongitudeDegAt = (() => {
870
887
  // SW PHASE B — the CLOSED FORM on the integrated lattice phase