@neilberkman/sidereon 0.29.0 → 0.29.2

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/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.29.2 - 2026-07-16
6
+
7
+ - Adds `GnssExactProductSet`, a fail-closed gate for a declared exact identity
8
+ inventory. Empty declarations, duplicates, missing products, and undeclared
9
+ products are rejected.
10
+ - Preserves prediction-tier identity during exact-set comparison. SP3
11
+ observed/predicted timing remains available from the parser's authoritative
12
+ record-flag summary.
13
+ - Builds against `sidereon` and `sidereon-core` 0.29.2.
14
+
15
+ ## 0.29.1 - 2026-07-15
16
+
17
+ - Derives CODE predicted IONEX P1 and P2 direct locations from their current
18
+ official tier-specific HTTPS directories, including identity-year rollover.
19
+ - Keeps same-filename P1 and P2 exact product cache keys distinct.
20
+ - Builds against `sidereon` and `sidereon-core` 0.29.1.
21
+
5
22
  ## 0.29.0 - 2026-07-15
6
23
 
7
24
  - Adds pure exact GNSS product identity and explicit distribution-location
package/README.md CHANGED
@@ -108,7 +108,11 @@ Product identity and distribution are separate. The pure derivation functions
108
108
  perform no network or file IO:
109
109
 
110
110
  ```js
111
- import { distributionLocation, productIdentity } from "@neilberkman/sidereon";
111
+ import {
112
+ distributionLocation,
113
+ GnssExactProductSet,
114
+ productIdentity,
115
+ } from "@neilberkman/sidereon";
112
116
 
113
117
  const identity = productIdentity("cod", "sp3", 2026, 7, 12);
114
118
  console.log(identity.officialFilename);
@@ -126,6 +130,11 @@ const cddis = distributionLocation(
126
130
  );
127
131
  console.log(cddis.originalUrl);
128
132
  console.log(cddis.compression); // gzip
133
+
134
+ const exactSet = new GnssExactProductSet();
135
+ exactSet.addExpected(identity);
136
+ exactSet.addAvailable(identity); // add only after content validation
137
+ exactSet.validate();
129
138
  ```
130
139
 
131
140
  `productIdentity` returns publisher, solution class, campaign, date, issue,
@@ -136,6 +145,13 @@ Changing the source cannot change the exact product. Unsupported combinations
136
145
  throw instead of selecting another center, tier, issue, date, cadence, or
137
146
  family.
138
147
 
148
+ `GnssExactProductSet.validate()` rejects an empty declaration, duplicates,
149
+ missing products, undeclared products, and same-filename identities with
150
+ different prediction metadata. Start dependent processing only after it
151
+ returns successfully. For SP3 observed/predicted timing, use
152
+ `sp3.predictionSummary()`; do not infer the boundary from issue times or catalog
153
+ fields.
154
+
139
155
  Browser and Node callers retain control of `fetch`, Earthdata credentials,
140
156
  retries, and cache policy. Send credentials only to NASA's documented hosts;
141
157
  remove URL queries from diagnostics; reject HTML success bodies; validate
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neilberkman/sidereon",
3
- "version": "0.29.0",
3
+ "version": "0.29.2",
4
4
  "description": "WebAssembly / JavaScript interface over the sidereon GNSS + astrodynamics engine: SP3 loading and multi-product merge, SPP / RTK (float + fixed) / PPP (float + fixed) positioning, IONEX slant delay, SGP4 and numerical orbit propagation, RINEX observation/navigation/clock parsing, CRINEX (Hatanaka) decoding, observable-domain math (carrier combinations, cycle slips, Hatch smoothing, weighting, velocity, GPS C/A signal), and the astro domain (scale-tagged time, frame transforms, Sun/Moon ephemerides, eclipse / body angles, DOP, passes / visibility, conjunction + collision probability, CDM / OMM / ANTEX parsing, RF link budget)",
5
5
  "type": "module",
6
6
  "license": "MIT",