@woosh/meep-engine 3.60.3 → 3.60.5

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 (514) hide show
  1. package/CHANGELOG.md +2602 -0
  2. package/CONTRIBUTING.md +7 -0
  3. package/MIGRATION_2_TO_3.md +136 -0
  4. package/SECURITY.md +4 -0
  5. package/editor/EditorCameraNavigation.d.ts +2 -1
  6. package/editor/EditorCameraNavigation.d.ts.map +1 -1
  7. package/editor/EditorCameraNavigation.js +51 -57
  8. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +3 -0
  9. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
  10. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +6 -0
  11. package/package.json +6 -2
  12. package/src/engine/EngineHarness.d.ts +3 -9
  13. package/src/engine/EngineHarness.d.ts.map +1 -1
  14. package/src/engine/EngineHarness.js +6 -8
  15. package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
  16. package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
  17. package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
  18. package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
  19. package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
  20. package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
  21. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
  22. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
  23. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
  24. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
  25. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
  27. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
  28. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  29. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
  30. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +1 -2
  31. package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.d.ts +14 -0
  32. package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.d.ts.map +1 -0
  33. package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.js +22 -0
  34. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +19 -3
  35. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  36. package/src/engine/graphics/ecs/trail3d/Trail3D.js +31 -4
  37. package/src/engine/graphics/ecs/trail3d/advance_trail.js +1 -1
  38. package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
  39. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  40. package/src/engine/graphics/ecs/water/Water.js +8 -0
  41. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +5 -5
  42. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +1 -1
  43. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +6 -6
  44. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  45. package/src/engine/graphics3/WaterSystem.js +731 -734
  46. package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
  47. package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
  48. package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
  49. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
  50. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  51. package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
  52. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
  53. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
  54. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
  55. package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
  56. package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
  57. package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
  58. package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
  59. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  60. package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
  61. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
  62. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
  63. package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
  64. package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
  65. package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
  66. package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
  67. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +10 -0
  68. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +1 -1
  69. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -1
  70. package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
  71. package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
  72. package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
  73. package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
  74. package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
  75. package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
  76. package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +2 -2
  77. package/src/engine/physics/cloth/ecs/cloth_geodesic.js +2 -2
  78. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  79. package/src/shade/playground/probe_clipmap/README.md +1 -0
  80. package/src/shade/playground/probe_clipmap/index.html +5 -0
  81. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  82. package/src/shade/playground/probe_clipmap/main.js +16 -2
  83. package/src/shade/playground/vgeo_scene/README.md +1 -1
  84. package/src/shade/playground/water_refraction/README.md +5 -6
  85. package/src/shade/playground/water_refraction/index.html +1 -1
  86. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  87. package/src/shade/renderer/Renderer.js +7 -5
  88. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +4 -6
  89. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -1
  90. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +34 -36
  91. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +1 -1
  92. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  93. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +162 -163
  94. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +1 -1
  95. package/src/shade/renderer/atmosphere/compute_mie_absorption.js +1 -1
  96. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +1 -1
  97. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +1 -1
  98. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -164
  99. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +1 -1
  100. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
  101. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
  102. package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
  103. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  104. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  105. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  106. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  107. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  108. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +4 -4
  109. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +4 -4
  110. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +2 -1
  111. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  112. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +18 -1
  113. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +2 -2
  114. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +1 -1
  115. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +1 -1
  116. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts +4 -5
  117. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  118. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +6 -7
  119. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
  120. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
  121. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
  122. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
  123. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
  124. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
  125. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
  126. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
  127. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  128. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +2 -8
  129. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +5 -5
  130. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  131. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +10 -10
  132. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +12 -0
  133. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  134. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +22 -0
  135. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +4 -4
  136. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  137. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +50 -13
  138. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +6 -0
  139. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  140. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +7 -0
  141. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts +13 -0
  142. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts.map +1 -0
  143. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.js +13 -0
  144. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +17 -0
  145. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  146. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +20 -0
  147. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
  148. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
  149. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
  150. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.d.ts +18 -0
  151. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.d.ts.map +1 -0
  152. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.js +42 -0
  153. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
  154. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +5 -4
  155. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
  156. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  157. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +13 -2
  158. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts +52 -0
  159. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts.map +1 -0
  160. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.js +250 -0
  161. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  162. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
  163. package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
  164. package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
  165. package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
  166. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
  167. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
  168. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
  169. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
  170. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
  171. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
  172. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
  173. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  174. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
  175. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
  176. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
  177. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
  178. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
  179. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
  180. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
  181. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
  182. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
  183. package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
  184. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
  185. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  186. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
  187. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
  188. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
  189. package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
  190. package/src/shade/renderer/light/environment/environment_level_1_blur_plan.d.ts +39 -0
  191. package/src/shade/renderer/light/environment/environment_level_1_blur_plan.d.ts.map +1 -0
  192. package/src/shade/renderer/light/environment/environment_level_1_blur_plan.js +119 -0
  193. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +15 -7
  194. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  195. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +66 -83
  196. package/src/shade/renderer/light/environment/graph_filter_environment_map.d.ts.map +1 -1
  197. package/src/shade/renderer/light/environment/graph_filter_environment_map.js +15 -6
  198. package/src/shade/renderer/light/environment/shader_blur_environment_map.d.ts +3 -0
  199. package/src/shade/renderer/light/environment/shader_blur_environment_map.d.ts.map +1 -0
  200. package/src/shade/renderer/light/environment/shader_blur_environment_map.js +111 -0
  201. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts +3 -0
  202. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts.map +1 -0
  203. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.js +128 -0
  204. package/src/shade/renderer/light/environment/shader_downsample_environment_map.d.ts.map +1 -1
  205. package/src/shade/renderer/light/environment/shader_downsample_environment_map.js +0 -1
  206. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  207. package/src/shade/renderer/material/GPUMaterialManager.d.ts +7 -0
  208. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  209. package/src/shade/renderer/material/GPUMaterialManager.js +11 -0
  210. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
  211. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  212. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
  213. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -3
  214. package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
  215. package/src/shade/renderer/postprocess/nss/NSS.js +1 -3
  216. package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.d.ts +5 -6
  217. package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.d.ts.map +1 -1
  218. package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.js +9 -10
  219. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  220. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +48 -49
  221. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  222. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +12 -16
  223. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +246 -246
  224. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +1 -2
  225. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -1
  226. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +34 -35
  227. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +2 -2
  228. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +2 -2
  229. package/src/shade/renderer/shader/chunk/atmosphere/chunk_compute_extinction.js +1 -1
  230. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +1 -1
  231. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +1 -1
  232. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_Schlick.d.ts +3 -3
  233. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_Schlick.js +3 -3
  234. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +9 -10
  235. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -1
  236. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +9 -10
  237. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +4 -4
  238. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +5 -5
  239. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +1 -2
  240. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -1
  241. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +1 -2
  242. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.d.ts +14 -1
  243. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.d.ts.map +1 -1
  244. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.js +19 -6
  245. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.d.ts +10 -1
  246. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.d.ts.map +1 -1
  247. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.js +14 -6
  248. package/src/shade/renderer/shader/chunk/random/murmur/chunk_murmur3_vec3u.d.ts +1 -1
  249. package/src/shade/renderer/shader/chunk/random/murmur/chunk_murmur3_vec3u.js +1 -1
  250. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  251. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
  252. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts +2 -3
  253. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts.map +1 -1
  254. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.js +7 -8
  255. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.d.ts +1 -1
  256. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.js +12 -12
  257. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +2 -2
  258. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/vsm/VSMPageManager.js +3 -4
  260. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
  261. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  262. package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
  263. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
  264. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
  265. package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
  266. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  267. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  268. package/src/shade/renderer/water/shader_water.js +22 -13
  269. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
  270. package/src/shade/renderer/water/shader_water_avboit.js +7 -7
  271. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
  272. package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
  273. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
  274. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +0 -19
  275. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
  276. package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +2 -52
  277. package/editor/REWORK_PLAN_2026_08.md +0 -692
  278. package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
  279. package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
  280. package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
  281. package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
  282. package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
  283. package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
  284. package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
  285. package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
  286. package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
  287. package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
  288. package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
  289. package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
  290. package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
  291. package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
  292. package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
  293. package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
  294. package/src/REVIEW_2026_08_06/adv-core.md +0 -511
  295. package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
  296. package/src/REVIEW_2026_08_06/adv-view.md +0 -446
  297. package/src/REVIEW_2026_08_06/api-core.md +0 -296
  298. package/src/REVIEW_2026_08_06/api-engine.md +0 -195
  299. package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
  300. package/src/REVIEW_2026_08_06/core-binary.md +0 -348
  301. package/src/REVIEW_2026_08_06/core-collection.md +0 -376
  302. package/src/REVIEW_2026_08_06/core-math.md +0 -221
  303. package/src/REVIEW_2026_08_06/core-process.md +0 -266
  304. package/src/REVIEW_2026_08_06/core-science.md +0 -223
  305. package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
  306. package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
  307. package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
  308. package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
  309. package/src/REVIEW_2026_08_06/engine-input.md +0 -197
  310. package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
  311. package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
  312. package/src/REVIEW_2026_08_06/generation.md +0 -176
  313. package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
  314. package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
  315. package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
  316. package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
  317. package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
  318. package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
  319. package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
  320. package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
  321. package/src/REVIEW_2026_08_06/view.md +0 -667
  322. package/src/REVIEW_2026_08_06.md +0 -610
  323. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
  324. package/src/core/bvh2/bvh3/NOTES.md +0 -2
  325. package/src/core/bvh8/NOTES.md +0 -63
  326. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
  327. package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
  328. package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
  329. package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
  330. package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
  331. package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
  332. package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
  333. package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
  334. package/src/core/geom/3d/gjk/NOTES.md +0 -8
  335. package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
  336. package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
  337. package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
  338. package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
  339. package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
  340. package/src/engine/REVIEW_2026_07_03.md +0 -211
  341. package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
  342. package/src/engine/control/first-person/DESIGN.md +0 -658
  343. package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
  344. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
  345. package/src/engine/control/first-person/TODO.md +0 -160
  346. package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
  347. package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
  348. package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
  349. package/src/engine/ecs/ik/PLAN.md +0 -179
  350. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
  351. package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
  352. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
  353. package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
  354. package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
  355. package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
  356. package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
  357. package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
  358. package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
  359. package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
  360. package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
  361. package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
  362. package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
  363. package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
  364. package/src/engine/network/CONGESTION_CONTROL.md +0 -87
  365. package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
  366. package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
  367. package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
  368. package/src/engine/physics/cloth/PLAN.md +0 -3056
  369. package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
  370. package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
  371. package/src/engine/physics/fluid/solver/NOTES.md +0 -46
  372. package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
  373. package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
  374. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
  375. package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
  376. package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
  377. package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
  378. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
  379. package/src/format/image/avif/DECISIONS.md +0 -545
  380. package/src/format/image/jpeg/NOTES.md +0 -3
  381. package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
  382. package/src/generation/COORDINATES.md +0 -54
  383. package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
  384. package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
  385. package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
  386. package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
  387. package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
  388. package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
  389. package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
  390. package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
  391. package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
  392. package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
  393. package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
  394. package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
  395. package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
  396. package/src/shade/RENDERER_CONTRACT.md +0 -697
  397. package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
  398. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
  399. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
  400. package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
  401. package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
  402. package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
  403. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
  404. package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
  405. package/src/shade/renderer/NOTES.md +0 -78
  406. package/src/shade/renderer/PLAN.md +0 -8
  407. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
  408. package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
  409. package/src/shade/renderer/atmosphere/NOTES.md +0 -6
  410. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
  411. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
  412. package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
  413. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
  414. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
  415. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
  416. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
  417. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
  418. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
  419. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
  420. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
  421. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
  422. package/src/shade/renderer/camera/orbital/README.md +0 -81
  423. package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
  424. package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
  425. package/src/shade/renderer/camera/orbital/index.js +0 -9
  426. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
  427. package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
  428. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
  429. package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
  430. package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
  431. package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
  432. package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
  433. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
  434. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
  435. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -483
  436. package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
  437. package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
  438. package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
  439. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
  440. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
  441. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
  442. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
  443. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -536
  444. package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
  445. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4225
  446. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
  447. package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
  448. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
  449. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
  450. package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
  451. package/src/shade/renderer/hiz/NOTES.md +0 -3
  452. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
  453. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
  454. package/src/shade/renderer/light/cluster/NOTES.md +0 -11
  455. package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
  456. package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
  457. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.d.ts +0 -13
  458. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.d.ts.map +0 -1
  459. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.js +0 -198
  460. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
  461. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
  462. package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
  463. package/src/shade/renderer/particles/DESIGN.md +0 -1011
  464. package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -283
  465. package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
  466. package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
  467. package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
  468. package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
  469. package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
  470. package/src/shade/renderer/postprocess/nss/NOTES.md +0 -339
  471. package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
  472. package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
  473. package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
  474. package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
  475. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
  476. package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
  477. package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
  478. package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
  479. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
  480. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
  481. package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
  482. package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
  483. package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -394
  484. package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -160
  485. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
  486. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
  487. package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
  488. package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
  489. package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
  490. package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
  491. package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
  492. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
  493. package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
  494. package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -932
  495. package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
  496. package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
  497. package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
  498. package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
  499. package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
  500. package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
  501. package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
  502. package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
  503. package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
  504. package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
  505. package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -4
  506. package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
  507. package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
  508. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
  509. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
  510. package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
  511. package/src/shade/wgsl/NOTES.md +0 -4
  512. package/src/view/elements/progress/segmented/segment_frame_transform.d.ts +0 -15
  513. package/src/view/elements/progress/segmented/segment_frame_transform.d.ts.map +0 -1
  514. package/src/view/elements/progress/segmented/segment_frame_transform.js +0 -69
@@ -1,511 +0,0 @@
1
- # Adversarial verification — core reports
2
-
3
- Method: throwaway jest specs (`__advcheck_*.spec.js`, run from `H:/git/moh` with
4
- `node_modules/.bin/jest --config jest.conf.json`, since deleted) plus direct source reading.
5
- Note: asserts ARE live under the jest harness (verified — `BIN-5` threw an assert error), so any
6
- finding whose only manifestation is an assert throw was checked for the production behaviour
7
- separately.
8
-
9
- Scope checked: all 13 CRITICALs, plus every MAJOR asserting "never / always / cannot".
10
- No finding was refuted outright. Six are downgraded for severity inflation.
11
-
12
- ---
13
-
14
- ## core-collection
15
-
16
- ### COLL-1
17
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
18
- - **Corrected severity**: MAJOR
19
- - **Evidence**: Ran the exact scenario. `p.output.asArray()` → `[5,7,4,1,3]` (expected `[1,3,4,5,7]`).
20
- `binarySearchLowIndex` (`core/collection/array/binarySearchLowIndex.js`) is self-documented as
21
- returning "index of the largest element <= el … or -1"; `handleAddition` passes that straight to
22
- `List.insert`. `List.insert(-1, el)` reaches the `else` branch → `splice(-1,0,el)`. All as claimed.
23
- - **Reason for downgrade**: ground 5. The class has **zero** real consumers in the repo — the single
24
- grep hit (`engine/network/time/JitterBuffer.js:65`) is a *comment* referencing the pattern, not an
25
- import. Nothing shipped is affected; this is a wholly broken public-API class, not a live defect.
26
-
27
- ### COLL-2
28
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
29
- - **Corrected severity**: MAJOR
30
- - **Evidence**: `m.set('a',1)` then `m.get('a') === undefined`, `m.getValueByKey('a') === undefined`,
31
- `m.getKeyByValue(1) === undefined` — all measured. Swapped usage works: `m.getKeyByValue('a') === 1`,
32
- `m.getValueByKey(1) === 'a'`. The JSDoc field types (`forward: Map<K,V>`, `backward: Map<V,K>`) and
33
- `add(key, value)` param names are indeed inverted relative to the writes.
34
- - **Reason for downgrade**: ground 5. This is a **naming/JSDoc inversion**, not data loss: the map is
35
- fully self-consistent under `add(value, key)`, nothing is dropped, and the sole in-repo consumer
36
- (`core/binary/EncodingBinaryBuffer.js`) already calls it in the working orientation. Note that
37
- core-binary.md's own "found sound" list states the BiMap orientation "is self-consistent in both
38
- directions" — the two reports agree on the facts and disagree only on framing. "Every accessor
39
- returns `undefined`" is true only for documented-name usage.
40
-
41
- ### COLL-3
42
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
43
- - **Corrected severity**: MAJOR
44
- - **Evidence**: `a.merge(b); m.add((...args)=>…); a.send1(42)` → handler received `[{ '0': 42 }]`
45
- (one element, an `arguments` object). `Signal.dispatch(...args)` is variadic (`Signal.js:328`), so
46
- `result.dispatch(arguments)` genuinely lands the whole arguments object in `args[0]`.
47
- - **Reason for downgrade**: ground 5. `Signal.prototype.merge` has no in-repo caller
48
- (`grep '\.merge('` finds only unrelated `merge()` methods). Total break of an unused public method.
49
-
50
- ### COLL-4
51
- - **Verdict**: CONFIRMED
52
- - **Evidence**: `new Deque().removeFirst()` → `undefined`, then `isEmpty() === false`, `size() === 15`.
53
- `removeFirst`'s JSDoc is `@returns {T|undefined}`, so calling it on an empty deque is in-contract.
54
-
55
- ### COLL-5
56
- - **Verdict**: CONFIRMED
57
- - **Evidence**: `new BinaryHeap(x=>x.score).pop()` → `undefined`, then `size() === -1`,
58
- `isEmpty() === false`, and the next `push({score:7})` threw
59
- `TypeError: Cannot read properties of undefined (reading 'score')`. `BinaryHeap.spec.js` itself
60
- asserts `pop()` on an empty heap is `undefined` (twice) and uses the
61
- `while ((x = h.pop()) !== undefined)` drain pattern, so popping past empty is sanctioned.
62
-
63
- ### COLL-6
64
- - **Verdict**: CONFIRMED
65
- - **Evidence**: `new FilteredListProjection(new List([1,2,3]), new List())` with `deferred=false`;
66
- after `input.add(4)` the console showed
67
- `Failed to dispatch handler [Function: update] TypeError: a.equals is not a function` at
68
- `invokeObjectEquals.js:9` via `array_set_diff.js:30`, and `p.output` stayed `[1,2,3]`. Silent stale
69
- output, exactly as described.
70
-
71
- ### COLL-7
72
- - **Verdict**: CONFIRMED
73
- - **Evidence**: `link(); input.add(3); input.add(5); input.remove(0)` → input `[5]`, output unchanged
74
- `[5,3]`. `link()`/`unlink()` only touch `input.on.added`.
75
-
76
- ### COLL-8
77
- - **Verdict**: CONFIRMED
78
- - **Evidence**: `it.initialize(['a','b','c']); it.initialize(['x','y'])` then draining yields three
79
- items `["x","y",<undefined>]` from a two-element array.
80
-
81
- ### COLL-9
82
- - **Verdict**: CONFIRMED
83
- - **Evidence**: reproduced the exact numbers — `a.equals(b) === true`, `a.hash() === -13796099888`,
84
- `b.hash() === 4190943312`. Hash/equals contract broken; hash is also not an int32.
85
-
86
- ### COLL-10
87
- - **Verdict**: CONFIRMED
88
- - **Evidence**: BigEndian-spec table with one `Uint32` row of value `1`, serialized and deserialized:
89
- `t2.spec.endianType` came back as LittleEndian and `t2.readCellValue(0,0) === 16777216`.
90
-
91
- ### COLL-11
92
- - **Verdict**: CONFIRMED
93
- - **Evidence**: `s.ensureCapacity(1); s.increment(0); s.frequency(3)` → **1** for an element never
94
- incremented. With a 1-word table the table index is identical for both, so the only differentiator
95
- is the counter offset — under the documented 16-counters-per-slot layout element 3 lands on
96
- counters 8..11 and must read 0. Source confirms `start = (hash & 3) << 2` with `start+i ∈ 0..15`
97
- and shift `(start+i) << 2 ∈ 0..60` against a `Uint32Array` (JS shifts mod 32).
98
-
99
- ---
100
-
101
- ## core-binary
102
-
103
- ### BIN-1
104
- - **Verdict**: CONFIRMED
105
- - **Corrected severity**: CRITICAL (stands)
106
- - **Evidence**: `b.writeUTF8String("Ж".repeat(3000)); b.position=0; b.readUTF8String()` → `""`
107
- (length 0). Same buffer with 3000 ASCII chars round-trips fine. Source confirms the mechanism:
108
- `setCapacity` copies `Math.min(oldLen, newLen, this.position)` bytes while `this.position` is still
109
- at the string-body start; `this.position = cursor` only happens after the loop. `BinaryBuffer` is
110
- core serialization infra with many live consumers — CRITICAL is warranted.
111
-
112
- ### BIN-2
113
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
114
- - **Corrected severity**: MAJOR
115
- - **Evidence** (static — executing it hangs by construction): `Localization.js:140-143` is
116
- `let _path = path.trim(); while (_path.endsWith('/') || _path.endsWith('\\')) { _path.slice(0, _path.length - 1); }`.
117
- `slice` is non-mutating and the result is discarded, so the guard can never become false. Infinite
118
- loop is certain.
119
- - **Reason for downgrade**: ground 5. Requires a caller to pass a trailing separator; the default
120
- argument has none and no in-repo caller supplies one. Real hang, narrow trigger.
121
-
122
- ### BIN-3
123
- - **Verdict**: CONFIRMED
124
- - **Evidence**: `writeUTF8String("\uD800abc"); writeUint32(0x41414141)` then read back →
125
- `"abcA"` and `0x00414141`. Stream desync exactly as described.
126
-
127
- ### BIN-4
128
- - **Verdict**: CONFIRMED
129
- - **Evidence**: `new StructureBuilder("Foo").build()` → `ReferenceError: type is not defined`.
130
- Source: `buildConstructorFunction(structure)` calls `buildTypePrototype(type, lines)`; `type` is
131
- only a parameter name of `buildTypePrototype` and is not in scope (ESM is strict mode).
132
-
133
- ### BIN-5
134
- - **Verdict**: CONFIRMED
135
- - **Evidence**: `new Type("Foo").clone()` → `Error: Name must be of type "string", instead was
136
- "undefined"` under live asserts. Source `Type.js:74-78` copies only `fields`; in a production
137
- bundle the assert is stripped and the clone silently carries `name === undefined`.
138
-
139
- ### BIN-6
140
- - **Verdict**: CONFIRMED
141
- - **Evidence**: `new DataViewStructAccessor({v: BinaryDataType.Uint64}).v` →
142
- `TypeError: this.$data.getUint64 is not a function`;
143
- `{v: BinaryDataType.Float16}` → `TypeError: this.$data.undefined is not a function`;
144
- `Uint32` control returns `0`. `DataType2DataViewReaders.js` indeed maps to the non-existent
145
- `getUint64`/`getInt64` and has no `Float16` entry.
146
-
147
- ### BIN-7
148
- - **Verdict**: CONFIRMED
149
- - **Evidence**: `s.set(5,true); s.shift(-1,0,10)` → only bit **6** set. Source `BitSet.js:547-553`:
150
- both branches of `shift` call `shift_right`.
151
-
152
- ### BIN-8
153
- - **Verdict**: CONFIRMED
154
- - **Evidence**: with a hashable key object, `capacity:1`: after `add(k,"v1"); add(k,"v2")` →
155
- `get(k) === undefined`, `size === 1`, and `clear()` threw
156
- `TypeError: Cannot read properties of undefined (reading 'indexOf')`. Source order confirms:
157
- `elements` is resolved at `:135`, eviction (`__removeElement` → `data.delete(key)`) at `:150`,
158
- push into the now-detached array at `:171`.
159
-
160
- ### BIN-9
161
- - **Verdict**: CONFIRMED
162
- - **Evidence**: `new ObservedEnum(7, {ONE:1, SEVEN:7}).hash()` →
163
- `TypeError: this.__validSet is not iterable`.
164
-
165
- ### BIN-10
166
- - **Verdict**: CONFIRMED
167
- - **Evidence**: `stringify({a: undefined})` → `{"a":"null"}` (quoted string).
168
-
169
- ### BIN-11
170
- - **Verdict**: CONFIRMED
171
- - **Evidence**: `stringify({'a"b': 1})` → `{"a"b":1}`; `JSON.parse` of it threw
172
- `SyntaxError: Expected ':' after property name in JSON at position 4`.
173
-
174
- ### BIN-12
175
- - **Verdict**: CONFIRMED
176
- - **Evidence**: `write_property({a:{b:0}}, ['x','a','b'], 1, 2, 31)` threw
177
- `Error: No no property or getter found for 'x' on [0]'x/a'`; the `part_offset === 0` control
178
- (`['a','b'], 0, 2`) correctly produced `{"a":{"b":31}}`.
179
-
180
- ### BIN-13
181
- - **Verdict**: CONFIRMED
182
- - **Evidence**: `a=new BoundedValue(0,10,0); b=new BoundedValue(5,10,2); a.copy(b)` →
183
- `a.equals(b) === false`, `a.getFraction() === 0.5` vs `b.getFraction() === 0.375`.
184
- `b.toJSON()` → `{"value":5,"limit":10}` (no lower limit). Binary round-trip yields
185
- `lower === 0`, `equals(b) === false`.
186
-
187
- ### BIN-14
188
- - **Verdict**: CONFIRMED
189
- - **Evidence** (read): `ConnectedBoxLayouter.js:132` is literally
190
- `const b1_cost_after = this.__compute_box_cost(b0);` two lines after the identical `b0` call, and
191
- the accept test at `:134` uses `b0_cost + b1_cost <= b0_cost_after + b1_cost_after`.
192
-
193
- ### BIN-15
194
- - **Verdict**: CONFIRMED
195
- - **Evidence**: `string_format_kebab_to_underscore("a-b-c")` → `"a_b-c"`.
196
-
197
- ### BIN-16
198
- - **Verdict**: CONFIRMED
199
- - **Evidence**: `engine.setLocaleDataset("en", new LocaleDataset()); engine.resolve("en","greeting")`
200
- → `undefined`. `LocalizationEngine.resolve` indexes `locale[fragment_key]` directly; `LocaleDataset`
201
- exposes only `hasKey`/`get` over a `#map` private field (verified: its prototype has exactly
202
- `['constructor','hasKey','get']` — there is not even a way to populate it).
203
-
204
- ### BIN-17
205
- - **Verdict**: CONFIRMED
206
- - **Evidence**: `compileReactiveToJS(ReactiveNegate.from(ReactiveLiteralNumber.from(-5)))` →
207
- `"--5"` (a SyntaxError when handed to `new Function`). Source `compileNegate` is
208
- `` return `-${compileExpression(exp.source)}`; `` with no parentheses, so the nested-negation
209
- `--this.a` case follows directly.
210
-
211
- ---
212
-
213
- ## core-process
214
-
215
- ### PROC-1
216
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
217
- - **Corrected severity**: MAJOR
218
- - **Evidence**: `anything().matches(42)` → `false`; `nothing().matches(42)` → `true`.
219
- `IsAnything.matches()` is `return false;` unconditionally.
220
- - **Reason for downgrade**: ground 5 (with a nod to ground 3). `anything()`/`nothing()` have **zero**
221
- in-repo callers, and every in-repo matcher use (`ObservedInteger.js`, `iteratorTask.js`) goes
222
- through `assert.that(...)`, which is compiled out of production. So the stated impact — "assert.that
223
- throws for every x" / "a guard that is supposed to be unreachable silently passes everything" — is a
224
- development-build-only concern. The matcher itself is genuinely inverted, so the defect is real.
225
-
226
- ### PROC-2
227
- - **Verdict**: CONFIRMED
228
- - **Evidence**: `allOf(isIn([3,7]), not(equalTo(7))).matches(2)` →
229
- `TypeError: Cannot read properties of undefined (reading 'appendDescriptionOf')`;
230
- `hasItem(1).matches([])` → `TypeError: … (reading 'appendText')`. Default parameter values are not
231
- inherited by overrides, as claimed.
232
- - **Note**: same caveat as PROC-1 — the in-repo reach is `assert.that`, i.e. dev builds. MAJOR is fine
233
- for a public matcher API whose documented single-arg form throws.
234
-
235
- ### PROC-3
236
- - **Verdict**: CONFIRMED
237
- - **Evidence**: `new DescribeAs("value must be %0 or %1", equalTo(1), ["A","B"]).describeTo(d)` wrote
238
- the literal `"value must be %0 or %1"`. All three sub-defects are visible in the source
239
- (`matchAll` iterator has no `.length`; `match.groups[1]`; `textStart = match[0].length`).
240
-
241
- ### PROC-4 (MINOR, verified opportunistically)
242
- - **Verdict**: CONFIRMED
243
- - **Evidence**: `new InMemoryDescriptor().appendValue(undefined).value` → `"null"`.
244
-
245
- ### PROC-6
246
- - **Verdict**: CONFIRMED
247
- - **Corrected severity**: CRITICAL (stands)
248
- - **Evidence**: `A = failingTask(); B.addDependency(A); ex.run(A); ex.run(B)` →
249
- `A.state === 3 (FAILED)`, `B.state === 0 (INITIAL)`, `ex.contains(B) === false`,
250
- `queueUnresolved.length === 0`, and neither `B.on.failed` nor `B.on.completed` fired.
251
- `ConcurrentExecutor.js:286` FAILED branch only splices. `ConcurrentExecutor` is live engine infra.
252
-
253
- ### PROC-7
254
- - **Verdict**: CONFIRMED
255
- - **Evidence**: `emptyTask().executeSync()` leaves `state.getValue() === 0` (INITIAL);
256
- `TaskState.SUCCEEDED === 4`. Source `Task.js:214` never assigns `this.state`.
257
-
258
- ### PROC-8
259
- - **Verdict**: CONFIRMED
260
- - **Evidence**: `ignoreFailureTask(failingTask(new Error("boom")))`, initialized then `cycle()` →
261
- the wrapper rethrows `Error: boom`. `failingTask` is the repo's own canonical failing task and it
262
- fails by throwing, so the wrapper does not cover its own package's failure idiom.
263
-
264
- ### PROC-9
265
- - **Verdict**: CONFIRMED
266
- - **Evidence**: `new RemainingTimeEstimator(10); e.update(1000, 0.5); e.estimate(0.5)` → `9999.9995`
267
- (correct answer 1000). `estimate` divides by `sampleCount`, never by the number of filled slots.
268
-
269
- ### PROC-10
270
- - **Verdict**: CONFIRMED
271
- - **Corrected severity**: CRITICAL (stands)
272
- - **Evidence**: end-to-end `do(A); do(B); mark("m1"); undo(); do(C)` →
273
- `history.length === 1`, `cursor === 1`, `marks === [2]`; the following `redo()` threw
274
- `TypeError: Cannot read properties of undefined (reading 'apply')`. Ordinary editor sequence;
275
- `ActionProcessor` is referenced by 51 files.
276
-
277
- ### PROC-11
278
- - **Verdict**: CONFIRMED
279
- - **Corrected severity**: CRITICAL (stands)
280
- - **Evidence**: `ap.doMany([good, throwing])` — after 60 ms the returned promise is still `pending`
281
- and jest reported the escaped `action boom` rejection. A subsequent `ap.do(...)` is also still
282
- `pending` after 60 ms with `history.length` stuck at 1: the processor is bricked.
283
-
284
- ### PROC-12
285
- - **Verdict**: CONFIRMED
286
- - **Evidence**: with `historyMarkLimit = 2`, 6 do+mark pairs leave `marks.length === 6`,
287
- `history.length === 6`. With `historyMemoryLimit = 3000` and 10×1000-byte actions,
288
- `historyMemoryUsage === 10000`, `history.length === 10`, no throw. Both caps inert, as claimed;
289
- `lastMark = min2(marks.length, historyMemoryLimit) - 1` makes `lastMark + 1 < marks.length` always
290
- false.
291
-
292
- ### PROC-15
293
- - **Verdict**: CONFIRMED
294
- - **Evidence**: `new Future((res, rej) => { rej(new Error("nope")); res(42); }); f.resolve();` →
295
- `f.state === 2 (RESOLVED)` and `f.then(ok, err)` invoked the **ok** branch with `42`.
296
-
297
- ### PROC-16
298
- - **Verdict**: CONFIRMED
299
- - **Evidence**: a watchdog whose action calls `wd.start()` to re-arm — after 80 ms with a 5 ms
300
- timeout, `barks === 1` and `isActive() === false`. Silently dead after the first bark.
301
-
302
- ### PROC-17
303
- - **Verdict**: CONFIRMED
304
- - **Evidence**: minimal node repro of the exact shape (`p.catch(()=>{})` by the caller +
305
- `p.finally(cb)` discarded) produced `unhandledRejection count = 1`. Both cited sites
306
- (`PromiseWatcher.js:45`, `OnDemandWorkerManager.js:135`) discard the derived promise.
307
-
308
- ### PROC-18
309
- - **Verdict**: CONFIRMED
310
- - **Evidence**: `CompositeProcess([a,b])` through `initialize(); startup(); finalize()` →
311
- composite `"finalized"`, children `"stopped"` (not `"finalized"`). The path through
312
- `BaseProcess.finalize` → `this.shutdown()` (the override) is exactly as described.
313
-
314
- ### PROC-19
315
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
316
- - **Corrected severity**: MAJOR
317
- - **Evidence**: `extractTransferables({a: null}, [])` →
318
- `TypeError: Cannot read properties of null (reading 'buffer')`. Confirmed.
319
- - **Reason for downgrade**: ground 5. `core/process/worker/extractTransferables.js` has **no
320
- importer anywhere in the repo** — the only occurrences of the name are inside `WorkerBuilder.js`'s
321
- generated worker source string (line 120), which carries its own `obj === null` guard. So the
322
- stated blast radius ("any worker payload containing a null field crashes before the message is
323
- posted") is unreachable on the shipped path.
324
-
325
- ### PROC-20
326
- - **Verdict**: CONFIRMED
327
- - **Corrected severity**: CRITICAL (stands, with a narrow trigger)
328
- - **Evidence** (read; needs a real Worker to execute): `WorkerProxy.js:136-159` — inside the
329
- `new Promise` executor, `if (!trySendMessage(...)) { array_remove_first(pending, request); }` and
330
- nothing else. Neither `resolve` nor `reject` runs, and the request is no longer reachable by
331
- `__handleMessage`/`__failAllPending`. `WorkerProxy` is used by 9 files. The trigger requires
332
- `postMessage` to throw (non-cloneable payload), which PROC-21 makes reachable.
333
-
334
- ### PROC-21
335
- - **Verdict**: CONFIRMED
336
- - **Evidence** (read): `WorkerProxy.js:40` is
337
- `if (value.hasOwnProperty('toJSON') && value.toJSON === "function")` — comparing a function value
338
- against the string `"function"`. Unreachable branch; the `toJSON` sanitisation path is dead.
339
-
340
- ### PROC-22
341
- - **Verdict**: CONFIRMED
342
- - **Evidence**: nodes `X,P,Q,R` with `Forward` edges `P→X`, `X→Q`, `X→R` → `colorizeGraph` returned
343
- `[1,1,2,2]` and the library's own `validateGraphColoring(colors, graph)` returned **false** on that
344
- output. `graphToMatrix` writes only `data[i*V + otherIdx]`.
345
-
346
- ### PROC-23
347
- - **Verdict**: CONFIRMED
348
- - **Evidence**: a graph with `createEdge("A","B", EdgeDirectionType.Backward)` produced DOT with both
349
- node declarations and **zero** `->` lines. `Backward` is a first-class enum member
350
- (`graph/Edge.js:8-12`).
351
-
352
- ### PROC-24
353
- - **Verdict**: CONFIRMED
354
- - **Evidence**: `A`,`B` joined by two parallel undirected edges →
355
- `graph_compute_laplacian_matrix` gave `[[2,-1],[-1,2]]`, row sums `1`; `graph.getNodeDegree("A")`
356
- is `2`. Correct Laplacian is `[[2,-2],[-2,2]]`.
357
- - **Note**: the finding files this against `graph_compute_adjacency_matrix.js`, but that function's
358
- JSDoc explicitly documents "Writes 1 to matrix elements where nodes are connected" — it behaves as
359
- specified. The actual defect is in the *composition* inside `graph_compute_laplacian_matrix.js`,
360
- whose own comment ("Uint32 prevents silent overflow for high-degree or **multi-edge** graphs")
361
- shows multigraphs are in scope. Severity unchanged; fix site is the Laplacian.
362
-
363
- ### PROC-25
364
- - **Verdict**: CONFIRMED
365
- - **Evidence**: reproduced the heap semantics directly — min-heap on `-weight`, elements
366
- `{10, 3, 5}`, then raised the leaf's weight `3 → 11` and called only `bubbleDown(index)` as
367
- `mn_graph_collapse_weighted_edge.js:69` does. Heap array stayed `[10, 11, 5]` and `pop()` returned
368
- **10**, not 11. `BinaryHeap.updateElementScore` (which does `bubbleUp` then `bubbleDown`) exists
369
- and is the right call.
370
-
371
- ### PROC-26
372
- - **Verdict**: CONFIRMED
373
- - **Evidence** (read; browser-only): `obtainClipBoard.js:8` runs the permission queries **only** when
374
- `navigator.clipboard === undefined`, then unconditionally `return navigator.clipboard;`. The guard
375
- is inverted against the function's own doc line ("verifying read/write permissions are granted when
376
- necessary"): on the common path (clipboard present) it verifies nothing, and on the branch it does
377
- take it can only ever return `undefined`.
378
- - **Caveat on the stated scenario**: the specific "resolves with `undefined`" outcome additionally
379
- requires `navigator.permissions.query({name:"clipboard-read"})` to resolve `"granted"` in an
380
- environment with no `navigator.clipboard`. In environments where `permissions` is missing or the
381
- name is unsupported the promise rejects and the file-picker fallback *is* reached. Not demonstrated;
382
- the inverted guard itself is not in doubt.
383
-
384
- ---
385
-
386
- ## core-math
387
-
388
- ### MATH-1
389
- - **Verdict**: CONFIRMED
390
- - **Corrected severity**: CRITICAL (stands)
391
- - **Evidence**: `sdnoise1(d, -0.9)` → **-22.0446**. Sweep of `x ∈ [-5,5]` at 1e5 points →
392
- range `[-323.94, +242.86]`; the same sweep over `[0,5]` → `[-0.173, +0.401]`.
393
- `sdnoise3` max adjacent step over `[-3,3]` = **0.2335** vs **0.00154** over `[1,7]` — a 150×
394
- discontinuity. Live consumer chain verified: `core/math/noise/curl_noise_3d.js:18` samples
395
- `sdnoise3(p_z0, x - 231.141, …)` and is imported by
396
- `engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js:7`.
397
-
398
- ### MATH-2
399
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
400
- - **Corrected severity**: MAJOR
401
- - **Evidence**: `hammersley_sequence(i,2,8)` for `i=0..7` → `[0, 0.625, 0.125, 0.5625, 0.625,
402
- 0.3125, 0.5625, 0.4375]` — **6 distinct values out of 8**. The sibling `halton_sequence(2,i)`
403
- correctly gives `[0, 0.5, 0.25, 0.75, 0.125, 0.625, 0.375, 0.875]`.
404
- - **Reason for downgrade**: ground 5. `hammersley_sequence` has **no importer in the repo**
405
- (`grep 'from .*hammersley_sequence.js'` → nothing). The report's implied live consumers are wrong:
406
- `hammersley_sequence_2d.js` does *not* call it — it uses `radical_inverse_VdC_base_2` — and
407
- `generate_hammersley_jitter.js` goes through `hammersley_sequence_2d`. So nothing shipped samples
408
- the broken sequence.
409
-
410
- ### MATH-3
411
- - **Verdict**: CONFIRMED
412
- - **Evidence**: with `[1..10]` — `(0.9,0.9)` → **10** (the maximum); `(0.5,0.5)` → **6** while
413
- `computeStatisticalMedian` on the same data → **5**; `(0,0.4)` → **3**. Existing spec cases on
414
- `[0..9]` (`(0,0.5) → 2`, `(0.5,1) → 7`) are as the report states.
415
-
416
- ### MATH-4
417
- - **Verdict**: CONFIRMED
418
- - **Evidence**: `roundFair(-2.3, ()=>0.9)` → `-3`, `roundFair(-2.3, ()=>0.1)` → `-3`;
419
- mean over 10 000 `Math.random` draws = **-3.0** exactly (expected -2.3). Positive control
420
- `roundFair(2.3, …)` mean = 2.3067, so only the negative path is broken.
421
-
422
- ### MATH-5
423
- - **Verdict**: CONFIRMED
424
- - **Evidence**: `fract(-0.1)` → `-0.1`; `fract(1e10)` → **8589934592**;
425
- `fract(2147483648.5)` → **4294967296.5**.
426
- - **Note on ground 4**: `fract.spec.js` does pin the negative-truncation behaviour
427
- (`expect(fract(-0.1)).toBeCloseTo(-0.1)`), which contradicts the JSDoc's own
428
- "calculated as x - floor(x)" + GLSL citation. That half is genuinely contested. The 2³¹ wrap is not:
429
- the result is not even in `(-1,1)` under any reading. Finding stands.
430
-
431
- ### MATH-6
432
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
433
- - **Corrected severity**: MINOR
434
- - **Evidence**: `squirrel3(0)` → 436901382, `squirrel3(1)` → 1910996822; over inputs `0..199999` it
435
- emits **199 763** distinct values (237 collisions), whereas an `Math.imul`/`>>>` implementation of
436
- the same construction is a bijection on 32 bits. Source confirms `value * BIT_NOISE1` /
437
- `hash *= BIT_NOISE3` are double multiplies and both shifts are arithmetic `>>`.
438
- - **Reason for downgrade**: ground 5. `squirrel3` has **zero** importers in the repo; nothing
439
- contractual promises a bijection (`@returns {number} signed 32-bit integer`); and the file's own
440
- header already records the symptom ("Personally I found it to have low entropy"). This is a hash
441
- *quality* deviation, not a wrong-answer defect.
442
-
443
- ### MATH-7
444
- - **Verdict**: CONFIRMED
445
- - **Evidence**: `m = [1,-2,5,3]`; after `m2_svd(U,S,V,sig,m)`, reconstructing with the *exact* helper
446
- from `m2_svd.spec.js` (`m2_transpose` + two `m2_multiply`) gives **`[1,5,-2,3]`** — the transpose of
447
- `m`, while the JSDoc asserts `m = U * Σ * V^T`. For `m = [1,2,3,4]`, `m2_polar_decomp` gives
448
- `S*R = [0.15385, 2.23077, 1.23077, 4.84615]` (neither `m` nor `mᵀ`) while `R*S = [1,3,2,4] = mᵀ`;
449
- the two polar JSDocs state `m = S*R` and `m = R*S` respectively, so at most one can be right and in
450
- fact neither holds. The existing spec only reconstructs symmetric inputs, where the transpose is
451
- invisible.
452
- - **Note**: I verified the in-package inconsistency and the doc contradiction directly. The claimed
453
- downstream MLS-MPM consequence is outside my scope and was not independently verified.
454
-
455
- ### MATH-8
456
- - **Verdict**: CONFIRMED-BUT-DOWNGRADED
457
- - **Corrected severity**: MINOR
458
- - **Evidence**: round-tripped tables of 255 / 256 / 257 entries through
459
- `toBinaryBuffer`/`fromBinaryBuffer`: data length after = 255 / **0** / 257. Exactly-256 entries
460
- reconstruct as an empty table, silently.
461
- - **Reason for downgrade**: ground 4/5. Both methods are marked
462
- `@deprecated Use serialization adapter instead`, so the broken path is not the supported one.
463
-
464
- ### MATH-9 / MATH-10 (MINOR, verified opportunistically)
465
- - **Verdict**: CONFIRMED. `copysign(3,0)` → `-3`, `copysign(3,NaN)` → `-3`;
466
- `softmax([1000,1],0,2)` → `NaN`, `softmax([800,801],1,2)` → `NaN`.
467
-
468
- ---
469
-
470
- ## core-science
471
-
472
- ### SCI-1
473
- - **Verdict**: CONFIRMED
474
- - **Evidence**: `c = new Color(1,0,0,0.25)` → `color_darken(c,0.5).a`, `color_lighten(c,0.5).a`,
475
- `color_saturate(c,0.5).a`, `color_desaturate(c,0.5).a` all measured **1**, while
476
- `color_darken(c,0).a === 0.25` (the fast path returns the input). The alpha discontinuity at
477
- `amount → 0` is real.
478
-
479
- ### SCI-2
480
- - **Verdict**: CONFIRMED
481
- - **Evidence**: `Color.parse('rgba(0,0,0,1)')` with a listener attached, then
482
- `c.parse('rgba(0,0,0,0.5)')` → `c.a === 0.5` but the listener fired **0** times.
483
- `new Color(0,0,0,1).parse('#FF000080')` fired with payload
484
- `[1, 0, 0, 0.50196, 0, 0, 0, 0.50196]` — the 8th argument (previous alpha) should be `1`.
485
-
486
- ### SCI-3
487
- - **Verdict**: CONFIRMED
488
- - **Evidence**: round-tripping through the module's own forward model —
489
- `kelvin_to_rgb` at 1500 K → `[1, 0.419469, 0]` → `rgb_to_kelvin` → **1000**;
490
- 1900 K → **1000**; 2000 K → **1000**; 3000 K → 3000 and 5000 K → 5000 round-trip exactly.
491
- The collapse is confined to the `b === 0` band exactly as described.
492
-
493
- ### SCI-5 / SCI-6 / SCI-7 (MINOR, verified opportunistically)
494
- - **Verdict**: CONFIRMED. `new Color(1,0,0,1).toUint32()` → `-16776961`, white → `-1`.
495
- `setHCL(-1e-17, 1, 0.5)` produced NaN channels (caught by `assert.notNaN` under the dev harness;
496
- stripped in production, so the NaN lands). `parse_color('#fff')` → `[255, 15, NaN, 1]`.
497
-
498
- ---
499
-
500
- ## Tally
501
-
502
- 67 findings checked — all 13 CRITICALs, 45 MAJORs, and 9 MINORs verified opportunistically.
503
- **58 confirmed as stated, 9 confirmed with corrected (lower) severity, 0 refuted.**
504
-
505
- Downgraded: COLL-1, COLL-2, COLL-3, BIN-2, PROC-1, PROC-19, MATH-2, MATH-6, MATH-8.
506
- Every downgrade is ground-5 severity inflation: the defect is real but the stated blast radius does
507
- not exist on any shipped path (no importer / assert-only reach / guarded duplicate is what actually
508
- ships), or the code is deprecated, or the API is self-consistent under a different naming.
509
-
510
- CRITICALs that survive at CRITICAL: BIN-1, PROC-6, PROC-10, PROC-11, PROC-20, MATH-1 (6 of 13).
511
- Downgraded to MAJOR: COLL-1, COLL-2, COLL-3, BIN-2, PROC-1, PROC-19, MATH-2 (7 of 13).