space-data-module-sdk 0.8.16 → 0.8.17

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 (63) hide show
  1. package/bin/space-data-module.js +24 -6
  2. package/docs/browser-wasmedge-isomorphic.html +1 -1
  3. package/docs/byo-wasm-quickstart.html +1 -1
  4. package/docs/conformance.html +10 -4
  5. package/docs/conformance.md +20 -4
  6. package/docs/events-abi.html +1 -1
  7. package/docs/families/analytics.html +1 -1
  8. package/docs/families/attitude.html +1 -1
  9. package/docs/families/behavior.html +1 -1
  10. package/docs/families/breakup.html +1 -1
  11. package/docs/families/conjunction.html +1 -1
  12. package/docs/families/data-source.html +7 -2
  13. package/docs/families/effects.html +1 -1
  14. package/docs/families/environment.html +1 -1
  15. package/docs/families/estimation.html +56 -54
  16. package/docs/families/estimation.md +155 -125
  17. package/docs/families/gnc.html +1 -1
  18. package/docs/families/maneuver.html +1 -1
  19. package/docs/families/obstruction.html +1 -1
  20. package/docs/families/propagator.html +16 -2
  21. package/docs/families/propulsion.html +1 -1
  22. package/docs/families/reentry.html +1 -1
  23. package/docs/families/rf.html +1 -1
  24. package/docs/families/scheduler.html +1 -1
  25. package/docs/families/sensor.html +1 -1
  26. package/docs/families/signature.html +1 -1
  27. package/docs/flatsql-host-contract.html +1 -1
  28. package/docs/flatsql-streaming-standard.html +1 -1
  29. package/docs/gpu-module-abi.html +1 -1
  30. package/docs/harness-family-matrix.md +7 -7
  31. package/docs/index.html +2 -2
  32. package/docs/isomorphic-pthreads.html +1 -1
  33. package/docs/isomorphic-sdn-runtime-plan.html +1 -1
  34. package/docs/language-runtime-matrix.html +1 -1
  35. package/docs/llms.txt +1 -1
  36. package/docs/module-bundle-runtime-plan.html +1 -1
  37. package/docs/module-publication-standard.html +1 -1
  38. package/docs/node-red-default-node-parity.html +1 -1
  39. package/docs/propagator-abi.md +52 -0
  40. package/docs/protect-and-sign.html +1 -1
  41. package/docs/protocol-installation.html +1 -1
  42. package/docs/provider-access-abi.md +25 -0
  43. package/docs/publication-submission.html +1 -1
  44. package/docs/secrets-capability.html +1 -1
  45. package/docs/testing-harness.html +1 -1
  46. package/docs/tri-runtime-parity-gate.html +1 -1
  47. package/docs/tri-runtime-parity.html +1 -1
  48. package/include/orbpro/orbpro_estimation_abi.h +883 -0
  49. package/include/orbpro/orbpro_propagator_abi.h +58 -0
  50. package/package.json +4 -2
  51. package/schemas/orbpro/Estimation.fbs +244 -0
  52. package/schemas/orbpro/Propagator.fbs +64 -0
  53. package/src/conformance/estimationReference.js +81 -0
  54. package/src/conformance/estimationSuite.js +134 -0
  55. package/src/conformance/index.js +39 -2
  56. package/src/generated/orbpro/propagator-abi.js +21 -0
  57. package/src/generated/orbpro/propagator-abi.ts +50 -0
  58. package/src/standards/sharedCatalog.js +7 -0
  59. package/templates/estimation-module/README.md +24 -0
  60. package/templates/estimation-module/build.mjs +32 -0
  61. package/templates/estimation-module/package.json +12 -0
  62. package/templates/estimation-module/plugin-manifest.json +34 -0
  63. package/templates/estimation-module/src/reference_estimation.cpp +53 -0
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
@@ -110,6 +110,56 @@ shipping both is expected, and they must agree exactly (see
110
110
  `plugin_init_omm` REPLACES the element set. `plugin_ingest_omm_one` APPENDS
111
111
  and returns its handle — see [identity](#identity).
112
112
 
113
+ ### Ephemeris ingest
114
+
115
+ | Export | Signature | Returns |
116
+ |---|---|---|
117
+ | `plugin_init_ephemeris` | `int32_t(const uint8_t* bytes, size_t len, uint32_t format)` | entities initialized (>0), or a negative [error code](#error-codes) |
118
+
119
+ `format` is an `OrbProEphemerisFormat` member (`AUTO` = identify from the
120
+ bytes). This is the ONLY legal door for an ephemeris container. It exists
121
+ because `plugin_init` is bound to packed `OrbProOMMRecord` and MUST refuse a
122
+ length that is not a whole multiple of that struct — so a DAF, a Code-500
123
+ record stream or an STK `.e` body has no entry point through it, and passing
124
+ one anyway is a size-lock violation dressed as an ingest. Do not smuggle
125
+ ephemeris bytes through `plugin_init` as fake OMM records.
126
+
127
+ An ephemeris provider is a propagator like any other. It exports
128
+ `plugin_init_ephemeris` INSTEAD of the OMM/element ingest verbs, and is
129
+ otherwise held to every rule on this page: `plugin_propagate` and
130
+ `plugin_propagate_batch` agree exactly, output is **ECEF metres** (§[Frames](#frames)),
131
+ padding bytes are zero, `plugin_destroy` really releases, and every failure
132
+ carries its own code. The consumer seam does not change — the host still
133
+ resolves it by name and drives it through `PropagatedPositionProperty`.
134
+
135
+ Three obligations are specific to this verb:
136
+
137
+ - **The frame is DECLARED, and this is the one family that may exit
138
+ non-ECEF.** Every other provider outputs ECEF because it computes in a frame
139
+ of its own choosing and the host cannot know which. An ephemeris container is
140
+ different: it states its frame outright (a `REF_FRAME` keyword, a DAF frame
141
+ code, an STK `CoordinateSystem`, SP3's terrestrial frame), and rotating a
142
+ J2000 kernel to ECEF so the consumer can rotate it straight back is two
143
+ interpolated rotations added to an answer that was already exact. So an
144
+ ephemeris provider emits the container's own frame and SAYS SO in
145
+ `StateVector.reference_frame`, set through
146
+ `orbpro_state_set_reference_frame()` — never by assigning the field, which
147
+ leaves the padding bytes stale.
148
+
149
+ The frame it names must be a member of the ABI's own `ReferenceFrame` roster,
150
+ translated by NAMED TOKEN. A native frame integer never crosses this seam:
151
+ five incompatible `ReferenceFrame` vocabularies meet here and `ECI == 0`,
152
+ `TEME == 0` and `FIXED == 0` all collide. A container whose declared frame
153
+ has no member on the roster is `UNSUPPORTED_FORMAT`, not a guess.
154
+ - **Interpolation is declared, not implied.** A container that states its own
155
+ interpolation rule (SPK segment type, OEM `INTERPOLATION`/`INTERPOLATION_DEGREE`,
156
+ STK `InterpolationMethod`) is evaluated by THAT rule. A module that silently
157
+ substitutes its own is not reading the file, it is fitting one.
158
+ - **Ingest is streamed, not slurped.** A multi-hundred-megabyte kernel that
159
+ loads on native WasmEdge and dies in the browser is a runtime-shaped branch.
160
+ Read the container by record and declare `initialMemoryBytes` /
161
+ `maximumMemoryBytes` rather than inheriting a per-lane default.
162
+
113
163
  ### Batch and introspection
114
164
 
115
165
  | Export | Signature | Returns |
@@ -348,6 +398,8 @@ the degradation ladder (transient → skip; fatal → respawn; exhausted → lat
348
398
  | `-4` | BAD_INPUT | malformed or short input buffer |
349
399
  | `-5` | NOT_CONVERGED | the solve failed to converge |
350
400
  | `-6` | UNPHYSICAL | the elements describe no closed orbit |
401
+ | `-7` | UNSUPPORTED_FORMAT | the ephemeris container is not one this module reads, or `AUTO` could not identify it |
402
+ | `-8` | EPOCH_OUT_OF_RANGE | the requested epoch lies outside every segment the loaded ephemeris covers |
351
403
 
352
404
  Rules that are not negotiable:
353
405
 
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
@@ -12,8 +12,33 @@ Nothing in the guest ABI names an engine, a tile scheme, or a vendor. The same
12
12
  three imports serve a browser engine's live quadtree cache, a host-side tile
13
13
  store, and a deterministic test fixture.
14
14
 
15
+ ## What this port is NOT
16
+
17
+ Stated because it was read the other way and a consumer nearly built on it:
18
+ this is a **raster tile** port. `sdm_provider_tile_desc_t.kind` has exactly two
19
+ members — terrain and imagery — and every `acquire` operation (`tile`,
20
+ `profile`, `region`) is geospatial. There is no `kind`, no `encoding` and no
21
+ operation that describes a DAF record, an ephemeris block, a tracking-data
22
+ message or any other non-raster container.
23
+
24
+ A module that reads bytes which are not tiles does **not** use this port. It
25
+ takes those bytes on a declared input port of its own method surface, as
26
+ `data-source/oem-source-iss` does (`pluginFamily: "data_source"`,
27
+ `capabilities: []`, `externalInterfaces: []`), and an ephemeris container
28
+ reaches a propagator through `plugin_init_ephemeris` — see
29
+ [the propagator ABI](./propagator-abi.md#ephemeris-ingest). Stretching a tile
30
+ descriptor over a record stream would be an ABI-shaped lie, which is the exact
31
+ failure this SDK exists to prevent.
32
+
33
+ Scope note on the family matrix: `docs/harness-family-matrix.md` lists
34
+ data-source as covered by "a conformance kit and a reference module". No
35
+ data-source conformance kit exists — `src/conformance/index.js` freezes
36
+ `CONFORMANCE_FAMILIES` to `["propagator"]`, which is today the only harnessed
37
+ family with a kit. Read the matrix row as the reference-module claim only.
38
+
15
39
  ## Table of contents
16
40
 
41
+ - [What this port is NOT](#what-this-port-is-not)
17
42
  - [Doctrine](#doctrine)
18
43
  - [Capability](#capability)
19
44
  - [The import set](#the-import-set)
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
@@ -54,7 +54,7 @@
54
54
  <li><a href="./families/effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
55
  </ul>
56
56
  <h2>Estimation, data and logic</h2><ul>
57
- <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
57
+ <li><a href="./families/estimation.html"><span>Estimation</span><span class="tag tag-shipped">shipped</span></a></li>
58
58
  <li><a href="./families/data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
59
  <li><a href="./families/analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
60
  <li><a href="./families/scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>