@essrt/physics 23.3.3 → 24.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.
Files changed (65) hide show
  1. package/README.md +4 -1
  2. package/package.json +2 -2
  3. package/src/cardinal/one-source-structure.cjs +3 -1
  4. package/src/constants/coefficients.d.ts +5 -1
  5. package/src/constants/coefficients.js +3 -2
  6. package/src/constants/generated.d.ts +13 -14
  7. package/src/constants/generated.js +14 -15
  8. package/src/constants/units.cjs +4 -1
  9. package/src/deltat/deep-time.cjs +37 -72
  10. package/src/earth/deep-orbital-history.cjs +48 -34
  11. package/src/earth/year-lengths.cjs +2 -1
  12. package/src/eclipse/besselian.cjs +24 -11
  13. package/src/index.js +30 -48
  14. package/src/model/cardinal-instants.js +101 -0
  15. package/src/model/context.js +54 -0
  16. package/src/model/deep-time-chain.js +79 -0
  17. package/src/model/delta-t.js +38 -0
  18. package/src/model/derived-constants.js +58 -0
  19. package/src/model/earth-scalars.js +47 -0
  20. package/src/model/inv-plane-elements.js +56 -0
  21. package/src/model/lunar-theory.js +216 -0
  22. package/src/model/moon-epoch.js +28 -0
  23. package/src/model/one-source-movement.js +192 -0
  24. package/src/model/planet-elements-of-date.js +61 -0
  25. package/src/model/planet-records.js +63 -0
  26. package/src/model/planet-spin-channel.js +41 -0
  27. package/src/model/published-periods.js +38 -0
  28. package/src/model/sun-and-eclipses.js +199 -0
  29. package/src/model/surface.js +332 -0
  30. package/src/model/time-axis.js +24 -0
  31. package/src/model/year-day-lengths.js +42 -0
  32. package/src/model.js +62 -1612
  33. package/src/moon/arguments.cjs +27 -43
  34. package/src/planets/chain-artifact.js +2 -2
  35. package/src/planets/keplerian-chain.cjs +3 -3
  36. package/src/planets/model.cjs +2 -2
  37. package/types/constants/coefficients.d.ts +5 -1
  38. package/types/constants/generated.d.ts +13 -14
  39. package/types/constants/units.d.cts +3 -0
  40. package/types/deltat/deep-time.d.cts +18 -24
  41. package/types/earth/deep-orbital-history.d.cts +23 -0
  42. package/types/eclipse/besselian.d.cts +37 -18
  43. package/types/index.d.ts +1 -1
  44. package/types/model/cardinal-instants.d.ts +14 -0
  45. package/types/model/context.d.ts +87 -0
  46. package/types/model/deep-time-chain.d.ts +288 -0
  47. package/types/model/delta-t.d.ts +11 -0
  48. package/types/model/derived-constants.d.ts +25 -0
  49. package/types/model/earth-scalars.d.ts +14 -0
  50. package/types/model/inv-plane-elements.d.ts +6 -0
  51. package/types/model/lunar-theory.d.ts +72 -0
  52. package/types/model/moon-epoch.d.ts +10 -0
  53. package/types/model/one-source-movement.d.ts +74 -0
  54. package/types/model/planet-elements-of-date.d.ts +9 -0
  55. package/types/model/planet-records.d.ts +7 -0
  56. package/types/model/planet-spin-channel.d.ts +29 -0
  57. package/types/model/published-periods.d.ts +7 -0
  58. package/types/model/sun-and-eclipses.d.ts +53 -0
  59. package/types/model/surface.d.ts +281 -0
  60. package/types/model/time-axis.d.ts +12 -0
  61. package/types/model/year-day-lengths.d.ts +8 -0
  62. package/types/model.d.ts +10 -81
  63. package/types/moon/arguments.d.cts +5 -11
  64. package/types/planets/keplerian-chain.d.cts +4 -2
  65. package/types/planets/model.d.cts +3 -3
@@ -2,17 +2,17 @@
2
2
  // Gives the TypeScript website full type safety at the boundary (§2g) while
3
3
  // packages/physics stays JavaScript.
4
4
 
5
- export declare const CONSTANTS_HASH: "b4e57ec54c704095";
5
+ export declare const CONSTANTS_HASH: "da713fc2d846767d";
6
6
 
7
7
  export declare const MODEL_VERSION: string;
8
8
 
9
9
  export declare const PREPRINT_DOI: string;
10
10
 
11
11
  export declare const DEFAULT_CONSTANTS: {
12
- readonly hash: "b4e57ec54c704095";
12
+ readonly hash: "da713fc2d846767d";
13
13
  readonly additionalBodiesReference: {
14
14
  "pluto": {
15
- "solarYearInput": number;
15
+ "orbitalPeriodInputDays": number;
16
16
  "orbitalEccentricityJ2000": number;
17
17
  "eclipticInclinationJ2000": number;
18
18
  "invPlaneInclinationJ2000": number;
@@ -25,7 +25,7 @@ export declare const DEFAULT_CONSTANTS: {
25
25
  "ascendingNodeInvPlaneClosedForm": number;
26
26
  };
27
27
  "halleys": {
28
- "solarYearInput": number;
28
+ "orbitalPeriodInputDays": number;
29
29
  "orbitalEccentricityJ2000": number;
30
30
  "eclipticInclinationJ2000": number;
31
31
  "invPlaneInclinationJ2000": number;
@@ -37,7 +37,7 @@ export declare const DEFAULT_CONSTANTS: {
37
37
  "rotationPeriodDays": number;
38
38
  };
39
39
  "eros": {
40
- "solarYearInput": number;
40
+ "orbitalPeriodInputDays": number;
41
41
  "orbitalEccentricityJ2000": number;
42
42
  "eclipticInclinationJ2000": number;
43
43
  "invPlaneInclinationJ2000": number;
@@ -49,7 +49,7 @@ export declare const DEFAULT_CONSTANTS: {
49
49
  "rotationPeriodDays": number;
50
50
  };
51
51
  "ceres": {
52
- "solarYearInput": number;
52
+ "orbitalPeriodInputDays": number;
53
53
  "orbitalEccentricityJ2000": number;
54
54
  "eclipticInclinationJ2000": number;
55
55
  "invPlaneInclinationJ2000": number;
@@ -105,7 +105,6 @@ export declare const DEFAULT_CONSTANTS: {
105
105
  "perihelionPassageJ2000_JD": number;
106
106
  "earthInclinationJ2000_deg": number;
107
107
  "earthInclinationRate_arcsecPerCentury": number;
108
- "deltaTStart": number;
109
108
  "sunTilt": number;
110
109
  };
111
110
  readonly giaCoxChaoPeltier: {
@@ -201,7 +200,7 @@ export declare const DEFAULT_CONSTANTS: {
201
200
  };
202
201
  readonly planetOrbitalElements: {
203
202
  "mercury": {
204
- "solarYearInput": number;
203
+ "orbitalPeriodInputDays": number;
205
204
  "orbitalEccentricityJ2000": number;
206
205
  "axialTiltJ2000": number;
207
206
  "eclipticInclinationJ2000": number;
@@ -213,7 +212,7 @@ export declare const DEFAULT_CONSTANTS: {
213
212
  "ascendingNodeInvPlaneClosedForm": number;
214
213
  };
215
214
  "venus": {
216
- "solarYearInput": number;
215
+ "orbitalPeriodInputDays": number;
217
216
  "orbitalEccentricityJ2000": number;
218
217
  "axialTiltJ2000": number;
219
218
  "eclipticInclinationJ2000": number;
@@ -226,7 +225,7 @@ export declare const DEFAULT_CONSTANTS: {
226
225
  "ascendingNodeInvPlaneClosedForm": number;
227
226
  };
228
227
  "mars": {
229
- "solarYearInput": number;
228
+ "orbitalPeriodInputDays": number;
230
229
  "orbitalEccentricityJ2000": number;
231
230
  "axialTiltJ2000": number;
232
231
  "eclipticInclinationJ2000": number;
@@ -239,7 +238,7 @@ export declare const DEFAULT_CONSTANTS: {
239
238
  "ascendingNodeInvPlaneClosedForm": number;
240
239
  };
241
240
  "jupiter": {
242
- "solarYearInput": number;
241
+ "orbitalPeriodInputDays": number;
243
242
  "orbitalEccentricityJ2000": number;
244
243
  "axialTiltJ2000": number;
245
244
  "eclipticInclinationJ2000": number;
@@ -252,7 +251,7 @@ export declare const DEFAULT_CONSTANTS: {
252
251
  "ascendingNodeInvPlaneClosedForm": number;
253
252
  };
254
253
  "saturn": {
255
- "solarYearInput": number;
254
+ "orbitalPeriodInputDays": number;
256
255
  "orbitalEccentricityJ2000": number;
257
256
  "axialTiltJ2000": number;
258
257
  "eclipticInclinationJ2000": number;
@@ -265,7 +264,7 @@ export declare const DEFAULT_CONSTANTS: {
265
264
  "ascendingNodeInvPlaneClosedForm": number;
266
265
  };
267
266
  "uranus": {
268
- "solarYearInput": number;
267
+ "orbitalPeriodInputDays": number;
269
268
  "orbitalEccentricityJ2000": number;
270
269
  "axialTiltJ2000": number;
271
270
  "eclipticInclinationJ2000": number;
@@ -278,7 +277,7 @@ export declare const DEFAULT_CONSTANTS: {
278
277
  "ascendingNodeInvPlaneClosedForm": number;
279
278
  };
280
279
  "neptune": {
281
- "solarYearInput": number;
280
+ "orbitalPeriodInputDays": number;
282
281
  "orbitalEccentricityJ2000": number;
283
282
  "axialTiltJ2000": number;
284
283
  "eclipticInclinationJ2000": number;
@@ -6,3 +6,6 @@ export const DAYS_PER_JULIAN_YEAR: 365.25;
6
6
  export const JULIAN_CENTURY_DAYS: 36525;
7
7
  /** The Julian year, SI seconds. */
8
8
  export const SECONDS_PER_JULIAN_YEAR: number;
9
+ /** J2000.0 — 2000 Jan 1.5 TT as a Julian Day (plan 14 step 2: ONE home; it had been
10
+ * declared locally in model.js, keplerian-chain.cjs, tools/lib/constants.js and three gates). */
11
+ export const J2000_JD: 2451545;
@@ -27,14 +27,14 @@ export type DeepTimeLodConstants = {
27
27
  */
28
28
  alpha1PerMa: number;
29
29
  /**
30
- * - ω₀, the J2000 day length (the SI day since plan 09; identifier kept)
30
+ * - ω₀, the J2000 day length (the SI day; identifier kept)
31
31
  */
32
32
  lodNowH13Seconds: number;
33
33
  meanSiderealYearJ2000Seconds: number;
34
34
  solarMassLossFracPerYear: number;
35
35
  /**
36
36
  * - f_S, the solar fraction of the J2000
37
- * precession torque (derive-params) — the unit H(t) = 13·T_p,composed needs it
37
+ * precession torque (derive-params) — the composed precession rate needs it
38
38
  */
39
39
  precessionSolarShareJ2000: number;
40
40
  };
@@ -61,10 +61,9 @@ export type DeepTimeLodDeps = {
61
61
  */
62
62
  swingLodRateAt: (year: number) => number;
63
63
  /**
64
- * - the model's DERIVED
65
- * J2000 axial precession period: the certified year-length laws' beat at
66
- * 2000, sid/(sid − trop) ≈ 25,771.4 yr (plan 06 S5 — one J2000 precession
67
- * reading; the same anchor the hybrid obliquity self-anchors on). Read
64
+ * - the model's J2000 axial
65
+ * precession period, 1,296,000/p_A = 25,771.575 yr (the IAU 2006 general
66
+ * precession; the same anchor the hybrid obliquity self-anchors on). Read
68
67
  * LAZILY on the first composed-rate use, never at construction: every
69
68
  * runtime's year laws read THIS factory's bases.
70
69
  */
@@ -74,16 +73,14 @@ export type DeepTimeLodDeps = {
74
73
  * plane's nodal regression on the invariable plane, 1,296,000/|s₃| with s₃
75
74
  * the dominant ζ mode of the banked deep secular modes (≈ 68,751 yr). An
76
75
  * ORBITAL quantity (μ-tier: it does not follow Earth's spin), the reference
77
- * the solar day's "ecliptic missing motion" term rides (plan 06 T2 item —
78
- * formerly the spin unit's H/5, 67,063 yr, 2.5 % off and scaling with the
79
- * spin at deep time). Lazy, like the precession anchor.
76
+ * the solar day's "ecliptic missing motion" term rides. Lazy, like the
77
+ * precession anchor.
80
78
  */
81
79
  nodalPeriodYearsFn: () => number;
82
80
  /**
83
81
  * - OPTIONAL time-dependent
84
82
  * Earth-Moon angular momentum. Absent → the J2000 constant: conservation
85
- * (plan 12 option A — the Driver-1½ solar-channel budget is deleted;
86
- * measured: conservation on the cited history reproduces Farhat's own LOD
83
+ * (measured: conservation on the cited history reproduces Farhat's own LOD
87
84
  * to 0.01 h at 100 Ma, 0.14 h at 2.46 Ga).
88
85
  */
89
86
  lEmAtAgeKgm2S?: ((tMa: number) => number) | undefined;
@@ -98,7 +95,7 @@ export type DeepTimeLodDeps = {
98
95
  * -
99
96
  * OPTIONAL cos ε̄(t)/cos ε̄(0) of the cited mean obliquity (earth/mean-
100
97
  * obliquity-history) — the factor the precession RATE of date carries on the
101
- * constant (plan 12 §8 option (a)); absent → 1, the constant alone, bit-identical.
98
+ * constant; absent → 1, the constant alone, bit-identical.
102
99
  */
103
100
  meanObliquityCosRatioAtAge?: ((tMa: number) => number | null) | undefined;
104
101
  };
@@ -113,11 +110,11 @@ export type DeepTimeLodDeps = {
113
110
  * @property {number} aLockMetres - tidal-lock distance (LOD denominator → 0)
114
111
  * @property {number} aMoonNowMetres - Farhat polynomial anchor
115
112
  * @property {number} alpha1PerMa - the LLR recession rate (the J2000 slope of the cited history)
116
- * @property {number} lodNowH13Seconds - ω₀, the J2000 day length (the SI day since plan 09; identifier kept)
113
+ * @property {number} lodNowH13Seconds - ω₀, the J2000 day length (the SI day; identifier kept)
117
114
  * @property {number} meanSiderealYearJ2000Seconds
118
115
  * @property {number} solarMassLossFracPerYear
119
116
  * @property {number} precessionSolarShareJ2000 - f_S, the solar fraction of the J2000
120
- * precession torque (derive-params) — the unit H(t) = 13·T_p,composed needs it
117
+ * precession torque (derive-params) — the composed precession rate needs it
121
118
  */
122
119
  /**
123
120
  * @typedef {Object} DeepTimeLodDeps
@@ -127,23 +124,20 @@ export type DeepTimeLodDeps = {
127
124
  * @property {(year: number) => number} cycleLodSumAt - gated δLOD sum (incl. swing)
128
125
  * @property {(year: number) => number} swingLodAt - gated swing δLOD alone
129
126
  * @property {(year: number) => number} swingLodRateAt - gated analytic swing rate
130
- * @property {() => number} precessionPeriodJ2000YearsFn - the model's DERIVED
131
- * J2000 axial precession period: the certified year-length laws' beat at
132
- * 2000, sid/(sid − trop) ≈ 25,771.4 yr (plan 06 S5 — one J2000 precession
133
- * reading; the same anchor the hybrid obliquity self-anchors on). Read
127
+ * @property {() => number} precessionPeriodJ2000YearsFn - the model's J2000 axial
128
+ * precession period, 1,296,000/p_A = 25,771.575 yr (the IAU 2006 general
129
+ * precession; the same anchor the hybrid obliquity self-anchors on). Read
134
130
  * LAZILY on the first composed-rate use, never at construction: every
135
131
  * runtime's year laws read THIS factory's bases.
136
132
  * @property {() => number} nodalPeriodYearsFn - the period of Earth's orbit
137
133
  * plane's nodal regression on the invariable plane, 1,296,000/|s₃| with s₃
138
134
  * the dominant ζ mode of the banked deep secular modes (≈ 68,751 yr). An
139
135
  * ORBITAL quantity (μ-tier: it does not follow Earth's spin), the reference
140
- * the solar day's "ecliptic missing motion" term rides (plan 06 T2 item —
141
- * formerly the spin unit's H/5, 67,063 yr, 2.5 % off and scaling with the
142
- * spin at deep time). Lazy, like the precession anchor.
136
+ * the solar day's "ecliptic missing motion" term rides. Lazy, like the
137
+ * precession anchor.
143
138
  * @property {(tMa: number) => number} [lEmAtAgeKgm2S] - OPTIONAL time-dependent
144
139
  * Earth-Moon angular momentum. Absent → the J2000 constant: conservation
145
- * (plan 12 option A — the Driver-1½ solar-channel budget is deleted;
146
- * measured: conservation on the cited history reproduces Farhat's own LOD
140
+ * (measured: conservation on the cited history reproduces Farhat's own LOD
147
141
  * to 0.01 h at 100 Ma, 0.14 h at 2.46 Ga).
148
142
  * @property {(tMa: number) => number|null} [moonDistanceSlopeMetresPerMaAtAge] -
149
143
  * OPTIONAL analytic slope of the distance history (metres per Ma, positive
@@ -152,7 +146,7 @@ export type DeepTimeLodDeps = {
152
146
  * @property {(tMa: number) => number|null} [meanObliquityCosRatioAtAge] -
153
147
  * OPTIONAL cos ε̄(t)/cos ε̄(0) of the cited mean obliquity (earth/mean-
154
148
  * obliquity-history) — the factor the precession RATE of date carries on the
155
- * constant (plan 12 §8 option (a)); absent → 1, the constant alone, bit-identical.
149
+ * constant; absent → 1, the constant alone, bit-identical.
156
150
  */
157
151
  /** @param {DeepTimeLodDeps} deps */
158
152
  export function createDeepTimeLod(deps: DeepTimeLodDeps): {
@@ -98,3 +98,26 @@ export function createDeepOrbitalHistory({ zModes, zetaModes, zetaSeries, zSerie
98
98
  ellipticity: number;
99
99
  };
100
100
  };
101
+ /**
102
+ * The CO-ROTATING anchored mode sum — the z-side evaluator of the history
103
+ * (the ϖ̇ fix, measured): the plain DC anchor residual is a spurious
104
+ * zero-frequency mode that preserves the J2000 VALUE but dilutes the local
105
+ * argument rate by |sum(0)|/|anchor| (z: 11.47 → 7.93″/yr, a 92 s-class
106
+ * anomalistic-year bias in the mode tier). Here the residual ROTATES at the
107
+ * raw sum's own local arg-rate g* = Im(ż·z̄)/|z|² (analytic), so at t = 0
108
+ * both the value AND the rate are exact, and at depth the residual is one
109
+ * |R|-amplitude term at a physical frequency instead of a DC offset (deep
110
+ * envelope measured unchanged: [0.0001, 0.0672] → [0.0003, 0.0678] over
111
+ * 10–50 Myr). Exported: e(t) = hypot(sum(t)) needs no spin integration,
112
+ * so a fixture can read a deep eccentricity node here (bit-identical at the
113
+ * grid nodes; the published surface is the grid's linear interpolation and
114
+ * stays on the history).
115
+ * @param {ReadonlyArray<{omegaRadPerYr: number, re: number, im: number}>} modes
116
+ * @param {[number, number]} anchor the J2000 value (q, p) the sum is pinned to
117
+ * @returns {(t: number) => [number, number]} t in years from J2000
118
+ */
119
+ export function createCoRotatingAnchoredModeSum(modes: ReadonlyArray<{
120
+ omegaRadPerYr: number;
121
+ re: number;
122
+ im: number;
123
+ }>, anchor: [number, number]): (t: number) => [number, number];
@@ -54,24 +54,6 @@ export type BesselianDeps = {
54
54
  speedOfLightKmS: number;
55
55
  };
56
56
  };
57
- /**
58
- * @typedef {Object} BesselianDeps
59
- * @property {(dDaysTT: number) => {lonDeg: number, latDeg: number, distKm: number}} moonFullAtDaysTT
60
- * full-series Moon: ecliptic-of-date longitude/latitude (deg) + distance (km), TT axis (days since J2000)
61
- * @property {(jdUT: number) => number} sunLonDegAt - geometric mean sun longitude (deg), JD(UT) axis with the finder's internal ΔT
62
- * @property {(T: number) => number} sunCompletionDeg - planetary completion (deg) at T centuries TT, SUBTRACTED from the finder sun (see eclipse/sun-planetary-completion.cjs; the finders deliberately stay without it — their fitted anchors and certified canon statistics were produced on the bare form, and elongation-class timing absorbs the omission into the fitted phases)
63
- * @property {(year: number) => number} sunAberrationDegAt - the Sun's derived planetary aberration κ (deg) at calendar year, SUBTRACTED from the geometric Sun longitude (the apparent Sun; see the header)
64
- * @property {(jd: number) => number} deltaTSecondsAt - framework ΔT (J2000-zeroed convention)
65
- * @property {(year: number) => number} obliquityDegAt - framework obliquity (deg) at calendar year
66
- * @property {(year: number) => number} eccentricityAt - framework Earth-orbit eccentricity at calendar year
67
- * @property {(year: number) => number} perihelionLongitudeDegAt - framework perihelion longitude (deg) at calendar year
68
- * @property {(jd: number) => number} yearFromJD - the model's own JD → calendar-year conversion
69
- * @property {{ j2000JD: number, julianCenturyDays: number, earthDiameterKm: number,
70
- * moonDiameterKm: number, sunDiameterKm: number, sunDistanceKm: number,
71
- * earthFlatteningInverse: number, ttBridgeSeconds: number,
72
- * gmstMeanSiderealT0Deg: number, gmstMeanSiderealRateDegPerDay: number,
73
- * gmstMeanSiderealT2Deg: number, speedOfLightKmS: number }} constants
74
- */
75
57
  /** @param {BesselianDeps} deps */
76
58
  export function createBesselian(deps: BesselianDeps): {
77
59
  umbraGroundAt: (jdUT: number) => {
@@ -96,4 +78,41 @@ export function createBesselian(deps: BesselianDeps): {
96
78
  };
97
79
  centralDurationSeconds: number | null;
98
80
  };
81
+ gmstDeg: (jdUT: number) => number;
99
82
  };
83
+ /**
84
+ * @typedef {Object} BesselianDeps
85
+ * @property {(dDaysTT: number) => {lonDeg: number, latDeg: number, distKm: number}} moonFullAtDaysTT
86
+ * full-series Moon: ecliptic-of-date longitude/latitude (deg) + distance (km), TT axis (days since J2000)
87
+ * @property {(jdUT: number) => number} sunLonDegAt - geometric mean sun longitude (deg), JD(UT) axis with the finder's internal ΔT
88
+ * @property {(T: number) => number} sunCompletionDeg - planetary completion (deg) at T centuries TT, SUBTRACTED from the finder sun (see eclipse/sun-planetary-completion.cjs; the finders deliberately stay without it — their fitted anchors and certified canon statistics were produced on the bare form, and elongation-class timing absorbs the omission into the fitted phases)
89
+ * @property {(year: number) => number} sunAberrationDegAt - the Sun's derived planetary aberration κ (deg) at calendar year, SUBTRACTED from the geometric Sun longitude (the apparent Sun; see the header)
90
+ * @property {(jd: number) => number} deltaTSecondsAt - framework ΔT (J2000-zeroed convention)
91
+ * @property {(year: number) => number} obliquityDegAt - framework obliquity (deg) at calendar year
92
+ * @property {(year: number) => number} eccentricityAt - framework Earth-orbit eccentricity at calendar year
93
+ * @property {(year: number) => number} perihelionLongitudeDegAt - framework perihelion longitude (deg) at calendar year
94
+ * @property {(jd: number) => number} yearFromJD - the model's own JD → calendar-year conversion
95
+ * @property {{ j2000JD: number, julianCenturyDays: number, earthDiameterKm: number,
96
+ * moonDiameterKm: number, sunDiameterKm: number, sunDistanceKm: number,
97
+ * earthFlatteningInverse: number, ttBridgeSeconds: number,
98
+ * gmstMeanSiderealT0Deg: number, gmstMeanSiderealRateDegPerDay: number,
99
+ * gmstMeanSiderealT2Deg: number, speedOfLightKmS: number }} constants
100
+ */
101
+ /** Mean sidereal time at Greenwich, degrees (mean equinox — pairs with the
102
+ * mean-of-date body longitudes; coefficients single-sourced from
103
+ * astro-reference.json physicalConstants). THE ONE GMST of the model: the
104
+ * eclipse location tier, the API's observer tier, the eclipse and lunar
105
+ * audits and the browser's diagnostics all read it. Meeus 12.4's
106
+ * cubic term (−T³/38,710,000) is deliberately absent: it is 0.9″ in the
107
+ * eclipse canon and at most 93″ (6 s of time) at the edge of the observer
108
+ * era, and every recorded eclipse and lunar value was measured without it.
109
+ * @param {number} jdUT
110
+ * @param {{ j2000JD: number, julianCenturyDays: number, gmstMeanSiderealT0Deg: number, gmstMeanSiderealRateDegPerDay: number, gmstMeanSiderealT2Deg: number }} K
111
+ * @returns {number} */
112
+ export function computeGmstDeg(jdUT: number, K: {
113
+ j2000JD: number;
114
+ julianCenturyDays: number;
115
+ gmstMeanSiderealT0Deg: number;
116
+ gmstMeanSiderealRateDegPerDay: number;
117
+ gmstMeanSiderealT2Deg: number;
118
+ }): number;
package/types/index.d.ts CHANGED
@@ -66,7 +66,7 @@ export { computeMassChainJ2000, computeMoonPeriodsJ2000 } from "./earth/mass-cha
66
66
  export { SECONDS_PER_DAY, DAYS_PER_JULIAN_YEAR, JULIAN_CENTURY_DAYS, SECONDS_PER_JULIAN_YEAR } from "./constants/units.cjs";
67
67
  export { computeEarthFrameOfDate, solveWheelAngleForLongitude, computeSceneWorldFrameJ2000, SCENE_EQUINOX_VIEW_AZIMUTH_DEG } from "./earth/frame-of-date.cjs";
68
68
  export { derivePlanetGeometry, scaffoldOrbitInputs } from "./planets/geometry.cjs";
69
- export { buildPlanetChainsFromArtifactData, computePlanetElementsAtYear, computeHeliocentricEclipticFromElements, computePoissonArgRad, computeOsculatingElements, solveKeplerRad, computeApsidalSecularDegPerYr, ANCHOR_EPOCH_YEAR, ANCHOR_EPOCH_JD } from "./planets/keplerian-chain.cjs";
69
+ export { buildPlanetChainsFromArtifactData, computePlanetElementsAtYear, computeHeliocentricEclipticFromElements, computePoissonArgRad, computeOsculatingElements, solveKeplerRad, computeApsidalTangentDegPerYr, ANCHOR_EPOCH_YEAR, ANCHOR_EPOCH_JD } from "./planets/keplerian-chain.cjs";
70
70
  export { computeEquatorNodeOriginSFrameDeg, convertNodeSFrameToEquatorOriginDeg } from "./planets/inv-plane-frame.cjs";
71
71
  export { computePlanetPrecessionConstant, createPlanetSpinChannel, createPlanetSpinChannelFromArtifacts, computeObliquityJ2000Deg } from "./planets/spin-channel.cjs";
72
72
  export { CHAIN_ARTIFACT, CHAIN_ARTIFACT_HASH } from "./planets/chain-artifact.js";
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Cardinal instants — the apparent Sun (completed, aberrated, nutated) and the Newton crossings.
3
+ *
4
+ * One slice of `assembleModel` (../model.js): receives the context the earlier slices built, returns the bindings the later ones read.
5
+ */
6
+ /** @param {import('./published-periods.js').Ctx} ctx @returns the bindings the later slices read */
7
+ export function assembleCardinalInstants(ctx: import("./published-periods.js").Ctx): {
8
+ cardinalCrossingJdUT: (year: number, type: string) => number;
9
+ cardinalCrossingNearJdUT: (jdSeedUT: number, type: string) => number;
10
+ cardinalTargetDeg: (type: string) => number;
11
+ sunAberrationArcsecAt: (year: number) => number;
12
+ sunApparentLonDegAtJdUT: (jdUT: number) => number;
13
+ };
14
+ export type Ctx = import("./published-periods.js").Ctx & ReturnType<typeof assembleCardinalInstants>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * RESEARCH OVERRIDES for Earth's orbit laws (doc 109 §7): an alternative e(t), de/dt(t) and
3
+ * ϖ_of-date(t) flow through every consumer (the eclipse Sun, the Moon's E-factor, the cardinal
4
+ * points) exactly as the shipped laws do. `{}` = the shipped laws. Not a counterfactual in the §2d
5
+ * sense (no hash change) — callers must say when they used it; the generators refuse to --write
6
+ * under an override.
7
+ */
8
+ export type Laws = {
9
+ eccentricityAt?: (year: number) => number;
10
+ eccentricityRateAt?: (year: number) => number;
11
+ perihelionLongitudeDegAt?: (year: number) => number;
12
+ };
13
+ /**
14
+ * `giaEllipticityOfDate: false` builds the one-source history WITHOUT the J₂(t)/J₂₀ factor of date
15
+ * (the ice-driven GIA channel, which rides the climate formula's own post-MPT layer): the orbital
16
+ * FORCING alone. The T1 exporter derives the climate lines' obliquity rate on it, so the lines
17
+ * cannot depend on their own fit (v23.0; measured 3e-5 of the rate, 2–3 yr of period). Default true =
18
+ * the shipped physics.
19
+ */
20
+ export type Options = {
21
+ giaEllipticityOfDate?: boolean;
22
+ };
23
+ /**
24
+ * The forward bindings — what an early slice reads at call time from a later one. Typed by the
25
+ * members actually read, so the composer's assignment is checked against each owner's surface.
26
+ */
27
+ export type LateBindings = {
28
+ /**
29
+ * owner: year-day-lengths — read by deep-time-chain
30
+ */
31
+ certifiedAxialPrecessionJ2000Years: () => number;
32
+ /**
33
+ * owner: one-source-movement — read by deep-time-chain and earth-scalars
34
+ */
35
+ oneSourceM: {
36
+ epsAt(year: number): number;
37
+ eAt(year: number): number;
38
+ periOfDateDegAt(year: number): number;
39
+ precessionOfDateFactorsAt(year: number): {
40
+ solarTorque: number;
41
+ ellipticity: number;
42
+ };
43
+ axialPrecessionYearsLunisolarJ2000: number;
44
+ };
45
+ /**
46
+ * owner: one-source-movement — read by year-day-lengths
47
+ */
48
+ yearLengthsM: {
49
+ anomalisticYearSecondsAtYear(year: number): number;
50
+ };
51
+ /**
52
+ * owner: sun-and-eclipses — read by lunar-theory (the arguments' Sun)
53
+ */
54
+ sunMeanLongitudeDegAt: (year: number) => number;
55
+ /**
56
+ * owner: published-periods — read by lunar-theory (the dynamical rate of date)
57
+ */
58
+ publishedAxialPrecessionYearsAtYear: (year: number) => number;
59
+ /**
60
+ * owner: published-periods — read by year-day-lengths
61
+ */
62
+ publishedSiderealYearSecondsAtYear: (year: number) => number;
63
+ /**
64
+ * owner: cardinal-instants — read by sun-and-eclipses (the besselian's apparent Sun)
65
+ */
66
+ sunAberrationArcsecAt: (year: number) => number;
67
+ };
68
+ /**
69
+ * The composer's inputs — the first slice's context.
70
+ */
71
+ export type ModelInputs = {
72
+ /**
73
+ * the frozen constants context
74
+ */
75
+ C: Readonly<Record<string, any>>;
76
+ /**
77
+ * the fitted coefficients
78
+ */
79
+ F: Readonly<Record<string, any>>;
80
+ laws: Laws;
81
+ /**
82
+ * the governed N-body secular series (the API/Node path; null for the bare package)
83
+ */
84
+ secularSeriesArtifact: any;
85
+ options: Options;
86
+ late: LateBindings;
87
+ };