space-data-module-sdk 0.8.14 → 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 (125) hide show
  1. package/bin/space-data-module.js +91 -0
  2. package/docs/_shell/consumer-assets.html +5 -0
  3. package/docs/browser-wasmedge-isomorphic.html +261 -0
  4. package/docs/byo-wasm-quickstart.html +226 -0
  5. package/docs/byo-wasm-quickstart.md +204 -0
  6. package/docs/conformance.html +156 -0
  7. package/docs/conformance.md +92 -0
  8. package/docs/emception-shared-memory-verdict.md +209 -0
  9. package/docs/events-abi.html +313 -0
  10. package/docs/events-abi.md +530 -0
  11. package/docs/families/analytics.html +178 -0
  12. package/docs/families/analytics.md +104 -0
  13. package/docs/families/attitude.html +157 -0
  14. package/docs/families/attitude.md +36 -0
  15. package/docs/families/behavior.html +157 -0
  16. package/docs/families/behavior.md +36 -0
  17. package/docs/families/breakup.html +157 -0
  18. package/docs/families/breakup.md +36 -0
  19. package/docs/families/conjunction.html +186 -0
  20. package/docs/families/conjunction.md +121 -0
  21. package/docs/families/data-source.html +318 -0
  22. package/docs/families/effects.html +157 -0
  23. package/docs/families/effects.md +36 -0
  24. package/docs/families/environment.html +170 -0
  25. package/docs/families/environment.md +73 -0
  26. package/docs/families/estimation.html +190 -0
  27. package/docs/families/estimation.md +128 -0
  28. package/docs/families/gnc.html +157 -0
  29. package/docs/families/gnc.md +36 -0
  30. package/docs/families/maneuver.html +209 -0
  31. package/docs/families/maneuver.md +206 -0
  32. package/docs/families/obstruction.html +191 -0
  33. package/docs/families/obstruction.md +96 -0
  34. package/docs/families/propagator.html +333 -0
  35. package/docs/families/propulsion.html +157 -0
  36. package/docs/families/propulsion.md +36 -0
  37. package/docs/families/reentry.html +157 -0
  38. package/docs/families/reentry.md +36 -0
  39. package/docs/families/rf.html +193 -0
  40. package/docs/families/rf.md +136 -0
  41. package/docs/families/scheduler.html +157 -0
  42. package/docs/families/scheduler.md +36 -0
  43. package/docs/families/sensor.html +157 -0
  44. package/docs/families/sensor.md +36 -0
  45. package/docs/families/signature.html +157 -0
  46. package/docs/families/signature.md +36 -0
  47. package/docs/flatsql-host-contract.html +176 -0
  48. package/docs/flatsql-streaming-standard.html +375 -0
  49. package/docs/gpu-module-abi.html +233 -0
  50. package/docs/harness-family-matrix.md +135 -0
  51. package/docs/index.html +216 -85
  52. package/docs/isomorphic-pthreads.html +228 -0
  53. package/docs/isomorphic-pthreads.md +84 -0
  54. package/docs/isomorphic-sdn-runtime-plan.html +274 -0
  55. package/docs/language-runtime-matrix.html +182 -0
  56. package/docs/llms.txt +86 -0
  57. package/docs/module-bundle-runtime-plan.html +146 -0
  58. package/docs/module-publication-standard.html +503 -0
  59. package/docs/node-red-default-node-parity.html +201 -0
  60. package/docs/propagator-abi.md +73 -21
  61. package/docs/protect-and-sign.html +181 -0
  62. package/docs/protect-and-sign.md +120 -0
  63. package/docs/protocol-installation.html +296 -0
  64. package/docs/publication-submission.html +158 -0
  65. package/docs/publication-submission.md +78 -0
  66. package/docs/secrets-capability.html +206 -0
  67. package/docs/styles.css +860 -167
  68. package/docs/testing-harness.html +408 -0
  69. package/docs/tri-runtime-parity-gate.html +182 -0
  70. package/docs/tri-runtime-parity.html +203 -0
  71. package/include/orbpro/orbpro_event_runner.h +951 -0
  72. package/include/orbpro/orbpro_events_abi.h +565 -0
  73. package/include/orbpro/orbpro_propagator_abi.h +17 -0
  74. package/package.json +15 -5
  75. package/schemas/orbpro/Events.fbs +501 -0
  76. package/schemas/orbpro/Propagator.fbs +72 -9
  77. package/schemas/orbpro/reference-frame-crosswalk.json +108 -0
  78. package/schemas/orbpro/reference-frame.lock.json +98 -0
  79. package/src/browser.js +13 -0
  80. package/src/conformance/abiDriver.js +225 -0
  81. package/src/conformance/index.js +151 -0
  82. package/src/conformance/propagatorSuite.js +526 -0
  83. package/src/conformance/selfTest.js +275 -0
  84. package/src/conformance/selfTestCorpus.js +68 -0
  85. package/src/conformance/twoBodyReference.js +132 -0
  86. package/src/generated/orbpro/events-abi.js +206 -0
  87. package/src/generated/orbpro/events-abi.ts +319 -0
  88. package/src/generated/orbpro/propagator/reference-frame.js +17 -0
  89. package/src/generated/orbpro/propagator/reference-frame.ts +91 -1
  90. package/src/generated/orbpro/propagator-abi.js +17 -0
  91. package/src/generated/orbpro/propagator-abi.ts +17 -0
  92. package/src/generated/spacedatastandards/plg/CCT.d.ts +94 -0
  93. package/src/generated/spacedatastandards/plg/CCT.d.ts.map +1 -0
  94. package/src/generated/spacedatastandards/plg/CCT.js +208 -0
  95. package/src/generated/spacedatastandards/plg/CCT.ts +281 -0
  96. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts +98 -0
  97. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts.map +1 -0
  98. package/src/generated/spacedatastandards/plg/CCTCategory.js +177 -0
  99. package/src/generated/spacedatastandards/plg/CCTCategory.ts +269 -0
  100. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts +54 -0
  101. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts.map +1 -0
  102. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.js +106 -0
  103. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.ts +144 -0
  104. package/src/generated/spacedatastandards/plg/PLG.d.ts +46 -2
  105. package/src/generated/spacedatastandards/plg/PLG.d.ts.map +1 -1
  106. package/src/generated/spacedatastandards/plg/PLG.js +78 -5
  107. package/src/generated/spacedatastandards/plg/PLG.ts +90 -5
  108. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts +181 -0
  109. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts.map +1 -0
  110. package/src/generated/spacedatastandards/plg/capabilityClass.js +183 -0
  111. package/src/generated/spacedatastandards/plg/capabilityClass.ts +208 -0
  112. package/src/generated/spacedatastandards/plg/main.d.ts +4 -0
  113. package/src/generated/spacedatastandards/plg/main.d.ts.map +1 -1
  114. package/src/generated/spacedatastandards/plg/main.js +4 -0
  115. package/src/generated/spacedatastandards/plg/main.ts +4 -0
  116. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +40 -2
  117. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -1
  118. package/src/generated/spacedatastandards/plg/pluginCategory.js +40 -2
  119. package/src/generated/spacedatastandards/plg/pluginCategory.ts +40 -2
  120. package/src/host/browserModuleHarness.js +8 -0
  121. package/src/host/wasiThreadHost.js +189 -14
  122. package/src/index.d.ts +18 -1
  123. package/src/testing/isomorphicHarness.js +233 -0
  124. package/src/transport/index.js +16 -0
  125. package/src/transport/records.js +1015 -3
@@ -0,0 +1,178 @@
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. One sub-harness of this family — event location —" />
7
+ <title>Analytics — 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"><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" aria-current="page"><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>Analytics</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> One sub-harness of this family — <strong>event location</strong> — has a ratified <code>.fbs</code> source, a generated header with a drift gate, named error codes, a shared runner and a measured tri-runtime parity envelope. It has no conformance kit and no reference module, so it is not <code>Shipped</code> and a commercial module should not be sold against it. The rest of the family (coverage quality, revisit statistics, availability, link-margin distributions) remains <strong>Planned</strong> and this page states its scope and nothing more.</p>
89
+ <p>This is a sub-harness, not a twentieth family. The nineteen-family taxonomy is owner-ratified; event location is analytics because it derives a figure over a scenario rather than advancing one.</p>
90
+ <h2 id="scope"><a class="anchor" href="#scope" aria-hidden="true">#</a>Scope</h2>
91
+ <p>Derived figures of merit computed over a scenario: coverage quality, revisit statistics, availability, link margin distributions, and other aggregate measures that summarize a run rather than advance it — plus <strong>event location</strong>, which reduces a scenario to the epochs at which something became true.</p>
92
+ <h2 id="event-location-the-shaped-part"><a class="anchor" href="#event-location-the-shaped-part" aria-hidden="true">#</a>Event location — the shaped part</h2>
93
+ <p><strong>Read <a href="../events-abi.html">the event locator ABI</a>.</strong> Everything below is a summary of it.</p>
94
+ <p>Eclipse (umbra / penumbra / antumbra, any number of occulting bodies), station contact with masks and light time, sensor-FOV intrusion, apsides, node crossings and a propagate-to-condition stop are ONE ABI: a vector of scalar event functions <code>g_i(t)</code> whose sign changes are refined to roots.</p>
95
+ <p>A locator writes <code>plugin_event_eval</code> — the <code>g</code> vector — plus its description and its configuration decoder. The bracketing scan, the root refinement, the direction filtering, the occurrence counting and the epoch ordering come from <code>include/orbpro/orbpro_event_runner.h</code>, unchanged, in every locator. &quot;Adding a new locator requires no change to the runner&quot; is therefore structural: there is no runner to change, only a <code>g</code> to write.</p>
96
+ <p>Two decisions are worth reading the contract for:</p>
97
+ <ul>
98
+ <li><strong>The state source is pulled, never imported.</strong> <code>plugin_event_next</code> reports the epochs the locator wants; the consumer propagates them through whatever module is wired to the port; <code>plugin_event_supply</code> feeds the states back. The propagator stays a port, no new host capability is needed, and the three runtimes are byte-identical because the consumer decides nothing.</li>
99
+ <li><strong>Epochs are <code>(jd_day, seconds)</code> pairs.</strong> A Julian date in one <code>float64</code> resolves to 4.02e-5 s, so a single-double JD cannot carry a stop epoch to 1e-6 s. The split pair resolves 1.5e-11 s — and because <code>OrbProStateVector.epoch</code> is a frozen single <code>float64</code>, the state source's own resolution is what bounds the answer. It is DECLARED, the runner clamps to it, and a clamped root is reported <code>EPOCH_RESOLUTION_LIMITED</code> rather than claiming a precision nothing measured.</li>
100
+ </ul>
101
+ <h2 id="what-exists-today"><a class="anchor" href="#what-exists-today" aria-hidden="true">#</a>What exists today</h2>
102
+ <ul>
103
+ <li><code>schemas/orbpro/Events.fbs</code> — the single source of the wire layout.</li>
104
+ <li><code>include/orbpro/orbpro_events_abi.h</code> — generated, with size and offset locks; <code>node scripts/check-events-abi.mjs</code> fails when the two disagree.</li>
105
+ <li><code>include/orbpro/orbpro_event_runner.h</code> — the shared runner. Hand-written because it is algorithm, not layout, and there is exactly one copy of it.</li>
106
+ <li><code>src/generated/orbpro/events-abi.{ts,js}</code> — byte-offset bindings, so no JavaScript consumer hard-codes an offset.</li>
107
+ <li><code>test/events-abi.test.js</code> — the both-harness proof: one source file compiled natively and to <code>wasm32-wasip1-threads</code>, diffed as raw IEEE-754 bit patterns. Identical. Roots reproduce the closed form to 7.3e-12 s under Brent, are independent of the scan step at 60 / 137 / 300 s, survive time reversal, and agree across all three bracketing methods.</li>
108
+ </ul>
109
+ <p>Nothing else in this family is implemented. Matches for the word &quot;analytics&quot; elsewhere in the stack refer to product and interface analytics work, not to a plugin family.</p>
110
+ <h2 id="the-rest-of-the-family-and-why-it-is-still-planned"><a class="anchor" href="#the-rest-of-the-family-and-why-it-is-still-planned" aria-hidden="true">#</a>The rest of the family, and why it is still Planned</h2>
111
+ <p>An analytics harness is mostly a question of what it is allowed to READ. A figure of merit computed over a whole scenario needs broad read access to results, which is the opposite of the narrow, per-call inputs every other family gets — and that is the design problem to solve before freezing anything.</p>
112
+ <p>Event location did not have that problem, which is why it went first: it needs states at epochs it chooses, and the pull protocol gives it exactly that without widening what a module may reach.</p>
113
+ <h2 id="what-ratification-requires"><a class="anchor" href="#what-ratification-requires" aria-hidden="true">#</a>What ratification requires</h2>
114
+ <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>
115
+ <ul>
116
+ <li>A single <code>.fbs</code> schema as the source of the wire layout. <strong>(event location: done)</strong></li>
117
+ <li>A generated ABI header with size and offset locks, plus a drift gate that fails when the schema and the committed header disagree. <strong>(done)</strong></li>
118
+ <li>Declared units and frames per field, named sentinels, and named negative error codes. <strong>(done)</strong></li>
119
+ <li>A conformance kit carrying its own negative control, and a reference module. <strong>(open — this is what holds event location at Experimental)</strong></li>
120
+ <li>A stated tri-runtime parity envelope. <strong>(done, and measured)</strong></li>
121
+ <li>Exactly one generic consumer port. <strong>(done: the pull loop)</strong></li>
122
+ </ul>
123
+ <p>Outside event location, do not build against this family. If your work falls in that 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>
124
+ <section class="playground" id="playground-slot" data-family="analytics" data-playground="pending" aria-labelledby="playground-title">
125
+ <h2 id="playground-title">Playground</h2>
126
+ <p>
127
+ An in-browser build-and-run playground for the <code>analytics</code> harness
128
+ mounts here. It is being built under the graph task
129
+ <code>sdk-playground-emception</code>; this slot is its reserved mount
130
+ point and is intentionally empty until that lands.
131
+ </p>
132
+ </section>
133
+ <p class="doc-footer">
134
+ Source of truth for this page:
135
+ <code>docs/families/analytics.md</code>. Regenerate with
136
+ <code>npm run build:docs</code>.
137
+ </p>
138
+ </main>
139
+ <nav class="rail" aria-label="On this page"><h2>On this page</h2><ul><li><a class="depth-2" href="#scope">Scope</a></li>
140
+ <li><a class="depth-2" href="#event-location-the-shaped-part">Event location — the shaped part</a></li>
141
+ <li><a class="depth-2" href="#what-exists-today">What exists today</a></li>
142
+ <li><a class="depth-2" href="#the-rest-of-the-family-and-why-it-is-still-planned">The rest of the family, and why it is still Planned</a></li>
143
+ <li><a class="depth-2" href="#what-ratification-requires">What ratification requires</a></li></ul></nav>
144
+ </div>
145
+ <section id="stack" class="section" aria-labelledby="stack-title">
146
+ <div class="section-head">
147
+ <p class="eyebrow">SDN Stack</p>
148
+ <h2 id="stack-title">Connected sites</h2>
149
+ </div>
150
+ <div class="link-list">
151
+ <a href="https://spacedatastandards.org/">
152
+ <span>Standards</span>
153
+ <small>Canonical schemas, record contracts, and generated bindings.</small>
154
+ </a>
155
+ <a href="https://digitalarsenal.github.io/flatbuffers/">
156
+ <span>FlatBuffers</span>
157
+ <small>Binary encoding, schema tooling, and runtime documentation.</small>
158
+ </a>
159
+ <a href="https://digitalarsenal.github.io/flatsql/">
160
+ <span>FlatSQL</span>
161
+ <small>SQL-style queries over FlatBuffer-backed datasets and streams.</small>
162
+ </a>
163
+ <a href="https://spacedatanetwork.org/">
164
+ <span>SDN</span>
165
+ <small>Distributed publication, discovery, delivery, and marketplace infrastructure.</small>
166
+ </a>
167
+ <a href="https://digitalarsenal.github.io/space-data-module-sdk/" class="active">
168
+ <span>Module SDK</span>
169
+ <small>WASM module packaging, validation, and host compatibility tooling.</small>
170
+ </a>
171
+ </div>
172
+ </section>
173
+ <footer class="site-footer">
174
+ Space Data Module SDK — Apache-2.0. Every ABI page renders a Markdown
175
+ source in <code>docs/</code>; edit the Markdown, never the HTML.
176
+ </footer>
177
+ </body>
178
+ </html>
@@ -0,0 +1,104 @@
1
+ # Analytics
2
+
3
+ **Status: EXPERIMENTAL.** One sub-harness of this family — **event location** —
4
+ has a ratified `.fbs` source, a generated header with a drift gate, named error
5
+ codes, a shared runner and a measured tri-runtime parity envelope. It has no
6
+ conformance kit and no reference module, so it is not `Shipped` and a
7
+ commercial module should not be sold against it. The rest of the family
8
+ (coverage quality, revisit statistics, availability, link-margin distributions)
9
+ remains **Planned** and this page states its scope and nothing more.
10
+
11
+ This is a sub-harness, not a twentieth family. The nineteen-family taxonomy is
12
+ owner-ratified; event location is analytics because it derives a figure over a
13
+ scenario rather than advancing one.
14
+
15
+ ## Scope
16
+
17
+ Derived figures of merit computed over a scenario: coverage quality, revisit
18
+ statistics, availability, link margin distributions, and other aggregate
19
+ measures that summarize a run rather than advance it — plus **event location**,
20
+ which reduces a scenario to the epochs at which something became true.
21
+
22
+ ## Event location — the shaped part
23
+
24
+ **Read [the event locator ABI](../events-abi.html).** Everything below is a
25
+ summary of it.
26
+
27
+ Eclipse (umbra / penumbra / antumbra, any number of occulting bodies), station
28
+ contact with masks and light time, sensor-FOV intrusion, apsides, node
29
+ crossings and a propagate-to-condition stop are ONE ABI: a vector of scalar
30
+ event functions `g_i(t)` whose sign changes are refined to roots.
31
+
32
+ A locator writes `plugin_event_eval` — the `g` vector — plus its description
33
+ and its configuration decoder. The bracketing scan, the root refinement, the
34
+ direction filtering, the occurrence counting and the epoch ordering come from
35
+ `include/orbpro/orbpro_event_runner.h`, unchanged, in every locator. "Adding a
36
+ new locator requires no change to the runner" is therefore structural: there is
37
+ no runner to change, only a `g` to write.
38
+
39
+ Two decisions are worth reading the contract for:
40
+
41
+ - **The state source is pulled, never imported.** `plugin_event_next` reports
42
+ the epochs the locator wants; the consumer propagates them through whatever
43
+ module is wired to the port; `plugin_event_supply` feeds the states back.
44
+ The propagator stays a port, no new host capability is needed, and the three
45
+ runtimes are byte-identical because the consumer decides nothing.
46
+ - **Epochs are `(jd_day, seconds)` pairs.** A Julian date in one `float64`
47
+ resolves to 4.02e-5 s, so a single-double JD cannot carry a stop epoch to
48
+ 1e-6 s. The split pair resolves 1.5e-11 s — and because
49
+ `OrbProStateVector.epoch` is a frozen single `float64`, the state source's
50
+ own resolution is what bounds the answer. It is DECLARED, the runner clamps
51
+ to it, and a clamped root is reported `EPOCH_RESOLUTION_LIMITED` rather than
52
+ claiming a precision nothing measured.
53
+
54
+ ## What exists today
55
+
56
+ - `schemas/orbpro/Events.fbs` — the single source of the wire layout.
57
+ - `include/orbpro/orbpro_events_abi.h` — generated, with size and offset locks;
58
+ `node scripts/check-events-abi.mjs` fails when the two disagree.
59
+ - `include/orbpro/orbpro_event_runner.h` — the shared runner. Hand-written
60
+ because it is algorithm, not layout, and there is exactly one copy of it.
61
+ - `src/generated/orbpro/events-abi.{ts,js}` — byte-offset bindings, so no
62
+ JavaScript consumer hard-codes an offset.
63
+ - `test/events-abi.test.js` — the both-harness proof: one source
64
+ file compiled natively and to `wasm32-wasip1-threads`, diffed as raw
65
+ IEEE-754 bit patterns. Identical. Roots reproduce the closed form to
66
+ 7.3e-12 s under Brent, are independent of the scan step at 60 / 137 / 300 s,
67
+ survive time reversal, and agree across all three bracketing methods.
68
+
69
+ Nothing else in this family is implemented. Matches for the word "analytics"
70
+ elsewhere in the stack refer to product and interface analytics work, not to a
71
+ plugin family.
72
+
73
+ ## The rest of the family, and why it is still Planned
74
+
75
+ An analytics harness is mostly a question of what it is allowed to READ. A
76
+ figure of merit computed over a whole scenario needs broad read access to
77
+ results, which is the opposite of the narrow, per-call inputs every other
78
+ family gets — and that is the design problem to solve before freezing anything.
79
+
80
+ Event location did not have that problem, which is why it went first: it needs
81
+ states at epochs it chooses, and the pull protocol gives it exactly that
82
+ without widening what a module may reach.
83
+
84
+ ## What ratification requires
85
+
86
+ A family reaches Designed when an ABI has been drafted against a real consumer,
87
+ and Shipped only when all of the following exist:
88
+
89
+ - A single `.fbs` schema as the source of the wire layout. **(event location:
90
+ done)**
91
+ - A generated ABI header with size and offset locks, plus a drift gate that
92
+ fails when the schema and the committed header disagree. **(done)**
93
+ - Declared units and frames per field, named sentinels, and named negative error
94
+ codes. **(done)**
95
+ - A conformance kit carrying its own negative control, and a reference module.
96
+ **(open — this is what holds event location at Experimental)**
97
+ - A stated tri-runtime parity envelope. **(done, and measured)**
98
+ - Exactly one generic consumer port. **(done: the pull loop)**
99
+
100
+ Outside event location, do not build against this family. If your work falls in
101
+ that scope and cannot wait, build a records-in, records-out module through the
102
+ [BYO-wasm quickstart](../byo-wasm-quickstart.html) — that path needs no harness
103
+ and is available now — and expect to migrate to the family ABI when it is
104
+ ratified.
@@ -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>Attitude — 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" aria-current="page"><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"><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>Attitude</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>Produce body orientation over time, independent of translational state: attitude profiles, pointing modes, slew dynamics, and the quaternion or direction-cosine output a renderer, a sensor model or a signature model consumes.</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 dedicated. Attitude appears only as a topic in the foundational-math scope of a general-purpose module family, not as a family with its own contract.</p>
93
+ <p>The frame discipline here is stricter than in most families: an attitude output is meaningless without naming both the body frame and the reference frame it is expressed against, and any freeze will have to make both mandatory fields rather than documented conventions.</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="attitude" 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>attitude</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/attitude.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
+ # Attitude
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
+ Produce body orientation over time, independent of translational state: attitude profiles, pointing modes, slew dynamics, and the quaternion or direction-cosine output a renderer, a sensor model or a signature model consumes.
11
+
12
+ ## What exists today
13
+
14
+ Nothing dedicated. Attitude appears only as a topic in the foundational-math scope of a general-purpose module family, not as a family with its own contract.
15
+
16
+ The frame discipline here is stricter than in most families: an attitude output is meaningless without naming both the body frame and the reference frame it is expressed against, and any freeze will have to make both mandatory fields rather than documented conventions.
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.