stanag4609 0.1.0__tar.gz

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 (272) hide show
  1. stanag4609-0.1.0/.gitignore +21 -0
  2. stanag4609-0.1.0/CHANGELOG.md +441 -0
  3. stanag4609-0.1.0/CONTRIBUTING.md +106 -0
  4. stanag4609-0.1.0/LICENSE +21 -0
  5. stanag4609-0.1.0/PKG-INFO +905 -0
  6. stanag4609-0.1.0/README.md +844 -0
  7. stanag4609-0.1.0/docs/ADAPTERS.md +106 -0
  8. stanag4609-0.1.0/docs/AI_SIDECARS.md +607 -0
  9. stanag4609-0.1.0/docs/AUDIO.md +87 -0
  10. stanag4609-0.1.0/docs/BENCHMARKS.md +79 -0
  11. stanag4609-0.1.0/docs/CLI.md +91 -0
  12. stanag4609-0.1.0/docs/COMPLETION_AUDIT.md +63 -0
  13. stanag4609-0.1.0/docs/CONFORMANCE.md +133 -0
  14. stanag4609-0.1.0/docs/DEVELOPMENT.md +50 -0
  15. stanag4609-0.1.0/docs/DOCUMENTATION.md +99 -0
  16. stanag4609-0.1.0/docs/ECOSYSTEM.md +77 -0
  17. stanag4609-0.1.0/docs/FFMPEG_GSTREAMER.md +65 -0
  18. stanag4609-0.1.0/docs/GEOJSON.md +83 -0
  19. stanag4609-0.1.0/docs/LIMITATIONS.md +91 -0
  20. stanag4609-0.1.0/docs/LIVE_PIPELINE.md +257 -0
  21. stanag4609-0.1.0/docs/METADATA_STD.md +215 -0
  22. stanag4609-0.1.0/docs/PCR_CADENCE.md +90 -0
  23. stanag4609-0.1.0/docs/PLAYER.md +170 -0
  24. stanag4609-0.1.0/docs/PSI_CADENCE.md +91 -0
  25. stanag4609-0.1.0/docs/PTS_CADENCE.md +65 -0
  26. stanag4609-0.1.0/docs/PUBLIC_FIXTURES.md +106 -0
  27. stanag4609-0.1.0/docs/QUICKSTART.md +193 -0
  28. stanag4609-0.1.0/docs/RELEASING.md +82 -0
  29. stanag4609-0.1.0/docs/ROADMAP.md +127 -0
  30. stanag4609-0.1.0/docs/RTP_TRANSPORT.md +186 -0
  31. stanag4609-0.1.0/docs/STANDARDS.md +82 -0
  32. stanag4609-0.1.0/docs/TIMESTAMPS.md +119 -0
  33. stanag4609-0.1.0/docs/TRANSPORT_RATE.md +69 -0
  34. stanag4609-0.1.0/docs/UDP_TRANSPORT.md +32 -0
  35. stanag4609-0.1.0/docs/VERIFIER.md +328 -0
  36. stanag4609-0.1.0/docs/VIDEO.md +32 -0
  37. stanag4609-0.1.0/docs/WEB_CLIENTS.md +80 -0
  38. stanag4609-0.1.0/docs/adr/0001-core-boundary.md +19 -0
  39. stanag4609-0.1.0/docs/adr/0002-live-transform-pipeline.md +87 -0
  40. stanag4609-0.1.0/docs/api/index.md +41 -0
  41. stanag4609-0.1.0/docs/api/klv.md +13 -0
  42. stanag4609-0.1.0/docs/api/media.md +20 -0
  43. stanag4609-0.1.0/docs/api/player.md +12 -0
  44. stanag4609-0.1.0/docs/api/range.md +46 -0
  45. stanag4609-0.1.0/docs/api/sidecar.md +8 -0
  46. stanag4609-0.1.0/docs/api/st0601.md +16 -0
  47. stanag4609-0.1.0/docs/api/st0902.md +17 -0
  48. stanag4609-0.1.0/docs/api/st0903.md +20 -0
  49. stanag4609-0.1.0/docs/api/transformations.md +91 -0
  50. stanag4609-0.1.0/docs/api/transport.md +10 -0
  51. stanag4609-0.1.0/docs/api/verifier.md +8 -0
  52. stanag4609-0.1.0/docs/api/video.md +12 -0
  53. stanag4609-0.1.0/docs/assets/benchmarks/live-player-day-flight.json +25 -0
  54. stanag4609-0.1.0/docs/assets/benchmarks/live-player-esri-truck.json +25 -0
  55. stanag4609-0.1.0/docs/assets/benchmarks/live-player-night-flight-ir.json +25 -0
  56. stanag4609-0.1.0/docs/assets/screenshots/ai-sidecar-player.jpg +0 -0
  57. stanag4609-0.1.0/docs/assets/screenshots/fmv-operations-dashboard.jpg +0 -0
  58. stanag4609-0.1.0/docs/assets/screenshots/fmv-verifier-report.jpg +0 -0
  59. stanag4609-0.1.0/docs/index.md +103 -0
  60. stanag4609-0.1.0/docs/requirements/H222.0-2014.md +35 -0
  61. stanag4609-0.1.0/docs/requirements/MISP-2019.1.md +82 -0
  62. stanag4609-0.1.0/docs/requirements/SMPTE-RP217-2001.md +31 -0
  63. stanag4609-0.1.0/docs/requirements/SMPTE-ST336-2017.md +37 -0
  64. stanag4609-0.1.0/docs/requirements/ST0102.12.md +38 -0
  65. stanag4609-0.1.0/docs/requirements/ST0107.5.md +47 -0
  66. stanag4609-0.1.0/docs/requirements/ST0601.19.md +116 -0
  67. stanag4609-0.1.0/docs/requirements/ST0604.6.md +35 -0
  68. stanag4609-0.1.0/docs/requirements/ST0804.4.md +45 -0
  69. stanag4609-0.1.0/docs/requirements/ST0806.4.md +37 -0
  70. stanag4609-0.1.0/docs/requirements/ST0902.8.md +48 -0
  71. stanag4609-0.1.0/docs/requirements/ST0903.6.md +78 -0
  72. stanag4609-0.1.0/docs/requirements/ST1001.1.md +48 -0
  73. stanag4609-0.1.0/docs/requirements/ST1002.3.md +27 -0
  74. stanag4609-0.1.0/docs/requirements/ST1010.3.md +33 -0
  75. stanag4609-0.1.0/docs/requirements/ST1201.5.md +20 -0
  76. stanag4609-0.1.0/docs/requirements/ST1202.3.md +22 -0
  77. stanag4609-0.1.0/docs/requirements/ST1204.3.md +45 -0
  78. stanag4609-0.1.0/docs/requirements/ST1206.1.md +20 -0
  79. stanag4609-0.1.0/docs/requirements/ST1303.2.md +33 -0
  80. stanag4609-0.1.0/docs/requirements/ST1402.2.md +162 -0
  81. stanag4609-0.1.0/docs/requirements/ST1601.2.md +29 -0
  82. stanag4609-0.1.0/docs/requirements/ST1602.2.md +18 -0
  83. stanag4609-0.1.0/docs/requirements/ST1607.2.md +33 -0
  84. stanag4609-0.1.0/docs/tutorials/ai_to_vmti.md +124 -0
  85. stanag4609-0.1.0/docs/tutorials/create_fmv.md +81 -0
  86. stanag4609-0.1.0/docs/tutorials/inspect_fmv.md +126 -0
  87. stanag4609-0.1.0/docs/tutorials/live_fanout.md +75 -0
  88. stanag4609-0.1.0/docs/tutorials/web_dashboard.md +86 -0
  89. stanag4609-0.1.0/examples/ai_sidecar/correlate_frame.py +35 -0
  90. stanag4609-0.1.0/examples/ai_sidecar/decode_video.py +37 -0
  91. stanag4609-0.1.0/examples/ai_sidecar/emit_vmti_packet.py +30 -0
  92. stanag4609-0.1.0/examples/ai_sidecar/http_json.py +57 -0
  93. stanag4609-0.1.0/examples/ai_sidecar/onnx_runtime.py +31 -0
  94. stanag4609-0.1.0/examples/ai_sidecar/ontology_vmti.py +54 -0
  95. stanag4609-0.1.0/examples/ai_sidecar/pipeline_graph.py +43 -0
  96. stanag4609-0.1.0/examples/ai_sidecar/queue_frames.py +23 -0
  97. stanag4609-0.1.0/examples/ai_sidecar/triton_async.py +34 -0
  98. stanag4609-0.1.0/examples/ai_sidecar/ultralytics_yolo.py +17 -0
  99. stanag4609-0.1.0/examples/audio_frames.py +57 -0
  100. stanag4609-0.1.0/examples/tutorials/ai_sidecar_ui.py +237 -0
  101. stanag4609-0.1.0/examples/tutorials/ai_to_vmti.py +113 -0
  102. stanag4609-0.1.0/examples/web_dashboard/index.html +104 -0
  103. stanag4609-0.1.0/examples/web_dashboard/server.py +48 -0
  104. stanag4609-0.1.0/mkdocs.yml +165 -0
  105. stanag4609-0.1.0/pyproject.toml +147 -0
  106. stanag4609-0.1.0/references/fixtures.json +248 -0
  107. stanag4609-0.1.0/references/requirements.json +389 -0
  108. stanag4609-0.1.0/references/standards/manifest.json +575 -0
  109. stanag4609-0.1.0/src/stanag4609/__init__.py +1069 -0
  110. stanag4609-0.1.0/src/stanag4609/audio/__init__.py +6 -0
  111. stanag4609-0.1.0/src/stanag4609/audio/pyav.py +132 -0
  112. stanag4609-0.1.0/src/stanag4609/audio/timing.py +198 -0
  113. stanag4609-0.1.0/src/stanag4609/csvexport.py +192 -0
  114. stanag4609-0.1.0/src/stanag4609/csvio.py +87 -0
  115. stanag4609-0.1.0/src/stanag4609/csvmux.py +317 -0
  116. stanag4609-0.1.0/src/stanag4609/errors.py +35 -0
  117. stanag4609-0.1.0/src/stanag4609/geojson.py +476 -0
  118. stanag4609-0.1.0/src/stanag4609/imap.py +242 -0
  119. stanag4609-0.1.0/src/stanag4609/klv/__init__.py +39 -0
  120. stanag4609-0.1.0/src/stanag4609/klv/ber.py +128 -0
  121. stanag4609-0.1.0/src/stanag4609/klv/checksum.py +55 -0
  122. stanag4609-0.1.0/src/stanag4609/klv/key.py +139 -0
  123. stanag4609-0.1.0/src/stanag4609/klv/local_set.py +71 -0
  124. stanag4609-0.1.0/src/stanag4609/klv/model.py +61 -0
  125. stanag4609-0.1.0/src/stanag4609/klv/stream.py +151 -0
  126. stanag4609-0.1.0/src/stanag4609/player/__init__.py +39 -0
  127. stanag4609-0.1.0/src/stanag4609/player/benchmark.py +264 -0
  128. stanag4609-0.1.0/src/stanag4609/player/live.py +752 -0
  129. stanag4609-0.1.0/src/stanag4609/player/server.py +651 -0
  130. stanag4609-0.1.0/src/stanag4609/player/static/index.html +410 -0
  131. stanag4609-0.1.0/src/stanag4609/player/timeline.py +583 -0
  132. stanag4609-0.1.0/src/stanag4609/py.typed +1 -0
  133. stanag4609-0.1.0/src/stanag4609/sidecar/__init__.py +72 -0
  134. stanag4609-0.1.0/src/stanag4609/sidecar/correlation.py +207 -0
  135. stanag4609-0.1.0/src/stanag4609/sidecar/http.py +176 -0
  136. stanag4609-0.1.0/src/stanag4609/sidecar/metrics.py +136 -0
  137. stanag4609-0.1.0/src/stanag4609/sidecar/model.py +206 -0
  138. stanag4609-0.1.0/src/stanag4609/sidecar/onnx.py +102 -0
  139. stanag4609-0.1.0/src/stanag4609/sidecar/pipeline.py +161 -0
  140. stanag4609-0.1.0/src/stanag4609/sidecar/pyav.py +176 -0
  141. stanag4609-0.1.0/src/stanag4609/sidecar/queue.py +105 -0
  142. stanag4609-0.1.0/src/stanag4609/sidecar/triton.py +116 -0
  143. stanag4609-0.1.0/src/stanag4609/sidecar/ultralytics.py +167 -0
  144. stanag4609-0.1.0/src/stanag4609/sidecar/vmti.py +353 -0
  145. stanag4609-0.1.0/src/stanag4609/st0102.py +587 -0
  146. stanag4609-0.1.0/src/stanag4609/st0601.py +4143 -0
  147. stanag4609-0.1.0/src/stanag4609/st0601_state.py +1280 -0
  148. stanag4609-0.1.0/src/stanag4609/st0604.py +598 -0
  149. stanag4609-0.1.0/src/stanag4609/st0806.py +653 -0
  150. stanag4609-0.1.0/src/stanag4609/st0902.py +754 -0
  151. stanag4609-0.1.0/src/stanag4609/st0903.py +1443 -0
  152. stanag4609-0.1.0/src/stanag4609/st0903_geo.py +615 -0
  153. stanag4609-0.1.0/src/stanag4609/st0903_state.py +244 -0
  154. stanag4609-0.1.0/src/stanag4609/st0903_tracker.py +204 -0
  155. stanag4609-0.1.0/src/stanag4609/st0903_vocab.py +766 -0
  156. stanag4609-0.1.0/src/stanag4609/st1001.py +447 -0
  157. stanag4609-0.1.0/src/stanag4609/st1002.py +858 -0
  158. stanag4609-0.1.0/src/stanag4609/st1010.py +522 -0
  159. stanag4609-0.1.0/src/stanag4609/st1202.py +508 -0
  160. stanag4609-0.1.0/src/stanag4609/st1204.py +248 -0
  161. stanag4609-0.1.0/src/stanag4609/st1206.py +375 -0
  162. stanag4609-0.1.0/src/stanag4609/st1303.py +663 -0
  163. stanag4609-0.1.0/src/stanag4609/st1402.py +279 -0
  164. stanag4609-0.1.0/src/stanag4609/st1601.py +478 -0
  165. stanag4609-0.1.0/src/stanag4609/st1602.py +269 -0
  166. stanag4609-0.1.0/src/stanag4609/st1607_state.py +598 -0
  167. stanag4609-0.1.0/src/stanag4609/transport/__init__.py +348 -0
  168. stanag4609-0.1.0/src/stanag4609/transport/access_unit_timing.py +255 -0
  169. stanag4609-0.1.0/src/stanag4609/transport/demux.py +503 -0
  170. stanag4609-0.1.0/src/stanag4609/transport/metadata.py +376 -0
  171. stanag4609-0.1.0/src/stanag4609/transport/metadata_stream.py +501 -0
  172. stanag4609-0.1.0/src/stanag4609/transport/mpegts.py +279 -0
  173. stanag4609-0.1.0/src/stanag4609/transport/mux.py +809 -0
  174. stanag4609-0.1.0/src/stanag4609/transport/pcr.py +419 -0
  175. stanag4609-0.1.0/src/stanag4609/transport/pes.py +231 -0
  176. stanag4609-0.1.0/src/stanag4609/transport/processor.py +264 -0
  177. stanag4609-0.1.0/src/stanag4609/transport/psi.py +589 -0
  178. stanag4609-0.1.0/src/stanag4609/transport/psi_timing.py +259 -0
  179. stanag4609-0.1.0/src/stanag4609/transport/pts.py +183 -0
  180. stanag4609-0.1.0/src/stanag4609/transport/rate.py +303 -0
  181. stanag4609-0.1.0/src/stanag4609/transport/rtcp.py +721 -0
  182. stanag4609-0.1.0/src/stanag4609/transport/rtp.py +552 -0
  183. stanag4609-0.1.0/src/stanag4609/transport/std.py +2090 -0
  184. stanag4609-0.1.0/src/stanag4609/transport/std_stream.py +576 -0
  185. stanag4609-0.1.0/src/stanag4609/transport/timing.py +74 -0
  186. stanag4609-0.1.0/src/stanag4609/transport/transformer.py +489 -0
  187. stanag4609-0.1.0/src/stanag4609/transport/udp.py +142 -0
  188. stanag4609-0.1.0/src/stanag4609/verification_html.py +227 -0
  189. stanag4609-0.1.0/src/stanag4609/verifier.py +2954 -0
  190. stanag4609-0.1.0/src/stanag4609/video.py +903 -0
  191. stanag4609-0.1.0/tests/browser/test_reference_player.py +364 -0
  192. stanag4609-0.1.0/tests/integration/test_public_fmv.py +414 -0
  193. stanag4609-0.1.0/tests/unit/test_access_unit_timing.py +179 -0
  194. stanag4609-0.1.0/tests/unit/test_async_std_model.py +340 -0
  195. stanag4609-0.1.0/tests/unit/test_audio_pyav.py +144 -0
  196. stanag4609-0.1.0/tests/unit/test_audio_timing.py +144 -0
  197. stanag4609-0.1.0/tests/unit/test_ber.py +73 -0
  198. stanag4609-0.1.0/tests/unit/test_correlation.py +225 -0
  199. stanag4609-0.1.0/tests/unit/test_csvexport.py +134 -0
  200. stanag4609-0.1.0/tests/unit/test_csvio.py +45 -0
  201. stanag4609-0.1.0/tests/unit/test_csvmux.py +181 -0
  202. stanag4609-0.1.0/tests/unit/test_demux.py +494 -0
  203. stanag4609-0.1.0/tests/unit/test_documentation.py +100 -0
  204. stanag4609-0.1.0/tests/unit/test_frame_queue.py +110 -0
  205. stanag4609-0.1.0/tests/unit/test_geojson.py +313 -0
  206. stanag4609-0.1.0/tests/unit/test_imap.py +152 -0
  207. stanag4609-0.1.0/tests/unit/test_klv_stream.py +96 -0
  208. stanag4609-0.1.0/tests/unit/test_live_player.py +446 -0
  209. stanag4609-0.1.0/tests/unit/test_local_set.py +35 -0
  210. stanag4609-0.1.0/tests/unit/test_metadata_stream.py +599 -0
  211. stanag4609-0.1.0/tests/unit/test_metadata_transport.py +325 -0
  212. stanag4609-0.1.0/tests/unit/test_mpegts.py +160 -0
  213. stanag4609-0.1.0/tests/unit/test_mux.py +434 -0
  214. stanag4609-0.1.0/tests/unit/test_payload_state.py +173 -0
  215. stanag4609-0.1.0/tests/unit/test_pcr_cadence.py +141 -0
  216. stanag4609-0.1.0/tests/unit/test_pcr_scheduler.py +173 -0
  217. stanag4609-0.1.0/tests/unit/test_pes.py +145 -0
  218. stanag4609-0.1.0/tests/unit/test_player_benchmark.py +123 -0
  219. stanag4609-0.1.0/tests/unit/test_player_timeline.py +673 -0
  220. stanag4609-0.1.0/tests/unit/test_processor.py +175 -0
  221. stanag4609-0.1.0/tests/unit/test_psi.py +270 -0
  222. stanag4609-0.1.0/tests/unit/test_psi_cadence.py +198 -0
  223. stanag4609-0.1.0/tests/unit/test_psi_scheduler.py +135 -0
  224. stanag4609-0.1.0/tests/unit/test_psi_timing.py +177 -0
  225. stanag4609-0.1.0/tests/unit/test_pts_cadence.py +129 -0
  226. stanag4609-0.1.0/tests/unit/test_requirement_inventory.py +277 -0
  227. stanag4609-0.1.0/tests/unit/test_rtcp.py +373 -0
  228. stanag4609-0.1.0/tests/unit/test_rtp.py +376 -0
  229. stanag4609-0.1.0/tests/unit/test_sidecar.py +936 -0
  230. stanag4609-0.1.0/tests/unit/test_sidecar_http.py +262 -0
  231. stanag4609-0.1.0/tests/unit/test_sidecar_metrics.py +134 -0
  232. stanag4609-0.1.0/tests/unit/test_sidecar_pyav.py +242 -0
  233. stanag4609-0.1.0/tests/unit/test_st0102.py +392 -0
  234. stanag4609-0.1.0/tests/unit/test_st0601.py +1825 -0
  235. stanag4609-0.1.0/tests/unit/test_st0601_packs.py +996 -0
  236. stanag4609-0.1.0/tests/unit/test_st0601_state.py +333 -0
  237. stanag4609-0.1.0/tests/unit/test_st0604.py +278 -0
  238. stanag4609-0.1.0/tests/unit/test_st0806.py +400 -0
  239. stanag4609-0.1.0/tests/unit/test_st0902.py +681 -0
  240. stanag4609-0.1.0/tests/unit/test_st0903.py +904 -0
  241. stanag4609-0.1.0/tests/unit/test_st0903_geo.py +379 -0
  242. stanag4609-0.1.0/tests/unit/test_st0903_state.py +111 -0
  243. stanag4609-0.1.0/tests/unit/test_st0903_tracker.py +113 -0
  244. stanag4609-0.1.0/tests/unit/test_st0903_vchip.py +143 -0
  245. stanag4609-0.1.0/tests/unit/test_st0903_vmask.py +171 -0
  246. stanag4609-0.1.0/tests/unit/test_st0903_vocab.py +381 -0
  247. stanag4609-0.1.0/tests/unit/test_st1001.py +242 -0
  248. stanag4609-0.1.0/tests/unit/test_st1002.py +548 -0
  249. stanag4609-0.1.0/tests/unit/test_st1010.py +383 -0
  250. stanag4609-0.1.0/tests/unit/test_st1202.py +337 -0
  251. stanag4609-0.1.0/tests/unit/test_st1204.py +153 -0
  252. stanag4609-0.1.0/tests/unit/test_st1206.py +273 -0
  253. stanag4609-0.1.0/tests/unit/test_st1303.py +610 -0
  254. stanag4609-0.1.0/tests/unit/test_st1402.py +140 -0
  255. stanag4609-0.1.0/tests/unit/test_st1601.py +356 -0
  256. stanag4609-0.1.0/tests/unit/test_st1602.py +165 -0
  257. stanag4609-0.1.0/tests/unit/test_st1607.py +323 -0
  258. stanag4609-0.1.0/tests/unit/test_st1607_state.py +516 -0
  259. stanag4609-0.1.0/tests/unit/test_std_delay.py +171 -0
  260. stanag4609-0.1.0/tests/unit/test_std_model.py +354 -0
  261. stanag4609-0.1.0/tests/unit/test_std_stream.py +369 -0
  262. stanag4609-0.1.0/tests/unit/test_timing.py +56 -0
  263. stanag4609-0.1.0/tests/unit/test_transformer.py +982 -0
  264. stanag4609-0.1.0/tests/unit/test_transport_rate.py +289 -0
  265. stanag4609-0.1.0/tests/unit/test_tutorial_examples.py +75 -0
  266. stanag4609-0.1.0/tests/unit/test_udp.py +81 -0
  267. stanag4609-0.1.0/tests/unit/test_universal_label.py +71 -0
  268. stanag4609-0.1.0/tests/unit/test_verifier.py +2045 -0
  269. stanag4609-0.1.0/tests/unit/test_video_properties.py +422 -0
  270. stanag4609-0.1.0/tests/unit/test_wavelength_state.py +161 -0
  271. stanag4609-0.1.0/tests/unit/test_waypoint_list_state.py +154 -0
  272. stanag4609-0.1.0/tests/unit/test_weapons_stores_state.py +161 -0
@@ -0,0 +1,21 @@
1
+ .DS_Store
2
+ .coverage
3
+ .hypothesis/
4
+ .mypy_cache/
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ .venv/
8
+ __pycache__/
9
+ *.egg-info/
10
+ *.py[cod]
11
+ *.pt
12
+ build/
13
+ dist/
14
+ references/standards/*.pdf
15
+ references/standards/*.docx
16
+ references/standards/*.xls
17
+ references/standards/*.txt
18
+ samples/private/
19
+ site/
20
+ tmp/
21
+ work/
@@ -0,0 +1,441 @@
1
+ # Changelog
2
+
3
+ All notable changes are documented here. Releases use Semantic Versioning;
4
+ the pre-1.0 minor version and package classifier communicate API maturity.
5
+
6
+ ## Unreleased
7
+
8
+ ## 0.1.0 - 2026-09-05
9
+
10
+ - Add checksum-bound exact inventory and CI enforcement for all 65 active and
11
+ 78 deprecated ST 0903.6 requirement identifiers, and remove deprecated
12
+ identifiers from the current conformance trace.
13
+ - Add an optional first-party PyAV video source that produces model-neutral
14
+ `FrameEnvelope` values with exact 90 kHz PTS conversion, BGR or native frame
15
+ output, deterministic stream selection, and safe container lifecycle; use it
16
+ in the real YOLO-to-VMTI player tutorial.
17
+ - Resolve ST 0601 Item 42's MSL/HAE datum from receiver-current frame-center
18
+ Items 25 and 78 across sparse Report-on-Change packets; expose the typed
19
+ result through the core API, GeoJSON, and player, and report ambiguous datum
20
+ state through the FMV verifier.
21
+
22
+ ## 0.1.0a5 - 2026-09-05
23
+
24
+ - Enforce ST 1204.3's UUID version/variant and version-1 null-MAC rules for
25
+ ST 0601 Item 94, add explicit version 1/4/5 generators, implement the exact
26
+ namespace-free Appendix A.1 multi-UUID algorithm against normative Table 13,
27
+ and prove the inclusive 30-second MIIS cadence through ST 0902.
28
+ - Pin and exercise ImpleoTV's public 21-file negative STANAG 4609 corpus, with
29
+ authenticated member identities and 20 fault-specific verifier assertions;
30
+ add conservative PCR-bracketed PAT/PMT blackout proof and DVB SDT CRC
31
+ diagnostics, while retaining the in-bound PCR/PTS-drift member as a
32
+ documented non-claim.
33
+ - Add a first-party JSON live-player benchmark, an explicit per-call input
34
+ bound, fixed-window 100,000-event/10,000-fragment stress tests, and measured
35
+ baselines across all three checksum-pinned public FMV recordings.
36
+ - Add a bounded low-latency reference-player gateway that incrementally fans
37
+ live MPEG-TS into pure-Python ST 0601/VMTI state and FFmpeg fragmented MP4,
38
+ with numbered MSE fragments, resumable SSE, stdin CLI input, explicit
39
+ history-loss/backpressure semantics, and real-Chromium acceptance coverage.
40
+ - Exercise the reference player in real headless Chromium using deterministic
41
+ local media and metadata, covering playback, seeking, synchronized fields,
42
+ diagnostics, VMTI and map canvases, and SSE restart timing in dedicated CI.
43
+ - Reject both ST 1002.3 Table 2 retired-tag ranges (`2-10` and `51-54`) on
44
+ decode and encode while retaining adjacent non-retired extension items.
45
+ - Resolve omitted ST 1002 SPRM row and column coordinates independently to
46
+ the standard-mandated image center through an explicit frame-dimensions API,
47
+ including decoded ST 0601 Item 97 values.
48
+ - Gate the shipped reference-player JavaScript with Node's parser in CI, so a
49
+ parse-time browser failure cannot pass the existing HTML and timeline tests.
50
+ - Enforce ST 1601.2 uncertainty-to-geometry relationships for ST 0601 Item 98:
51
+ pixel uncertainty now requires a four-row correspondence-point array, and
52
+ geographic uncertainty requires latitude/longitude plus the matching
53
+ three-row or six-row elevation form on both encode and decode.
54
+ - Bound live verifier PMT-validation memory to the most recently validated PMT
55
+ identity per program, with a 128-revision churn regression, and acquire the
56
+ exact official ST 0801.6 edition conditionally referenced by MISP-2019.1.
57
+ - Inventory all 86 active and 34 deprecated MISP-2019.1 requirement
58
+ identifiers against the checksum-bound adopted source, and enforce the
59
+ MISP-2015.1-49 rule that security metadata use only one synchronous or
60
+ asynchronous MPEG-2 TS carriage mechanism per program.
61
+ - Add strict RFC 3550 RTCP framing, Sender/Receiver Reports, signed reception
62
+ blocks, SDES CNAME and compound validation/read/write; packetizer uint32
63
+ sender counters and SR+CNAME emission; plus exact wrap-safe RTP/NTP mapping
64
+ for synchronizing separate ST 0804 imagery and metadata streams.
65
+ - Add a count-bounded RTP sequence reorder buffer with wrap-aware contiguous
66
+ release, duplicate/late rejection, definite gap reporting under pressure or
67
+ flush, SSRC session locking, and zero-copy handoff to the MP2T receiver.
68
+ - Add dependency-free, bounded H.262, AVC, and HEVC sequence-property
69
+ inspection for dimensions, display ratio/frame rate, scan signalling,
70
+ chroma/bit depth, profile/level, and adopted MISP codec checks, including
71
+ HEVC VUI and bounded traversal of optional SPS structures.
72
+ - Add MISB ST 0604.6 embedded video timestamp read/write support for H.262,
73
+ AVC, and HEVC, including microsecond/nanosecond payloads, ST 0603 Time Status,
74
+ bounded Annex-B extraction, exact timestamp-to-access-unit association, and
75
+ verifier missing/duplicate/unassociated coverage diagnostics.
76
+ - Add MISB ST 0804.4 / RFC 2250 MPEG-2 Transport Stream over RTP parsing and
77
+ packetization, including complete RTP v2 header handling, 90 kHz clock and
78
+ discontinuity semantics, bounded MP2T payload validation, sequence-loss and
79
+ timestamp diagnostics, SSRC session locking, and late-packet protection.
80
+ - Add explicit, observable live-session reset APIs across the MPEG-TS demuxer,
81
+ metadata decoder, and in-transit transformer, preventing partial TS, PSI,
82
+ PES, KLV, Metadata AU, sequence, or topology state from crossing a reconnect.
83
+ - Retain the exact ST 0601 validation context on decoded metadata events and
84
+ report per-service birth-time, IMAP-precision, and VMTI external-assurance
85
+ counts in JSON, text, and HTML verifier output.
86
+ - Resolve typed ST 1601 Geo-Registration results at root or full ST 1607 MSID
87
+ paths, retaining independent parallel Amend results across Report-on-Change
88
+ packets and expiring them at the standard refresh boundary.
89
+ - Apply unique ST 1202 transformations in the mandatory Chipping,
90
+ Child-Parent, Default Pixel-to-Image, and Optical order, with automatic
91
+ reverse-order inverse execution for ground-to-image projection.
92
+ - Construct ST 1202 Chipping, centered Digital Zoom, and CSM default
93
+ pixel-to-image transformations directly from their standard-defined physical
94
+ parameters, with equation-based validation and dedicated API documentation.
95
+ - Gate the optional PyAV backend in CI with native decoding for every ST 1001
96
+ codec profile and add real AAC FMV demux, timestamp, reconstruction, and PCM
97
+ decode acceptance coverage.
98
+ - Add an objective-level completion audit and require every real Day/Night FMV
99
+ player sample to expose synchronized timestamp, sensor, platform, frame-center,
100
+ target-coordinate, and map-role telemetry.
101
+
102
+ ## 0.1.0a4 - 2026-09-04
103
+
104
+ - Add bounded program selection for multi-program live inputs, selected-only
105
+ PES/clock/metadata output, source-PMT PID identity, and atomic versioned PAT
106
+ reassociation while retaining elementary-stream continuity.
107
+ - Assemble bounded multi-section PAT versions atomically, expose complete PAT
108
+ cycles on demux events, support multiple program-map sections sharing a PID,
109
+ and enforce H.222.0's zero-numbered single-section PMT rule.
110
+ - Reject CRC-valid PSI with invalid fixed/reserved bits, repeated PAT program
111
+ numbers, or non-`0xFF` bytes after section stuffing begins.
112
+ - Apply PMT stream-route updates transactionally: compatible retained PIDs may
113
+ finish an in-flight PES, while a rejected removal or redefinition leaves the
114
+ complete previous routing topology active.
115
+ - Add dependency-free ST 1002.3 plane fitting, subtraction, and reverse
116
+ reconstruction with one-based coordinates and unknown-range masking.
117
+ - Enforce ST 1602-04 Z-order uniqueness across report-on-change Segment
118
+ siblings and surface violations in FMV verification reports.
119
+ - Enforce ST 1602.1-10 by requiring a direct typed ST 1204 MIIS Core Identifier
120
+ in every child of a represented multi-sensor composite stream.
121
+ - Resolve an omitted ST 1602 Item 1 from the immediate parent timestamp while
122
+ preserving an explicit source/process timestamp for synchronized consumers.
123
+ - Enforce ST 0902.8 Note 1's Item 75/104 exclusive-OR across distributed
124
+ report-on-change packets, including the inclusive 30-second boundary, expiry,
125
+ ZLI clearing, validator reset, and an MPEG-TS-to-verifier report regression.
126
+ - Let AI sidecar detections carry an optional typed ST 0903 absolute Location;
127
+ the VMTI emitter now preserves its coordinates and uncertainty as VTarget
128
+ Item 17 for player, GIS, and downstream FMV consumers.
129
+ - Replace illustrative AI overlays with actual YOLO11n vehicle inference over
130
+ the checksum-pinned Esri Truck FMV, flowing every prediction through the
131
+ public sidecar and ST 0903 VMTI encode/decode path before browser rendering.
132
+ - Add an opt-in, media-timed Server-Sent Events feed to the reference player,
133
+ including current-state replay, bounded heartbeats and browser history,
134
+ seek/pause/stall/rate synchronization, and tested HTTP error handling.
135
+
136
+ ## 0.1.0a3 - 2026-09-04
137
+
138
+ - Add reproducible real-fixture CLI output plus browser-captured dashboard and
139
+ verifier screenshots to the inspection and web-client tutorials.
140
+ - Add typed ST 0102 security classifications and caller-supplied enforcement
141
+ for exact classification, classifying country, SCI/SHI, caveats, and required
142
+ release/object countries across ST 0902 validators, the FMV verifier, and CLI.
143
+ - Add a versioned, searchable API-reference section generated from public
144
+ docstrings for KLV, MISB metadata, transport, verification, AI sidecars,
145
+ media exports, and the reference player, with strict target-resolution tests.
146
+ - Add explicit MISP/UTC conversion using ST 0601 Items 136 and 137, exact raw
147
+ Item 2 access, correct player/GeoJSON/verifier time-scale labels, verifier
148
+ Report-on-Change UTC evidence, and standards-safe UTC-to-MISP conversion in
149
+ the first-party AI/VMTI producer.
150
+ - Encode the mandatory ST 0601 `Out of Range` sentinel automatically when a
151
+ producer supplies a numeric measurement outside any applicable fixed mapped
152
+ field domain, without clipping or weakening unrelated range validation.
153
+
154
+ ## 0.1.0a2 - 2026-09-04
155
+
156
+ - Add five task-oriented tutorials covering real-fixture inspection, raw
157
+ video/CSV FMV creation, parallel AI-to-VMTI emission, a custom video/map/feed
158
+ dashboard, and live transform fan-out, plus an explicit continuation roadmap.
159
+ - Add an executable dependency-free web dashboard example built on the public
160
+ player-asset boundary and browser-verify it against the daylight FMV fixture.
161
+ - Add an event-aware ST 0601 context provider to live metadata decoding and the
162
+ FMV verifier, making producer-known time-of-birth, variable-IMAP precision,
163
+ and embedded-VMTI facts enforceable per packet.
164
+ - Request a 20 ms PCR period when FFmpeg remuxes ordinary media for CSV/KLV
165
+ injection, keeping generated FMV inside the ST 1402 100 ms interval.
166
+ - Add an exact, bounded incremental asynchronous metadata STD model with
167
+ cross-batch occupancy, continuous output leakage, live watermarks, immediate
168
+ diagnostics, finite-model parity, PCR-window stream validation, and optional
169
+ per-program/PID FMV verifier configuration.
170
+ - Add conservative, bounded ST 1402-12 synchronous-metadata decoder-delay
171
+ auditing with PCR-bracketed delay ranges and FMV verifier diagnostics.
172
+ - Add a typed H.222.0 metadata STD descriptor with exact physical-unit
173
+ construction and direct synchronous-stream integration.
174
+ - Decode ST 0601 coded fields into integer-compatible enumerations, flags, and
175
+ legacy weapon packs, and enforce the exact Item 62 Laser PRF digit profile.
176
+ - Render those coded platform/sensor states in the reference player with stable
177
+ numeric values, operator labels, named flags, and decoded weapon components.
178
+ - Add a dependency-free, bounded JSON-over-HTTP inference adapter with typed
179
+ model-schema hooks and a complete BYO-service example.
180
+ - Add thread-safe, bounded per-stage inference counters and monotonic latency
181
+ metrics for successes, failures, timeouts, cancellations, and in-flight work.
182
+ - Keep reference-player telemetry and geospatial labels readable across desktop
183
+ and narrow browser layouts.
184
+ - Surface per-sample metadata diagnostics in the reference player, keep future
185
+ telemetry hidden before its timestamp, and distinguish empty, malformed, and
186
+ unavailable timelines.
187
+ - Restrict production publishing to version tags and approval by the repository
188
+ owner, and refresh artifact actions to their Node.js 24 releases.
189
+
190
+ ## 0.1.0a1 - 2026-09-04
191
+
192
+ - Add the official Esri `Truck.ts` H.264/AAC/synchronous-KLVA fixture with
193
+ checksum-verified ZIP extraction and negative conformance assertions.
194
+ - Prepare a protected publishing workflow, cross-version CI, PyPI
195
+ discovery metadata, and versioned Read the Docs hosting.
196
+ - Audit the SMPTE RP 217:2001 transport-stream branch and reject asynchronous
197
+ KLVA PES packets with an unbounded length or asserted ESCR flag.
198
+ - Catalogue locally validated STANAG 4609 Edition 5, MISP-2019.1,
199
+ MISP-2023.2, SMPTE ST 336:2017, and SMPTE RP 217:2001 source documents.
200
+ - Add bounded constant-rate TS packet shaping with exact rational output slots,
201
+ null-packet idle fill, and H.222.0 byte-position-aware retained PCR restamping.
202
+ - Add a drift-free live PCR writer scheduler that derives clock samples from
203
+ actual output time and exposes skipped slots and noncompliant late gaps.
204
+ - Add per-elementary-stream ST 1402 PTS cadence validation with exact 0.7-second
205
+ boundaries, rollover/reordering handling, discontinuity resets, and verifier
206
+ integration.
207
+ - Add explicit ST 0903 VMTI frame/parent validation context for timestamp,
208
+ target-count, frame-dimension, differing-image-source, and stale-offset
209
+ requirements.
210
+ - Enforce ST 0903 two-corner and single-interior-area BoundarySeries geometry
211
+ with exact, antimeridian-aware topology and a configurable resource bound.
212
+ - Add a bounded incremental FMV verifier and CLI with human and JSON reports,
213
+ positive/negative findings, stream inventory, source context, configurable
214
+ profile policy, and real public-stream integration coverage.
215
+ - Add streaming, atomic GeoJSON-sequence export for reconstructed ST 0601
216
+ sensor, frame-center, target, and frame-footprint geometry.
217
+ - Add a synchronized, dependency-free local geospatial map to the reference
218
+ player alongside its VMTI video overlay and decoded field panel.
219
+ - Add an optional first-party Ultralytics YOLO adapter for strict frame-bounded
220
+ boxes, labels, confidence, algorithm attribution, and stable tracker IDs.
221
+ - Add an optional ONNX Runtime session adapter with strict named-input checks
222
+ and explicit model-specific preprocessing/postprocessing hooks.
223
+ - Add an optional NVIDIA Triton HTTP/gRPC AsyncIO adapter with request IDs,
224
+ timeout-compatible cancellation, and explicit tensor/result hooks.
225
+ - Add a high-level inference-result-to-VMTI emitter that preserves correlated
226
+ ST 0601 parents or creates a minimal synchronous parent for media-only input.
227
+ - Add ST 1402-compliant UDP datagram packetization and receiver validation with
228
+ a seven-TS-packet default and strict partial/sync/payload bounds.
229
+ - Add ST 1402-02 PAT/PMT recurrence validation with exact strict-boundary,
230
+ initial-acquisition, per-program, reconfiguration, and multi-section checks.
231
+ - Add a drift-free ST 1402-02 PAT/PMT writer scheduler with an eight-Hz default
232
+ and observable late polls, skipped repetitions, and mandatory-gap failures.
233
+ - Enforce asynchronous ST 1402 KLV alignment at every PES boundary and let the
234
+ high-level muxer span one validated KLV item across bounded PES packets.
235
+ - Add structured ST 1402 metadata PMT conformance reports for same-program
236
+ video, carriage types, `KLVA` registration, and synchronous descriptors.
237
+ - Integrate the exact ST 1402 PAT/PMT scheduler into timed live-transform calls,
238
+ including idle polling, early source-table suppression, and batch metrics.
239
+ - Add bounded streaming MPEG-1/2 Layer II and MPEG-2 AAC-LC frame
240
+ reconstruction with exact offsets, channels, samples, and durations.
241
+ - Add an optional direct PyAV/FFmpeg audio decoder with actual codec-context
242
+ coverage for all three ST 1001 formats and explicit flush/lifecycle metrics.
243
+ - Add per-PID audio PES timing that honors first-access-unit PTS semantics,
244
+ split frames, rollover, discontinuities, and exact rational sample duration.
245
+ - Add exact, program-aware ST 1402 PCR cadence auditing with 100 ms boundary,
246
+ rollover, shared-PID, PID-change, discontinuity, and regression handling.
247
+ - Add deterministic adaptation-only PCR construction on a muxer's declared
248
+ clock PID without consuming elementary-stream payload continuity counters.
249
+ - Render ST 0903 VMask polygon contours and compact row-major run masks in the
250
+ synchronized reference player, retaining JSON-ready mask geometry for apps.
251
+
252
+ - Added normalized ST 0903 target geometry to player timelines and synchronized
253
+ browser overlays for VMTI boxes, centroids, labels, confidence, and status.
254
+ - Added streaming and atomic ST 0601-to-ArcGIS CSV sidecar export with
255
+ per-stream Report-on-Change reconstruction and a dedicated CLI.
256
+ - Added bounded ST 0903.6 cross-frame target lifecycle state with transition,
257
+ missing-status, terminal-ID-reuse, live-join, and partial-list semantics.
258
+ - Made ST 0903 VMTI Item 13 a typed, structurally validated ST 1204 Core
259
+ Identifier while retaining validated binary input for wire-oriented callers.
260
+ - Added an atomic first-party ArcGIS FMV CSV multiplexer that losslessly remuxes
261
+ video/audio with FFmpeg, adds repeated synchronous KLVA signalling, aligns
262
+ microsecond metadata to rollover-safe video PTS, and preserves media PES.
263
+ - Added MISB ST 1001.1 audio codec-profile validation, typed Layer II and AAC-LC
264
+ ADTS frame-header inspection, and codec identity on live audio PES events.
265
+ - Added deterministic 33-bit PTS epoch unwrapping with rollover, reordering,
266
+ ambiguity handling, and a forward live-timeline watermark.
267
+ - Added bounded per-program synchronization of decoded frame envelopes with
268
+ synchronous KLV relevance PTS and absolute MISB Precision Time Stamps.
269
+ - Added bounded async decoded-frame queues with explicit overload policies,
270
+ per-enqueue drop identity, and cumulative accepted/drop observability.
271
+ - Added typed ST 0903.6 VChip Local Sets, including constrained media types,
272
+ image IRIs/embedded bytes, and VTarget single/multi-chip integration.
273
+ - Added typed ST 0903.6 VMask pixel contours and BER-framed run masks with
274
+ official vectors, parent-frame bounds, and clockwise geometry validation.
275
+ - Added typed ST 0903.6 Location, Velocity, and Acceleration DLPs, bounded
276
+ Location/Boundary Series framing, and VTarget absolute-location/contour fields.
277
+ - Added the typed ST 0903.6 VTracker Local Set and VTarget Item 104 integration,
278
+ including UUIDs, observation times, tracks, motion, and algorithm references.
279
+ - Added typed ST 0903.6 VTarget parent-relative geospatial Items 10-16 with
280
+ official IMAP vectors and standalone-versus-embedded context validation.
281
+ - Added first-PMT augmentation for introducing a fully signalled synchronous or
282
+ asynchronous KLVA PID into a media-only live MPEG-2 transport stream.
283
+ - Added an FFmpeg-backed local web reference player and a reusable JSON timeline
284
+ scanner synchronized to video PTS, including geospatial/state field panels.
285
+ - Added opt-out Metadata AU sequence validation for diagnostic consumers while
286
+ keeping strict validation as the default.
287
+ - Completed ST 0902.8 Table 1 requirement tracking for checksum, timestamp, and
288
+ UAS Local Set version; added finite-stream finalization, reset, malformed-field
289
+ diagnostics, and explicit ST 0102 context policy for SCI/SHI, Caveats, and
290
+ Releasing Instructions.
291
+ - Added bounded ST 0601/ST 0107 Report-on-Change receiver-state reconstruction
292
+ with inclusive refresh expiry, immediate ZLI clearing, multi-use ZLI
293
+ rejection, and sparse-state integration in the reference player.
294
+ - Added identity-aware ST 0601 Items 121/128 wavelength-table reconstruction,
295
+ including independently expiring distributed records and validation of
296
+ predefined, reserved, undefined, and duplicate-name references.
297
+ - Added identity-aware ST 0601 Items 138/139 payload-table reconstruction with
298
+ stable table generations, sequential completeness, per-record expiry, active
299
+ bit-reference validation, ZLI clearing, and bounded atomic updates.
300
+ - Added identity-aware ST 0601 Item 140 Weapons Stores reconstruction keyed by
301
+ four-part physical address, with distributed merging, per-record expiry,
302
+ replacement updates, ZLI clearing, and bounded atomic updates.
303
+ - Added identity-aware ST 0601 Item 141 Waypoint List reconstruction with
304
+ independent record expiry, transient distributed-reorder visibility,
305
+ cancellation/history views, historical-order validation, and bounded state.
306
+ - Added bounded ST 1607 Segment/Amend tree reconstruction with MSID lineage,
307
+ per-level Report-on-Change state, nested union/override evaluation, persistent
308
+ Amend deletions, branch expiry, and atomic identity/limit enforcement.
309
+ - Added context-correct ST 1607 child Security Local Sets, inherited effective
310
+ security views, and structured validation of Items 12/13-only country
311
+ overrides and prohibited root-security deletion.
312
+ - Added static ST 0902 minimum-profile validation for reconstructed receiver
313
+ views and ST 1607 policy checks at Amend roots and terminal Segment unions.
314
+
315
+ - Added strict-versus-preserve ST 0601 field decoding with structured issues.
316
+ - Added typed ST 0601.19 Items 26-47 with official mapping vectors, coded
317
+ value validation, and exact Off-Earth handling for corner/target locations.
318
+ - Added typed ST 0601.19 Items 49-64, including bounded call signs and exact
319
+ Out-of-Range handling for legacy platform-attitude fields.
320
+ - Added typed ST 0601.19 alternate-platform, event-time, operational-mode,
321
+ ellipsoid-height, and sensor-velocity Items 67-72 and 75-80.
322
+ - Added typed ST 0601.19 full corner-coordinate and platform-angle Items 82-93
323
+ with exact Off-Earth and Out-of-Range identities.
324
+ - Added typed ST 0601.19 Items 105-114 with bounded text, variable-width
325
+ integers, and per-item variable-length IMAP limits.
326
+ - Added typed ST 0601.19 sensor-rate, storage, navigation, platform-status,
327
+ and sensor-control Items 117-120 and 123-126.
328
+ - Added typed ST 0601.19 Items 129 and 131-137, including minimal-width signed
329
+ integers and variable-width take-off timestamps.
330
+ - Added a typed ST 1204.3 MIIS Core Identifier codec and ST 0601 Item 94 bridge.
331
+ - Added stateful ST 0902.8 minimum-item cadence validation with alternative
332
+ fields, ZLI diagnostics, and Security/MIIS stage policies.
333
+ - Added a typed ST 0102.12 Security Local Set codec for all current local tags,
334
+ including the ST 0601 Item 48 and ST 0902 profile bridges.
335
+ - Added the typed ST 0601 Item 81 Image Horizon Pixel Pack with truncatable
336
+ WGS-84 endpoints and explicit error-indicator preservation.
337
+ - Added the typed ST 0601 Item 127 Sensor Frame Rate Pack with exact BER-OID
338
+ ratios and canonical default-denominator truncation.
339
+ - Added typed ST 0601 Items 115-116 control-command packs, including repeated
340
+ Item 115 instances, optional command timestamps, and acknowledgement lists.
341
+ - Added typed ST 0601 Item 121 Active Wavelength identifiers and Item 122
342
+ country-code VLPs with explicit Unknown and truncation semantics.
343
+ - Added typed ST 0601 Item 128 custom wavelength records with nested VLP/FLP
344
+ framing, exact IMAPB bounds, and duplicate identifier/name validation.
345
+ - Added typed ST 0601 Item 130 take-off and recovery locations with WGS-84
346
+ IMAPB mappings, optional HAE, explicit Unknown, and round-trip truncation.
347
+ - Added typed ST 0601 Items 138-139 distributed payload-table records and
348
+ active-payload bit sets, with sequential-ID and bounds validation.
349
+ - Added typed ST 0601 Item 140 Weapons Stores records with physical addresses,
350
+ general status, engagement flags, reserved-bit checks, and UTF-8 types.
351
+ - Added typed ST 0601 Item 141 Waypoint List records with distributed-list
352
+ semantics, optional info/location fields, and official-vector coverage.
353
+ - Added typed ST 0601 Item 142 View Domain pairs with variable IMAP precision,
354
+ explicit unknowns, end truncation, and circular end-angle helpers.
355
+ - Added typed ST 0601 Item 143 Metadata Substream IDs in local and UUID forms,
356
+ including enforcement of the standard's root-level prohibition.
357
+ - Added recursive ST 1607.2 Segment/Amend Local Sets for ST 0601 Items 100-101,
358
+ including required MSIDs, hierarchy rules, unknown TLV preservation, and
359
+ explicit Amend deletion semantics.
360
+ - Added a bounded ST 1010.3 SDCC-FLP codec with Mode 1/2 Parse Control,
361
+ IEEE/IMAP values, full and sparse upper-triangle matrices, and ST 0601 Item
362
+ 102 Refined Source List ordering for repeated packs.
363
+ - Added a typed ST 0806.4 RVT codec for independent CRC-protected packets and
364
+ embedded values, all Items 1-21, repeatable POI/AOI/User Defined subordinate
365
+ sets, and the ST 0601 Item 73 bridge.
366
+ - Added a bounded ST 1303.2 MDAP codec with Natural, IMAP, Boolean, biased
367
+ BER-OID unsigned, and ordered run-length algorithms, including byte-exact
368
+ official vectors and lazy RLE cell access.
369
+ - Added the official ST 1202.3 publication to the local non-redistributed
370
+ standards cache and corrected the ST 1303.2 manifest metadata.
371
+ - Added a typed ST 1202.3 Generalized Transformation codec with lossless
372
+ IEEE-width preservation, projective forward/inverse evaluation, and strict
373
+ ST 1010 Mode 2 Refined Source List processing.
374
+ - Added typed ST 1002.3 Range Image packets, Section Data VLPs, nested ST 1202
375
+ transformations and ST 1303 arrays, CRC-16-CCITT, and the ST 0601 Item 97
376
+ bridge.
377
+ - Added typed ST 1601.2 Geo-Registration metadata with tie-point MDAPs,
378
+ binary16 elevation arrays, heterogeneous IMAP uncertainty rows, UUIDs, and
379
+ the ST 0601 Item 98 bridge.
380
+ - Added typed ST 1602.2 Composite Imaging geometry, active-area helpers,
381
+ transparency and Z-order fields, and the ST 0601 Item 99 bridge.
382
+ - Added all ST 1206.1 SAR Motion Imagery items, standalone/embedded framing,
383
+ radiometric ST 1303 polynomial evaluation, and the ST 0601 Item 95 bridge.
384
+ - Added typed ST 0903.6 Algorithm, Ontology, VObject, and VFeature Local Sets,
385
+ strict packet-local ID references, and ontology-backed sidecar label emission.
386
+ - Added the checksum-validated official ST 1607.2 publication to the local,
387
+ non-redistributed standards manifest.
388
+ - Fixed IMAP normal-value decode/encode stability at quantization boundaries.
389
+ - Added reproducible full-file integration tests for two public FMV streams.
390
+ - Added first-party AI frame/detection contracts, composable inference graphs,
391
+ and a standards-aware ST 0903 pixel detection bridge.
392
+ - Added exact PCR/OPCR parsing, program-aware clock events, and full-file no-op
393
+ transform fingerprints for the public daylight FMV fixture.
394
+ - Preserved source TS payload/adaptation layouts and every PCR/OPCR observation
395
+ when remuxing unchanged video, audio, or data PES.
396
+
397
+ ### Added
398
+
399
+ - Strict BER length and BER-OID primitives.
400
+ - Incremental Universal KLV and lossless Local Set parsing.
401
+ - Initial typed ST 0601 decoding, encoding, and checksum validation.
402
+ - ArcGIS FMV Multiplexer CSV adapter for the supplied development fixture.
403
+ - Enforcement of the mandatory ST 0601 timestamp/version/checksum structure
404
+ and uniqueness for the currently supported singleton items.
405
+ - Byte-exact ST 0902.8 Annex C dynamic-packet regression vector.
406
+ - Distinct public values for MISB Unknown, Out-of-Range, Off-Earth, and
407
+ Reserved semantics, including correct zero-length and empty-string encoding.
408
+ - Strict ST 0107 UTF-8 canonicalization checks for supported text fields.
409
+ - Bounded incremental MPEG-2 TS packet parsing with strict and recovery modes,
410
+ adaptation/payload separation, exact byte offsets, and streaming iteration.
411
+ - Incremental PSI section reconstruction, CRC-32/MPEG-2 validation, typed PAT
412
+ and PMT decoding, and synchronous/asynchronous KLVA PID discovery.
413
+ - Bounded per-PID PES reconstruction with exact packet lengths, 33-bit PTS/DTS
414
+ decoding, unbounded video-PES boundary handling, and live-join behavior.
415
+ - Exact ST 1201.5 IMAPA length selection and IMAPB forward/reverse mapping,
416
+ including zero offsets and lossless special/reserved code words.
417
+ - Typed variable-length IMAP support for ST 0601.19 Items 96, 103, and 104,
418
+ validated against their official publication examples.
419
+ - Strict standalone and embedded ST 0903.6 VMTI decoding with bounded VTarget
420
+ Series, lossless unknown tags, typed pixel fields, and lifecycle validation.
421
+ - Typed ST 0903.6 VMTI and VTarget encoding for pixel-space AI detections,
422
+ including BER-OID target IDs, automatic target counts, lifecycle validation,
423
+ explicit raw extensions, and encoder-owned standalone checksums.
424
+ - Automatic typed ST 0903.6 decoding and lossless re-encoding through ST 0601
425
+ Item 74.
426
+ - Program-aware incremental transport demuxing that discovers PAT/PMT updates,
427
+ classifies video, audio, KLVA, and other streams, and emits bounded PES events.
428
+ - Deterministic PAT/PMT/PES construction, 188-byte TS packetization with
429
+ per-PID continuity, and asynchronous KLVA insertion.
430
+ - Synchronous KLVA Metadata AU cells with PTS, PMT descriptor helpers,
431
+ sequence counters, and bounded complete/first/middle/last fragmentation.
432
+ - Incremental metadata stream reconstruction from asynchronous KLV fragments or
433
+ synchronous AU cells into timed, typed ST 0601/ST 0903 events.
434
+ - Lossless ST 0601 packet updates with explicit add/replace/delete operations,
435
+ raw extension values, mandatory-structure validation, and checksum repair.
436
+ - Immutable timed-KLV events and bounded processor chains with explicit
437
+ pass/drop/replace/inject decisions, strict output parsing, typed replacement
438
+ metadata, and deterministic multi-processor composition.
439
+ - Pull-driven single-program live TS transformation that preserves unchanged
440
+ video/audio PES bytes and descriptors, processes sync/async KLV at its source
441
+ timing, remuxes it, and exposes parallel typed metadata batches.
@@ -0,0 +1,106 @@
1
+ # Contributing to stanag4609
2
+
3
+ Thank you for helping build a dependable, open FMV interoperability library.
4
+ Protocol changes are specification-led, test-driven, and deliberately small so
5
+ that every compatibility claim can be audited.
6
+
7
+ ## Ground rules
8
+
9
+ - Do not commit or redistribute licensed standards, proprietary source code, or
10
+ restricted media. Record standards provenance in
11
+ `references/standards/manifest.json` and fixture provenance in
12
+ `references/fixtures.json`.
13
+ - Base behavior on the exact published standard edition. Cite the requirement,
14
+ section, table, or official vector in the test or requirement trace.
15
+ - Preserve unknown wire data losslessly. Typed encoders must reject unaudited
16
+ values unless the public API requires an explicit raw-value wrapper.
17
+ - Keep live processing bounded: additions need explicit limits, backpressure,
18
+ discontinuity behavior, and tests across arbitrary chunk boundaries.
19
+ - Keep the core package pure Python with no runtime dependencies. Optional
20
+ codec, inference, GIS, and UI integrations belong behind extras or adapters.
21
+
22
+ ## Development workflow
23
+
24
+ Create a short-lived branch from `main` using one of these forms:
25
+
26
+ - `feat/<short-description>` for a new capability
27
+ - `fix/<short-description>` for a bug correction
28
+ - `docs/<short-description>` for documentation only
29
+ - `test/<short-description>` for test infrastructure or coverage
30
+ - `refactor/<short-description>` for behavior-preserving restructuring
31
+ - `perf/<short-description>` for measured performance work
32
+ - `chore/<short-description>` for maintenance
33
+
34
+ Use lowercase kebab-case after the slash, for example
35
+ `feat/live-vmti-injection` or `fix/pes-discontinuity`.
36
+
37
+ Follow Conventional Commits for commit and pull-request titles:
38
+
39
+ ```text
40
+ <type>(optional-scope): <imperative summary>
41
+ ```
42
+
43
+ Allowed types are `feat`, `fix`, `docs`, `test`, `refactor`, `perf`, `build`,
44
+ `ci`, and `chore`. Useful scopes include `klv`, `st0601`, `st0903`,
45
+ `transport`, `audio`, `ui`, and `docs`. Use `fix`, rather than `bug`, as the
46
+ type for bug corrections. Mark an intentional breaking API or wire-behavior
47
+ change with `!` and explain it in the commit body.
48
+
49
+ Keep commits focused and independently understandable. Do not mix formatting,
50
+ generated artifacts, or unrelated cleanup into a protocol change.
51
+
52
+ ## Test-driven protocol changes
53
+
54
+ 1. Add or update the edition-specific requirement trace under
55
+ `docs/requirements/`.
56
+ 2. Add a failing normative, boundary, malformed-input, or integration test.
57
+ 3. Implement the smallest coherent bounded behavior.
58
+ 4. Verify lossless round trips and live chunk boundaries where relevant.
59
+ 5. Run every quality gate before requesting review.
60
+
61
+ ```console
62
+ ruff check .
63
+ mypy src
64
+ pytest --cov=stanag4609 --cov-branch --cov-report=term-missing
65
+ python -m build
66
+ ```
67
+
68
+ The test suite requires at least 90% branch coverage, but protocol-critical
69
+ paths should be covered beyond that repository-wide floor.
70
+
71
+ Documentation changes also run a strict static-site build:
72
+
73
+ ```console
74
+ python -m pip install -e '.[docs]'
75
+ mkdocs build --strict
76
+ ```
77
+
78
+ API pages use `mkdocstrings` directives and resolve source modules from `src/`.
79
+ Keep user-facing symbols documented with type-complete docstrings; the strict
80
+ build must resolve every directive before a documentation change is accepted.
81
+
82
+ Examples must call real public APIs and either run in tests or name their
83
+ reproducible verification procedure. Clearly distinguish implemented,
84
+ experimental, and planned integrations; never imply vendor certification.
85
+
86
+ ## Pull requests
87
+
88
+ The PR title follows the same Conventional Commit form and becomes the squash
89
+ commit subject. A PR description must include:
90
+
91
+ - **Why:** the user or interoperability problem being solved.
92
+ - **Standard basis:** exact editions and requirement/table/vector references.
93
+ - **What changed:** public API, wire behavior, limits, and error behavior.
94
+ - **Verification:** tests added and the quality-gate results.
95
+ - **Compatibility:** effects on API, transport streams, timing, audio/video
96
+ passthrough, and unknown KLV preservation.
97
+ - **Risk and rollback:** known risks, limitations, and the safe revert point.
98
+
99
+ Use the repository PR template and remove no checklist item without explaining
100
+ why it does not apply. Keep draft PRs out of conformance tables; only merged,
101
+ tested behavior may be listed as implemented.
102
+
103
+ Reviewers should trace claims back to official standards, look for unbounded
104
+ allocation or latency, verify malformed-stream behavior, and confirm that no
105
+ third-party implementation was copied. At least one approval and passing CI are
106
+ expected before merging once repository protections are enabled.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 stanag4609 contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.