@photivra/engine 0.6.0 → 1.0.0

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 (749) hide show
  1. package/AGENTS.md +674 -0
  2. package/CHANGELOG.md +186 -0
  3. package/CITATION.cff +1 -1
  4. package/CONTRIBUTING.md +76 -0
  5. package/DCO +33 -0
  6. package/NODE_SUPPORT.md +37 -0
  7. package/NOTICE +2 -0
  8. package/README.md +138 -71
  9. package/SECURITY.md +55 -0
  10. package/THIRD_PARTY.md +63 -0
  11. package/dist/camera/equivalent-focal-length.d.ts +9 -0
  12. package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
  13. package/dist/camera/equivalent-focal-length.js +9 -0
  14. package/dist/camera/equivalent-focal-length.js.map +1 -1
  15. package/dist/camera/field-of-view.d.ts +13 -0
  16. package/dist/camera/field-of-view.d.ts.map +1 -1
  17. package/dist/camera/field-of-view.js +13 -0
  18. package/dist/camera/field-of-view.js.map +1 -1
  19. package/dist/camera/projected-object-size.d.ts +8 -0
  20. package/dist/camera/projected-object-size.d.ts.map +1 -1
  21. package/dist/camera/projected-object-size.js +8 -0
  22. package/dist/camera/projected-object-size.js.map +1 -1
  23. package/dist/capture/capture-export-metadata.d.ts +60 -0
  24. package/dist/capture/capture-export-metadata.d.ts.map +1 -0
  25. package/dist/capture/capture-export-metadata.js +62 -0
  26. package/dist/capture/capture-export-metadata.js.map +1 -0
  27. package/dist/capture/environment-raw-producer.d.ts +55 -0
  28. package/dist/capture/environment-raw-producer.d.ts.map +1 -0
  29. package/dist/capture/environment-raw-producer.js +88 -0
  30. package/dist/capture/environment-raw-producer.js.map +1 -0
  31. package/dist/capture/export-jpeg.d.ts +12 -0
  32. package/dist/capture/export-jpeg.d.ts.map +1 -0
  33. package/dist/capture/export-jpeg.js +126 -0
  34. package/dist/capture/export-jpeg.js.map +1 -0
  35. package/dist/capture/export-tiff.d.ts +45 -0
  36. package/dist/capture/export-tiff.d.ts.map +1 -0
  37. package/dist/capture/export-tiff.js +129 -0
  38. package/dist/capture/export-tiff.js.map +1 -0
  39. package/dist/capture/focus-control.d.ts +210 -0
  40. package/dist/capture/focus-control.d.ts.map +1 -0
  41. package/dist/capture/focus-control.js +664 -0
  42. package/dist/capture/focus-control.js.map +1 -0
  43. package/dist/capture/linear-encoding.d.ts +59 -0
  44. package/dist/capture/linear-encoding.d.ts.map +1 -0
  45. package/dist/capture/linear-encoding.js +98 -0
  46. package/dist/capture/linear-encoding.js.map +1 -0
  47. package/dist/capture/photographic-export.d.ts +135 -0
  48. package/dist/capture/photographic-export.d.ts.map +1 -0
  49. package/dist/capture/photographic-export.js +273 -0
  50. package/dist/capture/photographic-export.js.map +1 -0
  51. package/dist/capture/raw-frame-limits.d.ts +12 -0
  52. package/dist/capture/raw-frame-limits.d.ts.map +1 -0
  53. package/dist/capture/raw-frame-limits.js +13 -0
  54. package/dist/capture/raw-frame-limits.js.map +1 -0
  55. package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
  56. package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
  57. package/dist/capture/raw-frame-reconstruction.js +146 -0
  58. package/dist/capture/raw-frame-reconstruction.js.map +1 -0
  59. package/dist/capture/release-sequence.d.ts +120 -0
  60. package/dist/capture/release-sequence.d.ts.map +1 -0
  61. package/dist/capture/release-sequence.js +446 -0
  62. package/dist/capture/release-sequence.js.map +1 -0
  63. package/dist/capture/sensor-raw-frame.d.ts +34 -0
  64. package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
  65. package/dist/capture/sensor-raw-frame.js +106 -0
  66. package/dist/capture/sensor-raw-frame.js.map +1 -0
  67. package/dist/capture/sensor-raw-producer.d.ts +51 -0
  68. package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
  69. package/dist/capture/sensor-raw-producer.js +235 -0
  70. package/dist/capture/sensor-raw-producer.js.map +1 -0
  71. package/dist/capture/simulated-capture.d.ts +125 -0
  72. package/dist/capture/simulated-capture.d.ts.map +1 -0
  73. package/dist/capture/simulated-capture.js +248 -0
  74. package/dist/capture/simulated-capture.js.map +1 -0
  75. package/dist/color/capture-color.d.ts +73 -0
  76. package/dist/color/capture-color.d.ts.map +1 -0
  77. package/dist/color/capture-color.js +145 -0
  78. package/dist/color/capture-color.js.map +1 -0
  79. package/dist/color/sensor-color-development.d.ts +23 -0
  80. package/dist/color/sensor-color-development.d.ts.map +1 -0
  81. package/dist/color/sensor-color-development.js +56 -0
  82. package/dist/color/sensor-color-development.js.map +1 -0
  83. package/dist/color/white-balance.d.ts +175 -0
  84. package/dist/color/white-balance.d.ts.map +1 -0
  85. package/dist/color/white-balance.js +606 -0
  86. package/dist/color/white-balance.js.map +1 -0
  87. package/dist/composition/image-formation-plan.d.ts +481 -0
  88. package/dist/composition/image-formation-plan.d.ts.map +1 -0
  89. package/dist/composition/image-formation-plan.js +2499 -0
  90. package/dist/composition/image-formation-plan.js.map +1 -0
  91. package/dist/composition/plan-consumer.d.ts +53 -0
  92. package/dist/composition/plan-consumer.d.ts.map +1 -0
  93. package/dist/composition/plan-consumer.js +119 -0
  94. package/dist/composition/plan-consumer.js.map +1 -0
  95. package/dist/core/calculation-result.d.ts.map +1 -1
  96. package/dist/core/calculation-result.js +6 -0
  97. package/dist/core/calculation-result.js.map +1 -1
  98. package/dist/core/canonical-json.d.ts +18 -0
  99. package/dist/core/canonical-json.d.ts.map +1 -0
  100. package/dist/core/canonical-json.js +44 -0
  101. package/dist/core/canonical-json.js.map +1 -0
  102. package/dist/core/configuration-error.d.ts +6 -0
  103. package/dist/core/configuration-error.d.ts.map +1 -1
  104. package/dist/core/configuration-error.js +6 -0
  105. package/dist/core/configuration-error.js.map +1 -1
  106. package/dist/core/evidence-provenance.d.ts +6 -0
  107. package/dist/core/evidence-provenance.d.ts.map +1 -1
  108. package/dist/core/evidence-provenance.js +7 -0
  109. package/dist/core/evidence-provenance.js.map +1 -1
  110. package/dist/core/image-formation.d.ts +9 -3
  111. package/dist/core/image-formation.d.ts.map +1 -1
  112. package/dist/core/image-formation.js +29 -5
  113. package/dist/core/image-formation.js.map +1 -1
  114. package/dist/core/owned-data.d.ts +25 -0
  115. package/dist/core/owned-data.d.ts.map +1 -0
  116. package/dist/core/owned-data.js +34 -0
  117. package/dist/core/owned-data.js.map +1 -0
  118. package/dist/core/record-validation.d.ts +17 -0
  119. package/dist/core/record-validation.d.ts.map +1 -0
  120. package/dist/core/record-validation.js +44 -0
  121. package/dist/core/record-validation.js.map +1 -0
  122. package/dist/core/scientific-assurance.d.ts +101 -0
  123. package/dist/core/scientific-assurance.d.ts.map +1 -0
  124. package/dist/core/scientific-assurance.js +301 -0
  125. package/dist/core/scientific-assurance.js.map +1 -0
  126. package/dist/core/spectral-composition.d.ts +106 -0
  127. package/dist/core/spectral-composition.d.ts.map +1 -0
  128. package/dist/core/spectral-composition.js +334 -0
  129. package/dist/core/spectral-composition.js.map +1 -0
  130. package/dist/core/spectral.d.ts +34 -0
  131. package/dist/core/spectral.d.ts.map +1 -0
  132. package/dist/core/spectral.js +57 -0
  133. package/dist/core/spectral.js.map +1 -0
  134. package/dist/core/validation.d.ts +6 -0
  135. package/dist/core/validation.d.ts.map +1 -1
  136. package/dist/core/validation.js +6 -0
  137. package/dist/core/validation.js.map +1 -1
  138. package/dist/core/version.d.ts +14 -0
  139. package/dist/core/version.d.ts.map +1 -0
  140. package/dist/core/version.js +15 -0
  141. package/dist/core/version.js.map +1 -0
  142. package/dist/equipment/exposure-capabilities.d.ts +125 -0
  143. package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
  144. package/dist/equipment/exposure-capabilities.js +391 -0
  145. package/dist/equipment/exposure-capabilities.js.map +1 -0
  146. package/dist/equipment/generic-tier-assets.d.ts +82 -0
  147. package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
  148. package/dist/equipment/generic-tier-assets.js +119 -0
  149. package/dist/equipment/generic-tier-assets.js.map +1 -0
  150. package/dist/equipment/generic-tier-presets.d.ts +57 -0
  151. package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
  152. package/dist/equipment/generic-tier-presets.js +122 -0
  153. package/dist/equipment/generic-tier-presets.js.map +1 -0
  154. package/dist/equipment/iso-capabilities.d.ts +143 -0
  155. package/dist/equipment/iso-capabilities.d.ts.map +1 -0
  156. package/dist/equipment/iso-capabilities.js +578 -0
  157. package/dist/equipment/iso-capabilities.js.map +1 -0
  158. package/dist/equipment/metering-capabilities.d.ts +58 -0
  159. package/dist/equipment/metering-capabilities.d.ts.map +1 -0
  160. package/dist/equipment/metering-capabilities.js +151 -0
  161. package/dist/equipment/metering-capabilities.js.map +1 -0
  162. package/dist/equipment/release-capabilities.d.ts +33 -0
  163. package/dist/equipment/release-capabilities.d.ts.map +1 -0
  164. package/dist/equipment/release-capabilities.js +176 -0
  165. package/dist/equipment/release-capabilities.js.map +1 -0
  166. package/dist/exposure/exposure-duration-control.d.ts +72 -0
  167. package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
  168. package/dist/exposure/exposure-duration-control.js +161 -0
  169. package/dist/exposure/exposure-duration-control.js.map +1 -0
  170. package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
  171. package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
  172. package/dist/exposure/exposure-mode-resolver.js +1905 -0
  173. package/dist/exposure/exposure-mode-resolver.js.map +1 -0
  174. package/dist/exposure/exposure.d.ts +8 -0
  175. package/dist/exposure/exposure.d.ts.map +1 -1
  176. package/dist/exposure/exposure.js +8 -0
  177. package/dist/exposure/exposure.js.map +1 -1
  178. package/dist/exposure/flash.d.ts +179 -0
  179. package/dist/exposure/flash.d.ts.map +1 -0
  180. package/dist/exposure/flash.js +644 -0
  181. package/dist/exposure/flash.js.map +1 -0
  182. package/dist/exposure/metering-scene-radiance.d.ts +72 -0
  183. package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
  184. package/dist/exposure/metering-scene-radiance.js +222 -0
  185. package/dist/exposure/metering-scene-radiance.js.map +1 -0
  186. package/dist/exposure/metering-target.d.ts +67 -0
  187. package/dist/exposure/metering-target.d.ts.map +1 -0
  188. package/dist/exposure/metering-target.js +265 -0
  189. package/dist/exposure/metering-target.js.map +1 -0
  190. package/dist/exposure/metering-temporal.d.ts +76 -0
  191. package/dist/exposure/metering-temporal.d.ts.map +1 -0
  192. package/dist/exposure/metering-temporal.js +210 -0
  193. package/dist/exposure/metering-temporal.js.map +1 -0
  194. package/dist/exposure/metering.d.ts +124 -0
  195. package/dist/exposure/metering.d.ts.map +1 -0
  196. package/dist/exposure/metering.js +422 -0
  197. package/dist/exposure/metering.js.map +1 -0
  198. package/dist/exposure/program-line.d.ts +29 -0
  199. package/dist/exposure/program-line.d.ts.map +1 -0
  200. package/dist/exposure/program-line.js +126 -0
  201. package/dist/exposure/program-line.js.map +1 -0
  202. package/dist/index.d.ts +87 -6
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +85 -6
  205. package/dist/index.js.map +1 -1
  206. package/dist/motion/camera-rotation.d.ts +16 -0
  207. package/dist/motion/camera-rotation.d.ts.map +1 -1
  208. package/dist/motion/camera-rotation.js +16 -0
  209. package/dist/motion/camera-rotation.js.map +1 -1
  210. package/dist/motion/capture-rotation-inverse-mapping.d.ts +13 -0
  211. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -1
  212. package/dist/motion/capture-rotation-inverse-mapping.js +13 -0
  213. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  214. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +15 -0
  215. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -1
  216. package/dist/motion/capture-rotation-temporal-quadrature.js +15 -0
  217. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  218. package/dist/motion/capture-rotation-trajectory.d.ts +15 -0
  219. package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -1
  220. package/dist/motion/capture-rotation-trajectory.js +15 -0
  221. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  222. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
  223. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
  224. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
  225. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
  226. package/dist/motion/extended-object-projection.d.ts +175 -0
  227. package/dist/motion/extended-object-projection.d.ts.map +1 -0
  228. package/dist/motion/extended-object-projection.js +402 -0
  229. package/dist/motion/extended-object-projection.js.map +1 -0
  230. package/dist/motion/projected-motion.d.ts +11 -0
  231. package/dist/motion/projected-motion.d.ts.map +1 -1
  232. package/dist/motion/projected-motion.js +11 -0
  233. package/dist/motion/projected-motion.js.map +1 -1
  234. package/dist/optics/aperture.d.ts +9 -0
  235. package/dist/optics/aperture.d.ts.map +1 -1
  236. package/dist/optics/aperture.js +9 -0
  237. package/dist/optics/aperture.js.map +1 -1
  238. package/dist/optics/circle-of-confusion.d.ts +8 -0
  239. package/dist/optics/circle-of-confusion.d.ts.map +1 -1
  240. package/dist/optics/circle-of-confusion.js +8 -0
  241. package/dist/optics/circle-of-confusion.js.map +1 -1
  242. package/dist/optics/complex-pupil-psf.d.ts +128 -0
  243. package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
  244. package/dist/optics/complex-pupil-psf.js +462 -0
  245. package/dist/optics/complex-pupil-psf.js.map +1 -0
  246. package/dist/optics/depth-of-field.d.ts +18 -0
  247. package/dist/optics/depth-of-field.d.ts.map +1 -1
  248. package/dist/optics/depth-of-field.js +29 -4
  249. package/dist/optics/depth-of-field.js.map +1 -1
  250. package/dist/optics/diffraction.d.ts +8 -0
  251. package/dist/optics/diffraction.d.ts.map +1 -1
  252. package/dist/optics/diffraction.js +8 -0
  253. package/dist/optics/diffraction.js.map +1 -1
  254. package/dist/optics/focus-breathing.d.ts +13 -0
  255. package/dist/optics/focus-breathing.d.ts.map +1 -1
  256. package/dist/optics/focus-breathing.js +13 -0
  257. package/dist/optics/focus-breathing.js.map +1 -1
  258. package/dist/optics/focus-state.d.ts +47 -0
  259. package/dist/optics/focus-state.d.ts.map +1 -0
  260. package/dist/optics/focus-state.js +78 -0
  261. package/dist/optics/focus-state.js.map +1 -0
  262. package/dist/optics/front-of-lens-filter.d.ts +114 -0
  263. package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
  264. package/dist/optics/front-of-lens-filter.js +468 -0
  265. package/dist/optics/front-of-lens-filter.js.map +1 -0
  266. package/dist/optics/illumination-vignetting.d.ts +9 -0
  267. package/dist/optics/illumination-vignetting.d.ts.map +1 -1
  268. package/dist/optics/illumination-vignetting.js +9 -0
  269. package/dist/optics/illumination-vignetting.js.map +1 -1
  270. package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
  271. package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
  272. package/dist/optics/lateral-chromatic-aberration.js +11 -0
  273. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  274. package/dist/optics/lens-psf-profile.d.ts +217 -0
  275. package/dist/optics/lens-psf-profile.d.ts.map +1 -0
  276. package/dist/optics/lens-psf-profile.js +823 -0
  277. package/dist/optics/lens-psf-profile.js.map +1 -0
  278. package/dist/optics/polygon-diffraction.d.ts +67 -0
  279. package/dist/optics/polygon-diffraction.d.ts.map +1 -0
  280. package/dist/optics/polygon-diffraction.js +145 -0
  281. package/dist/optics/polygon-diffraction.js.map +1 -0
  282. package/dist/optics/profile-contract.d.ts +42 -0
  283. package/dist/optics/profile-contract.d.ts.map +1 -0
  284. package/dist/optics/profile-contract.js +92 -0
  285. package/dist/optics/profile-contract.js.map +1 -0
  286. package/dist/optics/psf-foundation.d.ts +16 -3
  287. package/dist/optics/psf-foundation.d.ts.map +1 -1
  288. package/dist/optics/psf-foundation.js +28 -15
  289. package/dist/optics/psf-foundation.js.map +1 -1
  290. package/dist/optics/radial-distortion.d.ts +18 -0
  291. package/dist/optics/radial-distortion.d.ts.map +1 -1
  292. package/dist/optics/radial-distortion.js +18 -0
  293. package/dist/optics/radial-distortion.js.map +1 -1
  294. package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
  295. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
  296. package/dist/optics/scene-to-sensor-irradiance.js +662 -0
  297. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
  298. package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
  299. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
  300. package/dist/optics/scene-to-sensor-quadrature.js +82 -0
  301. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
  302. package/dist/optics/sensor-environment-query.d.ts +60 -0
  303. package/dist/optics/sensor-environment-query.d.ts.map +1 -0
  304. package/dist/optics/sensor-environment-query.js +50 -0
  305. package/dist/optics/sensor-environment-query.js.map +1 -0
  306. package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
  307. package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
  308. package/dist/optics/sensor-psf-quadrature.js +101 -0
  309. package/dist/optics/sensor-psf-quadrature.js.map +1 -0
  310. package/dist/optics/sensor-psf-support.d.ts +20 -0
  311. package/dist/optics/sensor-psf-support.d.ts.map +1 -0
  312. package/dist/optics/sensor-psf-support.js +13 -0
  313. package/dist/optics/sensor-psf-support.js.map +1 -0
  314. package/dist/optics/stray-light.d.ts +91 -0
  315. package/dist/optics/stray-light.d.ts.map +1 -0
  316. package/dist/optics/stray-light.js +110 -0
  317. package/dist/optics/stray-light.js.map +1 -0
  318. package/dist/optics/thin-lens.d.ts +8 -0
  319. package/dist/optics/thin-lens.d.ts.map +1 -1
  320. package/dist/optics/thin-lens.js +8 -0
  321. package/dist/optics/thin-lens.js.map +1 -1
  322. package/dist/output/capture-corrected-sdr.d.ts +49 -0
  323. package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
  324. package/dist/output/capture-corrected-sdr.js +149 -0
  325. package/dist/output/capture-corrected-sdr.js.map +1 -0
  326. package/dist/output/capture-geometry.d.ts.map +1 -1
  327. package/dist/output/capture-geometry.js +8 -0
  328. package/dist/output/capture-geometry.js.map +1 -1
  329. package/dist/output/capture-sdr.d.ts +49 -0
  330. package/dist/output/capture-sdr.d.ts.map +1 -0
  331. package/dist/output/capture-sdr.js +90 -0
  332. package/dist/output/capture-sdr.js.map +1 -0
  333. package/dist/output/crop.d.ts +6 -0
  334. package/dist/output/crop.d.ts.map +1 -1
  335. package/dist/output/crop.js +6 -0
  336. package/dist/output/crop.js.map +1 -1
  337. package/dist/output/geometric-transforms.d.ts +137 -0
  338. package/dist/output/geometric-transforms.d.ts.map +1 -0
  339. package/dist/output/geometric-transforms.js +225 -0
  340. package/dist/output/geometric-transforms.js.map +1 -0
  341. package/dist/output/lens-corrections.d.ts +121 -0
  342. package/dist/output/lens-corrections.d.ts.map +1 -0
  343. package/dist/output/lens-corrections.js +210 -0
  344. package/dist/output/lens-corrections.js.map +1 -0
  345. package/dist/output/sdr-rendering.d.ts +81 -0
  346. package/dist/output/sdr-rendering.d.ts.map +1 -0
  347. package/dist/output/sdr-rendering.js +106 -0
  348. package/dist/output/sdr-rendering.js.map +1 -0
  349. package/dist/output/subject-framing-crop.d.ts +8 -0
  350. package/dist/output/subject-framing-crop.d.ts.map +1 -1
  351. package/dist/output/subject-framing-crop.js +8 -0
  352. package/dist/output/subject-framing-crop.js.map +1 -1
  353. package/dist/schema/camera.d.ts +6 -0
  354. package/dist/schema/camera.d.ts.map +1 -1
  355. package/dist/schema/illumination-spectral.d.ts +51 -0
  356. package/dist/schema/illumination-spectral.d.ts.map +1 -0
  357. package/dist/schema/illumination-spectral.js +132 -0
  358. package/dist/schema/illumination-spectral.js.map +1 -0
  359. package/dist/schema/illumination-temporal.d.ts +156 -0
  360. package/dist/schema/illumination-temporal.d.ts.map +1 -0
  361. package/dist/schema/illumination-temporal.js +554 -0
  362. package/dist/schema/illumination-temporal.js.map +1 -0
  363. package/dist/schema/illumination.d.ts +138 -0
  364. package/dist/schema/illumination.d.ts.map +1 -0
  365. package/dist/schema/illumination.js +483 -0
  366. package/dist/schema/illumination.js.map +1 -0
  367. package/dist/schema/scene-radiance-temporal.d.ts +107 -0
  368. package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
  369. package/dist/schema/scene-radiance-temporal.js +259 -0
  370. package/dist/schema/scene-radiance-temporal.js.map +1 -0
  371. package/dist/schema/scene-radiance.d.ts +185 -0
  372. package/dist/schema/scene-radiance.d.ts.map +1 -0
  373. package/dist/schema/scene-radiance.js +535 -0
  374. package/dist/schema/scene-radiance.js.map +1 -0
  375. package/dist/schema/scene.d.ts +7 -0
  376. package/dist/schema/scene.d.ts.map +1 -1
  377. package/dist/schema/validation.d.ts.map +1 -1
  378. package/dist/schema/validation.js +7 -0
  379. package/dist/schema/validation.js.map +1 -1
  380. package/dist/sensor/accumulated-charge.d.ts +199 -0
  381. package/dist/sensor/accumulated-charge.d.ts.map +1 -0
  382. package/dist/sensor/accumulated-charge.js +450 -0
  383. package/dist/sensor/accumulated-charge.js.map +1 -0
  384. package/dist/sensor/architecture.d.ts +48 -13
  385. package/dist/sensor/architecture.d.ts.map +1 -1
  386. package/dist/sensor/architecture.js +58 -16
  387. package/dist/sensor/architecture.js.map +1 -1
  388. package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
  389. package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
  390. package/dist/sensor/camera-saturation-capacity.js +356 -0
  391. package/dist/sensor/camera-saturation-capacity.js.map +1 -0
  392. package/dist/sensor/capture-color-sampling-binding.d.ts +1 -0
  393. package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -1
  394. package/dist/sensor/capture-color-sampling-binding.js +14 -0
  395. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  396. package/dist/sensor/capture-mode-timing.d.ts +63 -0
  397. package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
  398. package/dist/sensor/capture-mode-timing.js +270 -0
  399. package/dist/sensor/capture-mode-timing.js.map +1 -0
  400. package/dist/sensor/capture-mode.d.ts.map +1 -1
  401. package/dist/sensor/capture-mode.js +13 -0
  402. package/dist/sensor/capture-mode.js.map +1 -1
  403. package/dist/sensor/color-sampling.d.ts.map +1 -1
  404. package/dist/sensor/color-sampling.js +19 -0
  405. package/dist/sensor/color-sampling.js.map +1 -1
  406. package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
  407. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
  408. package/dist/sensor/constant-rate-temporal-integration.js +382 -0
  409. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
  410. package/dist/sensor/dark-current.d.ts +169 -0
  411. package/dist/sensor/dark-current.d.ts.map +1 -0
  412. package/dist/sensor/dark-current.js +427 -0
  413. package/dist/sensor/dark-current.js.map +1 -0
  414. package/dist/sensor/environment-photo-signal.d.ts +123 -0
  415. package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
  416. package/dist/sensor/environment-photo-signal.js +186 -0
  417. package/dist/sensor/environment-photo-signal.js.map +1 -0
  418. package/dist/sensor/eqe-electron-rate.d.ts +107 -0
  419. package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
  420. package/dist/sensor/eqe-electron-rate.js +561 -0
  421. package/dist/sensor/eqe-electron-rate.js.map +1 -0
  422. package/dist/sensor/eqe-local-exposure.d.ts +65 -0
  423. package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
  424. package/dist/sensor/eqe-local-exposure.js +84 -0
  425. package/dist/sensor/eqe-local-exposure.js.map +1 -0
  426. package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
  427. package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
  428. package/dist/sensor/eqe-temporal-exposure.js +62 -0
  429. package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
  430. package/dist/sensor/exposure-window.d.ts +14 -0
  431. package/dist/sensor/exposure-window.d.ts.map +1 -1
  432. package/dist/sensor/exposure-window.js +14 -0
  433. package/dist/sensor/exposure-window.js.map +1 -1
  434. package/dist/sensor/iso-signal-chain.d.ts +148 -0
  435. package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
  436. package/dist/sensor/iso-signal-chain.js +411 -0
  437. package/dist/sensor/iso-signal-chain.js.map +1 -0
  438. package/dist/sensor/local-exposure-binding.d.ts +87 -0
  439. package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
  440. package/dist/sensor/local-exposure-binding.js +214 -0
  441. package/dist/sensor/local-exposure-binding.js.map +1 -0
  442. package/dist/sensor/optical-stack.d.ts.map +1 -1
  443. package/dist/sensor/optical-stack.js +17 -0
  444. package/dist/sensor/optical-stack.js.map +1 -1
  445. package/dist/sensor/photon-energy.d.ts +97 -0
  446. package/dist/sensor/photon-energy.d.ts.map +1 -0
  447. package/dist/sensor/photon-energy.js +390 -0
  448. package/dist/sensor/photon-energy.js.map +1 -0
  449. package/dist/sensor/physical-charge-capacity.d.ts +130 -0
  450. package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
  451. package/dist/sensor/physical-charge-capacity.js +345 -0
  452. package/dist/sensor/physical-charge-capacity.js.map +1 -0
  453. package/dist/sensor/pixel-pitch.d.ts +6 -0
  454. package/dist/sensor/pixel-pitch.d.ts.map +1 -1
  455. package/dist/sensor/pixel-pitch.js +6 -0
  456. package/dist/sensor/pixel-pitch.js.map +1 -1
  457. package/dist/sensor/radiometry-readiness.d.ts +10 -0
  458. package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
  459. package/dist/sensor/radiometry-readiness.js +10 -0
  460. package/dist/sensor/radiometry-readiness.js.map +1 -1
  461. package/dist/sensor/raw-readout.d.ts +314 -0
  462. package/dist/sensor/raw-readout.d.ts.map +1 -0
  463. package/dist/sensor/raw-readout.js +914 -0
  464. package/dist/sensor/raw-readout.js.map +1 -0
  465. package/dist/sensor/raw-reconstruction.d.ts +170 -0
  466. package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
  467. package/dist/sensor/raw-reconstruction.js +424 -0
  468. package/dist/sensor/raw-reconstruction.js.map +1 -0
  469. package/dist/sensor/readout-exposure-linkage.d.ts +12 -0
  470. package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -1
  471. package/dist/sensor/readout-exposure-linkage.js +12 -0
  472. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  473. package/dist/sensor/readout-timing.d.ts +13 -0
  474. package/dist/sensor/readout-timing.d.ts.map +1 -1
  475. package/dist/sensor/readout-timing.js +13 -0
  476. package/dist/sensor/readout-timing.js.map +1 -1
  477. package/dist/sensor/response-application-compatibility.d.ts +136 -0
  478. package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
  479. package/dist/sensor/response-application-compatibility.js +408 -0
  480. package/dist/sensor/response-application-compatibility.js.map +1 -0
  481. package/dist/sensor/response-operating-range.d.ts +173 -0
  482. package/dist/sensor/response-operating-range.d.ts.map +1 -0
  483. package/dist/sensor/response-operating-range.js +672 -0
  484. package/dist/sensor/response-operating-range.js.map +1 -0
  485. package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
  486. package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
  487. package/dist/sensor/responsivity-photocurrent.js +644 -0
  488. package/dist/sensor/responsivity-photocurrent.js.map +1 -0
  489. package/dist/sensor/sampling-aperture.d.ts.map +1 -1
  490. package/dist/sensor/sampling-aperture.js +14 -0
  491. package/dist/sensor/sampling-aperture.js.map +1 -1
  492. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
  493. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
  494. package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
  495. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
  496. package/dist/sensor/sensor-geometry.d.ts +12 -0
  497. package/dist/sensor/sensor-geometry.d.ts.map +1 -1
  498. package/dist/sensor/sensor-geometry.js +12 -0
  499. package/dist/sensor/sensor-geometry.js.map +1 -1
  500. package/dist/sensor/signal-noise.d.ts +10 -0
  501. package/dist/sensor/signal-noise.d.ts.map +1 -1
  502. package/dist/sensor/signal-noise.js +10 -0
  503. package/dist/sensor/signal-noise.js.map +1 -1
  504. package/dist/sensor/spatial-sample-reduction.d.ts +44 -1
  505. package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -1
  506. package/dist/sensor/spatial-sample-reduction.js +51 -5
  507. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  508. package/dist/sensor/spatial-sampling-quadrature.d.ts +24 -0
  509. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -1
  510. package/dist/sensor/spatial-sampling-quadrature.js +27 -0
  511. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  512. package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
  513. package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
  514. package/dist/sensor/spatio-spectral-reduction.js +373 -0
  515. package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
  516. package/dist/sensor/spectral-coverage.d.ts +24 -0
  517. package/dist/sensor/spectral-coverage.d.ts.map +1 -0
  518. package/dist/sensor/spectral-coverage.js +86 -0
  519. package/dist/sensor/spectral-coverage.js.map +1 -0
  520. package/dist/sensor/spectral-quadrature.d.ts +169 -0
  521. package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
  522. package/dist/sensor/spectral-quadrature.js +542 -0
  523. package/dist/sensor/spectral-quadrature.js.map +1 -0
  524. package/dist/sensor/spectral-response.d.ts +192 -0
  525. package/dist/sensor/spectral-response.d.ts.map +1 -0
  526. package/dist/sensor/spectral-response.js +664 -0
  527. package/dist/sensor/spectral-response.js.map +1 -0
  528. package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
  529. package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
  530. package/dist/sensor/temporal-eqe-sum.js +30 -0
  531. package/dist/sensor/temporal-eqe-sum.js.map +1 -0
  532. package/dist/sensor/temporal-photo-signal.d.ts +38 -0
  533. package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
  534. package/dist/sensor/temporal-photo-signal.js +110 -0
  535. package/dist/sensor/temporal-photo-signal.js.map +1 -0
  536. package/dist/sensor/temporal-sample-binding.d.ts +6 -0
  537. package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
  538. package/dist/sensor/temporal-sample-binding.js +32 -0
  539. package/dist/sensor/temporal-sample-binding.js.map +1 -0
  540. package/dist/simulation/poc-simulation.d.ts.map +1 -1
  541. package/dist/simulation/poc-simulation.js +34 -11
  542. package/dist/simulation/poc-simulation.js.map +1 -1
  543. package/dist/stabilization/camera-shake.d.ts +11 -0
  544. package/dist/stabilization/camera-shake.d.ts.map +1 -1
  545. package/dist/stabilization/camera-shake.js +11 -0
  546. package/dist/stabilization/camera-shake.js.map +1 -1
  547. package/dist/stabilization/system.d.ts +218 -0
  548. package/dist/stabilization/system.d.ts.map +1 -0
  549. package/dist/stabilization/system.js +695 -0
  550. package/dist/stabilization/system.js.map +1 -0
  551. package/docs/API_REFERENCE.md +2017 -0
  552. package/docs/API_STYLE.md +132 -0
  553. package/docs/ARCHITECTURE.md +134 -24
  554. package/docs/AUTOMATION_COORDINATION.md +2 -0
  555. package/docs/CAPTURE_COLOR.md +25 -0
  556. package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
  557. package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
  558. package/docs/CAPTURE_SDR.md +20 -0
  559. package/docs/DEVELOPERS.md +60 -0
  560. package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
  561. package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
  562. package/docs/EXPORT_ACCEPTANCE.md +133 -0
  563. package/docs/GENERIC_TIER_PRESETS.md +269 -0
  564. package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
  565. package/docs/IMAGE_FORMATION.md +80 -10
  566. package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
  567. package/docs/MOTION_AND_SIGNAL.md +5 -3
  568. package/docs/NUMERICAL_CORRECTNESS.md +191 -0
  569. package/docs/PERFORMANCE_BASELINE.md +56 -0
  570. package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
  571. package/docs/PHYSICS_FOUNDATION.md +152 -5
  572. package/docs/POC_API.md +2 -0
  573. package/docs/POC_PROJECTION_REUSE.md +124 -0
  574. package/docs/PROCESSED_OUTPUT.md +157 -0
  575. package/docs/PRODUCTION_COMPOSITION.md +373 -0
  576. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
  577. package/docs/PROVENANCE.md +4 -0
  578. package/docs/PSF_FOUNDATION.md +110 -88
  579. package/docs/RAW_FRAME_ENVELOPE.md +56 -0
  580. package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
  581. package/docs/RELEASE_1_0.md +65 -0
  582. package/docs/RELEASE_AUDIT.md +38 -0
  583. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
  584. package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
  585. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
  586. package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
  587. package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
  588. package/docs/SDR_RENDERING.md +33 -0
  589. package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
  590. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
  591. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
  592. package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
  593. package/docs/SENSOR_RAW_FRAME.md +20 -0
  594. package/docs/SENSOR_RAW_PRODUCER.md +77 -0
  595. package/docs/SIGNAL_CONFORMANCE.md +23 -0
  596. package/docs/SIMULATED_CAPTURE.md +65 -0
  597. package/docs/STABILIZATION.md +160 -17
  598. package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
  599. package/docs/TIER_ACCEPTANCE.md +129 -0
  600. package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
  601. package/docs/USAGE.md +5050 -1047
  602. package/docs/V1_COMPOSITION_MAP.md +123 -0
  603. package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
  604. package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
  605. package/docs/api/camera-equivalent-focal-length.md +53 -0
  606. package/docs/api/camera-field-of-view.md +119 -0
  607. package/docs/api/camera-projected-object-size.md +54 -0
  608. package/docs/api/capture-capture-export-metadata.md +107 -0
  609. package/docs/api/capture-environment-raw-producer.md +56 -0
  610. package/docs/api/capture-focus-control.md +419 -0
  611. package/docs/api/capture-linear-encoding.md +99 -0
  612. package/docs/api/capture-photographic-export.md +172 -0
  613. package/docs/api/capture-raw-frame-reconstruction.md +87 -0
  614. package/docs/api/capture-release-sequence.md +252 -0
  615. package/docs/api/capture-sensor-raw-frame.md +66 -0
  616. package/docs/api/capture-sensor-raw-producer.md +98 -0
  617. package/docs/api/capture-simulated-capture.md +179 -0
  618. package/docs/api/color-capture-color.md +122 -0
  619. package/docs/api/color-white-balance.md +386 -0
  620. package/docs/api/composition-image-formation-plan.md +825 -0
  621. package/docs/api/composition-plan-consumer.md +98 -0
  622. package/docs/api/core-calculation-result.md +220 -0
  623. package/docs/api/core-configuration-error.md +19 -0
  624. package/docs/api/core-image-formation.md +204 -0
  625. package/docs/api/core-scientific-assurance.md +214 -0
  626. package/docs/api/core-spectral-composition.md +268 -0
  627. package/docs/api/core-spectral.md +78 -0
  628. package/docs/api/core-validation.md +34 -0
  629. package/docs/api/core-version.md +14 -0
  630. package/docs/api/equipment-exposure-capabilities.md +270 -0
  631. package/docs/api/equipment-generic-tier-assets.md +82 -0
  632. package/docs/api/equipment-generic-tier-presets.md +103 -0
  633. package/docs/api/equipment-iso-capabilities.md +295 -0
  634. package/docs/api/equipment-metering-capabilities.md +126 -0
  635. package/docs/api/equipment-release-capabilities.md +91 -0
  636. package/docs/api/exports.json +5656 -0
  637. package/docs/api/exposure-exposure-duration-control.md +115 -0
  638. package/docs/api/exposure-exposure-mode-resolver.md +966 -0
  639. package/docs/api/exposure-exposure.md +150 -0
  640. package/docs/api/exposure-flash.md +327 -0
  641. package/docs/api/exposure-metering-scene-radiance.md +154 -0
  642. package/docs/api/exposure-metering-target.md +134 -0
  643. package/docs/api/exposure-metering-temporal.md +77 -0
  644. package/docs/api/exposure-metering.md +172 -0
  645. package/docs/api/exposure-program-line.md +64 -0
  646. package/docs/api/motion-camera-rotation.md +215 -0
  647. package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
  648. package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
  649. package/docs/api/motion-capture-rotation-trajectory.md +132 -0
  650. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
  651. package/docs/api/motion-extended-object-projection.md +312 -0
  652. package/docs/api/motion-projected-motion.md +60 -0
  653. package/docs/api/optics-aperture.md +69 -0
  654. package/docs/api/optics-circle-of-confusion.md +46 -0
  655. package/docs/api/optics-complex-pupil-psf.md +193 -0
  656. package/docs/api/optics-depth-of-field.md +92 -0
  657. package/docs/api/optics-diffraction.md +46 -0
  658. package/docs/api/optics-focus-breathing.md +119 -0
  659. package/docs/api/optics-focus-state.md +64 -0
  660. package/docs/api/optics-front-of-lens-filter.md +263 -0
  661. package/docs/api/optics-illumination-vignetting.md +95 -0
  662. package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
  663. package/docs/api/optics-lens-psf-profile.md +380 -0
  664. package/docs/api/optics-polygon-diffraction.md +68 -0
  665. package/docs/api/optics-profile-contract.md +47 -0
  666. package/docs/api/optics-psf-foundation.md +181 -0
  667. package/docs/api/optics-radial-distortion.md +194 -0
  668. package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
  669. package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
  670. package/docs/api/optics-sensor-environment-query.md +58 -0
  671. package/docs/api/optics-sensor-psf-quadrature.md +81 -0
  672. package/docs/api/optics-stray-light.md +109 -0
  673. package/docs/api/optics-thin-lens.md +53 -0
  674. package/docs/api/output-capture-corrected-sdr.md +71 -0
  675. package/docs/api/output-capture-geometry.md +500 -0
  676. package/docs/api/output-capture-sdr.md +69 -0
  677. package/docs/api/output-crop.md +47 -0
  678. package/docs/api/output-geometric-transforms.md +199 -0
  679. package/docs/api/output-lens-corrections.md +162 -0
  680. package/docs/api/output-sdr-rendering.md +122 -0
  681. package/docs/api/output-subject-framing-crop.md +59 -0
  682. package/docs/api/schema-camera.md +84 -0
  683. package/docs/api/schema-illumination-spectral.md +77 -0
  684. package/docs/api/schema-illumination-temporal.md +289 -0
  685. package/docs/api/schema-illumination.md +246 -0
  686. package/docs/api/schema-scene-radiance-temporal.md +215 -0
  687. package/docs/api/schema-scene-radiance.md +415 -0
  688. package/docs/api/schema-scene.md +105 -0
  689. package/docs/api/schema-validation.md +25 -0
  690. package/docs/api/sensor-accumulated-charge.md +273 -0
  691. package/docs/api/sensor-architecture.md +155 -0
  692. package/docs/api/sensor-camera-saturation-capacity.md +215 -0
  693. package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
  694. package/docs/api/sensor-capture-mode-timing.md +123 -0
  695. package/docs/api/sensor-capture-mode.md +321 -0
  696. package/docs/api/sensor-color-sampling.md +228 -0
  697. package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
  698. package/docs/api/sensor-dark-current.md +227 -0
  699. package/docs/api/sensor-environment-photo-signal.md +77 -0
  700. package/docs/api/sensor-eqe-electron-rate.md +166 -0
  701. package/docs/api/sensor-eqe-local-exposure.md +68 -0
  702. package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
  703. package/docs/api/sensor-exposure-window.md +183 -0
  704. package/docs/api/sensor-iso-signal-chain.md +264 -0
  705. package/docs/api/sensor-local-exposure-binding.md +126 -0
  706. package/docs/api/sensor-optical-stack.md +211 -0
  707. package/docs/api/sensor-photon-energy.md +149 -0
  708. package/docs/api/sensor-physical-charge-capacity.md +196 -0
  709. package/docs/api/sensor-pixel-pitch.md +41 -0
  710. package/docs/api/sensor-radiometry-readiness.md +240 -0
  711. package/docs/api/sensor-raw-readout.md +499 -0
  712. package/docs/api/sensor-raw-reconstruction.md +260 -0
  713. package/docs/api/sensor-readout-exposure-linkage.md +172 -0
  714. package/docs/api/sensor-readout-timing.md +209 -0
  715. package/docs/api/sensor-response-application-compatibility.md +256 -0
  716. package/docs/api/sensor-response-operating-range.md +293 -0
  717. package/docs/api/sensor-responsivity-photocurrent.md +245 -0
  718. package/docs/api/sensor-sampling-aperture.md +221 -0
  719. package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
  720. package/docs/api/sensor-sensor-geometry.md +143 -0
  721. package/docs/api/sensor-signal-noise.md +75 -0
  722. package/docs/api/sensor-spatial-sample-reduction.md +186 -0
  723. package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
  724. package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
  725. package/docs/api/sensor-spectral-coverage.md +33 -0
  726. package/docs/api/sensor-spectral-quadrature.md +183 -0
  727. package/docs/api/sensor-spectral-response.md +291 -0
  728. package/docs/api/sensor-temporal-photo-signal.md +62 -0
  729. package/docs/api/simulation-poc-simulation.md +364 -0
  730. package/docs/api/stabilization-camera-shake.md +71 -0
  731. package/docs/api/stabilization-system.md +442 -0
  732. package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
  733. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
  734. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
  735. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
  736. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
  737. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
  738. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
  739. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
  740. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
  741. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
  742. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
  743. package/docs/examples/production-capture.mjs +34 -0
  744. package/docs/examples/production-request.json +4613 -0
  745. package/docs/examples/quick-start.mjs +12 -0
  746. package/docs/validation/documentation-fragments.json +212 -0
  747. package/docs/validation/release-audit-inventory.json +1306 -0
  748. package/docs/validation/tier-acceptance-report-v1.json +2538 -0
  749. package/package.json +15 -3
package/CHANGELOG.md CHANGED
@@ -1,9 +1,192 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.0 candidate — publication pending owner tag
4
+
5
+ - Prepare the stable public distribution after all 32 V1 feature/science items and defect #178 are reviewed and merged. Package/lock/citation become 1.0.0; root contract 0.116.0 and every independent model/schema/POC/plan identity remain unchanged. No scientific arithmetic, seed, fixture hash, exported signature or accepted execution envelope changes.
6
+ - Reconcile human/agent/source guidance, actual bounded production integration and closed tier/performance/export/conformance acceptance. Add developer capability navigation, exact root-export reference, packed executable examples, strict documentation/consumer checks and exact owner tag/publish procedure.
7
+ - Preserve synthetic/calibration/visibility/PSF/resolution limits and the recorded external-editor/hash/build limitations. Review compatibility/migration and owner handoff in `docs/RELEASE_1_0.md`; this entry does not certify npm publication.
8
+
9
+ ## Historical development — engine API 0.116.0
10
+
11
+ The following entries record introduction-time work and version identities. Older pending/draft/issue-count statements are historical checkpoints; the 1.0 release contract and current domain guides own present status.
12
+
13
+ - Complete the proposed final #131 scientific conformance disposition: shared-reference relative metering and exposure control through independently predicted photon/dark counts, committed production RAW/processing and paired output; controlled light/compensation/time/orientation/render variants, exact replay and fail-closed bindings. Reuse merged tier/performance evidence with explicit synthetic limits; no runtime/API/asset/dependency change. See `docs/SCIENTIFIC_CONFORMANCE.md`.
14
+
15
+ - Complete the proposed final #43/#45 performance disposition on stabilized V1 main with paired whole-consumer equivalence/timing, preparation/memory profiles and dense executed environment-to-RAW evidence. Retain merged private reuse; no further public abstraction or runtime/API change. See `docs/V1_PERFORMANCE_DISPOSITION.md`.
16
+
17
+ - Complete the proposed #119 generic tier acceptance layer with reproducible versioned physical/correction-cost/corrected reports, finite multidimensional pupil/texture envelopes, same-capture edge/noise comparisons and independently predicted signed stabilization/ordinary flash checks. Reuse existing body and production/output acceptance; no calibration claims, runtime/asset/version changes or new dependency. See `docs/TIER_ACCEPTANCE.md`.
18
+
19
+ - Complete the proposed #116 generic preset acceptance disposition: all nine exact body/lens pairings through bounded authoritative environment capture, ISO/readout, exact RAW processing and paired output; independent phase-sum checks and controlled sampled scenes for all 27 finite pupil slices. Preserve synthetic limits, separate #119 validation ownership and unchanged 1.0.0 assets/runtime/version contracts. See `docs/TIER_PRESET_ACCEPTANCE.md`.
20
+
21
+ - Add the bounded executed environment-to-RAW handoff to the authoritative production graph. Plan 0.7.0 validates committed event, scene/provider/optics, geometry, shutter, rotation, renderer and seed bindings before source callbacks, fingerprints execution data/results, and supplies the exact realized RAW to optional shared processing. Consumer manifest 0.2.0 carries the same immutable execution/output results. Existing attached-RAW and physical-sample paths retain explicit unsupported boundaries. Share existing output-envelope validation without changing supported limits, scientific models, seed schedules or package/POC versions. See `docs/PRODUCTION_ENVIRONMENT_CAPTURE.md`.
22
+
23
+ ## Engine API 0.115.0
24
+
25
+ - Prepare producer-derived #16 interoperability acceptance: committed all-orientation/manual-WB DNG/JPEG pairs, reproducible repository-only generator, independent TIFF/JPEG/two-XML/LibRaw verification and explicit native-site/unsupported-size evidence. Preserve historical fixtures and shared existing algorithms. Adobe/editor/browser evidence and owner review/DCO remain required; no issue closure, new runtime dependency or API/version change. See `docs/EXPORT_ACCEPTANCE.md`.
26
+
27
+ - Complete the bounded #112 SDR post-capture handoff: expose shared `calculateProcessedSensorRaw()`/parser for RAW preview and paired JPEG, retain explicit color/WB/rendering/correction states and capture diagnostics, support 8/16-bit preview while JPEG remains 8-bit. Production plan 0.6.0 accepts committed output-state/RAW policy, executes four downstream stages and fingerprints their immutable result/evidence. Upstream missing-stage blockers remain; no physical-provider, high-resolution or external-editor acceptance is inferred. See `docs/PROCESSED_OUTPUT.md`. Merged in #200 after owner review/DCO; V1 tracker stands at 26/32.
28
+
29
+ ## Engine API 0.114.0
30
+
31
+ - Add `calculateEnvironmentSensorPhotoSignal()` and `simulateEnvironmentSensorRawFrame()`: generate and execute bounded environment queries at each actual local shutter midpoint, wavelength and optional complete PSF support tap, then reuse optics, instantaneous EQE, temporal photo/dark, completeness, capacity, seeded noise and ADC. Bind full native frame geometry, optics, scene identity and event exactly. Frozen provider requests, owned parsed results and aggregate evaluation limits fail closed. Resulting RAW feeds existing paired DNG/JPEG export. Invocation is established without claiming physical provider transport/visibility, calibrated accuracy, full-resolution support or production-plan activation. See `docs/ENVIRONMENT_RAW_CAPTURE.md`. Partial #16/#178 integration; V1 remains 25/32.
32
+
33
+ ## Engine API 0.113.0
34
+
35
+ - Add `calculateSensorEnvironmentRadianceQuery()`: derive an environment request from native sensor optical support with explicit +Y-down/+Y-up conversion, focus-aware ideal projection, existing analytic inverse camera rotation and outgoing-toward-camera direction convention. Explicit opening-boundary clock mapping preserves time semantics. Ray projection is calculated; intersections, visibility, provider transport and production activation remain absent. See `docs/SENSOR_ENVIRONMENT_QUERY.md`. Partial #16/#178 integration.
36
+
37
+ ## Engine API 0.112.0
38
+
39
+ - Add `calculateSensorPsfIrradianceQuadrature()`: resolve sampled lens PSFs at each pre-AA destination/wavelength and apply their normalized shape to explicitly supplied inverse kernel support. Convert native +Y-down support to image-plane +Y-up PSF axes; retain separate pupil throughput, wavelength-basis evidence, exact instantaneous times and local shift-invariance limitations. Complete support and bounded work fail closed. No full field-dependent forward transport, source projection/provider execution or production activation is inferred. See `docs/SENSOR_PSF_QUADRATURE.md`. Partial #16/#178 integration.
40
+
41
+ ## Engine API 0.111.0
42
+
43
+ - Add `calculateSceneSensorEqeTemporalExposure()`: compose declared physical scene radiance through paraxial optics and instantaneous response validity/EQE at every local shutter midpoint. Sensor inputs own spatial/spectral plans; explicit package-plane and first-opening-boundary time semantics prevent plane/clock reinterpretation. Shared internal temporal identity/work preflight preserves existing sensor diagnostics and budgets. No provider/projection/PSF execution, convergence bound or production activation is inferred. See `docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md`. Partial #16/#178 resolution.
44
+
45
+ ## Engine API 0.110.0
46
+
47
+ - Add a validated compact temporal EQE photo signal and connect it to exact-event dark/accumulated charge and native RAW. Preserve stationary arithmetic and narrow-call types; share compensated integration sums. Producer result schema 0.3.0 and temporal dark/charge model 1.1.0 distinguish the additive path without changing noise/readout identities. Global/rolling tests verify independent SI counts, deterministic codes and exact paired DNG/JPEG lineage. Source transport/PSF, convergence and production activation remain unverified; no umbrella closure. See `docs/TEMPORAL_PHOTO_RAW.md`. Partial #16/#178 resolution.
48
+
49
+ ## Engine API 0.109.0
50
+
51
+ - Add `calculateSensorEqeTemporalExposure()`: independently validate response/range/EQE at each explicitly supplied local shutter midpoint and integrate physical rates with seconds-valued measures. Share the existing instantaneous path without changing stationary behavior; retain child evidence, deterministic canonical ordering and bounded Cartesian work. No stationarity, source transport, PSF, convergence or RAW activation is inferred. This new nonstationary result deliberately cannot enter the stationary charge/RAW contract. See `docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md`. Partial #16/#178 resolution.
52
+
53
+ ## Engine API 0.108.0
54
+
55
+ - Add `calculateSceneToSensorIrradianceQuadrature()`: bind wavelength-resolved scene-provider declarations to each exact spatial/wavelength/time node and evaluate the existing paraxial optical bridge at its pre-AA coordinate. Share Cartesian node validation with the existing irradiance reducer, preserving equations and prior diagnostics while rejecting sparse sample arrays explicitly. Pre-stack/package-incident output feeds matching effective EQE; source projection, provider execution, PSF and temporal integration remain unverified/unapplied, and production gates remain unchanged. See `docs/SCENE_SENSOR_QUADRATURE.md`. Partial #16/#178 resolution.
56
+
57
+ ## Engine API 0.107.0
58
+
59
+ - Add `calculateSensorEqeLocalExposure`, composing existing spatial/spectral quadrature, explicitly supplied irradiance, response application/range checks, EQE rate, local shutter binding and stationary integration. Preserve child evidence and approximation boundaries; demonstrate the resulting photo expectation through RAW and paired files. Scene/optics origin remains declared, production stages remain gated, and time-varying irradiance is unsupported. See `docs/SENSOR_EQE_LOCAL_EXPOSURE.md`. Partial #16/#178 resolution.
60
+
61
+ ## Engine API 0.106.0
62
+
63
+ - Map all 32 V1 features to primitives, implemented consumers, representative evidence and remaining ticket ownership. Document the missing typed scene/optics/sensor-response-to-exposure RAW handoff and correct adjacent production-boundary descriptions. Documentation only; no stage activation, runtime/version change, approved deferral or feature closure. Partial defect #178 resolution.
64
+
65
+ - Define the RAW reference compatibility envelope and share full-native producer/reconstruction limits while retaining the larger structural attachment budget. Export parsing rejects unsupported crop sampling, uncovered output/active reconstruction and non-Bayer topology before pixel execution. Supported execution, hashes, bytes and versions remain unchanged; invalid-request diagnostic precedence may change. Partial defect #178 resolution.
66
+
67
+ - Move reusable sensor-channel color development and conditioned inversion into an internal color-layer adapter. Preserve explicit profile evidence/basis binding, one-time WB order, exact RAW lineage and paired file identities; export retains validation and container policy. Partial defect #178 resolution; no public API or version change.
68
+
69
+ - Share sorted-key finite-JSON serialization mechanics across planner fingerprints, capture-derived comparisons and export hashing. Preserve domain-specific undefined-property policies/errors, existing identity algorithms and all version surfaces; pinned historical export/file hashes detect byte drift. Partial defect #178 resolution.
70
+
71
+ - Consolidate equivalent child-first immutable-data freezing across capture, RAW attachment/reconstruction, export metadata and generic equipment presets into one internal helper. Domain validation/copy ownership and planner/focus/release freeze semantics are preserved; no public API, schema, numerical or identity change. Partial defect #178 resolution.
72
+
73
+ - Correct production-plan diagnostics to report the current plan contract version instead of a stale hard-coded version, and document the existing `distribute*` public verb family. Diagnostic text changes only; blocker codes, validation, scientific behavior and all version surfaces remain unchanged. Partial defect #178 resolution.
74
+
75
+ - Add generic tier readout-to-file acceptance: explicit ISO regimes preserve expected/realized charge, independent ADC arithmetic predicts codes, and paired export preserves native RAW through orientation/rendering exposure. Synthetic topology/color/charge fixture; no runtime/API/assets change.
76
+
77
+ - Add matched generic tier body execution acceptance for release cadence/timer/limits, AF availability/hold/loss and release gating, independent metering/AWB arithmetic, and global readout timing. Synthetic policy evidence only; runtime/API/assets unchanged. See `docs/GENERIC_TIER_PRESETS.md`.
78
+
79
+ - Extend generic tier correction acceptance with independent residual CA/distortion, full Jacobian/stretch, same-capture slanted-step interpolation/gain and support/retained-ray checks. Synthetic sampled regression evidence only; runtime/API/assets unchanged. See `docs/GENERIC_TIER_PRESETS.md`.
80
+
81
+ - Correct the electronic read-noise boundary: preserve negative read noise through the upper-only pre-ADC threshold, add the black pedestal, then quantize/clamp to the unsigned ADC range. Readout model 2.0.0 and capture RAW noise model 0.2.0 distinguish changed shadow codes from prior replay.
82
+ - Add incremental #131 conformance for the merged global sensor RAW producer → reconstruction/color/WB → correction → SDR/paired export path. Independent numeric and lattice expectations cover exposure boundaries, four orientations, same-noise correction, signed shadows and display clipping; no final V1 closure.
83
+
84
+ ## Generic tier presets — engine API 0.105.0
85
+
86
+ - Add exact-version Consumer, Prosumer and Professional generic body/lens reference assets, cross-tier selection and strict saved-manifest validation. A finite 50 mm, f/4, focus 5 m optical slice resolves explicit profiles rather than a tier quality multiplier. Matched pupil and same-capture correction fixtures expose field/defocus character and gain/noise tradeoffs. See `docs/GENERIC_TIER_PRESETS.md`.
87
+ - Synthetic educational approximations only; no calibration, universal ranking, sensor-format default, production/POC activation or complete #116/#119 acceptance claim. Preset assets are version 1.0.0; saved selection schema 0.1.0. Root API 0.105.0 follows the local-shutter 0.104.0 contract in PR #173.
88
+
89
+ ## Local shutter RAW binding — engine API 0.104.0
90
+
91
+ - Added optional full-native local shutter-window binding to the RAW producer (producer result schema 0.2.0). Exact per-site photo/dark/completeness windows must match the existing engine timing calculation. Omitted timing retains global behavior and unchanged native seed ownership; no rolling motion/radiance integration or production-stage activation is claimed.
92
+
93
+ - Reuse call-owned geometric preparation across sampling-plan pixels through the existing scalar point evaluator. Preserve external revalidation, per-point radial/finite guards, provenance and independent derivative arrays. Whole correction/plan timing and separate CPU/allocation evidence are recorded in `docs/GEOMETRIC_PREPARATION_REUSE.md`; no public API/schema version change or generic prepared cache.
94
+
95
+ - Reuse the existing focus-plane projection privately for POC defocus sweeps. Whole-request timings, separate allocation sampling, preparation/retained-memory limits and 64 complete-response equivalence fixtures are recorded in `docs/POC_PROJECTION_REUSE.md`. No root/POC/schema version change or public prepared API; one-off path overhead and Node-only performance evidence are explicit.
96
+
97
+ - Add optional RAW-derived JPEG correction to paired photographic export, reusing the capture correction executor after explicit color/WB. Preserve DNG codes and native crop; expose the processed crop, clipping diagnostics and separate informational RAW intent. Require full active reconstruction and reject unprovided prefiltering. No production-stage activation or external-editor validation claim.
98
+
99
+ ## Capture-owned native RAW producer — unreleased
100
+
101
+ - Added `simulateSensorRawFrame()` and strict handoff parser: declared untreated EQE/dark exposure expectations → existing accumulated charge/completeness → physical capacity assessment → seeded charge realization → read noise/ADC → native CFA samples → immutable RAW attachment. A versioned capture-owned site seed schedule, full native coverage and global exposure/state checks are explicit. Child provenance/saturation diagnostics and genuine same-RAW DNG/JPEG tests are retained. See `docs/SENSOR_RAW_PRODUCER.md`.
102
+ - Root API advances to 0.102.0; producer schema/noise identity 0.1.0. Package/POC/capture/RAW-frame/production schemas are unchanged. The reference producer does not verify upstream radiometry, accept RGB as RAW input, support rolling/high-resolution/multi-frame capture or activate reserved production stages. New human review and contribution-specific DCO remain required.
103
+
104
+ ## Capture-bound correction and SDR bridge — unreleased
105
+
106
+ - Added `calculateCaptureCorrectedSdr()` and its strict parser: committed capture/color/WB → native optical geometry/CA → gain → oriented joint-valid output view → existing SDR rendering. Four orientations, off-center crops, separate clocks and preserved source history are inspectable. Gain clipping events are separately reported by the correction executor. See `docs/CAPTURE_CORRECTED_SDR.md`.
107
+ - Root API advances to 0.101.0; package, POC, production and capture schemas are unchanged. No sensor producer, production-stage activation, editor acceptance or new dependency is claimed. Human review and new contribution-specific DCO certification remain required.
108
+
109
+ ## Paired DNG/JPEG reference export — unreleased
110
+
111
+ - Added `createPhotographicExportPair()` and strict input/color-profile parsers: uncompressed 16-bit native Bayer DNG and baseline 8-bit YCbCr444 JPEG developed from the exact attached RAW frame. Explicit reconstruction, approximate camera color interpretation, existing resolved WB, final orientation/crop and existing SDR rendering are traceable; unsupported resampling fails closed. EXIF/XMP, distinct artifact identities and deterministic SHA-256 provenance accompany owned bytes. See `docs/PHOTOGRAPHIC_EXPORT.md`.
112
+ - Integrates pending capture-SDR, RAW attachment, metadata and reconstruction slices as one main-based draft. Proposed root API 0.100.0; export schema 0.1.0. No runtime dependency or package/POC/capture schema change. Full native input is limited to 4,096 sites. Editor interoperability, production execution and high-resolution support remain open gates.
113
+
114
+ ## Same-RAW reconstruction handoff — unreleased
115
+
116
+ - Added #16C `resolveRawFrameReconstruction()`: bounded native-region values derived only from the attached #166 RAW frame via #14 explicit linear-neighborhood reconstruction, complete absolute-phase dispatch, child provenance and exact source contributions. Signed values survive; missing edges fail rather than padding/clamping/rephasing. Independent captured float planes are not used. No sensor color calibration, downstream WB/color/output processing or file writer is claimed. See `docs/RAW_FRAME_RECONSTRUCTION.md`.
117
+ - Proposed root API 0.99.0, handoff schema 0.1.0. Stacked draft requires #166; reconcile parallel additive root versions before merge. Existing package/POC/capture/production contracts are unchanged.
118
+
119
+ ## Native RAW-frame attachment — unreleased
120
+
121
+ - Added #16 prerequisite `createSensorRawFrame()` and strict input parser: complete bounded native periodic-CFA coverage, exact one-site binding, immutable capture attachment, code/black/digital-white/per-site-seed preservation, and rejection of processed/grouped/multi-frame inputs. Producer origin is explicitly caller-declared; no serializer or RAW-to-RGB pairing proof is claimed. See `docs/SENSOR_RAW_FRAME.md`.
122
+ - Proposed root API 0.98.0 and RAW-frame schema 0.1.0. Reconcile additive root versions against parallel drafts before merge; existing package/POC/capture/production versions unchanged.
123
+
3
124
  Notable public changes to `@photivra/engine` are documented here.
4
125
 
5
126
  ## Unreleased
6
127
 
128
+ ### Added
129
+
130
+ - Added #1 ideal regular-polygon scalar Fraunhofer diffraction. The additive `calculateIdealPolygonDiffractionPsf()` returns continuous 1/µm² unit-energy density plus peak-normalized intensity using an analytical polygon boundary integral, explicit equal-area pupil size, propagation distance and resolved wavelength basis. No finite-support renormalization, throughput loss or real-lens effects are inferred. PSF foundation advances to `0.3.0`; root API advances to `0.94.0`. Existing circular Airy, sampled/complex-pupil schemas, production composition and POC behavior are unchanged.
131
+ - Added standalone #114 parametric clean-lens stray-light irradiance, #118 composed digital geometry/sampling and #117 generic camera-applied lens corrections. Exact system/wavelength bindings, separate ghost/veil contributions, full Jacobians, valid-source masks/joint crops, prefilter gates, channel registration, downstream gain/noise/clipping diagnostics, RAW metadata intent and mandatory/reference-bypass states are explicit. No calibrated presets, production/POC stage activation, optical-PSF repair or runtime dependency is added. See `docs/DIGITAL_OPTICS_FOUNDATION.md`. Root API advances to `0.95.0`; new schemas are `0.1.0`. Pending parallel API changes must reconcile versions in merge order.
132
+ - Added #15A/#15B/#15C authoritative capture, color and encoding foundations. `SimulatedCapture` schema `0.2.0` commits immutable format-neutral float planes, explicit linear image states, capture geometry/focal equivalence/focus/WB, public metadata, canonical serialization and external references. Legacy `0.1.0` archives normalize to `0.2.0`. Color model `0.1.0` independently derives the ideal colorimetric camera/linear-sRGB D65 basis, applies explicitly bound resolved RGB gains, or uses an explicitly approximate adopted-white XYZ diagonal transform. Signed floats/headroom are retained; arbitrary spectral/commercial sensor RGB and repeated application are rejected. Linear encoding schema `0.1.0` maps floats to uniform uint16 codes with explicit black/reference-white/headroom, negative and clipping policies, rounding ties and per-side clipping counts while preserving the master. #16 serialization remains separate. Root API advances to `0.96.0`; reconcile pending parallel API changes in merge order. Package/POC/production contracts are unchanged.
133
+
134
+ - Added independent #112A SDR rendering primitives (schema `0.1.0`) for explicitly color-transformed linear-sRGB/D65 input. Rendering exposure, named identity/positive-per-channel-Reinhard tone choices, explicit component gamut clipping/rejection, standard sRGB transfer, and deterministic 8/16-bit quantization remain separately inspectable. Unresolved WB/color, unsupported HDR policies and non-finite arithmetic fail closed; source samples remain unchanged. No capture/WB/correction adapter or production-stage activation is introduced in this standalone slice. Root API advances `0.96.0` to `0.97.0`; reconcile parallel version bumps in merge order. Package/POC contracts unchanged.
135
+
136
+ - Added #113 real-lens PSF/aberration framework. Unit-energy sampled 2D PSF profiles preserve image-plane orientation and support bounded regular-grid interpolation across focal length, #103 focus state (via focus diopters, including infinity), aperture, field coordinates, wavelength, and signed image-plane defocus. Best-focus image-plane offsets make field curvature and longitudinal chromatic focus explicit without changing distortion/lateral-CA coordinates. A scalar Fraunhofer complex-pupil reference path jointly evaluates diffraction plus explicit pupil amplitude/optical-path-difference phase while keeping pupil throughput as a separate factor for #110. MTF magnitude-only profiles are diagnostic and explicitly cannot authorize unique PSF reconstruction. Lens PSFs remain upstream of sensor OLPF/CFA/reconstruction and exclude #114 stray light.
137
+ - Added #3 extended-object time-varying projection. Explicit metric points on one rigidly translating object are projected independently through physical time with camera and object translation preserved as separate inputs. Pure axial motion can therefore leave an on-axis center nearly stationary while off-axis geometry expands/contracts. A uniform magnification diagnostic is emitted only for an explicitly declared and validated fronto-parallel planar patch; arbitrary 3D geometry never gains a one-scale or one-homography claim. A #12 capture-local wrapper samples the same geometry on each native point's authoritative local exposure clock. The result remains geometry only: no visibility/occlusion solution, synthetic blur kernel, radiance integration, deformation/acceleration, or static-defocus shortcut is claimed.
138
+ - Added #97 time-domain physical stabilization with generic synthetic sensor-shift, lens-optical, coordinated-body+lens, and off architectures. Explicit rotational disturbance trajectories are corrected with per-axis gain, latency and angular travel limits; declared panning-axis bypass suppresses only the chosen correction axis; coordinated profiles allocate one total correction without double counting. #12 local-exposure sampling evaluates residual stabilization on the authoritative first-opening-boundary time basis. Support/tripod state, CIPA-style stop ratings, camera translation/parallax, spontaneous drift and digital stabilization are deliberately not folded into this physical model. The legacy `stabilizationStopsEquivalent` API remains unchanged.
139
+ - Added #106 manual-flash and ordinary-sync foundations. A flash is represented as a spatial #85 illumination source plus an explicit aperiodic pulse waveform registered to #12's first-opening-boundary time basis. Front- and rear-curtain sync resolve only when the complete active frame has a real simultaneous-open interval long enough for the pulse; impossible ordinary sync fails closed. Existing ambient temporal illumination is preserved when the flash overlay is added. Optional #105 release-frame binding exposes sequence-relative pulse time. Schema 0.1.0 intentionally does not model HSS, TTL/preflash metering, recycle/thermal limits, red-eye preflash, modeling lights, AF-assist, or branded protocols, and never substitutes a post-render brightness multiplier.
140
+ - Completed #7 ISO/exposure-index and generic high-ISO signal-chain foundations. Detailed capability profiles now represent standard ISO/EI ranges and grids, expanded low/high settings, Auto ISO eligibility/ranges, and evidenced capture-mode restrictions without inferring photons, conversion gain, read noise, or saturation from the ISO number. A binder carries those constraints into #99 while keeping manual and Auto ISO envelopes distinct. Generic signal-chain profiles map exact ISO/capture-mode states to explicit #14 readout regimes; Good/Better/Best remain convenience mappings to profile IDs rather than real-camera rankings or direct ISO-to-noise equations.
141
+ - Completed #14 sensor/RAW closure with deterministic seeded photo/dark shot-noise realization, explicit additional-charge sampling policies, separate electronic read-noise components, evidence-backed conversion-gain regimes, black-level offset, pre-ADC saturation, ADC quantization/digital saturation, native CFA/capture-mode-bound RAW samples, and explicit linear neighborhood reconstruction. Physical storage saturation, pre-ADC clipping, and digital saturation remain separate; scalar physical clamping never claims blooming; ISO never implicitly selects a gain regime; grouped/remosaic modes fail closed without explicit combination math; reconstruction revalidates site/channel identity against the declared CFA and does not claim aliasing/moiré without an adequate pre-sampling optical-frequency model.
142
+ - Added #104 generic focus-control with explicit MF, single-AF and continuous-AF policies; renderer-neutral finite/infinity target observations using #103 longitudinal-distance semantics; deterministic ideal-instantaneous AF actuation; explicit idle/acquired/target-lost/locked state; hold-last-focus target-loss behavior with explicit reacquisition; focus lock independent from exposure/metering/WB; and a separate focus-priority/release-priority/balanced capture-gating seam without claiming commercial AF tracking performance.
143
+ - Completed #12 sensor readout/shutter closure with exact capture-mode timing profiles, depth-dependent camera-translation/parallax temporal quadrature, and provider-neutral temporal scene-radiance sampling/reduction on the authoritative first-opening-boundary exposure clock. Readout timing remains distinct from exposure timing; unsupported non-uniform schedules fail closed; translation requires metric depth and does not authorize one global homography; camera and subject translation remain separate inputs; per-node radiance uncertainty/evidence is preserved without fabricated aggregate uncertainty.
144
+ - Completed the #111 capture-state handoff with `createProductionCaptureSnapshotFromReleaseFrame()`: committed #105 release-frame exposure/focus/automation/timing/seed state and the full resolved #108 white-balance state are validated, frozen, fingerprinted, round-trippable, and surfaced in production-plan capture identity. Legacy direct snapshot construction remains supported.
145
+ - Added #134 engine-wide scientific assurance composition with explicit calibrated/approximation/unknown status, required-evidence visibility, quantified/not-quantified/unknown/not-applicable uncertainty states, preservation of existing `CalculationQuality` uncertainty components, and a fail-closed rule against fabricated aggregate uncertainty. #111 production plans and optimized/reference consumer manifests now preserve the same assurance object and include material evidence/uncertainty changes in reproducibility identity.
146
+ - Added #135 generic front-of-lens filter transmission with neutral linear, base-10 optical-density, and wavelength-resolved spectral models. Multiple filters compose multiplicatively with preserved component identity/evidence, remain explicitly unpolarized/unbranded, and integrate exactly once into #110 and #111 without changing aperture geometry, working f-number, DOF, or diffraction. Production capture snapshots now preserve the selected filter stack as immutable capture identity.
147
+ - Added #108 shooting-time white-balance control and Auto WB foundations over an explicit pre-WB camera-linear RGB domain. Generic profile-owned presets, manual gains, independent CCT+tint intent, clipped-sample-safe custom measurement, deterministic gray-world-style AWB priorities, and AWB lock remain separate from physical scene illumination and #15 render/export color transforms. AWB never reads authoritative scene illuminant metadata as an oracle and resolved WB state never changes exposure, focus, or RAW-like capture data.
148
+ - Added #105 deterministic logical release sequencing for single, burst, self-timer, exposure-bracket, and explicit-focus-bracket capture. Generic release capabilities constrain supported drive/bracket modes, maximum frame count/cadence, and inter-frame gap. Scheduling prevents incompatible ordinary-still exposure overlap, derives distinct reproducible per-frame seeds, snapshots base capture state, keeps sensor capture modes separate, and provides an explicit cancellation boundary without conflating WB bracketing with physical multi-exposure capture.
149
+ - Completed the generic #100 metering integration seam with reusable generic-body metering capability profiles, explicit metering-profile/mode compatibility assessment, spot/focus-point linkage capability metadata, and end-to-end meter → frozen target → exposure compensation → #99 automatic-exposure tests. Meter target/calibration policy remains owned by the metering profile rather than duplicated into equipment metadata; the controlled relative-light path preserves the -1 EV scene / +1 EV Auto ISO invariant.
150
+ - Extended sensor-architecture metadata to schema 0.3.0 with optional evidence-backed `cmos | ccd` technology-family identity. CMOS/CCD remains independent from FSI/BSI, stacking, readout, shutter, CFA, noise, QE, dynamic range, and other behavior; no hidden physics is activated by the metadata. Legacy schema 0.2.0 profiles remain accepted with their original schema identity and never acquire an inferred technology family.
151
+ - Added explicit renderer-neutral `FocusPlane` states for finite longitudinal focus distance versus optical infinity. `parseFocusPlane()` keeps JSON/untrusted boundaries fail-closed, while `calculateFocusPlaneImageDistance()` delegates finite focus to the existing Gaussian thin-lens calculation and represents infinity exactly with image distance equal to nominal focal length, zero limiting magnification, and no non-finite/fabricated distance. Existing `focusDistanceM` APIs remain unchanged.
152
+ - Extended #111 production composition with immutable temporal-capture input, authoritative local exposure-window evaluation, separate sensor-readout timing, optional pure-rotation temporal quadrature, and renderer temporal-sampling capability checks. Spatial camera rotation and rolling-readout effects now preserve active versus modeled-zero semantics. Exposure/readout clocks remain explicitly unsynchronized unless a later linkage model establishes synchronization. The planner may compute mature temporal foundations while still blocking a requested full temporal image-formation path on uncomposed upstream PSF dependencies rather than bypassing the authoritative graph. Added renderer/reference consumer manifests that project the same finalized semantic plan into interactive-optimized or reference execution roles without changing stage/effect identity, temporal sample count, seeds, or physical results.
153
+ - Added the first #111 production image-formation composition contract alongside the legacy POC. The new browser-safe plan separates prepared static context from immutable per-capture snapshots, expands required stage dependencies from the authoritative image-formation graph, records active/modeled-zero/omitted/unsupported/blocked stage and effect states, declares renderer capabilities and capability mismatches explicitly, and provides structured blockers instead of silent fidelity degradation. The first composed physical path consumes #85 scene-radiance samples plus #110 optical throughput to produce pre-sensor-stack spectral irradiance. Prepared contexts, capture snapshots, and plans are cloned/frozen and carry deterministic canonical FNV-1a reproducibility fingerprints; the fingerprint is explicitly non-cryptographic. The legacy POC remains unchanged.
154
+ - Added #110's primary optical radiometry bridge from validated outgoing scene spectral radiance to pre-sensor-stack sensor-plane spectral irradiance. The bridge uses an explicit paraxial circular-pupil acceptance term, one mutually exclusive optical-transmission path (wavelength-resolved transmission or an effective working-T-stop approximation), optional field throughput applied exactly once, explicit finite-focus working-f-number semantics, and exact wavelength-basis preservation. It stops before PSF redistribution, distortion-area correction, sensor optical stack/microlens/CFA/QE, stray light, polarization, volumetrics, or wavelength-changing behavior. Numeric spectral curves require reusable/Photivra-owned provenance; calibrated optical data cannot promote the current approximation-only #85 scene-radiance result into a calibrated sensor-irradiance claim.
155
+ - Added final #99 Bulb/Time exposure-duration control and cross-mode hardening. Fixed-duration, Bulb, and Time controls now resolve to a concrete positive elapsed duration before physical integration; unfinished Bulb/Time controls remain active and cannot enter the #12 exposure-window pipeline. Resolved control duration binds only the authoritative seconds-valued nominal exposure duration while preserving caller-selected shutter mechanism/boundary schedules and explicitly refusing to infer tripod support, stabilization state, long-exposure noise reduction, or temperature behavior. Long durations are not capped at a universal 30 s. Added invariants proving equal fixed/Bulb/Time durations produce identical exposure windows and identical resolved aperture/shutter/ISO values produce identical downstream relative exposure regardless of shooting mode.
156
+ - Expanded #99 with Program Auto and Full Auto exposure plus a shared versioned generic program-line policy. Program-line nodes declare optical exposure stops relative to the explicit reference exposure together with aperture/shutter pairs; resolution validates physical consistency, interpolates aperture/shutter in log2 space, applies #109 capability/grid constraints, and reports endpoint/quantization residuals. Program Auto supports manual or Auto ISO; Full Auto exposure always resolves aperture+shutter+ISO but explicitly does not resolve autofocus, white balance, flash, drive, scene recognition, or stabilization policy. Generic program lines are approximation/product policy, not named-camera emulation or physical law.
157
+ - Expanded #99 with a larger priority-mode group: Aperture Priority + Auto ISO, Shutter Priority + manual ISO, and Shutter Priority + Auto ISO. Two-auto-axis behavior is now explicit product policy rather than hidden physics. A+Auto ISO uses minimum selectable ISO until a declared slowest-preferred shutter, then raises ISO; the policy explicitly chooses whether to allow slower shutter after ISO maximum. S+Auto ISO uses minimum ISO with aperture-first selection, then Auto ISO fills remaining exposure. Shutter Priority with manual ISO resolves aperture only. All paths reuse the same #100 target, #109 capability envelope, reference exposure anchor, quantization rules, and signed residual diagnostics.
158
+ - Added the next #99 resolver slice: Aperture Priority with manual ISO. Aperture and ISO remain caller-owned; shutter is the only automatic axis. The resolver reuses the same typed #100 meter target, explicit relative reference exposure anchor, and #109 capability envelope as Manual/Auto ISO. Continuous shutter ranges resolve the ideal duration directly; discrete grids quantize in log2 duration space with the shorter shutter on an exact tie. Shutter min/max and grid quantization produce explicit signed residual-stop diagnostics. No-signal targets block automatic shutter without fabrication.
159
+ - Added the first #99 exposure-mode resolver slice for Manual exposure with either manual ISO or Auto ISO. Aperture and shutter remain caller-owned and are never changed; manual ISO is preserved exactly after capability validation, while Auto ISO resolves only the ISO axis from the typed #100 meter target and #109 capability envelope. Relative target scale is normalized through an explicit reference exposure anchor rather than a hidden ISO-100 assumption. Discrete ISO values use nearest-log2 quantization with a lower-ISO tie break; ISO limits produce explicit residual under/over-target diagnostics. Unsupported/unknown Auto ISO and no-signal targets block Auto ISO without fabricating a setting.
160
+ - Added the first generic #109 equipment-capability foundation for exposure control. Versioned Photivra body profiles now declare evidence-backed shutter-duration and ISO ranges/grids plus distinct supported/unsupported/unknown Auto ISO capability; generic lens profiles declare focal-length range, focal-dependent or constant widest available f-number, narrowest available f-number, and aperture setting grid. A deterministic resolver produces the body+lens exposure envelope at one selected focal length without mutating source profiles or claiming named-equipment emulation. Selected camera state and #99 exposure setting resolution remain separate.
161
+ - Added a stable #100→#99 exposure-meter target seam. Spatial or temporal meter results can be frozen into a reusable AE-lock-safe target snapshot; exposure compensation is applied downstream as an absolute stop offset without mutating the meter measurement, and changed compensation requires a new target identity. Positive compensation requests more exposure. No-signal targets remain finite/unresolved, and automatic aperture/shutter/ISO selection remains outside this layer.
162
+ - Added the #85→#100 scene-radiance metering bridge plus explicit temporal metering. A derivation profile labels renderer/provider scalar pre-exposure reductions as approximation-only with no calibrated spectral weighting; sample-set creation validates provider, illumination, material, optional temporal-profile, scene-state and capture-time identity. Time-varying metering requires explicit capture times on the shared `first-opening-boundary-phase` reference, and weighted temporal averaging combines linear meter signals under caller-declared positive normalized weights rather than silently averaging stop offsets. Flash/TTL metering, exposure compensation, and automatic aperture/shutter/ISO resolution remain separate.
163
+ - Added a renderer-neutral relative pre-exposure metering foundation for #100. Generic multi-zone, center-weighted, spot, and highlight-weighted policies operate on area-weighted linear samples in the physically oriented active capture frame; output crop, tone mapping, display gamma, white balance, sharpening, exposure compensation, and automatic setting resolution remain outside the meter. The meter preserves stable measurement/scene-state identity, returns a finite no-signal state instead of infinite correction, and enforces the controlled invariant that a uniform -1 stop scene-signal change produces a +1 stop shift to the declared relative target.
164
+ - Added temporal illumination waveforms and explicit source-waveform↔capture-time registration. Aperiodic flash/pulse and periodic flicker profiles use seconds-based piecewise-linear relative multipliers bound to the existing `first-opening-boundary-phase` capture reference; local exposure integration consumes authoritative exposure-window samples with deterministic midpoint quadrature. Sensor readout timing is never used as an exposure-time proxy, base source magnitude/spectrum remain authoritative, and the layer does not choose exposure settings, apply source magnitude/material transport, calculate scene radiance, or estimate convergence error.
165
+ - Added shared continuous spectral-coverage composition plus first-class discrete line-spectrum measures. Continuous participants now intersect explicit air/vacuum support and union interpolation breakpoints without applying spectral values; sensor-response and scene-illumination adapters feed that shared plan. Discrete illumination spectra use normalized wavelength-integrated line weights, distribute broadband source magnitude into integrated per-line quantities, and integrate by summation without inventing a line width or multiplying by dλ. Continuous and discrete paths remain separate, and calibrated absolute line-output claims are still not authorized automatically.
166
+ - Added the renderer-neutral scene-radiance provider/material-response boundary. Material profiles distinguish unresolved, RGB/PBR approximation, and wavelength-preserving spectral-data inputs; provider profiles declare spectral/material/visibility/direct/indirect fidelity; evaluation requests bind exact scene/profile/target/time/wavelength identity; results use outgoing spectral radiance in W/m²/sr/nm; and binding validation prevents profile/material/request/result drift without recomputing renderer output. Schema 0.1.0 remains approximation-only at the provider/result level and explicitly does not authorize calibrated radiance, optics/sensor-plane irradiance, photons, fluorescence, volumetric transport, or polarization.
167
+ - Added renderer-neutral shared spectral wavelength primitives plus a scene illumination profile for stable point/spot/area/directional/environment source identities, explicit source-specific magnitude units, relative/RGB/blackbody/continuous-spectrum representations, reusable-data provenance, and fail-closed approximation/calibration boundaries. The profile describes illumination only and does not calculate outgoing scene radiance, material response, visibility, indirect transport, fluorescence, volumetrics, polarization, or sensor signal.
168
+ - Added `scene-radiance-evaluation` as an explicit image-formation ownership stage between scene projection and lens/pupil evaluation. The stage defines the future seam for outgoing spectral radiance without turning `SceneRadiometry`, source metadata, RGB preview values, or sensor-plane irradiance into interchangeable quantities.
169
+ - Added a sensor spectral-response foundation linked to exact color-sampling channel IDs. It supports direct effective external QE, direct effective spectral responsivity in A/W, or explicitly separable channel-filter transmittance × detector EQE; requires reusable rights for embedded numeric curves; uses explicit air/vacuum/unspecified wavelength bases with piecewise-linear interpolation and fail-closed out-of-range behavior; preserves single-condition metadata without inventing angle/temperature/polarization dependence; and keeps spectral integration, photons/electrons, RAW values, and reconstruction separate.
170
+ - Added response-breakpoint-aware bounded sensor spectral quadrature. Requested range edges, response-curve knots, and optional caller-supplied continuous-spectrum/optics breakpoints form deterministic midpoint segments with explicit dλ and a maximum subinterval width; response scope/provenance are preserved while response application, source-spectrum integration, photon/electron/current calculation, and RAW output remain separate.
171
+ - Added pre-response spatio-spectral irradiance reduction over explicit E_lambda(x,y) samples in W/m^2/nm. The reducer validates exact spatial/spectral profile linkage, caps the Cartesian product, composes normalized AA/aperture spatial measures with dλ, and reports wavelength-integrated spatial-average irradiance plus geometric-aperture incident flux without applying sensor response or temporal exposure.
172
+ - Added a sensor-response application compatibility gate. It binds response data to exact color/sampling-aperture/optical-stack identities, validates response reference plane and incident-area normalization, requires explicit spatial response uniformity/separability before post-spatial application, checks declared reference conditions, blocks unresolved wavelength basis, and keeps signal conversion disabled pending a later typed EQE or A/W path.
173
+ - Added an evidence-backed sensor-response operating-range gate for instantaneous optical-input linearity. It preserves radiant-power vs irradiance calibration domains, wavelength applicability, reference conditions, uncertainty, and a declared maximum relative nonlinearity criterion while keeping exposure/full-well saturation and downstream electronics linearity explicitly separate.
174
+ - Added a photon-energy wavelength-basis foundation using exact SI Planck constant and vacuum light speed. Vacuum wavelengths map directly; air wavelengths require an exact-wavelength sourced phase refractive index plus explicit atmosphere compatibility, and refractive-index uncertainty is preserved without falsely claiming uncertainty propagation.
175
+ - Added typed EQE/filter×detector-EQE instantaneous electron-rate conversion. The converter validates structural and operating-range authorization, requires explicit spatial linear superposition and per-spectral-bin operating-range applicability, binds response evidence and evaluated bin inputs to the exact pre-response reduction, converts each wavelength-bin power contribution to photon rate with the photon-energy foundation, applies effective QE per wavelength, and returns expected electron rate without temporal integration.
176
+ - Tightened the operating-range gate so wavelength-dependent rate conversion now fails closed unless both geometric-aperture linear superposition and per-spectral-bin input applicability are explicitly established. Broadband-only range evidence remains diagnostic but cannot authorize EQE/A-W conversion.
177
+ - Added typed A/W spectral-responsivity conversion from per-wavelength geometric-aperture radiant power to detector-terminal photocurrent magnitude. The path requires the same structural/spatial/per-bin operating gates as EQE plus an explicit electrical applicability profile for detector bias and current-readout loading; transimpedance, voltage, temporal charge, saturation, noise, ADC and RAW remain downstream.
178
+ - Added local sensor-rate/exposure-window binding. Engine-produced EQE and A/W rate results now preserve source color-site identity; the binding validates the exact site channel, requires an evidenced one-to-one color-site/native-effective-raster relationship, recomputes the local shutter window at the mapped native sample center, and deliberately leaves constant-rate temporal integration unauthorized.
179
+ - Added evidence-bound constant-rate temporal integration for exact local exposure windows. EQE rates become fractional expected photon/electron counts; A/W photocurrent becomes charge magnitude in coulombs without carrier inference. Results remain photo-signal-only and explicitly cannot authorize full-well or camera-saturation assessment.
180
+ - Added dark-current charge accumulation for the EQE electron-count path. Dark current is explicitly pre-compensation thermal electron generation in e-/s, can use exact-reference temperature or fail-closed piecewise-linear measured temperature tables, and does not infer a universal exponential temperature law or dark-current nonuniformity.
181
+ - Added accumulated stored-charge composition and completeness assessment. Photo and dark expected electrons plus explicitly incremental additional stored-electron contributors are rebound to one exact local exposure; only an evidence-backed all-material-contributors completeness declaration authorizes later physical full-well assessment.
182
+ - Added physical charge-storage capacity assessment against complete expected stored electrons. Capacity is explicitly distinct from camera saturation/digital clipping, remains bound to sensor site/operating state/temperature applicability, and reports expectation-vs-capacity without clamping, blooming, overflow redistribution, or stochastic saturation claims.
183
+ - Added camera signal saturation-capacity assessment in dark-corrected photo-generated electron-equivalent units. The comparison deliberately excludes dark/other stored charge, does not reuse physical full-well capacity, and does not infer which analog/digital stage limits the camera response.
184
+ - Added exact canonical response-channel data binding from spectral quadrature through spatio-spectral reduction. EQE and A/W converters now reject numeric calibration-curve drift even when profile IDs and evidence references are unchanged; the binding is an exact data-identity mechanism, not a cryptographic integrity checksum.
185
+
186
+ ### Changed
187
+
188
+ - Engine API contract advances to `0.97.0`; production image-formation plan contract advances to `0.5.0`; scientific-assurance contract remains `0.1.0`; production capture snapshot advances to `0.3.0`; production plan consumer manifest remains `0.1.0`; image-formation contract remains `0.4.0`; Exposure Mode Resolver remains `0.5.0`; Exposure Duration Control remains `0.1.0`. The composed POC remains `0.20.0`; package version remains `0.6.0` until the next public release.
189
+
7
190
  ## 0.6.0 - 2026-09-29
8
191
 
9
192
  ### Added
@@ -28,6 +211,9 @@ Notable public changes to `@photivra/engine` are documented here.
28
211
 
29
212
  ### Fixed
30
213
 
214
+ - Hardened npm package-surface validation so every relative module re-exported by the built root `dist/index.js` must also be present in the packed tarball; added previously missing public `capture`, `composition`, `equipment`, and new `color` dist directories to the package whitelist.
215
+
216
+
31
217
  - Radial-distortion invertibility validation now uses scale-normalized, cancellation-resistant stationary-point solving so near-linear high-order profiles cannot hide an interior fold; unsafe derived normalized radii and malformed/sparse batch points fail closed as scientific input errors.
32
218
  - Reverse image-plane coordinate mapping now uses a physical-scale floating-point edge tolerance instead of a fixed normalized-UV tolerance.
33
219
 
package/CITATION.cff CHANGED
@@ -9,7 +9,7 @@ abstract: "An open TypeScript engine for the science and mathematics of photogra
9
9
  repository-code: "https://github.com/photivra/photivra"
10
10
  url: "https://photivra.com"
11
11
  license: "Apache-2.0"
12
- version: "0.6.0"
12
+ version: "1.0.0"
13
13
  keywords:
14
14
  - photography
15
15
  - camera optics
@@ -0,0 +1,76 @@
1
+ # Contributing
2
+
3
+ Contributions are welcome when they preserve scientific integrity, source provenance, API consistency, and the Apache-2.0 licensing boundary.
4
+
5
+ ## Development setup
6
+
7
+ Node.js 22.13 or newer is required for the repository's development/tooling workflow. The reproducible npm path is:
8
+
9
+ ```sh
10
+ npm ci
11
+ npm run check
12
+ npm run coverage
13
+ npm run build
14
+ npm run pack:check
15
+ ```
16
+
17
+ CI verifies maintained Node.js 22 (including minimum 22.13) and 24; prefer patched Node 24 under [the runtime policy](NODE_SUPPORT.md). For release preparation also run `npm run docs:check` and `npm run release:consumer-check` after build. The generated API reference must match root exports; regenerate with `node scripts/generate-api-reference.mjs` when public contracts change.
18
+
19
+ ## Before submitting
20
+
21
+ - Follow [docs/API_STYLE.md](docs/API_STYLE.md).
22
+ - Follow [docs/NUMERICAL_CORRECTNESS.md](docs/NUMERICAL_CORRECTNESS.md).
23
+ - Follow [docs/PROVENANCE.md](docs/PROVENANCE.md).
24
+ - Add meaningful analytical/regression tests.
25
+ - Update concise documentation when behavior, assumptions, limitations, schemas, version surfaces, or public APIs change.
26
+ - Preserve the browser-safe published-package boundary; Node-only transport code is repository-only contributor tooling and must not become a public package export.
27
+ - Keep npm/package version, `ENGINE_API_VERSION`, `POC_SIMULATION_API_VERSION`, and schema-specific versions distinct.
28
+ - For sensor/capture work, preserve native coordinate conventions, active-capture vs output-crop separation, optical-axis offsets, and independent X/Y sampling.
29
+ - For provenance/calibration work, keep evidence origin separate from reuse rights and never treat geometric sample pitch as photon-collection area.
30
+ - Do not submit copied or adapted third-party code/data unless its license and provenance are explicitly compatible and recorded.
31
+ - If generative tools assisted with code or prose, the contributor remains responsible for originality, licensing, scientific accuracy, confidentiality, and substantive human review.
32
+ - Do not rely on an AI system's statement that generated material is original, copyrightable, unpatented, or license-compatible as legal evidence.
33
+
34
+ ## Sensor/capture contribution checklist
35
+
36
+ Changes in sensor, capture, output, or radiometry code should explicitly answer:
37
+
38
+ - Which coordinate space does each point/vector/rectangle use?
39
+ - Does the change preserve native top-left/+X-right/+Y-down semantics?
40
+ - Are physical active capture and digital/output crop still separate?
41
+ - Does an off-center crop preserve optical-axis position?
42
+ - Are X/Y sampling differences preserved or deliberately rejected?
43
+ - Does output resampling preserve geometry unless an explicit transform says otherwise?
44
+ - Is physical focal length kept separate from diagonal-based 35 mm equivalence?
45
+ - Are unknown sensor facts left unknown instead of inferred?
46
+ - Is every evidence record legally usable for the way it is consumed?
47
+ - Is any approximate representation still labeled approximation?
48
+ - Does any radiometry change accidentally enable photon/noise claims without the readiness gate and defensible calibration?
49
+
50
+ ## Contributor certification
51
+
52
+ Contributions are made under the [Developer Certificate of Origin 1.1](DCO).
53
+
54
+ Every commit intended for inclusion should contain a `Signed-off-by` line. The simplest workflow is:
55
+
56
+ ```sh
57
+ git commit -s
58
+ ```
59
+
60
+ By signing off, the contributor certifies the DCO for that contribution, including the right to submit it under the project's open-source license and the public/indefinite nature of the contribution record.
61
+
62
+ ## Scientific changes
63
+
64
+ A pull request that changes calculations should include:
65
+
66
+ - the equation/model being implemented or changed;
67
+ - assumptions, coordinate conventions, and units;
68
+ - provenance/references;
69
+ - analytical or independently reproducible test cases;
70
+ - any numerical behavior change;
71
+ - uncertainty/approximation notes where relevant;
72
+ - compatibility impact on the root engine API and/or composed POC simulation API, if applicable;
73
+ - coordinate-system/invariance tests for geometry changes;
74
+ - evidence, reuse-rights, calibration/approximation status, and uncertainty/limitation treatment for sensor/radiometry changes.
75
+
76
+ Critical scientific regressions and unsupported scientific claims are release blocking.
package/DCO ADDED
@@ -0,0 +1,33 @@
1
+ Developer Certificate of Origin
2
+ Version 1.1
3
+
4
+ Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
5
+
6
+ Everyone is permitted to copy and distribute verbatim copies of this
7
+ license document, but changing it is not allowed.
8
+
9
+ Developer's Certificate of Origin 1.1
10
+
11
+ By making a contribution to this project, I certify that:
12
+
13
+ (a) The contribution was created in whole or in part by me and I
14
+ have the right to submit it under the open source license
15
+ indicated in the file; or
16
+
17
+ (b) The contribution is based upon previous work that, to the best
18
+ of my knowledge, is covered under an appropriate open source
19
+ license and I have the right under that license to submit that
20
+ work with modifications, whether created in whole or in part
21
+ by me, under the same open source license (unless I am
22
+ permitted to submit under a different license), as indicated
23
+ in the file; or
24
+
25
+ (c) The contribution was provided directly to me by some other
26
+ person who certified (a), (b) or (c) and I have not modified
27
+ it.
28
+
29
+ (d) I understand and agree that this project and the contribution
30
+ are public and that a record of the contribution (including all
31
+ personal information I submit with it, including my sign-off) is
32
+ maintained indefinitely and may be redistributed consistent with
33
+ this project or the open source license(s) involved.
@@ -0,0 +1,37 @@
1
+ # Photivra organization Node.js support policy
2
+
3
+ Adopted: 2026-09-26. Applies to every Node.js repository in the Photivra organization, including contributor tooling, CI, build/deployment tooling, and supported Node.js execution environments. It does not change browser support or the browser-safe engine boundary.
4
+
5
+ ## Maintained LTS only
6
+
7
+ "Actively maintained LTS" means an official Node.js release line in either **Active LTS** or **Maintenance LTS**, before its upstream end-of-life date. Current, prerelease/nightly, end-of-life, and commercial extended-support-only releases are not supported.
8
+
9
+ Use the official lifecycle, not "latest", a version-number parity rule, or an open-ended minimum version as evidence of support:
10
+
11
+ - https://nodejs.org/en/about/previous-releases
12
+ - https://github.com/nodejs/Release
13
+ - https://github.com/nodejs/Release/blob/main/schedule.json
14
+
15
+ As reverified against the official schedule on 2026-10-02 (original policy review 2026-09-26), Node 24 is Active LTS and Node 22 is Maintenance LTS. Node 26 is Current and is not eligible yet. Future dates must be reverified; entering LTS makes a line eligible for review, not automatically supported by every repository.
16
+
17
+ ## Repository baselines
18
+
19
+ An eligible upstream line is not an untested repository compatibility claim. Each repository must explicitly record and test its supported subset. Prefer the newest qualified Active LTS line for normal development and builds; retain a qualified Maintenance LTS line where compatibility is already supported.
20
+
21
+ This repository preserves its existing Node 22 and Node 24 CI coverage, including the Node 22.13.0 minimum-version regression job. The normal tooling baseline and pinned `@types/node` major remain **24**. Use current patched releases for ordinary development/deployment; a historical minimum-version regression job is not a deployment recommendation.
22
+
23
+ Node 22-compatible code must not assume Node 24-only APIs merely because contributor tooling uses Node 24 typings. Keep the Node 22 runtime tests and the public browser-safe package boundary. A broad existing `engines.node` range is a compatibility hint, not permission to claim support for Current or EOL lines. Any manifest-range change must update its lockfile and follow package compatibility/release review; this policy does not rewrite already-published packages.
24
+
25
+ ## CI and dependency enforcement
26
+
27
+ `.github/node-lts-policy.mjs` checks the actual Node build's LTS marker, this repository's approved major set, a reviewed upstream LTS date window, and the approved pinned typings major before dependency installation. `.github/test-node-lts-policy.mjs` covers acceptance and rejection boundaries. Both run in existing CI jobs; no additional CI matrix or service is introduced.
28
+
29
+ The lifecycle snapshot is intentionally local and reviewed, not fetched from the network during ordinary CI. It uses UTC dates and fails closed on the recorded end-of-life date. Reverify the official schedule before changing the snapshot, before a baseline/release decision, and during regular dependency maintenance. Do not extend an expired window or add a Current line merely to pass CI.
30
+
31
+ Routine minor/patch updates within an approved major may follow normal green-PR rules. Do not auto-merge a Node runtime, Node image, or `@types/node` major upgrade independently. Where Dependabot is configured, keep Node typings major upgrades out of its routine update queue while allowing supported-major updates.
32
+
33
+ ## Lifecycle changes
34
+
35
+ Add a newly eligible LTS line through one coordinated review of the support policy/guard, CI, local version files, build environments, typings, manifest/lockfile compatibility, and tests. Update only files that exist and are relevant; do not introduce a new runtime or infrastructure merely for uniformity. Remove a line from the support set and CI before upstream EOL, documenting downstream compatibility implications. Never silently raise a library's minimum runtime or advertise an untested line.
36
+
37
+ All existing scientific, security, provenance, regression, artifact, and release gates remain in force. This rule does not authorize npm publication, tags, public release, or a default runtime-major upgrade.
package/NOTICE CHANGED
@@ -7,3 +7,5 @@ Source code in this repository is made available under the Apache License,
7
7
  Version 2.0. The Apache License does not grant permission to use Photivra
8
8
  trade names, trademarks, service marks, product names, logos, or branding
9
9
  except as allowed by applicable law and the license itself.
10
+
11
+ This product includes DNG technology under license by Adobe.