@essrt/physics 17.0.0 → 18.0.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": "17.0.0",
3
+ "version": "18.0.0",
4
4
  "description": "ESSRT (Expanding Solar System Resonance Theory) physics core — 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": "v21.0",
package/src/model.js CHANGED
@@ -646,11 +646,30 @@ export function assembleModel(C, F, laws = {}, secularSeriesArtifact = /** @type
646
646
  /** @param {number} year @returns {number} */
647
647
  const tropicalYearDirectDays = (year) => evalYearFourier(year, tropicalYearDaysBase(year), F.TROPICAL_YEAR_HARMONICS);
648
648
 
649
- /** @param {number} year @returns {number} */
650
- const solarYearSeconds = (year) => tropicalYearDays(year) * dayLengthSeconds(year);
651
- /** @param {number} year @returns {number} */
652
- const siderealDaySeconds = (year) => solarYearSeconds(year) / (tropicalYearDays(year) + 1);
653
- /** @param {number} year @returns {number} */
649
+ /** Layer-4 solar day of date in SI seconds — LOD_real, the shipped
650
+ * observable (the tweakpane Solar Day row, the registry's lodRealPhysical,
651
+ * the Framework Verification panel's day): the kinematic day of date + the
652
+ * ecliptic missing-motion term on the nodal period + the calibrated ΔT
653
+ * cycle stack incl. the core-mantle swing. Twin of tools/lib
654
+ * computeLodRealSecondsAtEpoch and the browser's _vfpSolarDaySecondsOfDate
655
+ * (86,400.001780 s at 2000). @param {number} year @returns {number} */
656
+ const lodRealSeconds = (year) =>
657
+ dayLengthSeconds(year)
658
+ + (deepLod.eclipticLodCorrectionSecondsAtAge(yearToTMa(year)) ?? 0)
659
+ + dtCycleLodCorrectionSum(year);
660
+ /** Mean sidereal day of date in SI seconds — on LOD_real (plan 08 storyline
661
+ * sweep, 2026-10-09: the published day bases are the SI day of exactly
662
+ * 86,400 s, the IAU constants, and LOD_real; this rode the KINEMATIC day
663
+ * before, 1.7 ms below the simulator's readout at J2000). One rotation
664
+ * more against the equinox than there are solar days in a year.
665
+ * @param {number} year @returns {number} */
666
+ const siderealDaySeconds = (year) => {
667
+ const Y = tropicalYearDays(year);
668
+ return (lodRealSeconds(year) * Y) / (Y + 1);
669
+ };
670
+ /** Mean stellar day of date in SI seconds — the sidereal day plus the
671
+ * equinox's daily regression projected onto the equator (on LOD_real, like
672
+ * the sidereal day). @param {number} year @returns {number} */
654
673
  const stellarDaySeconds = (year) => {
655
674
  const tMa = yearToTMa(year);
656
675
  // S5 (plan 06): one equinox turn per T_p(t) — the composed lunisolar
@@ -658,13 +677,12 @@ export function assembleModel(C, F, laws = {}, secularSeriesArtifact = /** @type
658
677
  // unit's counter H(t)/13 (0.086 % slow; 7 µs on the 8.37 ms offset).
659
678
  const TpRaw = deepLod.lunisolarPrecessionPeriodYearsAtAge(tMa);
660
679
  const Tp = TpRaw === null ? certifiedAxialPrecessionJ2000Years() : TpRaw;
661
- const syS = solarYearSeconds(year);
662
680
  const syD = tropicalYearDays(year);
663
681
  const sidDay = siderealDaySeconds(year);
664
682
  // Layer A (plan 06): the RA projection reads the published ε (the one-source
665
683
  // hybrid), not the K comb — the browser's _sceneEpsTargetDeg twin; 1e-8 s.
666
684
  const raProjection = Math.cos((oneSourceM.epsAt(year) * Math.PI) / 180);
667
- return (syS / (syD + 1) / Tp / (syD + 1)) * raProjection + sidDay;
685
+ return (sidDay / Tp / (syD + 1)) * raProjection + sidDay;
668
686
  };
669
687
  /** @param {number} year @returns {number} */
670
688
  const measuredSolarDaySeconds = (year) => dayLengthSeconds(year) + raDayOffsetMs(year) / 1000;
@@ -1600,6 +1618,7 @@ export function assembleModel(C, F, laws = {}, secularSeriesArtifact = /** @type
1600
1618
  siderealYearDays,
1601
1619
  anomalisticYearDays,
1602
1620
  dayLengthSeconds,
1621
+ lodRealSeconds,
1603
1622
  siderealDaySeconds,
1604
1623
  stellarDaySeconds,
1605
1624
  measuredSolarDaySeconds,
package/types/model.d.ts CHANGED
@@ -86,6 +86,7 @@ export function assembleModel(C: Readonly<Record<string, any>>, F: Readonly<Reco
86
86
  siderealYearDays: (year: number) => number;
87
87
  anomalisticYearDays: (year: number) => number;
88
88
  dayLengthSeconds: (year: number) => number;
89
+ lodRealSeconds: (year: number) => number;
89
90
  siderealDaySeconds: (year: number) => number;
90
91
  stellarDaySeconds: (year: number) => number;
91
92
  measuredSolarDaySeconds: (year: number) => number;