space-data-module-sdk 0.8.15 → 0.8.16

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 (116) hide show
  1. package/docs/_shell/consumer-assets.html +5 -0
  2. package/docs/browser-wasmedge-isomorphic.html +261 -0
  3. package/docs/byo-wasm-quickstart.html +226 -0
  4. package/docs/byo-wasm-quickstart.md +204 -0
  5. package/docs/conformance.html +156 -0
  6. package/docs/emception-shared-memory-verdict.md +209 -0
  7. package/docs/events-abi.html +313 -0
  8. package/docs/events-abi.md +530 -0
  9. package/docs/families/analytics.html +178 -0
  10. package/docs/families/analytics.md +104 -0
  11. package/docs/families/attitude.html +157 -0
  12. package/docs/families/attitude.md +36 -0
  13. package/docs/families/behavior.html +157 -0
  14. package/docs/families/behavior.md +36 -0
  15. package/docs/families/breakup.html +157 -0
  16. package/docs/families/breakup.md +36 -0
  17. package/docs/families/conjunction.html +186 -0
  18. package/docs/families/conjunction.md +121 -0
  19. package/docs/families/data-source.html +318 -0
  20. package/docs/families/effects.html +157 -0
  21. package/docs/families/effects.md +36 -0
  22. package/docs/families/environment.html +170 -0
  23. package/docs/families/environment.md +73 -0
  24. package/docs/families/estimation.html +190 -0
  25. package/docs/families/estimation.md +128 -0
  26. package/docs/families/gnc.html +157 -0
  27. package/docs/families/gnc.md +36 -0
  28. package/docs/families/maneuver.html +209 -0
  29. package/docs/families/maneuver.md +206 -0
  30. package/docs/families/obstruction.html +191 -0
  31. package/docs/families/obstruction.md +96 -0
  32. package/docs/families/propagator.html +333 -0
  33. package/docs/families/propulsion.html +157 -0
  34. package/docs/families/propulsion.md +36 -0
  35. package/docs/families/reentry.html +157 -0
  36. package/docs/families/reentry.md +36 -0
  37. package/docs/families/rf.html +193 -0
  38. package/docs/families/rf.md +136 -0
  39. package/docs/families/scheduler.html +157 -0
  40. package/docs/families/scheduler.md +36 -0
  41. package/docs/families/sensor.html +157 -0
  42. package/docs/families/sensor.md +36 -0
  43. package/docs/families/signature.html +157 -0
  44. package/docs/families/signature.md +36 -0
  45. package/docs/flatsql-host-contract.html +176 -0
  46. package/docs/flatsql-streaming-standard.html +375 -0
  47. package/docs/gpu-module-abi.html +233 -0
  48. package/docs/harness-family-matrix.md +135 -0
  49. package/docs/index.html +216 -85
  50. package/docs/isomorphic-pthreads.html +228 -0
  51. package/docs/isomorphic-pthreads.md +84 -0
  52. package/docs/isomorphic-sdn-runtime-plan.html +274 -0
  53. package/docs/language-runtime-matrix.html +182 -0
  54. package/docs/llms.txt +86 -0
  55. package/docs/module-bundle-runtime-plan.html +146 -0
  56. package/docs/module-publication-standard.html +503 -0
  57. package/docs/node-red-default-node-parity.html +201 -0
  58. package/docs/propagator-abi.md +45 -12
  59. package/docs/protect-and-sign.html +181 -0
  60. package/docs/protect-and-sign.md +120 -0
  61. package/docs/protocol-installation.html +296 -0
  62. package/docs/publication-submission.html +158 -0
  63. package/docs/publication-submission.md +78 -0
  64. package/docs/secrets-capability.html +206 -0
  65. package/docs/styles.css +860 -167
  66. package/docs/testing-harness.html +408 -0
  67. package/docs/tri-runtime-parity-gate.html +182 -0
  68. package/docs/tri-runtime-parity.html +203 -0
  69. package/include/orbpro/orbpro_event_runner.h +951 -0
  70. package/include/orbpro/orbpro_events_abi.h +565 -0
  71. package/include/orbpro/orbpro_propagator_abi.h +17 -0
  72. package/package.json +11 -4
  73. package/schemas/orbpro/Events.fbs +501 -0
  74. package/schemas/orbpro/Propagator.fbs +72 -9
  75. package/schemas/orbpro/reference-frame-crosswalk.json +108 -0
  76. package/schemas/orbpro/reference-frame.lock.json +98 -0
  77. package/src/browser.js +13 -0
  78. package/src/generated/orbpro/events-abi.js +206 -0
  79. package/src/generated/orbpro/events-abi.ts +319 -0
  80. package/src/generated/orbpro/propagator/reference-frame.js +17 -0
  81. package/src/generated/orbpro/propagator/reference-frame.ts +91 -1
  82. package/src/generated/orbpro/propagator-abi.js +17 -0
  83. package/src/generated/orbpro/propagator-abi.ts +17 -0
  84. package/src/generated/spacedatastandards/plg/CCT.d.ts +94 -0
  85. package/src/generated/spacedatastandards/plg/CCT.d.ts.map +1 -0
  86. package/src/generated/spacedatastandards/plg/CCT.js +208 -0
  87. package/src/generated/spacedatastandards/plg/CCT.ts +281 -0
  88. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts +98 -0
  89. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts.map +1 -0
  90. package/src/generated/spacedatastandards/plg/CCTCategory.js +177 -0
  91. package/src/generated/spacedatastandards/plg/CCTCategory.ts +269 -0
  92. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts +54 -0
  93. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts.map +1 -0
  94. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.js +106 -0
  95. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.ts +144 -0
  96. package/src/generated/spacedatastandards/plg/PLG.d.ts +46 -2
  97. package/src/generated/spacedatastandards/plg/PLG.d.ts.map +1 -1
  98. package/src/generated/spacedatastandards/plg/PLG.js +78 -5
  99. package/src/generated/spacedatastandards/plg/PLG.ts +90 -5
  100. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts +181 -0
  101. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts.map +1 -0
  102. package/src/generated/spacedatastandards/plg/capabilityClass.js +183 -0
  103. package/src/generated/spacedatastandards/plg/capabilityClass.ts +208 -0
  104. package/src/generated/spacedatastandards/plg/main.d.ts +4 -0
  105. package/src/generated/spacedatastandards/plg/main.d.ts.map +1 -1
  106. package/src/generated/spacedatastandards/plg/main.js +4 -0
  107. package/src/generated/spacedatastandards/plg/main.ts +4 -0
  108. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +40 -2
  109. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -1
  110. package/src/generated/spacedatastandards/plg/pluginCategory.js +40 -2
  111. package/src/generated/spacedatastandards/plg/pluginCategory.ts +40 -2
  112. package/src/host/browserModuleHarness.js +8 -0
  113. package/src/host/wasiThreadHost.js +189 -14
  114. package/src/index.d.ts +18 -1
  115. package/src/transport/index.js +16 -0
  116. package/src/transport/records.js +1015 -3
@@ -0,0 +1,190 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="description" content="Status: EXPERIMENTAL. A production orbit-determination module is shipped and" />
7
+ <title>Estimation — Space Data Module SDK</title>
8
+ <link rel="stylesheet" href="../styles.css" />
9
+ <!-- SDN_CONSUMER_ASSETS_START -->
10
+ <link rel="stylesheet" href="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.c3f68d1cfd88478f10d836a5e829d1dfc6a10157972cf0f7d4d319d0636f2cc4.css" integrity="sha384-fICuhN4I9xqOK1F5vGGzl26opuO+xQIvTZXMSV76lWTBiQ6AfzztMGLLDw8yRT8i" crossorigin="anonymous">
11
+ <script defer src="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.f611e7e151a3b5c38384272f8894a4c6634f0a29bf925b0e02e0e27f8db0bfff.js" integrity="sha384-R+QqsKoWJIS7iWrtPmgJ49DVnb1hSGjZokupbLInJd1PLp8RwQhtF/hnaerc33ci" crossorigin="anonymous" data-sdn-wallet-public-client="v1"></script>
12
+ <script defer src="https://static.spacedatanetwork.org/assets/sdn-stack-nav/1.0.0/sdn-stack-nav.52fde607eee38ffa116188201f50258ed50bd18c9f06c1af9678f763147a8fe5.js" integrity="sha384-dgeojhJ8vTszHXIbv7O7nZcEzqD10oUYYJjBmPrV7+kLQEUlXLQD4ek5Q7HOFiO5" crossorigin="anonymous" data-nav-style-url="https://static.spacedatanetwork.org/assets/sdn-stack-nav/1.0.0/sdn-stack-nav.36a36359ce18322185e9ff179f88175bab67d5ad84a14d9c08a54f2ff27267e7.css" data-nav-style-integrity="sha384-c4M8Fg+kYaeOYYtJVr7jJsde24IhSWkWaRyAOHEZU9jozhRck089aw+mnHwxymds" data-wallet-client-url="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.f611e7e151a3b5c38384272f8894a4c6634f0a29bf925b0e02e0e27f8db0bfff.js" data-wallet-client-integrity="sha384-R+QqsKoWJIS7iWrtPmgJ49DVnb1hSGjZokupbLInJd1PLp8RwQhtF/hnaerc33ci" data-wallet-style-url="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.c3f68d1cfd88478f10d836a5e829d1dfc6a10157972cf0f7d4d319d0636f2cc4.css" data-wallet-style-integrity="sha384-fICuhN4I9xqOK1F5vGGzl26opuO+xQIvTZXMSV76lWTBiQ6AfzztMGLLDw8yRT8i" data-wallet-client-id="sdn-module-sdk-pages-v1" data-wallet-callback-uri="https://digitalarsenal.github.io/space-data-module-sdk/wallet-callback.html" data-wallet-registry-sha256="e1ce6fe903c9700484a8a87d96581c8cad97063dabf63030b4518a31a3bdaa93"></script>
13
+ <!-- SDN_CONSUMER_ASSETS_END -->
14
+ </head>
15
+ <body>
16
+ <a class="skip-link" href="#main">Skip to content</a>
17
+ <sdn-stack-nav active="module-sdk"></sdn-stack-nav>
18
+ <header class="site-header">
19
+ <a class="site-brand" href="../">Space Data Module SDK</a>
20
+ <nav class="header-links" aria-label="Site">
21
+ <a href="../byo-wasm-quickstart.html">Quickstart</a>
22
+ <a href="../conformance.html">Conformance</a>
23
+ <a href="https://github.com/DigitalArsenal/space-data-module-sdk">GitHub</a>
24
+ <a class="stack-button" href="#stack">Stack</a>
25
+ </nav>
26
+ </header>
27
+ <div class="shell">
28
+ <nav class="sidebar" id="sidebar" aria-label="Documentation">
29
+ <h2>Start here</h2><ul>
30
+ <li><a href="../index.html"><span>Harness family matrix</span></a></li>
31
+ <li><a href="../byo-wasm-quickstart.html"><span>BYO-wasm quickstart</span></a></li>
32
+ <li><a href="../conformance.html"><span>Conformance kit</span></a></li>
33
+ <li><a href="../protect-and-sign.html"><span>Protect and sign</span></a></li>
34
+ <li><a href="../publication-submission.html"><span>Publication and listing</span></a></li>
35
+ </ul>
36
+ <h2>Dynamics</h2><ul>
37
+ <li><a href="./propagator.html"><span>Propagator</span><span class="tag tag-shipped">shipped</span></a></li>
38
+ <li><a href="./maneuver.html"><span>Maneuver</span><span class="tag tag-experimental">experimental</span></a></li>
39
+ <li><a href="./propulsion.html"><span>Propulsion</span><span class="tag tag-planned">planned</span></a></li>
40
+ <li><a href="./attitude.html"><span>Attitude</span><span class="tag tag-planned">planned</span></a></li>
41
+ <li><a href="./gnc.html"><span>GNC</span><span class="tag tag-planned">planned</span></a></li>
42
+ </ul>
43
+ <h2>Environment and interaction</h2><ul>
44
+ <li><a href="./rf.html"><span>RF</span><span class="tag tag-designed">designed</span></a></li>
45
+ <li><a href="./sensor.html"><span>Sensor</span><span class="tag tag-planned">planned</span></a></li>
46
+ <li><a href="./signature.html"><span>Signature</span><span class="tag tag-planned">planned</span></a></li>
47
+ <li><a href="./environment.html"><span>Environment</span><span class="tag tag-planned">planned</span></a></li>
48
+ <li><a href="./obstruction.html"><span>Obstruction</span><span class="tag tag-designed">designed</span></a></li>
49
+ </ul>
50
+ <h2>Event physics</h2><ul>
51
+ <li><a href="./breakup.html"><span>Breakup</span><span class="tag tag-planned">planned</span></a></li>
52
+ <li><a href="./reentry.html"><span>Reentry</span><span class="tag tag-planned">planned</span></a></li>
53
+ <li><a href="./conjunction.html"><span>Conjunction</span><span class="tag tag-designed">designed</span></a></li>
54
+ <li><a href="./effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
+ </ul>
56
+ <h2>Estimation, data and logic</h2><ul>
57
+ <li><a href="./estimation.html" aria-current="page"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
58
+ <li><a href="./data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
+ <li><a href="./analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
+ <li><a href="./scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
61
+ <li><a href="./behavior.html"><span>Behavior</span><span class="tag tag-planned">planned</span></a></li>
62
+ </ul>
63
+ <h2>Runtime contract</h2><ul>
64
+ <li><a href="../events-abi.html"><span>Event locator ABI</span></a></li>
65
+ <li><a href="../module-publication-standard.html"><span>Module publication standard</span></a></li>
66
+ <li><a href="../browser-wasmedge-isomorphic.html"><span>Browser / WasmEdge isomorphism</span></a></li>
67
+ <li><a href="../isomorphic-pthreads.html"><span>Isomorphic pthreads</span></a></li>
68
+ <li><a href="../tri-runtime-parity.html"><span>Tri-runtime parity</span></a></li>
69
+ <li><a href="../tri-runtime-parity-gate.html"><span>Tri-runtime parity gate</span></a></li>
70
+ <li><a href="../testing-harness.html"><span>Testing harness</span></a></li>
71
+ <li><a href="../language-runtime-matrix.html"><span>Language and runtime matrix</span></a></li>
72
+ </ul>
73
+ <h2>Host surfaces</h2><ul>
74
+ <li><a href="../flatsql-host-contract.html"><span>FlatSQL host contract</span></a></li>
75
+ <li><a href="../flatsql-streaming-standard.html"><span>FlatSQL streaming standard</span></a></li>
76
+ <li><a href="../secrets-capability.html"><span>Credential lanes</span></a></li>
77
+ <li><a href="../protocol-installation.html"><span>Protocol installation</span></a></li>
78
+ <li><a href="../gpu-module-abi.html"><span>GPU module ABI</span></a></li>
79
+ <li><a href="../module-bundle-runtime-plan.html"><span>Module bundle runtime</span></a></li>
80
+ <li><a href="../isomorphic-sdn-runtime-plan.html"><span>Isomorphic SDN runtime</span></a></li>
81
+ <li><a href="../node-red-default-node-parity.html"><span>Node-RED node parity</span></a></li>
82
+ </ul>
83
+ </nav>
84
+ <main class="doc" id="main">
85
+ <p class="breadcrumb"><a href="../index.html">Harness families</a> / Estimation, data and logic</p>
86
+ <h1>Estimation</h1>
87
+ <p class="doc-meta"><span class="pill pill-experimental">experimental</span><span>Experimental. The shape exists in wave-2 form and is expected to change. Do not ship a commercial module against it yet.</span></p>
88
+ <p><strong>Status: EXPERIMENTAL.</strong> A production orbit-determination module is shipped and running, but it is not a ratified harness: it has no generated ABI header, no conformance kit, and no reference module in the harness sense. The broader estimation surface that its headers describe is largely not wired into the shipped path.</p>
89
+ <h2 id="doctrine"><a class="anchor" href="#doctrine" aria-hidden="true">#</a>Doctrine</h2>
90
+ <p>An estimation module turns observations into state. Observations and an initial guess go in; an estimated state, and where the family matures, a covariance, come out. It is the inverse of the propagator family, and it depends on that family: an estimator that cannot take its propagator as a pluggable port is hardwired to one force model and is not a member of this family.</p>
91
+ <p>The pluggable-propagation law applies here with full force. Every propagator-consuming surface — an estimator emphatically included — takes the propagator as a parameter or port, never as a compiled-in choice.</p>
92
+ <h2 id="capability"><a class="anchor" href="#capability" aria-hidden="true">#</a>Capability</h2>
93
+ <p>Ingest observations, fit a state, emit results as standards records. The shipped path emits <code>$OMM</code>-class mean-element results and <code>$OBD</code> observation-derived records. Input ephemerides are transient by rule: they are fitted and discarded, and only the results are stored.</p>
94
+ <h2 id="import-and-export-set"><a class="anchor" href="#import-and-export-set" aria-hidden="true">#</a>Import and export set</h2>
95
+ <p><strong>Not specified as a harness ABI.</strong> No <code>orbpro_od_abi.h</code> or equivalent generated header exists. The shipped module is invoked through the SDK's generic module surface, not through a family-specific export set.</p>
96
+ <p>In the manifest vocabulary the family projects onto <code>PluginFamily.ORBIT_DETERMINATION</code>, which itself carries a known projection gap: Space Data Standards has no dedicated plugin-category member for it yet, so it projects onto the analysis category until one is minted.</p>
97
+ <h2 id="wire-layout"><a class="anchor" href="#wire-layout" aria-hidden="true">#</a>Wire layout</h2>
98
+ <p><strong>Not specified as a public wire.</strong> The internal C++ types describe the intended shape and are useful as a design reference, but they are not a published ABI and their layout is not locked:</p>
99
+ <div class="table-wrap"><table><thead><tr><th>Type</th><th>Fields</th></tr></thead><tbody><tr><td><code>StateVector</code></td><td><code>epoch_jd</code>, <code>x</code>, <code>y</code>, <code>z</code>, <code>vx</code>, <code>vy</code>, <code>vz</code></td></tr><tr><td><code>Observation</code></td><td><code>epoch_jd</code>, <code>type</code>, <code>value</code>, <code>sigma</code>, <code>station_id</code></td></tr><tr><td><code>GroundStation</code></td><td><code>id</code>, <code>name</code>, <code>lat_deg</code>, <code>lon_deg</code>, <code>alt_km</code></td></tr><tr><td><code>Covariance6x6</code></td><td>6×6 array of doubles</td></tr></tbody></table></div>
100
+ <p><code>ObservationType</code> covers right ascension, declination, azimuth, elevation, range, range rate, and position components.</p>
101
+ <p>The SDS <code>$ODW</code> problem record and its runtime wire are unminted; <code>$OBD</code> remains the results record. By explicit ruling, the OD <em>result model</em> decision stays deferred — a future record mint covers the problem and wire side only and must not freeze the result model.</p>
102
+ <h2 id="units-and-frames"><a class="anchor" href="#units-and-frames" aria-hidden="true">#</a>Units and frames</h2>
103
+ <p>The internal types mix conventions and this is a real hazard: epochs are Julian dates, station geodetic position is in degrees with altitude in kilometres, and state components are in the propagator family's units. Any published estimation ABI must state the unit of every field at the field, exactly as the propagator ABI does. Until it does, read the module's own headers rather than assuming.</p>
104
+ <h2 id="sentinels"><a class="anchor" href="#sentinels" aria-hidden="true">#</a>Sentinels</h2>
105
+ <p>Not specified. The shipped path treats a failed fit as a refusal and does not emit a record; there is no ratified sentinel vocabulary for a partially converged solution.</p>
106
+ <h2 id="identity"><a class="anchor" href="#identity" aria-hidden="true">#</a>Identity</h2>
107
+ <p>Objects are addressed by their catalog identity in the shipped path — the same identity the propagator family uses for an entity.</p>
108
+ <h2 id="threading"><a class="anchor" href="#threading" aria-hidden="true">#</a>Threading</h2>
109
+ <p><code>wasm32-wasip1-threads</code>. The shipped fit path is genuinely multi-threaded and runs a full catalog fit inside one composed WASM flow; that is the strongest evidence in this family that the threading model is sound. No harness-level shard-write discipline is specified because no batch ABI is published.</p>
110
+ <h2 id="error-codes"><a class="anchor" href="#error-codes" aria-hidden="true">#</a>Error codes</h2>
111
+ <p>Not specified as a named set.</p>
112
+ <h2 id="lifetime"><a class="anchor" href="#lifetime" aria-hidden="true">#</a>Lifetime</h2>
113
+ <p>The shipped module is instantiated once per flow run and torn down with it.</p>
114
+ <h2 id="parity-envelope"><a class="anchor" href="#parity-envelope" aria-hidden="true">#</a>Parity envelope</h2>
115
+ <p>Cross-runtime parity is exercised for the shipped flow, but the family has no parity envelope statement of its own. Use the generic <a href="../tri-runtime-parity-gate.html">parity gate</a>.</p>
116
+ <h2 id="consumer-seam"><a class="anchor" href="#consumer-seam" aria-hidden="true">#</a>Consumer seam</h2>
117
+ <p>The seam that matters is the propagator port. An estimation module accepts a propagator plugin and calls it; the consumer chooses which propagator is supplied. Any estimation module that internally hardwires a single propagator is non-conforming by the pluggable-propagation law, regardless of how good its filter is.</p>
118
+ <h2 id="guest-c-example"><a class="anchor" href="#guest-c-example" aria-hidden="true">#</a>Guest C++ example</h2>
119
+ <p>None published. Publishing a skeleton against an unratified ABI would invite exactly the drift this family needs to avoid. Start from the <a href="./propagator.html">propagator guest example</a> for module structure, and consume the propagator through its published ABI from inside your estimator.</p>
120
+ <h2 id="known-gaps-stated-plainly"><a class="anchor" href="#known-gaps-stated-plainly" aria-hidden="true">#</a>Known gaps, stated plainly</h2>
121
+ <ul>
122
+ <li>The shipped production path is SGP4 mean-element batch fitting. That is what runs.</li>
123
+ <li>The wider surface described in the module's own headers — Gauss, Laplace, double-r, Gibbs and Herrick-Gibbs initial orbit determination; sequential EKF and UKF; 6×6 covariance with consider parameters and state-transition-matrix propagation — is compiled but audited as dead code, reachable only from a test path and never called by the production entry points. Treat it as design intent, not as available capability.</li>
124
+ <li>The abstract propagator interface inside that module is part of the same dead path. The pluggable-propagation law is satisfied by design in the header and not yet exercised in the shipped flow.</li>
125
+ <li>No conformance kit, no generated header, no negative control.</li>
126
+ </ul>
127
+ <section class="playground" id="playground-slot" data-family="estimation" data-playground="pending" aria-labelledby="playground-title">
128
+ <h2 id="playground-title">Playground</h2>
129
+ <p>
130
+ An in-browser build-and-run playground for the <code>estimation</code> harness
131
+ mounts here. It is being built under the graph task
132
+ <code>sdk-playground-emception</code>; this slot is its reserved mount
133
+ point and is intentionally empty until that lands.
134
+ </p>
135
+ </section>
136
+ <p class="doc-footer">
137
+ Source of truth for this page:
138
+ <code>docs/families/estimation.md</code>. Regenerate with
139
+ <code>npm run build:docs</code>.
140
+ </p>
141
+ </main>
142
+ <nav class="rail" aria-label="On this page"><h2>On this page</h2><ul><li><a class="depth-2" href="#doctrine">Doctrine</a></li>
143
+ <li><a class="depth-2" href="#capability">Capability</a></li>
144
+ <li><a class="depth-2" href="#import-and-export-set">Import and export set</a></li>
145
+ <li><a class="depth-2" href="#wire-layout">Wire layout</a></li>
146
+ <li><a class="depth-2" href="#units-and-frames">Units and frames</a></li>
147
+ <li><a class="depth-2" href="#sentinels">Sentinels</a></li>
148
+ <li><a class="depth-2" href="#identity">Identity</a></li>
149
+ <li><a class="depth-2" href="#threading">Threading</a></li>
150
+ <li><a class="depth-2" href="#error-codes">Error codes</a></li>
151
+ <li><a class="depth-2" href="#lifetime">Lifetime</a></li>
152
+ <li><a class="depth-2" href="#parity-envelope">Parity envelope</a></li>
153
+ <li><a class="depth-2" href="#consumer-seam">Consumer seam</a></li>
154
+ <li><a class="depth-2" href="#guest-c-example">Guest C++ example</a></li>
155
+ <li><a class="depth-2" href="#known-gaps-stated-plainly">Known gaps, stated plainly</a></li></ul></nav>
156
+ </div>
157
+ <section id="stack" class="section" aria-labelledby="stack-title">
158
+ <div class="section-head">
159
+ <p class="eyebrow">SDN Stack</p>
160
+ <h2 id="stack-title">Connected sites</h2>
161
+ </div>
162
+ <div class="link-list">
163
+ <a href="https://spacedatastandards.org/">
164
+ <span>Standards</span>
165
+ <small>Canonical schemas, record contracts, and generated bindings.</small>
166
+ </a>
167
+ <a href="https://digitalarsenal.github.io/flatbuffers/">
168
+ <span>FlatBuffers</span>
169
+ <small>Binary encoding, schema tooling, and runtime documentation.</small>
170
+ </a>
171
+ <a href="https://digitalarsenal.github.io/flatsql/">
172
+ <span>FlatSQL</span>
173
+ <small>SQL-style queries over FlatBuffer-backed datasets and streams.</small>
174
+ </a>
175
+ <a href="https://spacedatanetwork.org/">
176
+ <span>SDN</span>
177
+ <small>Distributed publication, discovery, delivery, and marketplace infrastructure.</small>
178
+ </a>
179
+ <a href="https://digitalarsenal.github.io/space-data-module-sdk/" class="active">
180
+ <span>Module SDK</span>
181
+ <small>WASM module packaging, validation, and host compatibility tooling.</small>
182
+ </a>
183
+ </div>
184
+ </section>
185
+ <footer class="site-footer">
186
+ Space Data Module SDK — Apache-2.0. Every ABI page renders a Markdown
187
+ source in <code>docs/</code>; edit the Markdown, never the HTML.
188
+ </footer>
189
+ </body>
190
+ </html>
@@ -0,0 +1,128 @@
1
+ # Estimation
2
+
3
+ **Status: EXPERIMENTAL.** A production orbit-determination module is shipped and
4
+ running, but it is not a ratified harness: it has no generated ABI header, no
5
+ conformance kit, and no reference module in the harness sense. The broader
6
+ estimation surface that its headers describe is largely not wired into the
7
+ shipped path.
8
+
9
+ ## Doctrine
10
+
11
+ An estimation module turns observations into state. Observations and an initial
12
+ guess go in; an estimated state, and where the family matures, a covariance,
13
+ come out. It is the inverse of the propagator family, and it depends on that
14
+ family: an estimator that cannot take its propagator as a pluggable port is
15
+ hardwired to one force model and is not a member of this family.
16
+
17
+ The pluggable-propagation law applies here with full force. Every
18
+ propagator-consuming surface — an estimator emphatically included — takes the
19
+ propagator as a parameter or port, never as a compiled-in choice.
20
+
21
+ ## Capability
22
+
23
+ Ingest observations, fit a state, emit results as standards records. The shipped
24
+ path emits `$OMM`-class mean-element results and `$OBD` observation-derived
25
+ records. Input ephemerides are transient by rule: they are fitted and discarded,
26
+ and only the results are stored.
27
+
28
+ ## Import and export set
29
+
30
+ **Not specified as a harness ABI.** No `orbpro_od_abi.h` or equivalent
31
+ generated header exists. The shipped module is invoked through the SDK's generic
32
+ module surface, not through a family-specific export set.
33
+
34
+ In the manifest vocabulary the family projects onto
35
+ `PluginFamily.ORBIT_DETERMINATION`, which itself carries a known projection gap:
36
+ Space Data Standards has no dedicated plugin-category member for it yet, so it
37
+ projects onto the analysis category until one is minted.
38
+
39
+ ## Wire layout
40
+
41
+ **Not specified as a public wire.** The internal C++ types describe the intended
42
+ shape and are useful as a design reference, but they are not a published ABI and
43
+ their layout is not locked:
44
+
45
+ | Type | Fields |
46
+ | --- | --- |
47
+ | `StateVector` | `epoch_jd`, `x`, `y`, `z`, `vx`, `vy`, `vz` |
48
+ | `Observation` | `epoch_jd`, `type`, `value`, `sigma`, `station_id` |
49
+ | `GroundStation` | `id`, `name`, `lat_deg`, `lon_deg`, `alt_km` |
50
+ | `Covariance6x6` | 6×6 array of doubles |
51
+
52
+ `ObservationType` covers right ascension, declination, azimuth, elevation,
53
+ range, range rate, and position components.
54
+
55
+ The SDS `$ODW` problem record and its runtime wire are unminted; `$OBD` remains
56
+ the results record. By explicit ruling, the OD *result model* decision stays
57
+ deferred — a future record mint covers the problem and wire side only and must
58
+ not freeze the result model.
59
+
60
+ ## Units and frames
61
+
62
+ The internal types mix conventions and this is a real hazard: epochs are Julian
63
+ dates, station geodetic position is in degrees with altitude in kilometres, and
64
+ state components are in the propagator family's units. Any published estimation
65
+ ABI must state the unit of every field at the field, exactly as the propagator
66
+ ABI does. Until it does, read the module's own headers rather than assuming.
67
+
68
+ ## Sentinels
69
+
70
+ Not specified. The shipped path treats a failed fit as a refusal and does not
71
+ emit a record; there is no ratified sentinel vocabulary for a partially
72
+ converged solution.
73
+
74
+ ## Identity
75
+
76
+ Objects are addressed by their catalog identity in the shipped path — the same
77
+ identity the propagator family uses for an entity.
78
+
79
+ ## Threading
80
+
81
+ `wasm32-wasip1-threads`. The shipped fit path is genuinely multi-threaded and
82
+ runs a full catalog fit inside one composed WASM flow; that is the strongest
83
+ evidence in this family that the threading model is sound. No harness-level
84
+ shard-write discipline is specified because no batch ABI is published.
85
+
86
+ ## Error codes
87
+
88
+ Not specified as a named set.
89
+
90
+ ## Lifetime
91
+
92
+ The shipped module is instantiated once per flow run and torn down with it.
93
+
94
+ ## Parity envelope
95
+
96
+ Cross-runtime parity is exercised for the shipped flow, but the family has no
97
+ parity envelope statement of its own. Use the generic
98
+ [parity gate](../tri-runtime-parity-gate.html).
99
+
100
+ ## Consumer seam
101
+
102
+ The seam that matters is the propagator port. An estimation module accepts a
103
+ propagator plugin and calls it; the consumer chooses which propagator is
104
+ supplied. Any estimation module that internally hardwires a single propagator is
105
+ non-conforming by the pluggable-propagation law, regardless of how good its
106
+ filter is.
107
+
108
+ ## Guest C++ example
109
+
110
+ None published. Publishing a skeleton against an unratified ABI would invite
111
+ exactly the drift this family needs to avoid. Start from the
112
+ [propagator guest example](propagator.html) for module structure, and consume the
113
+ propagator through its published ABI from inside your estimator.
114
+
115
+ ## Known gaps, stated plainly
116
+
117
+ - The shipped production path is SGP4 mean-element batch fitting. That is what
118
+ runs.
119
+ - The wider surface described in the module's own headers — Gauss, Laplace,
120
+ double-r, Gibbs and Herrick-Gibbs initial orbit determination; sequential EKF
121
+ and UKF; 6×6 covariance with consider parameters and state-transition-matrix
122
+ propagation — is compiled but audited as dead code, reachable only from a test
123
+ path and never called by the production entry points. Treat it as design
124
+ intent, not as available capability.
125
+ - The abstract propagator interface inside that module is part of the same dead
126
+ path. The pluggable-propagation law is satisfied by design in the header and
127
+ not yet exercised in the shipped flow.
128
+ - No conformance kit, no generated header, no negative control.
@@ -0,0 +1,157 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="description" content="Status: PLANNED. This family is a ratified entry in the harness-family" />
7
+ <title>GNC — Space Data Module SDK</title>
8
+ <link rel="stylesheet" href="../styles.css" />
9
+ <!-- SDN_CONSUMER_ASSETS_START -->
10
+ <link rel="stylesheet" href="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.c3f68d1cfd88478f10d836a5e829d1dfc6a10157972cf0f7d4d319d0636f2cc4.css" integrity="sha384-fICuhN4I9xqOK1F5vGGzl26opuO+xQIvTZXMSV76lWTBiQ6AfzztMGLLDw8yRT8i" crossorigin="anonymous">
11
+ <script defer src="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.f611e7e151a3b5c38384272f8894a4c6634f0a29bf925b0e02e0e27f8db0bfff.js" integrity="sha384-R+QqsKoWJIS7iWrtPmgJ49DVnb1hSGjZokupbLInJd1PLp8RwQhtF/hnaerc33ci" crossorigin="anonymous" data-sdn-wallet-public-client="v1"></script>
12
+ <script defer src="https://static.spacedatanetwork.org/assets/sdn-stack-nav/1.0.0/sdn-stack-nav.52fde607eee38ffa116188201f50258ed50bd18c9f06c1af9678f763147a8fe5.js" integrity="sha384-dgeojhJ8vTszHXIbv7O7nZcEzqD10oUYYJjBmPrV7+kLQEUlXLQD4ek5Q7HOFiO5" crossorigin="anonymous" data-nav-style-url="https://static.spacedatanetwork.org/assets/sdn-stack-nav/1.0.0/sdn-stack-nav.36a36359ce18322185e9ff179f88175bab67d5ad84a14d9c08a54f2ff27267e7.css" data-nav-style-integrity="sha384-c4M8Fg+kYaeOYYtJVr7jJsde24IhSWkWaRyAOHEZU9jozhRck089aw+mnHwxymds" data-wallet-client-url="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.f611e7e151a3b5c38384272f8894a4c6634f0a29bf925b0e02e0e27f8db0bfff.js" data-wallet-client-integrity="sha384-R+QqsKoWJIS7iWrtPmgJ49DVnb1hSGjZokupbLInJd1PLp8RwQhtF/hnaerc33ci" data-wallet-style-url="https://static.spacedatanetwork.org/assets/hd-wallet-ui/2.0.28/sdn-wallet-public-client.c3f68d1cfd88478f10d836a5e829d1dfc6a10157972cf0f7d4d319d0636f2cc4.css" data-wallet-style-integrity="sha384-fICuhN4I9xqOK1F5vGGzl26opuO+xQIvTZXMSV76lWTBiQ6AfzztMGLLDw8yRT8i" data-wallet-client-id="sdn-module-sdk-pages-v1" data-wallet-callback-uri="https://digitalarsenal.github.io/space-data-module-sdk/wallet-callback.html" data-wallet-registry-sha256="e1ce6fe903c9700484a8a87d96581c8cad97063dabf63030b4518a31a3bdaa93"></script>
13
+ <!-- SDN_CONSUMER_ASSETS_END -->
14
+ </head>
15
+ <body>
16
+ <a class="skip-link" href="#main">Skip to content</a>
17
+ <sdn-stack-nav active="module-sdk"></sdn-stack-nav>
18
+ <header class="site-header">
19
+ <a class="site-brand" href="../">Space Data Module SDK</a>
20
+ <nav class="header-links" aria-label="Site">
21
+ <a href="../byo-wasm-quickstart.html">Quickstart</a>
22
+ <a href="../conformance.html">Conformance</a>
23
+ <a href="https://github.com/DigitalArsenal/space-data-module-sdk">GitHub</a>
24
+ <a class="stack-button" href="#stack">Stack</a>
25
+ </nav>
26
+ </header>
27
+ <div class="shell">
28
+ <nav class="sidebar" id="sidebar" aria-label="Documentation">
29
+ <h2>Start here</h2><ul>
30
+ <li><a href="../index.html"><span>Harness family matrix</span></a></li>
31
+ <li><a href="../byo-wasm-quickstart.html"><span>BYO-wasm quickstart</span></a></li>
32
+ <li><a href="../conformance.html"><span>Conformance kit</span></a></li>
33
+ <li><a href="../protect-and-sign.html"><span>Protect and sign</span></a></li>
34
+ <li><a href="../publication-submission.html"><span>Publication and listing</span></a></li>
35
+ </ul>
36
+ <h2>Dynamics</h2><ul>
37
+ <li><a href="./propagator.html"><span>Propagator</span><span class="tag tag-shipped">shipped</span></a></li>
38
+ <li><a href="./maneuver.html"><span>Maneuver</span><span class="tag tag-experimental">experimental</span></a></li>
39
+ <li><a href="./propulsion.html"><span>Propulsion</span><span class="tag tag-planned">planned</span></a></li>
40
+ <li><a href="./attitude.html"><span>Attitude</span><span class="tag tag-planned">planned</span></a></li>
41
+ <li><a href="./gnc.html" aria-current="page"><span>GNC</span><span class="tag tag-planned">planned</span></a></li>
42
+ </ul>
43
+ <h2>Environment and interaction</h2><ul>
44
+ <li><a href="./rf.html"><span>RF</span><span class="tag tag-designed">designed</span></a></li>
45
+ <li><a href="./sensor.html"><span>Sensor</span><span class="tag tag-planned">planned</span></a></li>
46
+ <li><a href="./signature.html"><span>Signature</span><span class="tag tag-planned">planned</span></a></li>
47
+ <li><a href="./environment.html"><span>Environment</span><span class="tag tag-planned">planned</span></a></li>
48
+ <li><a href="./obstruction.html"><span>Obstruction</span><span class="tag tag-designed">designed</span></a></li>
49
+ </ul>
50
+ <h2>Event physics</h2><ul>
51
+ <li><a href="./breakup.html"><span>Breakup</span><span class="tag tag-planned">planned</span></a></li>
52
+ <li><a href="./reentry.html"><span>Reentry</span><span class="tag tag-planned">planned</span></a></li>
53
+ <li><a href="./conjunction.html"><span>Conjunction</span><span class="tag tag-designed">designed</span></a></li>
54
+ <li><a href="./effects.html"><span>Effects</span><span class="tag tag-planned">planned</span></a></li>
55
+ </ul>
56
+ <h2>Estimation, data and logic</h2><ul>
57
+ <li><a href="./estimation.html"><span>Estimation</span><span class="tag tag-experimental">experimental</span></a></li>
58
+ <li><a href="./data-source.html"><span>Data source</span><span class="tag tag-shipped">shipped</span></a></li>
59
+ <li><a href="./analytics.html"><span>Analytics</span><span class="tag tag-experimental">experimental</span></a></li>
60
+ <li><a href="./scheduler.html"><span>Scheduler</span><span class="tag tag-planned">planned</span></a></li>
61
+ <li><a href="./behavior.html"><span>Behavior</span><span class="tag tag-planned">planned</span></a></li>
62
+ </ul>
63
+ <h2>Runtime contract</h2><ul>
64
+ <li><a href="../events-abi.html"><span>Event locator ABI</span></a></li>
65
+ <li><a href="../module-publication-standard.html"><span>Module publication standard</span></a></li>
66
+ <li><a href="../browser-wasmedge-isomorphic.html"><span>Browser / WasmEdge isomorphism</span></a></li>
67
+ <li><a href="../isomorphic-pthreads.html"><span>Isomorphic pthreads</span></a></li>
68
+ <li><a href="../tri-runtime-parity.html"><span>Tri-runtime parity</span></a></li>
69
+ <li><a href="../tri-runtime-parity-gate.html"><span>Tri-runtime parity gate</span></a></li>
70
+ <li><a href="../testing-harness.html"><span>Testing harness</span></a></li>
71
+ <li><a href="../language-runtime-matrix.html"><span>Language and runtime matrix</span></a></li>
72
+ </ul>
73
+ <h2>Host surfaces</h2><ul>
74
+ <li><a href="../flatsql-host-contract.html"><span>FlatSQL host contract</span></a></li>
75
+ <li><a href="../flatsql-streaming-standard.html"><span>FlatSQL streaming standard</span></a></li>
76
+ <li><a href="../secrets-capability.html"><span>Credential lanes</span></a></li>
77
+ <li><a href="../protocol-installation.html"><span>Protocol installation</span></a></li>
78
+ <li><a href="../gpu-module-abi.html"><span>GPU module ABI</span></a></li>
79
+ <li><a href="../module-bundle-runtime-plan.html"><span>Module bundle runtime</span></a></li>
80
+ <li><a href="../isomorphic-sdn-runtime-plan.html"><span>Isomorphic SDN runtime</span></a></li>
81
+ <li><a href="../node-red-default-node-parity.html"><span>Node-RED node parity</span></a></li>
82
+ </ul>
83
+ </nav>
84
+ <main class="doc" id="main">
85
+ <p class="breadcrumb"><a href="../index.html">Harness families</a> / Dynamics</p>
86
+ <h1>GNC</h1>
87
+ <p class="doc-meta"><span class="pill pill-planned">planned</span><span>Planned. This family is a ratified entry in the harness-family taxonomy; its individual shape has not been ratified and nothing is implemented.</span></p>
88
+ <p><strong>Status: PLANNED.</strong> This family is a ratified entry in the harness-family taxonomy. Its individual shape has not been ratified, and nothing is implemented. This page states scope and status; it is not a contract, and it does not imply parity with the Designed tier.</p>
89
+ <h2 id="scope"><a class="anchor" href="#scope" aria-hidden="true">#</a>Scope</h2>
90
+ <p>Closed-loop guidance, navigation and control. A GNC module observes estimated state, decides what the vehicle should do, and commands the maneuver and attitude families. It is the only family in the dynamics group that is allowed to be stateful across a scenario timeline, because a controller without memory is not a controller.</p>
91
+ <h2 id="what-exists-today"><a class="anchor" href="#what-exists-today" aria-hidden="true">#</a>What exists today</h2>
92
+ <p>Nothing. No schema, no header, no module, no open design task.</p>
93
+ <p>GNC is the family most likely to need a scheduler and behavior contract to exist first, since a control loop is defined as much by when it runs as by what it computes.</p>
94
+ <h2 id="what-ratification-requires"><a class="anchor" href="#what-ratification-requires" aria-hidden="true">#</a>What ratification requires</h2>
95
+ <p>A family reaches Designed when an ABI has been drafted against a real consumer, and Shipped only when all of the following exist:</p>
96
+ <ul>
97
+ <li>A single <code>.fbs</code> schema as the source of the wire layout.</li>
98
+ <li>A generated ABI header with size and offset locks, plus a drift gate that fails when the schema and the committed header disagree.</li>
99
+ <li>Declared units and frames per field, named sentinels, and named negative error codes.</li>
100
+ <li>A conformance kit carrying its own negative control, and a reference module.</li>
101
+ <li>A stated tri-runtime parity envelope.</li>
102
+ <li>Exactly one generic consumer port.</li>
103
+ </ul>
104
+ <p>Until then, do not build against this family. If your work falls in this scope and cannot wait, build a records-in, records-out module through the <a href="../byo-wasm-quickstart.html">BYO-wasm quickstart</a> — that path needs no harness and is available now — and expect to migrate to the family ABI when it is ratified.</p>
105
+ <section class="playground" id="playground-slot" data-family="gnc" data-playground="pending" aria-labelledby="playground-title">
106
+ <h2 id="playground-title">Playground</h2>
107
+ <p>
108
+ An in-browser build-and-run playground for the <code>gnc</code> harness
109
+ mounts here. It is being built under the graph task
110
+ <code>sdk-playground-emception</code>; this slot is its reserved mount
111
+ point and is intentionally empty until that lands.
112
+ </p>
113
+ </section>
114
+ <p class="doc-footer">
115
+ Source of truth for this page:
116
+ <code>docs/families/gnc.md</code>. Regenerate with
117
+ <code>npm run build:docs</code>.
118
+ </p>
119
+ </main>
120
+ <nav class="rail" aria-label="On this page"><h2>On this page</h2><ul><li><a class="depth-2" href="#scope">Scope</a></li>
121
+ <li><a class="depth-2" href="#what-exists-today">What exists today</a></li>
122
+ <li><a class="depth-2" href="#what-ratification-requires">What ratification requires</a></li></ul></nav>
123
+ </div>
124
+ <section id="stack" class="section" aria-labelledby="stack-title">
125
+ <div class="section-head">
126
+ <p class="eyebrow">SDN Stack</p>
127
+ <h2 id="stack-title">Connected sites</h2>
128
+ </div>
129
+ <div class="link-list">
130
+ <a href="https://spacedatastandards.org/">
131
+ <span>Standards</span>
132
+ <small>Canonical schemas, record contracts, and generated bindings.</small>
133
+ </a>
134
+ <a href="https://digitalarsenal.github.io/flatbuffers/">
135
+ <span>FlatBuffers</span>
136
+ <small>Binary encoding, schema tooling, and runtime documentation.</small>
137
+ </a>
138
+ <a href="https://digitalarsenal.github.io/flatsql/">
139
+ <span>FlatSQL</span>
140
+ <small>SQL-style queries over FlatBuffer-backed datasets and streams.</small>
141
+ </a>
142
+ <a href="https://spacedatanetwork.org/">
143
+ <span>SDN</span>
144
+ <small>Distributed publication, discovery, delivery, and marketplace infrastructure.</small>
145
+ </a>
146
+ <a href="https://digitalarsenal.github.io/space-data-module-sdk/" class="active">
147
+ <span>Module SDK</span>
148
+ <small>WASM module packaging, validation, and host compatibility tooling.</small>
149
+ </a>
150
+ </div>
151
+ </section>
152
+ <footer class="site-footer">
153
+ Space Data Module SDK — Apache-2.0. Every ABI page renders a Markdown
154
+ source in <code>docs/</code>; edit the Markdown, never the HTML.
155
+ </footer>
156
+ </body>
157
+ </html>
@@ -0,0 +1,36 @@
1
+ # GNC
2
+
3
+ **Status: PLANNED.** This family is a ratified entry in the harness-family
4
+ taxonomy. Its individual shape has not been ratified, and nothing is
5
+ implemented. This page states scope and status; it is not a contract, and it
6
+ does not imply parity with the Designed tier.
7
+
8
+ ## Scope
9
+
10
+ Closed-loop guidance, navigation and control. A GNC module observes estimated state, decides what the vehicle should do, and commands the maneuver and attitude families. It is the only family in the dynamics group that is allowed to be stateful across a scenario timeline, because a controller without memory is not a controller.
11
+
12
+ ## What exists today
13
+
14
+ Nothing. No schema, no header, no module, no open design task.
15
+
16
+ GNC is the family most likely to need a scheduler and behavior contract to exist first, since a control loop is defined as much by when it runs as by what it computes.
17
+
18
+ ## What ratification requires
19
+
20
+ A family reaches Designed when an ABI has been drafted against a real consumer,
21
+ and Shipped only when all of the following exist:
22
+
23
+ - A single `.fbs` schema as the source of the wire layout.
24
+ - A generated ABI header with size and offset locks, plus a drift gate that
25
+ fails when the schema and the committed header disagree.
26
+ - Declared units and frames per field, named sentinels, and named negative error
27
+ codes.
28
+ - A conformance kit carrying its own negative control, and a reference module.
29
+ - A stated tri-runtime parity envelope.
30
+ - Exactly one generic consumer port.
31
+
32
+ Until then, do not build against this family. If your work falls in this scope
33
+ and cannot wait, build a records-in, records-out module through the
34
+ [BYO-wasm quickstart](../byo-wasm-quickstart.html) — that path needs no harness
35
+ and is available now — and expect to migrate to the family ABI when it is
36
+ ratified.