@woosh/meep-engine 2.168.1 → 2.169.1

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 (624) hide show
  1. package/README.md +2 -2
  2. package/build/bundle-worker-image-decoder.js +1 -1
  3. package/editor/process/symbolic/make3DSymbolicDisplay.js +1 -1
  4. package/editor/view/ecs/EntityList.js +1 -1
  5. package/editor/view/ecs/components/particles/ParticleLayerController.js +1 -1
  6. package/editor/view/makeEntityDecorators.js +1 -1
  7. package/package.json +1 -1
  8. package/src/REVIEW_2026_08_06/adv-core.md +511 -0
  9. package/src/REVIEW_2026_08_06/adv-gfx.md +480 -0
  10. package/src/REVIEW_2026_08_06/adv-view.md +446 -0
  11. package/src/REVIEW_2026_08_06/api-core.md +296 -0
  12. package/src/REVIEW_2026_08_06/api-engine.md +195 -0
  13. package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +507 -0
  14. package/src/REVIEW_2026_08_06/core-binary.md +348 -0
  15. package/src/REVIEW_2026_08_06/core-collection.md +376 -0
  16. package/src/REVIEW_2026_08_06/core-math.md +221 -0
  17. package/src/REVIEW_2026_08_06/core-process.md +266 -0
  18. package/src/REVIEW_2026_08_06/core-science.md +223 -0
  19. package/src/REVIEW_2026_08_06/engine-ai-nav.md +279 -0
  20. package/src/REVIEW_2026_08_06/engine-animation.md +167 -0
  21. package/src/REVIEW_2026_08_06/engine-asset.md +166 -0
  22. package/src/REVIEW_2026_08_06/engine-ecs.md +920 -0
  23. package/src/REVIEW_2026_08_06/engine-input.md +197 -0
  24. package/src/REVIEW_2026_08_06/engine-misc.md +248 -0
  25. package/src/REVIEW_2026_08_06/engine-terrain.md +52 -0
  26. package/src/REVIEW_2026_08_06/generation.md +176 -0
  27. package/src/REVIEW_2026_08_06/geom-2d.md +434 -0
  28. package/src/REVIEW_2026_08_06/geom-3d.md +117 -0
  29. package/src/REVIEW_2026_08_06/gfx-gi.md +143 -0
  30. package/src/REVIEW_2026_08_06/gfx-render.md +740 -0
  31. package/src/REVIEW_2026_08_06/gfx-texture.md +690 -0
  32. package/src/REVIEW_2026_08_06/prior-criticals.md +49 -0
  33. package/src/REVIEW_2026_08_06/prior-highs.md +138 -0
  34. package/src/REVIEW_2026_08_06/test-gaps.md +364 -0
  35. package/src/REVIEW_2026_08_06/view.md +667 -0
  36. package/src/REVIEW_2026_08_06.md +610 -0
  37. package/src/core/IdPool.d.ts +2 -2
  38. package/src/core/IdPool.d.ts.map +1 -1
  39. package/src/core/IdPool.js +1 -1
  40. package/src/core/binary/32BitEncoder.d.ts +2 -3
  41. package/src/core/binary/32BitEncoder.d.ts.map +1 -1
  42. package/src/core/binary/32BitEncoder.js +1 -1
  43. package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
  44. package/src/core/binary/BinaryBuffer.js +12 -1
  45. package/src/core/binary/BitImage2.d.ts +5 -1
  46. package/src/core/binary/BitImage2.d.ts.map +1 -1
  47. package/src/core/binary/BitImage2.js +5 -1
  48. package/src/core/bvh2/bvh3/BVH.d.ts +2 -2
  49. package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
  50. package/src/core/bvh2/bvh3/BVH.js +1 -1
  51. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.d.ts +2 -2
  52. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.d.ts.map +1 -1
  53. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.js +86 -86
  54. package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.d.ts +2 -2
  55. package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.d.ts.map +1 -1
  56. package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.js +1 -1
  57. package/src/core/bvh8/build/NodeProxy.d.ts.map +1 -1
  58. package/src/core/bvh8/build/NodeProxy.js +314 -308
  59. package/src/core/cache/Cache.d.ts +4 -4
  60. package/src/core/cache/Cache.d.ts.map +1 -1
  61. package/src/core/cache/Cache.js +3 -3
  62. package/src/core/cache/LoadingCache.d.ts +1 -1
  63. package/src/core/cache/LoadingCache.js +2 -2
  64. package/src/core/cache/wtinylfu/CacheWTinylfu.d.ts +2 -2
  65. package/src/core/cache/wtinylfu/CacheWTinylfu.js +2 -2
  66. package/src/core/collection/array/array_index_by_equality.d.ts +2 -2
  67. package/src/core/collection/array/array_index_by_equality.d.ts.map +1 -1
  68. package/src/core/collection/array/array_index_by_equality.js +1 -1
  69. package/src/core/collection/array/array_pick_best_element.d.ts +2 -2
  70. package/src/core/collection/array/array_pick_best_element.d.ts.map +1 -1
  71. package/src/core/collection/array/array_pick_best_element.js +1 -1
  72. package/src/core/collection/array/array_pick_best_elements.d.ts +2 -2
  73. package/src/core/collection/array/array_pick_best_elements.d.ts.map +1 -1
  74. package/src/core/collection/array/array_pick_best_elements.js +1 -1
  75. package/src/core/collection/array/array_set_diff.d.ts +2 -3
  76. package/src/core/collection/array/array_set_diff.d.ts.map +1 -1
  77. package/src/core/collection/array/array_set_diff.js +1 -1
  78. package/src/core/collection/array/array_set_diff_sorting.d.ts +2 -2
  79. package/src/core/collection/array/array_set_diff_sorting.d.ts.map +1 -1
  80. package/src/core/collection/array/array_set_diff_sorting.js +1 -1
  81. package/src/core/collection/array/iterator/ArrayIteratorRandom.d.ts +2 -1
  82. package/src/core/collection/array/iterator/ArrayIteratorRandom.d.ts.map +1 -1
  83. package/src/core/collection/heap/BinaryHeap.d.ts +2 -2
  84. package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
  85. package/src/core/collection/heap/BinaryHeap.js +1 -1
  86. package/src/core/collection/list/List.d.ts +32 -17
  87. package/src/core/collection/list/List.d.ts.map +1 -1
  88. package/src/core/collection/list/List.js +43 -9
  89. package/src/core/collection/list/SortedListProjection.d.ts.map +1 -1
  90. package/src/core/collection/list/SortedListProjection.js +4 -1
  91. package/src/core/collection/map/BiMap.d.ts +25 -2
  92. package/src/core/collection/map/BiMap.d.ts.map +1 -1
  93. package/src/core/collection/map/BiMap.js +57 -3
  94. package/src/core/collection/map/HashMap.d.ts +2 -2
  95. package/src/core/collection/map/HashMap.d.ts.map +1 -1
  96. package/src/core/collection/map/HashMap.js +1 -1
  97. package/src/core/collection/set/ArraySet.d.ts +2 -2
  98. package/src/core/collection/set/ArraySet.d.ts.map +1 -1
  99. package/src/core/collection/set/ArraySet.js +1 -1
  100. package/src/core/collection/table/RowFirstTable.d.ts +2 -2
  101. package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
  102. package/src/core/collection/table/RowFirstTable.js +1 -1
  103. package/src/core/collection/table/RowFirstTableSpec.js +4 -4
  104. package/src/core/debug/matchers/IsAnything.d.ts.map +1 -1
  105. package/src/core/debug/matchers/IsAnything.js +5 -1
  106. package/src/core/events/signal/Signal.d.ts.map +1 -1
  107. package/src/core/events/signal/Signal.js +3 -1
  108. package/src/core/fsm/simple/SimpleStateMachineDescription.d.ts +2 -2
  109. package/src/core/fsm/simple/SimpleStateMachineDescription.d.ts.map +1 -1
  110. package/src/core/fsm/simple/SimpleStateMachineDescription.js +1 -1
  111. package/src/core/geom/2d/bvh/BVH2D.d.ts +2 -2
  112. package/src/core/geom/2d/bvh/BVH2D.d.ts.map +1 -1
  113. package/src/core/geom/2d/bvh/BVH2D.js +1 -1
  114. package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +433 -0
  115. package/src/core/geom/2d/polygon/polygon2_is_counter_clockwise.d.ts +31 -0
  116. package/src/core/geom/2d/polygon/polygon2_is_counter_clockwise.d.ts.map +1 -0
  117. package/src/core/geom/2d/polygon/polygon2_is_counter_clockwise.js +84 -0
  118. package/src/core/geom/2d/polygon/polygon2_signed_area.d.ts +24 -2
  119. package/src/core/geom/2d/polygon/polygon2_signed_area.d.ts.map +1 -1
  120. package/src/core/geom/2d/polygon/polygon2_signed_area.js +52 -34
  121. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +28 -0
  122. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +1 -0
  123. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +86 -0
  124. package/src/core/geom/2d/polygon/polygon2_triangulate.d.ts +40 -0
  125. package/src/core/geom/2d/polygon/polygon2_triangulate.d.ts.map +1 -0
  126. package/src/core/geom/2d/polygon/polygon2_triangulate.js +1280 -0
  127. package/src/core/geom/2d/polygon/polygon2_triangulation_deviation.d.ts +28 -0
  128. package/src/core/geom/2d/polygon/polygon2_triangulation_deviation.d.ts.map +1 -0
  129. package/src/core/geom/2d/polygon/polygon2_triangulation_deviation.js +77 -0
  130. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.d.ts +2 -2
  131. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.d.ts.map +1 -1
  132. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.js +1 -1
  133. package/src/core/geom/2d/quad-tree/qt_query_data_raycast.d.ts +2 -2
  134. package/src/core/geom/2d/quad-tree/qt_query_data_raycast.d.ts.map +1 -1
  135. package/src/core/geom/2d/quad-tree/qt_query_data_raycast.js +1 -1
  136. package/src/core/geom/2d/triangle/tri2_rasterize_conservative.d.ts +6 -3
  137. package/src/core/geom/2d/triangle/tri2_rasterize_conservative.d.ts.map +1 -1
  138. package/src/core/geom/2d/triangle/tri2_rasterize_conservative.js +26 -13
  139. package/src/core/geom/2d/triangle/tri2_signed_area.d.ts +17 -1
  140. package/src/core/geom/2d/triangle/tri2_signed_area.d.ts.map +1 -1
  141. package/src/core/geom/2d/triangle/tri2_signed_area.js +35 -23
  142. package/src/core/geom/2d/v2_morton_encode.d.ts +20 -0
  143. package/src/core/geom/2d/v2_morton_encode.d.ts.map +1 -0
  144. package/src/core/geom/2d/v2_morton_encode.js +23 -0
  145. package/src/core/geom/3d/aabb/AABB3.d.ts +2 -2
  146. package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
  147. package/src/core/geom/3d/aabb/AABB3.js +1 -1
  148. package/src/core/geom/3d/atlas/segment/atlas_merge_charts.d.ts.map +1 -1
  149. package/src/core/geom/3d/atlas/segment/atlas_merge_charts.js +4 -1
  150. package/src/core/geom/3d/polygon/polygon3_compute_normal.d.ts +27 -0
  151. package/src/core/geom/3d/polygon/polygon3_compute_normal.d.ts.map +1 -0
  152. package/src/core/geom/3d/polygon/polygon3_compute_normal.js +60 -0
  153. package/src/core/geom/3d/polygon/polygon3_triangulate.d.ts +34 -0
  154. package/src/core/geom/3d/polygon/polygon3_triangulate.d.ts.map +1 -0
  155. package/src/core/geom/3d/polygon/polygon3_triangulate.js +94 -0
  156. package/src/core/geom/3d/quaternion/quat3_multiply.d.ts +8 -2
  157. package/src/core/geom/3d/quaternion/quat3_multiply.d.ts.map +1 -1
  158. package/src/core/geom/3d/quaternion/quat3_multiply.js +8 -2
  159. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  160. package/src/core/geom/3d/shape/ConvexHullShape3D.js +32 -2
  161. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +2 -2
  162. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
  163. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +1 -1
  164. package/src/core/geom/3d/tetrahedra/delaunay/debug/push_boundary_with_validation.d.ts +2 -5
  165. package/src/core/geom/3d/tetrahedra/delaunay/debug/push_boundary_with_validation.d.ts.map +1 -1
  166. package/src/core/geom/3d/tetrahedra/delaunay/debug/push_boundary_with_validation.js +1 -1
  167. package/src/core/geom/3d/tetrahedra/delaunay/debug/validate_cavity_boundary.d.ts +2 -2
  168. package/src/core/geom/3d/tetrahedra/delaunay/debug/validate_cavity_boundary.d.ts.map +1 -1
  169. package/src/core/geom/3d/tetrahedra/delaunay/debug/validate_cavity_boundary.js +1 -1
  170. package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts +2 -3
  171. package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts.map +1 -1
  172. package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.js +69 -69
  173. package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.d.ts +2 -3
  174. package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.d.ts.map +1 -1
  175. package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.js +50 -50
  176. package/src/core/geom/3d/topology/struct/TopoEdge.d.ts +2 -2
  177. package/src/core/geom/3d/topology/struct/TopoEdge.d.ts.map +1 -1
  178. package/src/core/geom/3d/topology/struct/TopoEdge.js +1 -1
  179. package/src/core/geom/3d/topology/struct/TopoMesh.d.ts +2 -3
  180. package/src/core/geom/3d/topology/struct/TopoMesh.d.ts.map +1 -1
  181. package/src/core/geom/3d/topology/struct/TopoMesh.js +1 -1
  182. package/src/core/geom/3d/topology/struct/TopoTriangle.d.ts +2 -2
  183. package/src/core/geom/3d/topology/struct/TopoTriangle.d.ts.map +1 -1
  184. package/src/core/geom/3d/topology/struct/TopoTriangle.js +1 -1
  185. package/src/core/geom/3d/topology/struct/TopoVertex.d.ts +2 -2
  186. package/src/core/geom/3d/topology/struct/TopoVertex.d.ts.map +1 -1
  187. package/src/core/geom/3d/topology/struct/TopoVertex.js +1 -1
  188. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.d.ts +23 -6
  189. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.d.ts.map +1 -1
  190. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.js +268 -124
  191. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_assert_valid.d.ts +17 -0
  192. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_assert_valid.d.ts.map +1 -0
  193. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_assert_valid.js +44 -0
  194. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.d.ts +20 -0
  195. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.d.ts.map +1 -0
  196. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.js +40 -0
  197. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_closed.d.ts +19 -0
  198. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_closed.d.ts.map +1 -0
  199. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_closed.js +34 -0
  200. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_manifold.d.ts +22 -0
  201. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_manifold.d.ts.map +1 -0
  202. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_is_manifold.js +37 -0
  203. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_validate.d.ts +87 -0
  204. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_validate.d.ts.map +1 -0
  205. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_validate.js +599 -0
  206. package/src/core/geom/3d/topology/util/mesh_flood_fill.d.ts +1 -1
  207. package/src/core/geom/3d/topology/util/mesh_flood_fill.js +1 -1
  208. package/src/core/geom/3d/triangle/tri3_compute_signed_volume.d.ts +32 -0
  209. package/src/core/geom/3d/triangle/tri3_compute_signed_volume.d.ts.map +1 -1
  210. package/src/core/geom/3d/triangle/tri3_compute_signed_volume.js +66 -7
  211. package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.d.ts +22 -1
  212. package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.d.ts.map +1 -1
  213. package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.js +83 -38
  214. package/src/core/geom/3d/util/aabb3_emit_point_grid.d.ts +2 -2
  215. package/src/core/geom/3d/util/aabb3_emit_point_grid.d.ts.map +1 -1
  216. package/src/core/geom/3d/util/aabb3_emit_point_grid.js +1 -1
  217. package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +554 -0
  218. package/src/core/geom/Quaternion.d.ts +2 -2
  219. package/src/core/geom/Quaternion.d.ts.map +1 -1
  220. package/src/core/geom/Quaternion.js +1 -1
  221. package/src/core/geom/Vector1.d.ts +2 -2
  222. package/src/core/geom/Vector1.d.ts.map +1 -1
  223. package/src/core/geom/Vector1.js +1 -1
  224. package/src/core/geom/packing/max-rect/find_best_container.d.ts +2 -2
  225. package/src/core/geom/packing/max-rect/find_best_container.d.ts.map +1 -1
  226. package/src/core/geom/packing/max-rect/find_best_container.js +1 -1
  227. package/src/core/geom/vec3/v3_cotangent.d.ts +6 -2
  228. package/src/core/geom/vec3/v3_cotangent.d.ts.map +1 -1
  229. package/src/core/geom/vec3/v3_cotangent.js +6 -2
  230. package/src/core/geom/vec3/v3_cross.d.ts +6 -2
  231. package/src/core/geom/vec3/v3_cross.d.ts.map +1 -1
  232. package/src/core/geom/vec3/v3_cross.js +6 -2
  233. package/src/core/geom/vec3/v3_lerp.d.ts +1 -1
  234. package/src/core/geom/vec3/v3_lerp.js +1 -1
  235. package/src/core/geom/vec3/v3_multiply.d.ts +6 -2
  236. package/src/core/geom/vec3/v3_multiply.d.ts.map +1 -1
  237. package/src/core/geom/vec3/v3_multiply.js +6 -2
  238. package/src/core/geom/vec3/v3_subtract.d.ts +6 -2
  239. package/src/core/geom/vec3/v3_subtract.d.ts.map +1 -1
  240. package/src/core/geom/vec3/v3_subtract.js +6 -2
  241. package/src/core/json/abstractJSONSerializer.d.ts +2 -2
  242. package/src/core/json/abstractJSONSerializer.d.ts.map +1 -1
  243. package/src/core/json/abstractJSONSerializer.js +1 -1
  244. package/src/core/lang/reactive/AbstractCachingParser.d.ts +2 -3
  245. package/src/core/lang/reactive/AbstractCachingParser.d.ts.map +1 -1
  246. package/src/core/lang/reactive/AbstractCachingParser.js +1 -1
  247. package/src/core/localization/Localization.d.ts +2 -2
  248. package/src/core/localization/Localization.d.ts.map +1 -1
  249. package/src/core/localization/Localization.js +2 -2
  250. package/src/core/math/noise/create_simplex_noise_2d.d.ts +2 -2
  251. package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
  252. package/src/core/math/noise/create_simplex_noise_2d.js +1 -1
  253. package/src/core/math/physics/mie/MIE_PARTICLES_STANDARD.js +1 -1
  254. package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.d.ts +3 -3
  255. package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.d.ts.map +1 -1
  256. package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.js +2 -2
  257. package/src/core/math/random/randomSeed.d.ts +13 -0
  258. package/src/core/math/random/randomSeed.d.ts.map +1 -0
  259. package/src/core/math/random/randomSeed.js +16 -0
  260. package/src/core/math/random/seededRandom_Mulberry32.d.ts +3 -2
  261. package/src/core/math/random/seededRandom_Mulberry32.d.ts.map +1 -1
  262. package/src/core/math/random/seededRandom_Mulberry32.js +1 -1
  263. package/src/core/math/spline/spline3_hermite_apply_transform.d.ts +50 -0
  264. package/src/core/math/spline/spline3_hermite_apply_transform.d.ts.map +1 -0
  265. package/src/core/math/spline/spline3_hermite_apply_transform.js +107 -0
  266. package/src/core/math/spline/spline3_hermite_reverse.d.ts +34 -0
  267. package/src/core/math/spline/spline3_hermite_reverse.d.ts.map +1 -0
  268. package/src/core/math/spline/spline3_hermite_reverse.js +49 -0
  269. package/src/core/math/statistics/hammersley_sequence.d.ts +17 -4
  270. package/src/core/math/statistics/hammersley_sequence.d.ts.map +1 -1
  271. package/src/core/math/statistics/hammersley_sequence.js +25 -16
  272. package/src/core/model/ModuleRegistry.d.ts +2 -2
  273. package/src/core/model/ModuleRegistry.d.ts.map +1 -1
  274. package/src/core/model/ModuleRegistry.js +1 -1
  275. package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts +1 -1
  276. package/src/core/model/node-graph/json/serializeNodeGraphToJSON.js +2 -2
  277. package/src/core/model/object/objectDeepEquals.d.ts +2 -2
  278. package/src/core/model/object/objectDeepEquals.d.ts.map +1 -1
  279. package/src/core/model/object/objectDeepEquals.js +1 -1
  280. package/src/core/model/reactive/model/ReactiveExpression.d.ts +2 -2
  281. package/src/core/model/reactive/model/ReactiveExpression.d.ts.map +1 -1
  282. package/src/core/model/reactive/model/ReactiveExpression.js +1 -1
  283. package/src/core/model/validate_enum_schema.d.ts +2 -3
  284. package/src/core/model/validate_enum_schema.d.ts.map +1 -1
  285. package/src/core/model/validate_enum_schema.js +1 -1
  286. package/src/core/process/Future.d.ts +3 -3
  287. package/src/core/process/Future.d.ts.map +1 -1
  288. package/src/core/process/Future.js +13 -1
  289. package/src/core/process/PromiseWatcher.d.ts.map +1 -1
  290. package/src/core/process/PromiseWatcher.js +9 -2
  291. package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
  292. package/src/core/process/executor/ConcurrentExecutor.js +12 -2
  293. package/src/core/process/task/Task.d.ts +3 -3
  294. package/src/core/process/task/Task.d.ts.map +1 -1
  295. package/src/core/process/task/Task.js +2 -2
  296. package/src/core/process/task/util/countTask.d.ts +2 -2
  297. package/src/core/process/task/util/countTask.d.ts.map +1 -1
  298. package/src/core/process/task/util/countTask.js +1 -1
  299. package/src/core/process/task/util/randomCountTask.d.ts +2 -2
  300. package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
  301. package/src/core/process/task/util/randomCountTask.js +1 -1
  302. package/src/core/process/worker/WorkerProxy.d.ts.map +1 -1
  303. package/src/core/process/worker/WorkerProxy.js +5 -2
  304. package/src/core/process/worker/extractTransferables.d.ts.map +1 -1
  305. package/src/core/process/worker/extractTransferables.js +4 -1
  306. package/src/engine/Engine.d.ts +12 -12
  307. package/src/engine/Engine.d.ts.map +1 -1
  308. package/src/engine/Engine.js +149 -10
  309. package/src/engine/animation/Animations.d.ts +4 -4
  310. package/src/engine/animation/Animations.d.ts.map +1 -1
  311. package/src/engine/animation/Animations.js +2 -2
  312. package/src/engine/animation/EntityAnimation.d.ts +5 -5
  313. package/src/engine/animation/EntityAnimation.d.ts.map +1 -1
  314. package/src/engine/animation/EntityAnimation.js +2 -2
  315. package/src/engine/animation/TransitionFunctions.d.ts +1 -4
  316. package/src/engine/animation/TransitionFunctions.d.ts.map +1 -1
  317. package/src/engine/animation/TransitionFunctions.js +1 -1
  318. package/src/engine/animation/Tween.d.ts +4 -4
  319. package/src/engine/animation/Tween.d.ts.map +1 -1
  320. package/src/engine/animation/Tween.js +2 -2
  321. package/src/engine/asset/AssetManager.d.ts +6 -6
  322. package/src/engine/asset/AssetManager.d.ts.map +1 -1
  323. package/src/engine/asset/AssetManager.js +1411 -1411
  324. package/src/engine/asset/AssetRequest.d.ts +4 -4
  325. package/src/engine/asset/AssetRequest.d.ts.map +1 -1
  326. package/src/engine/asset/AssetRequest.js +3 -3
  327. package/src/engine/asset/loaders/ArrayBufferLoader.d.ts.map +1 -1
  328. package/src/engine/asset/loaders/ArrayBufferLoader.js +7 -0
  329. package/src/engine/asset/loaders/AssetLoader.d.ts +3 -3
  330. package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
  331. package/src/engine/asset/loaders/AssetLoader.js +2 -2
  332. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +0 -10
  333. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  334. package/src/engine/ecs/EntityComponentDataset.d.ts +6 -6
  335. package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
  336. package/src/engine/ecs/EntityComponentDataset.js +3 -3
  337. package/src/engine/ecs/EntityManager.d.ts +4 -4
  338. package/src/engine/ecs/EntityManager.js +4 -4
  339. package/src/engine/ecs/EntityObserver.d.ts +3 -3
  340. package/src/engine/ecs/EntityObserver.d.ts.map +1 -1
  341. package/src/engine/ecs/EntityObserver.js +2 -2
  342. package/src/engine/ecs/System.d.ts +4 -4
  343. package/src/engine/ecs/System.d.ts.map +1 -1
  344. package/src/engine/ecs/System.js +2 -2
  345. package/src/engine/ecs/dynamic_actions/DynamicActorSystem.d.ts +2 -3
  346. package/src/engine/ecs/dynamic_actions/DynamicActorSystem.d.ts.map +1 -1
  347. package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +1 -1
  348. package/src/engine/ecs/grid/pick.d.ts +4 -2
  349. package/src/engine/ecs/grid/pick.d.ts.map +1 -1
  350. package/src/engine/ecs/grid/pick.js +1 -1
  351. package/src/engine/ecs/parent/EntityNode.d.ts +4 -4
  352. package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
  353. package/src/engine/ecs/parent/EntityNode.js +2 -2
  354. package/src/engine/ecs/speaker/lines/sets/LineSetDescription.d.ts.map +1 -1
  355. package/src/engine/ecs/speaker/lines/sets/LineSetDescription.js +3 -1
  356. package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.d.ts +2 -2
  357. package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.d.ts.map +1 -1
  358. package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.js +1 -1
  359. package/src/engine/ecs/storage/binary/collection/BinaryCollectionHeaderCodec.d.ts +1 -2
  360. package/src/engine/ecs/storage/binary/collection/BinaryCollectionHeaderCodec.d.ts.map +1 -1
  361. package/src/engine/ecs/systems/AnimationSystem.d.ts +0 -5
  362. package/src/engine/ecs/systems/AnimationSystem.d.ts.map +1 -1
  363. package/src/engine/ecs/terrain/ecs/TerrainSystem.d.ts +2 -2
  364. package/src/engine/ecs/terrain/ecs/TerrainSystem.d.ts.map +1 -1
  365. package/src/engine/ecs/terrain/ecs/TerrainSystem.js +5 -2
  366. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts +34 -5
  367. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
  368. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +87 -26
  369. package/src/engine/ecs/terrain/util/obtainTerrain.d.ts +2 -3
  370. package/src/engine/ecs/terrain/util/obtainTerrain.d.ts.map +1 -1
  371. package/src/engine/ecs/terrain/util/obtainTerrain.js +1 -1
  372. package/src/engine/ecs/util/hideEntityGracefully.js +2 -2
  373. package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +446 -0
  374. package/src/engine/graphics/FrameRunner.d.ts +2 -2
  375. package/src/engine/graphics/FrameRunner.d.ts.map +1 -1
  376. package/src/engine/graphics/FrameRunner.js +1 -1
  377. package/src/engine/graphics/GraphicsEngine.d.ts +60 -9
  378. package/src/engine/graphics/GraphicsEngine.d.ts.map +1 -1
  379. package/src/engine/graphics/GraphicsEngine.js +197 -25
  380. package/src/engine/graphics/camera/CameraShake.d.ts +6 -6
  381. package/src/engine/graphics/camera/CameraShake.d.ts.map +1 -1
  382. package/src/engine/graphics/context/WebGLContextFailureReason.d.ts +9 -0
  383. package/src/engine/graphics/context/WebGLContextFailureReason.d.ts.map +1 -0
  384. package/src/engine/graphics/context/WebGLContextFailureReason.js +17 -0
  385. package/src/engine/graphics/context/WebGLContextMonitor.d.ts +106 -0
  386. package/src/engine/graphics/context/WebGLContextMonitor.d.ts.map +1 -0
  387. package/src/engine/graphics/context/WebGLContextMonitor.js +341 -0
  388. package/src/engine/graphics/context/WebGLContextState.d.ts +14 -0
  389. package/src/engine/graphics/context/WebGLContextState.d.ts.map +1 -0
  390. package/src/engine/graphics/context/WebGLContextState.js +24 -0
  391. package/src/engine/graphics/context/testWebGLContextLoss.d.ts +2 -0
  392. package/src/engine/graphics/context/testWebGLContextLoss.d.ts.map +1 -0
  393. package/src/engine/graphics/context/testWebGLContextLoss.js +696 -0
  394. package/src/engine/graphics/ecs/camera/CameraSystem.d.ts +2 -2
  395. package/src/engine/graphics/ecs/camera/CameraSystem.d.ts.map +1 -1
  396. package/src/engine/graphics/ecs/camera/CameraSystem.js +1 -1
  397. package/src/engine/graphics/ecs/camera/serialization/CameraSerializationAdapter.d.ts.map +1 -1
  398. package/src/engine/graphics/ecs/camera/serialization/CameraSerializationAdapter.js +68 -32
  399. package/src/engine/graphics/ecs/camera/serialization/CameraSerializationUpgrader_0_1.d.ts +14 -0
  400. package/src/engine/graphics/ecs/camera/serialization/CameraSerializationUpgrader_0_1.d.ts.map +1 -0
  401. package/src/engine/graphics/ecs/camera/serialization/CameraSerializationUpgrader_0_1.js +41 -0
  402. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts +2 -3
  403. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts.map +1 -1
  404. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +2 -2
  405. package/src/engine/graphics/ecs/light/three/ThreeLightCache.d.ts +1 -1
  406. package/src/engine/graphics/ecs/light/three/ThreeLightCache.js +1 -1
  407. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +4 -5
  408. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts.map +1 -1
  409. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +7 -2
  410. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +1 -1
  411. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts.map +1 -1
  412. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.js +2 -1
  413. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts +1 -1
  414. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts.map +1 -1
  415. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.js +3 -5
  416. package/src/engine/graphics/geometry/MikkT/BuildNeighborsFast.d.ts.map +1 -1
  417. package/src/engine/graphics/geometry/MikkT/BuildNeighborsFast.js +3 -2
  418. package/src/engine/graphics/geometry/MikkT/GenerateSharedVerticesIndexList.d.ts.map +1 -1
  419. package/src/engine/graphics/geometry/MikkT/GenerateSharedVerticesIndexList.js +3 -1
  420. package/src/engine/graphics/geometry/computeBoundingSphereFromVertexData.d.ts +2 -2
  421. package/src/engine/graphics/geometry/computeBoundingSphereFromVertexData.js +1 -1
  422. package/src/engine/graphics/geometry/computeMeshSurfaceArea.js +1 -1
  423. package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.d.ts +2 -2
  424. package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.d.ts.map +1 -1
  425. package/src/engine/graphics/geometry/instancing/InstancedMeshGroup.js +1 -1
  426. package/src/engine/graphics/geometry/ribbon/Ribbon.d.ts +2 -2
  427. package/src/engine/graphics/geometry/ribbon/Ribbon.d.ts.map +1 -1
  428. package/src/engine/graphics/geometry/ribbon/Ribbon.js +1 -1
  429. package/src/engine/graphics/load_and_set_cubemap_v0.d.ts +5 -0
  430. package/src/engine/graphics/load_and_set_cubemap_v0.d.ts.map +1 -1
  431. package/src/engine/graphics/load_and_set_cubemap_v0.js +26 -21
  432. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +2 -2
  433. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
  434. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
  435. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts +2 -2
  436. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +1 -1
  437. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +1 -1
  438. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts +2 -2
  439. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +1 -1
  440. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  441. package/src/engine/graphics/particles/particular/group/ParticleGroup.d.ts.map +1 -1
  442. package/src/engine/graphics/particles/particular/group/ParticleGroup.js +19 -8
  443. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.js +1 -1
  444. package/src/engine/graphics/render/RendererPool.d.ts +4 -4
  445. package/src/engine/graphics/render/RendererPool.d.ts.map +1 -1
  446. package/src/engine/graphics/render/RendererPool.js +2 -2
  447. package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts +5 -4
  448. package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
  449. package/src/engine/graphics/render/frame_graph/FrameGraph.js +2 -2
  450. package/src/engine/graphics/render/layers/RenderLayer.d.ts +2 -2
  451. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
  452. package/src/engine/graphics/render/layers/RenderLayer.js +1 -1
  453. package/src/engine/graphics/render/layers/RenderLayerUtils.js +1 -1
  454. package/src/engine/graphics/sh3/lightmap/bake_lightmap_for_scene.d.ts +3 -1
  455. package/src/engine/graphics/sh3/lightmap/bake_lightmap_for_scene.d.ts.map +1 -1
  456. package/src/engine/graphics/sh3/lightmap/bake_lightmap_for_scene.js +681 -681
  457. package/src/engine/graphics/sh3/lightmap/lightmap_rasterize_triangle.d.ts +2 -2
  458. package/src/engine/graphics/sh3/lightmap/lightmap_rasterize_triangle.d.ts.map +1 -1
  459. package/src/engine/graphics/sh3/lightmap/lightmap_rasterize_triangle.js +145 -145
  460. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts +2 -1
  461. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
  462. package/src/engine/graphics/texture/atlas/AtlasLookupTexture.d.ts.map +1 -1
  463. package/src/engine/graphics/texture/atlas/AtlasLookupTexture.js +10 -3
  464. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  465. package/src/engine/graphics/texture/atlas/TextureAtlas.js +4 -1
  466. package/src/engine/graphics/texture/atlas/gpu/WebGLTextureAtlas.d.ts.map +1 -1
  467. package/src/engine/graphics/texture/atlas/gpu/WebGLTextureAtlas.js +11 -0
  468. package/src/engine/graphics/texture/cubemap/load_environment_map.d.ts.map +1 -1
  469. package/src/engine/graphics/texture/cubemap/load_environment_map.js +5 -2
  470. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +2 -2
  471. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
  472. package/src/engine/graphics/texture/sampler/Sampler2D.js +1 -1
  473. package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_Chamfer.d.ts.map +1 -1
  474. package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_Chamfer.js +26 -18
  475. package/src/engine/graphics/texture/sampler/filter/sampler2d_blur_gaussian.d.ts +15 -2
  476. package/src/engine/graphics/texture/sampler/filter/sampler2d_blur_gaussian.d.ts.map +1 -1
  477. package/src/engine/graphics/texture/sampler/filter/sampler2d_blur_gaussian.js +29 -3
  478. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.d.ts +14 -1
  479. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.d.ts.map +1 -1
  480. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.js +148 -171
  481. package/src/engine/graphics/texture/sampler/sampler2d_combine.d.ts +2 -2
  482. package/src/engine/graphics/texture/sampler/sampler2d_combine.d.ts.map +1 -1
  483. package/src/engine/graphics/texture/sampler/sampler2d_combine.js +1 -1
  484. package/src/engine/graphics/texture/sampler/sampler2d_paint.js +1 -1
  485. package/src/engine/graphics/texture/sampler/util/bitSet2Sampler2D.js +2 -2
  486. package/src/engine/graphics/texture/virtual/VirtualTextureTileLoader.d.ts +1 -1
  487. package/src/engine/graphics/texture/virtual/VirtualTextureTileLoader.js +2 -2
  488. package/src/engine/grid/obstacle/GridObstacle.d.ts +2 -2
  489. package/src/engine/grid/obstacle/GridObstacle.d.ts.map +1 -1
  490. package/src/engine/grid/obstacle/GridObstacle.js +1 -1
  491. package/src/engine/input/ecs/util/TopDownCameraControllerHelper.d.ts.map +1 -1
  492. package/src/engine/input/ecs/util/TopDownCameraControllerHelper.js +10 -3
  493. package/src/engine/intelligence/behavior/ecs/BehaviorComponent.d.ts +2 -2
  494. package/src/engine/intelligence/behavior/ecs/BehaviorComponent.d.ts.map +1 -1
  495. package/src/engine/intelligence/behavior/ecs/BehaviorComponent.js +1 -1
  496. package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts +3 -3
  497. package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts.map +1 -1
  498. package/src/engine/intelligence/behavior/primitive/ActionBehavior.js +1 -1
  499. package/src/engine/intelligence/behavior/util/RandomDelayBehavior.d.ts +2 -1
  500. package/src/engine/intelligence/behavior/util/RandomDelayBehavior.d.ts.map +1 -1
  501. package/src/engine/intelligence/blackboard/Blackboard.d.ts +4 -4
  502. package/src/engine/intelligence/blackboard/Blackboard.d.ts.map +1 -1
  503. package/src/engine/intelligence/blackboard/Blackboard.js +2 -2
  504. package/src/engine/intelligence/mcts/MonteCarlo.d.ts +17 -15
  505. package/src/engine/intelligence/mcts/MonteCarlo.d.ts.map +1 -1
  506. package/src/engine/intelligence/mcts/MonteCarlo.js +345 -345
  507. package/src/engine/intelligence/mcts/StateNode.d.ts +2 -2
  508. package/src/engine/intelligence/mcts/StateNode.d.ts.map +1 -1
  509. package/src/engine/intelligence/mcts/StateNode.js +364 -364
  510. package/src/engine/intelligence/optimization/RandomOptimizer.d.ts +3 -3
  511. package/src/engine/intelligence/optimization/RandomOptimizer.d.ts.map +1 -1
  512. package/src/engine/intelligence/optimization/RandomOptimizer.js +2 -2
  513. package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.d.ts +2 -2
  514. package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.d.ts.map +1 -1
  515. package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.js +1 -1
  516. package/src/engine/knowledge/database/StaticKnowledgeDataTable.d.ts +4 -5
  517. package/src/engine/knowledge/database/StaticKnowledgeDataTable.d.ts.map +1 -1
  518. package/src/engine/knowledge/database/StaticKnowledgeDataTable.js +2 -2
  519. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_2_3.d.ts +14 -0
  520. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_2_3.d.ts.map +1 -0
  521. package/src/engine/navigation/ecs/components/PathSerializationUpgrader_2_3.js +38 -0
  522. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts +0 -5
  523. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  524. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  525. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +433 -425
  526. package/src/engine/physics/constraint/solve_constraints.d.ts +4 -1
  527. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  528. package/src/engine/physics/constraint/solve_constraints.js +38 -13
  529. package/src/engine/physics/contact/ManifoldStore.d.ts +15 -3
  530. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
  531. package/src/engine/physics/contact/ManifoldStore.js +15 -3
  532. package/src/engine/physics/ecs/Joint.d.ts +7 -4
  533. package/src/engine/physics/ecs/Joint.d.ts.map +1 -1
  534. package/src/engine/physics/ecs/Joint.js +7 -4
  535. package/src/engine/physics/ecs/PhysicsSystem.d.ts +14 -0
  536. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  537. package/src/engine/physics/ecs/PhysicsSystem.js +16 -0
  538. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -8
  539. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  540. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -7
  541. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -1
  542. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +15 -7
  543. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
  544. package/src/engine/physics/narrowphase/convex_convex_manifold.js +33 -10
  545. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +6 -2
  546. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
  547. package/src/engine/physics/narrowphase/refine_ray_concave.js +6 -2
  548. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +6 -2
  549. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
  550. package/src/engine/physics/narrowphase/refine_ray_hit.js +6 -2
  551. package/src/engine/physics/queries/raycast.d.ts.map +1 -1
  552. package/src/engine/physics/queries/raycast.js +11 -4
  553. package/src/engine/save/GameStateLoader.d.ts +2 -2
  554. package/src/engine/save/GameStateLoader.d.ts.map +1 -1
  555. package/src/engine/save/GameStateLoader.js +1 -1
  556. package/src/engine/save/Storage.d.ts +4 -4
  557. package/src/engine/save/Storage.d.ts.map +1 -1
  558. package/src/engine/save/Storage.js +2 -2
  559. package/src/engine/save/storage/IndexedDBStorage.d.ts.map +1 -1
  560. package/src/engine/save/storage/IndexedDBStorage.js +24 -5
  561. package/src/engine/simulation/Ticker.d.ts +12 -0
  562. package/src/engine/simulation/Ticker.d.ts.map +1 -1
  563. package/src/engine/simulation/Ticker.js +18 -0
  564. package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -1
  565. package/src/engine/sound/simulation/AcousticSimulator.js +9 -1
  566. package/src/engine/sound/simulation/core/VolumeField.d.ts +6 -2
  567. package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
  568. package/src/engine/sound/simulation/core/VolumeField.js +6 -2
  569. package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts +6 -2
  570. package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts.map +1 -1
  571. package/src/engine/sound/simulation/probe/AcousticProbeField.js +6 -2
  572. package/src/engine/sound/simulation/probe/acoustic_probe_transfer.d.ts +6 -2
  573. package/src/engine/sound/simulation/probe/acoustic_probe_transfer.d.ts.map +1 -1
  574. package/src/engine/sound/simulation/probe/acoustic_probe_transfer.js +6 -2
  575. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts +3 -1
  576. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
  577. package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +3 -1
  578. package/src/engine/sound/simulation/prototypeAcousticSolver.js +1652 -1652
  579. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts +2 -2
  580. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -1
  581. package/src/engine/sound/sopra/util/buildAttenuationCurve.js +40 -40
  582. package/src/engine/ui/GUIEngine.d.ts.map +1 -1
  583. package/src/engine/ui/GUIEngine.js +8 -1
  584. package/src/engine/ui/notification/NotificationManager.d.ts +5 -5
  585. package/src/engine/ui/notification/NotificationManager.d.ts.map +1 -1
  586. package/src/engine/ui/notification/NotificationManager.js +4 -4
  587. package/src/engine/ui/tiles2d/TileGrid.d.ts +2 -2
  588. package/src/engine/ui/tiles2d/TileGrid.d.ts.map +1 -1
  589. package/src/engine/ui/tiles2d/TileGrid.js +1 -1
  590. package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts +1 -1
  591. package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +1 -1
  592. package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +2 -2
  593. package/src/generation/grid/generation/util/buildPathFromDistanceMap.d.ts +1 -1
  594. package/src/generation/grid/generation/util/buildPathFromDistanceMap.js +1 -1
  595. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts +2 -1
  596. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
  597. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts +2 -1
  598. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts.map +1 -1
  599. package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts +2 -1
  600. package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts.map +1 -1
  601. package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.d.ts +4 -3
  602. package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.d.ts.map +1 -1
  603. package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.js +1 -1
  604. package/src/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.d.ts +2 -1
  605. package/src/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.d.ts.map +1 -1
  606. package/src/generation/theme/TerrainTheme.d.ts.map +1 -1
  607. package/src/generation/theme/TerrainTheme.js +2 -1
  608. package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
  609. package/src/generation/theme/ThemeEngine.js +6 -5
  610. package/src/view/ViewGroup.d.ts.map +1 -1
  611. package/src/view/ViewGroup.js +9 -7
  612. package/src/view/common/VirtualListView.d.ts +1 -1
  613. package/src/view/common/VirtualListView.js +1 -1
  614. package/src/view/graphics/WebGLContextFailureView.d.ts +19 -0
  615. package/src/view/graphics/WebGLContextFailureView.d.ts.map +1 -0
  616. package/src/view/graphics/WebGLContextFailureView.js +76 -0
  617. package/src/view/minimap/Minimap.d.ts +8 -0
  618. package/src/view/minimap/Minimap.d.ts.map +1 -1
  619. package/src/view/minimap/Minimap.js +16 -3
  620. package/src/view/minimap/dom/MinimapMarkerView.d.ts.map +1 -1
  621. package/src/view/minimap/dom/MinimapMarkerView.js +3 -1
  622. package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.d.ts +2 -2
  623. package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.d.ts.map +1 -1
  624. package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.js +1 -1
@@ -0,0 +1,446 @@
1
+ # Adversarial verification — `view.md` (6 CRITICAL + 26 MAJOR) and `engine-misc.md` (13 MAJOR)
2
+
3
+ Method: jest 29.7 with `--config jest.conf.json` from `H:/git/moh`, throwaway `__advcheck_*.spec.js` files
4
+ (all deleted afterwards, `find app/src -name "__advcheck*"` shows only other agents' files remaining).
5
+ jsdom is available (`jest-environment-jsdom` installed); view specs used `@jest-environment jsdom`.
6
+
7
+ Two environment facts established up front, both of which matter for several verdicts:
8
+
9
+ - **`assert.*` is LIVE under jest.** Stripping is done only by webpack's `UNASSERT_RULE`, which is pushed
10
+ only when `argv.mode === "production"` (`H:/git/moh/webpack.config.js:100-106`). `ENV_PRODUCTION` in
11
+ `jest.conf.json` is inert — `core/assert.js` never reads it. So where a finding's failure mode is masked
12
+ by an assert under test but exposed in prod, I transcribed the post-unassert code instead of running the
13
+ original (VIEW-27).
14
+ - **`View` base-class facts** (`H:/git/moh/app/src/mir-engine/meep/src/view/View.js`): `View` **does** define
15
+ `addChild` (:365), `removeChild` (:433), `removeAllChildren` (:461), `bindSignal` (:610), `isLinked`
16
+ getter (:138) and `children` as a plain array class-field (:107). It does **not** define `update`.
17
+ `unlink()` calls `clearFlag(ViewFlags.Linked)` at :325 and only then `this.on.unlinked.send0()` at :347 —
18
+ confirmed by execution (`isLinked` observed as `false` inside an `on.unlinked` handler). Every finding that
19
+ depends on that ordering is therefore correctly grounded, not an assumption.
20
+ `Signal.send0` iterates `handlers.values()` of a `Map` (`core/events/signal/Signal.js:389`), so an entry
21
+ deleted mid-dispatch by an earlier handler is skipped, and each handler body is wrapped in `try/catch` +
22
+ `console.error` (:405-408) — the "swallowed by Signal" claims are accurate.
23
+
24
+ ---
25
+
26
+ ## `view.md` — CRITICAL
27
+
28
+ ### VIEW-1
29
+ - **Verdict**: CONFIRMED
30
+ - **Evidence**: Executed. Built a real `DomTooltipManager` over a stub tip manager, called
31
+ `mgr.manage(button, factory)` on a real `EmptyView`, instrumented `button.el.addEventListener` /
32
+ `removeEventListener`. Link → `added=2`. Unlink via `root.removeChild(button)` → `removed=0`.
33
+ Re-link → `added=4`. The `mouseenter`/`mouseleave` pair is never detached and a second observer with a
34
+ second pair is created on the next link, exactly as described.
35
+ Mechanism verified in source: `DomTooltipManager.manage` (`tooltip/DomTooltipManager.js:109-117`)
36
+ subscribes its `on.unlinked` handler *before* `observer.link()` subscribes `__handleViewUnlinked`
37
+ (`tooltip/DomTooltipObserver.js:152`), so manage's handler runs first, calls `remove()` → `observer.unlink()`
38
+ → guard `if (view.isLinked)` at :159 is false (flag already cleared) → teardown skipped, and
39
+ `view.on.unlinked.remove(this.__handleViewUnlinked, this)` at :164 deletes the not-yet-visited Map entry.
40
+
41
+ ### VIEW-2
42
+ - **Verdict**: CONFIRMED
43
+ - **Evidence**: Executed `require('./elements/image/SvgImageView.js')` →
44
+ `Cannot find module '../../../core/geom/AABB2.js'`. `ls core/geom/AABB2.js` → no such file;
45
+ the real path is `core/geom/2d/aabb/AABB2.js`. Part (b) also holds by reading:
46
+ `update()` (`SvgImageView.js:64-68`) references the free identifiers `resize` and `self`, both of which are
47
+ declared inside the constructor (`:25`, `:39`); `link()` (:70-73) calls `this.update()` unconditionally.
48
+
49
+ ### VIEW-3
50
+ - **Verdict**: CONFIRMED (accepted from lead reviewer, not re-checked)
51
+
52
+ ### VIEW-4
53
+ - **Verdict**: CONFIRMED
54
+ - **Evidence**: Executed `MinimapTerrainView.prototype.__setTerrain.call(undefined, terrain, null)` →
55
+ `ReferenceError: updatePreview is not defined`. And `.call(undefined, null, terrain)` →
56
+ `TypeError: Cannot read properties of null (reading 'preview')`. Source confirms
57
+ `updatePreview` is a constructor-local function declaration (`minimap/dom/MinimapTerrainView.js:109`) and the
58
+ subscription at :126 is `this.terrain.onChanged.add(this.__setTerrain)` with no context argument.
59
+
60
+ ### VIEW-5
61
+ - **Verdict**: CONFIRMED (accepted from lead reviewer; independently re-executed anyway)
62
+ - **Evidence**: `g.remove(view)` threw `TypeError`; `g.connect(c1); g.connect(c2)` left
63
+ `c1.children.length === 2` (duplicate) and `c2.children.length === 1`.
64
+
65
+ ### VIEW-6
66
+ - **Verdict**: CONFIRMED
67
+ - **Evidence**: Executed `MinimapView.prototype.clear.call({__cameraViews:[camA,camB], __worldView})` against a
68
+ real `EmptyView` world view already holding both cameras: children went 2 → **4** → **6** across two
69
+ `clear()` calls. `minimap/Minimap.js:183-188` is `this.__worldView.addChild(v)` under a
70
+ "remove all existing markers" comment, called from `unlink()` at :236 *after* `super.unlink()` (so the
71
+ `child is already linked` assert does not fire and even the dev build is affected).
72
+
73
+ ---
74
+
75
+ ## `view.md` — MAJOR
76
+
77
+ ### VIEW-7
78
+ - **Verdict**: CONFIRMED
79
+ - **Evidence**: `task/TaskProgressView.js:129` reads
80
+ `const estimate = Number.isNaN(computedEstimate) ? 0 : computedProgressValue;`. Executed the expression with
81
+ `computedProgressValue = 0.2`, `computedEstimate = 48` → `estimate === 0.2`, and `(0.2).toFixed(0) === "0"`,
82
+ matching the "0 seconds remaining for the whole load" symptom. The label formatter at :100 is `v.toFixed(0)`.
83
+
84
+ ### VIEW-8
85
+ - **Verdict**: CONFIRMED
86
+ - **Evidence**: `elements/ColorPickerView.js:291-293` is `if (_v !== null) { v.onChanged.remove(...) }`.
87
+ Executed a literal transcription over two stub colours: after `handler(b, a)` the **old** value `a` still has
88
+ 1 listener and the **new** value `b` has 0. `handler(null, b)` threw `TypeError`.
89
+
90
+ ### VIEW-9
91
+ - **Verdict**: CONFIRMED
92
+ - **Evidence**: `writeLocks` is declared `{h,s,l,a}` at `:156-161`; the `colorV` handler tests and sets
93
+ `writeLocks.v` (`:215`, `:224`, `:229`); `modelValueChanged` guards on `h||s||l||a` (`:257`). Executed:
94
+ with `writeLocks.v = true`, the `modelValueChanged` guard evaluates to "run" — so the model→gauge writeback
95
+ is not suppressed while a V write is in flight, and `rgb2hsv(0,0,0)` snaps H and S to 0.
96
+
97
+ ### VIEW-10
98
+ - **Verdict**: CONFIRMED
99
+ - **Evidence**: Executed a real `Vector1Control` linked under a real parent. `c.model.set(new Vector1(5))` →
100
+ number field shows 5. External `v1.set(42)` → model is 42, number field is still **5**.
101
+ `controller/controls/Vector1Control.js:67` is `v1.onChanged.add(writeBack)` where `writeBack` is the
102
+ controller→model direction; `syncForward` is only called once inside `subscribe`.
103
+
104
+ ### VIEW-11
105
+ - **Verdict**: CONFIRMED
106
+ - **Evidence**: Executed a real `ListController` with a stub `GuiControl` factory. After `list.add(item)` the
107
+ container had 1 row; after `list.removeOneOf(item)` it still had **1** row in `children` and 1 node in the
108
+ DOM. `controller/controls/ListController.js:69` removes `guiControl`, which is a child of the
109
+ `vElementContainer` wrapper created at :48, not of `vContainer`.
110
+
111
+ ### VIEW-12
112
+ - **Verdict**: CONFIRMED
113
+ - **Evidence**: Executed `initializeFromElement` on an `<img class="icon" style="filter:grayscale(1)">`:
114
+ `el.style.length === 1` but `key.style.length === 0`. `common/HTMLElementCacheKey.js:201` declares an inner
115
+ `let i` shadowing the outer `let i = 0` at :189, so the `splice(i, this.style.length - i)` at :217 truncates
116
+ from index 0. The attribute loop at :224 uses `for (i = ...)` without `let`, confirming the intent.
117
+
118
+ ### VIEW-13
119
+ - **Verdict**: CONFIRMED
120
+ - **Evidence**: Executed. `new TabbedView({tabs})` → `children.length === 0`, `el.children.length === 0`,
121
+ `hasChild(__panelContainer) === false`, `hasChild(__toggleContainer) === false`. With one tab definition and
122
+ the view linked under a document-attached parent, `t.el.outerHTML === "<div></div>"`. Renders nothing,
123
+ as claimed. Neither the constructor (`common/TabbedView.js:49-57`) nor `link()` (:60-67) attaches the
124
+ containers.
125
+
126
+ ### VIEW-14
127
+ - **Verdict**: CONFIRMED
128
+ - **Evidence**: Executed the `enforceAspectRatio` arithmetic. Viewport 200×100 (vAR 0.5), region 100×100:
129
+ result 150×100, ratio **0.667** vs target 0.5. Control on the other branch (region 100×25) → exactly 0.5.
130
+ The width branch is not the mirror of the height branch, as claimed
131
+ (`minimap/gl/MinimapFogOfWar.js:31-35`).
132
+
133
+ ### VIEW-15
134
+ - **Verdict**: CONFIRMED
135
+ - **Evidence**: Executed a real `ListView` with `filter: e => e.visible` over `[A(visible), C(hidden)]`;
136
+ `model.insert(1, B)` produced exactly
137
+ `TypeError: Cannot read properties of undefined (reading 'el')` inside `insertOne`, logged and swallowed by
138
+ `Signal`, leaving DOM order `[A, B]` with B appended rather than inserted. `common/ListView.js:192-194`
139
+ dereferences `getChildByElement(nextElement).el` and `getChildByElement` is `this.viewMapping.get(el)`
140
+ (:277-279) on a plain `Map` (:124), so it returns `undefined` for a filtered-out element.
141
+
142
+ ### VIEW-16
143
+ - **Verdict**: CONFIRMED
144
+ - **Evidence**: Executed with a stub `ResizeObserver` that records `observe`/`unobserve`. `attach(a); start();`
145
+ → observed `[A]`. `attach(b)` → observed still `[A]`, while `o.element === b`.
146
+ `util/DomSizeObserver.js:147-153` assigns before unobserving and never calls `observe`.
147
+ Note: the impact requires re-attaching while running — the in-repo `DomTooltipObserver` path always attaches
148
+ before `start()` — but `attach()` is public and the described defect is literal.
149
+
150
+ ### VIEW-17
151
+ - **Verdict**: CONFIRMED
152
+ - **Evidence**: `elements/SimpleWindow.js:54-57` captures `anchor` on pointer-down (:66) and never advances it,
153
+ while the move handler does `view.size.add(position.clone().sub(anchor))`. Executed the arithmetic for a
154
+ 10 px drag delivered as 5 moves → width grew by **30 px**, not 10. The sibling
155
+ `elements/BottomLeftResizeHandleView.js` does `lastPosition.copy(position)` each move, confirming intent.
156
+
157
+ ### VIEW-18
158
+ - **Verdict**: CONFIRMED
159
+ - **Evidence**: Executed a real `ToastLogView` with two real `NotificationView`-compatible models.
160
+ After 1 notification `children.length === 2`; after 2, `children.length === 4` with positions
161
+ `[-48, -48, -0, -0]` — i.e. A at −48 instead of −24, exactly the 24 px gap described.
162
+ `elements/notify/ToastLogView.js:47` reassigns `this.children = []` and :72/:74 do both `addChild` and a
163
+ manual `push`.
164
+
165
+ ### VIEW-19
166
+ - **Verdict**: CONFIRMED
167
+ - **Evidence**: `grep` over `elements/radial/RadialProgressView.js` returns **no** occurrence of `bindSignal`,
168
+ `unlink` or `destroy`. The subscriptions at :59, :64-65, :73, :76 are raw `add` calls on caller-supplied
169
+ models with no counterpart anywhere in the class.
170
+
171
+ ### VIEW-20
172
+ - **Verdict**: CONFIRMED
173
+ - **Evidence**: `interaction/createInterfaceCommandButton.js:91-95` adds raw `on.added`/`on.removed`
174
+ subscriptions, and :98-99 add the same two handlers again via `button.bindSignal`. Verified the `if` is
175
+ always taken: `InteractionCommand`'s constructor unconditionally does `this.features = new List(features)`,
176
+ so `interaction.features` is never `undefined`. Nothing removes the raw pair.
177
+
178
+ ### VIEW-21
179
+ - **Verdict**: CONFIRMED
180
+ - **Evidence**: (a) `elements/MeshPreview.js:229-233` attaches a fresh `self.pContents.then(...)` inside
181
+ `link()`; `pContents` is created once in the constructor (:107) and settles once, so every subsequent link
182
+ runs `__addInteraction` again, which constructs a new `PointerDevice` and calls `start()` (:78-79).
183
+ `unlink()` (:257-272) releases only the renderer — no `pointer.stop()`, no handler removal.
184
+ (b) `this.camera = null` at :45 and is assigned only inside the async asset callback at :142, while
185
+ `__update_renderer_size` (:204-210) guards on `this.renderer !== null` and then writes `this.camera.aspect`.
186
+ `this.bindSignal(this.size.onChanged, this.__update_renderer_size, this)` (:206) makes that reachable
187
+ post-link, pre-load.
188
+
189
+ ### VIEW-22
190
+ - **Verdict**: CONFIRMED
191
+ - **Evidence**: `renderModel.js:85-92` stores `focus: focus, size: size` by reference and `findInCache`
192
+ compares `piece.size.equals(size)` (:24). `common/MeshView.js:61` passes `this.size` / `this.focus` directly.
193
+ Executed the aliasing: a cache entry holding the caller's live `Vector2` still matches after the caller
194
+ mutates it to a different size. No eviction — `cache.push` is the only mutation of `cache`.
195
+
196
+ ### VIEW-23
197
+ - **Verdict**: CONFIRMED
198
+ - **Evidence**: `common/MeshView.js` contains **zero** occurrences of `model.onChanged` (checked over the file
199
+ text). `update()` (:72-78) compares only `size` and `focus` against `renderedParams`, and `link()` binds only
200
+ `this.size.onChanged`.
201
+
202
+ ### VIEW-24
203
+ - **Verdict**: CONFIRMED
204
+ - **Evidence**: Executed the exact arithmetic from
205
+ `elements/progress/RectangularPieProgressView.js:55-107` for `size 100×50, fraction 0.13` (branch 2, right
206
+ edge): `segment2_segment_compute_intersection_array_2d` returned **false**, `p` stayed empty, and the path
207
+ string was
208
+ `M 50 0 L 50 25 L undefined undefined L 100 50 L 0 50 L 0 0 Z`. Control at 64×64 with the same fraction
209
+ returned `true` with a valid point. Confirms the thresholds encode a 45° corner that only exists on squares.
210
+ (The report itself notes the single in-repo caller sizes it 64×64.)
211
+
212
+ ### VIEW-25
213
+ - **Verdict**: CONFIRMED
214
+ - **Evidence**: Executed `EmptyView.absolute({css:{width:'100px',backgroundColor:'red'}})` →
215
+ `el.style.cssText === "position: absolute; top: 0px; left: 0px;"`; `width` and `backgroundColor` are empty.
216
+ `elements/EmptyView.js:62-65` is the shorthand `css: { css, ...CSS_ABSOLUTE_POSITIONING }`.
217
+
218
+ ### VIEW-26
219
+ - **Verdict**: CONFIRMED
220
+ - **Evidence**: `elements/tiles2d/TileGrid.js:134-135` are raw `model.tiles.on.added.add(this.addTile, this)` /
221
+ `.on.removed.add(...)`. The file contains **no** `unlink()` override, and `grep` finds **no** occurrence of
222
+ `removeTarget` or `removeElement` anywhere in it, while `addTarget` (:307) and `addElement` (:381) are called
223
+ per slot / per tile. Confirmed the context does not self-clean: `common/dnd/DragAndDropContext.js` exposes
224
+ `removeTarget` (:57) and `removeElement` (:91) as explicit calls with no view-lifecycle hook.
225
+ `removeTile` (:411-419) passes the result of `findTileView` straight into `removeChild` and
226
+ `__hookTileRemoved`, so `undefined` propagates when the tile is unknown.
227
+
228
+ ### VIEW-27
229
+ - **Verdict**: CONFIRMED
230
+ - **Evidence**: `common/LocalizedLabelView.js:122-154`. The `try` covers only :136; :143
231
+ (`localization.locale.getValue()`) and the `$el.text(value)` fallback at :146 are outside it.
232
+ Because asserts at :130-131 are stripped in production, I executed a post-unassert transcription:
233
+ result `TypeError: Cannot read properties of null (reading 'locale')`, **no** text written to the element,
234
+ `needsUpdate` left `true`. Reachability verified: `localization=null` is the constructor default of
235
+ `TaskProgressView` (`task/TaskProgressView.js:20`) and is forwarded to the `LocalizedLabelView` at :29-33;
236
+ `needsUpdate` is initialised `true` at LocalizedLabelView:57 so the `on.linked` handler at :59-68 calls
237
+ `update()` on the first link.
238
+
239
+ ### VIEW-28
240
+ - **Verdict**: CONFIRMED
241
+ - **Evidence**: `minimap/gl/MarkerGL.js:57-87`. `updateIcon` releases `this.patch` **before** awaiting
242
+ `atlasManager.acquire`, the continuation does `this.patch = patch;` and only then
243
+ `if (!this.active) return;` — the freshly acquired reference is never released on that path.
244
+ `this.patch = Reference.NULL` initially (:32) and `shutdown()` (:109-118) sets `active = false` and releases
245
+ whatever `this.patch` currently is, which on the racing path is still `Reference.NULL`. The overlapping-call
246
+ double-release / overwrite variant follows from the same ordering.
247
+
248
+ ### VIEW-29
249
+ - **Verdict**: CONFIRMED
250
+ - **Evidence**: `common/dnd/DropTarget.js:43` subscribes `attachDropValidityIndicators`' `handleDragEnter` to
251
+ `dropTarget.on.enter`; that handler (:72-92) creates a fresh `SignalBinding` and pushes into `current`
252
+ unconditionally, while `removeDraggable` (:49-66) removes exactly one record per call. The DOM
253
+ `handleDragEnter` (:212-221) pushes into `isInState_ENTER` unconditionally and `handleDragLeave` (:227-236)
254
+ does `isInState_ENTER.splice(indexOf(e), 1)` with no `-1` check (`splice(-1,1)` removes the last element).
255
+ The double-fire premise is real: `common/dnd/Draggable.js:103-106` explicitly routes `dragEnter` to
256
+ `self.parent.__eventHandlers.handleDragEnter(event)` in addition to bubbling.
257
+
258
+ ### VIEW-30
259
+ - **Verdict**: CONFIRMED
260
+ - **Evidence**: Executed `TooltipManager.prototype.buildTipView` against a stub GML with a throwing factory:
261
+ the call log was `push,set:false` — `popState()` never ran, leaving `depth === 1` and
262
+ `getTooltipsEnabled() === false` permanently. `tooltip/TooltipManager.js:132-138` has no `try/finally`,
263
+ whereas `tooltip/gml/GMLEngine.js` uses `try { … } finally { this.popState(); }` in both compile paths.
264
+
265
+ ### VIEW-31
266
+ - **Verdict**: CONFIRMED
267
+ - **Evidence**: `elements/radial/RadialMenu.js:194-223`: `init()` body contains `this.elements = []` and
268
+ `this.vElementContainer.addChild(element)` and **no** `removeAllChildren`/`removeChild` (verified by slicing
269
+ the method body out of the source and matching). `elements/RadialMenuElement.js:70` is
270
+ `this.addChild(description.iconView)`, and `View.addChild` re-parents (`View.js:373-380`:
271
+ `child.parent = this; this.el.appendChild(child.el)`), so a shared definition's icon is moved between menus.
272
+
273
+ ### VIEW-32
274
+ - **Verdict**: CONFIRMED-BUT-DOWNGRADED
275
+ - **Corrected severity**: MINOR
276
+ - **Evidence**: The mechanism is real and executed:
277
+ `"button-" + "cancel all now".replace(' ', '-')` → `"button-cancel-all now"`, and
278
+ `classList.add("button-cancel-all now")` throws `InvalidCharacterError` in jsdom.
279
+ - **Reason** (ground 5, severity inflation): the trigger needs an option `name` containing **two or more**
280
+ spaces. Every in-repo construction site passes single-token names — `engine/ui/GUIEngine.js:264-274`
281
+ (`"yes"`, `"no"`) and `:352-357` (`"ok"`). Names with one space work fine. This is a latent public-API
282
+ hazard, not a MAJOR-blast-radius defect.
283
+
284
+ ---
285
+
286
+ ## `engine-misc.md` — MAJOR
287
+
288
+ ### EMISC-1
289
+ - **Verdict**: CONFIRMED
290
+ - **Evidence**: `save/storage/IndexedDBStorage.js:98-128`. `store()` attaches `success`/`error` to the
291
+ **request** (`idbRequest.addEventListener('success', …)` at :110) and never holds or listens on the
292
+ transaction, so a post-request `abort`/`error` at commit time notifies nobody. `remove` (:45-76) has the same
293
+ shape. The file header's `TODO add QuotaExceededError handling` corroborates rather than excuses it.
294
+
295
+ ### EMISC-2
296
+ - **Verdict**: CONFIRMED
297
+ - **Evidence**: Executed.
298
+ `new Engine(new InMemoryEnginePlatform(), {enableAudio:false, enableGraphics:false})` → `e.sound === undefined`;
299
+ `e.start()` threw synchronously with `TypeError: Cannot read properties of undefined (reading 'start')`.
300
+ `Engine.js:584` evaluates `this.sound.start()` while building the `Promise.all` array, whereas the
301
+ constructor (:290-302) and `#initialize_audio()` (:421-424) both guard.
302
+
303
+ ### EMISC-3
304
+ - **Verdict**: CONFIRMED
305
+ - **Evidence**: Executed. Same engine with `enableGraphics:false` → `e.graphics === undefined`; `e.render()`
306
+ threw `TypeError: Cannot read properties of undefined (reading 'autoDraw')`.
307
+ `Engine.js:544` reads `graphics.autoDraw` before the `if (graphics && …)` guard at :549.
308
+
309
+ ### EMISC-4
310
+ - **Verdict**: CONFIRMED (accepted from lead reviewer; independently re-executed)
311
+ - **Evidence**: `await engine.stop()` on a freshly constructed engine threw `Error: Not currently running`
312
+ from `Ticker.pause()` (`simulation/Ticker.js:261-263`), before any of the four shutdown steps.
313
+ Also verified the supporting claims: `Ticker.#isUpdateLoopActive()` requires both handles
314
+ (`Ticker.js:114-116`), `Ticker.start()` discards its first `requestAnimationFrame` handle (:250), and
315
+ `Engine.js:616-630` stores no handle for `#animation_frame` so it is never cancellable.
316
+
317
+ ### EMISC-5
318
+ - **Verdict**: CONFIRMED
319
+ - **Evidence**: `Engine.js:607-609` — the second argument to `.then` is
320
+ `function (e) { logger.error(...) }`, which returns `undefined`. Executed the same shape:
321
+ the resulting promise settles **fulfilled with `undefined`**, and the success branch (ticker start at :599,
322
+ options load at :603) is skipped.
323
+
324
+ ### EMISC-6
325
+ - **Verdict**: CONFIRMED
326
+ - **Evidence**: Executed against the real `Clock`. `start(); spin 20ms; pause()` → elapsed 0.0194.
327
+ `spin 50ms; pause()` again (already paused) → elapsed 0.0693 — 50 ms injected while stopped.
328
+ `Clock.js:87-91` calls the module-level `updateElapsedTime(this)` (:8-13), bypassing the `__isRunning` guard
329
+ in `Clock.updateElapsedTime()` (:108-113).
330
+ Second instance also executed: a fresh `Clock` (elapsed 0, `__lastMeasurement` 0) after a single `pause()`
331
+ reports elapsed **0.9917 s** against `current_time_in_seconds() === 0.9917` — i.e. seconds since page load.
332
+ `Ticker`'s constructor does exactly this (`simulation/Ticker.js:71-73`), and `Ticker.start()`'s
333
+ `getDelta()`/`clock.start()` do not clear it (both leave `elapsedTime` untouched while `__isRunning` is false).
334
+
335
+ ### EMISC-7
336
+ - **Verdict**: CONFIRMED
337
+ - **Evidence**: `achievements/AchievementManager.js:232-238` — `async initialize(engine)` assigns four fields
338
+ and never calls `super.initialize(engine)`; `EnginePlugin.initialize` is what calls
339
+ `BaseProcess.initialize()` → `__state.set(Initialized)`. `:421-430` — `async startup()` never calls
340
+ `super.startup()`. `save/GameStateLoader.js:15-17` — same omission for `startup()`.
341
+ Consequences verified in `plugin/PluginReferenceContext.js`: `navigate_to_running` (:72-89) short-circuits
342
+ only on `Running`, so a plugin stuck at `New` re-runs `initialize()` **and** `startup()` on every request;
343
+ `navigate_to_finalized` (:44-67) returns immediately for `New`, so `shutdown()` never runs.
344
+ `plugin/EnginePluginManager.js:75-101` re-requests the transition whenever
345
+ `dependency_state !== ProcessState.Running`, which for these plugins is always.
346
+ `loadDefinitions` (:239-255) pushes into `this.entries` with no reset, so a second `startup()` duplicates
347
+ every achievement.
348
+
349
+ ### EMISC-8
350
+ - **Verdict**: CONFIRMED
351
+ - **Evidence**: `achievements/AchievementManager.js:427` is `this.initializeGateway();` with no `await`,
352
+ followed immediately by `this.isStarted.set(true)` at :429. `initializeGateway` sets
353
+ `isGatewayInitialized` only after awaiting the gateway read. `unlock()` (:149-160) gates **both**
354
+ `deactivateEntry` and `present` on `this.isGatewayInitialized.getValue()`, so an unlock that lands in the gap
355
+ is written to storage and blackboard but never presented and never deactivated. `isActive` is
356
+ `ReactiveAnd(isStarted, isBlackboardAttached)` (:106-119), which fires `activate()` synchronously on the
357
+ `isStarted` write.
358
+
359
+ ### EMISC-9
360
+ - **Verdict**: CONFIRMED
361
+ - **Evidence**: `EngineHarness.js:126` is `new Promise(async function (resolve, reject) { … })` with no
362
+ `try/catch` and no use of `reject` anywhere in the body. Executed the same shape: after a throw past the
363
+ first `await`, the outer promise state remained **pending** and jest reported the escape as an unhandled
364
+ rejection — precisely the "hangs with no error surfaced" symptom. `this.p` memoises the pending promise
365
+ (:167-169), so retries hang too.
366
+
367
+ ### EMISC-10
368
+ - **Verdict**: CONFIRMED
369
+ - **Evidence**: Executed a real `GameStateLoader` with a `gameSaves.update()` that rejects. Neither `resolve`
370
+ nor `reject` was called (`outcome: pending` after a full microtask+timer flush), and the rejection surfaced
371
+ as an unhandled rejection. `save/GameStateLoader.js:128-135` has no second `then` argument and no `.catch`,
372
+ unlike `load()` (:110) and `exists()` (:164).
373
+
374
+ ### EMISC-11
375
+ - **Verdict**: CONFIRMED
376
+ - **Evidence**: Executed a real `GameStateLoader` over a real `InMemoryStorage` with empty
377
+ `gameSaves.data`: `load('auto-save', …)` **resolved with `undefined`**.
378
+ `save/GameStateLoader.js:101-103` falls through to `legacyLoad` → `Storage.loadBinary` (`save/Storage.js:25-28`)
379
+ → `InMemoryStorage.load` (`save/storage/InMemoryStorage.js:15`) which resolves `this.#data.get(key)`.
380
+ `IndexedDBStorage.load` (:88-90) resolves `event.target.result` with the same sentinel.
381
+
382
+ ### EMISC-12
383
+ - **Verdict**: CONFIRMED
384
+ - **Evidence**: Executed `WebEnginePlatform.prototype.pickDefaultLocale.call({}, ['ru','de'])` with
385
+ `navigator.languages === ['ja-JP']` → returned **`'en-gb'`**, which is not among the options.
386
+ `platform/WebEnginePlatform.js:81-85` hard-codes it. Secondary claim also executed: with `[]`,
387
+ `array_pick_best_element` returns `undefined` (verified in
388
+ `core/collection/array/array_pick_best_element.js:21-23`) and `best.score` threw
389
+ `TypeError: Cannot read properties of undefined (reading 'score')`.
390
+ `platform/EnginePlatform.js:18-22` documents `@param {string[]} options @returns {string}`, i.e. one of the
391
+ options.
392
+
393
+ ### EMISC-13
394
+ - **Verdict**: CONFIRMED
395
+ - **Evidence**: `save/GameStateLoader.js:1` imports
396
+ `"../../../../view/game/save/GameSaveStateMetadata.js"`, which resolves to
397
+ `app/src/mir-engine/view/game/save/GameSaveStateMetadata.js` — verified to exist and to be **outside** the
398
+ `meep/` package root. The symbol is referenced only in a JSDoc `@type` at :82, so the runtime import is
399
+ gratuitous. `scene/SerializedScene.js:1` imports
400
+ `"../../../../model/game/scenes/MirScene.js"` → `app/src/mir-engine/model/game/scenes/MirScene.js`
401
+ (verified to exist), and :57 is `export class SerializedScene extends MirScene`, i.e. a hard inheritance
402
+ dependency from the engine onto game code. Both escape the published package boundary.
403
+
404
+ ---
405
+
406
+ ## Tally
407
+
408
+ 45 findings checked (6 CRITICAL + 26 MAJOR from `view.md`, 13 MAJOR from `engine-misc.md`).
409
+
410
+ - **CONFIRMED: 44**
411
+ - **CONFIRMED-BUT-DOWNGRADED: 1** (VIEW-32, MAJOR → MINOR)
412
+ - **REFUTED: 0**
413
+
414
+ ## Notes on what I looked for and did not find
415
+
416
+ I specifically attempted the following refutations and none succeeded:
417
+
418
+ - **Misread base-class members.** Checked `View.js` and `DOM.js` in full. `addChild`/`removeChild`/`isLinked`/
419
+ `bindSignal` all exist as the reviewer assumed; `View` genuinely has no `update` (VIEW-39's premise, MINOR);
420
+ `View.children` is a plain array so the `this.children = []` reassignments in `ToastLogView`/`Group` really do
421
+ produce the described double-registration. No mixin, getter or inherited member rescues any of the
422
+ "non-functional" claims.
423
+ - **The `unlink()` ordering assumption.** Executed rather than assumed: `isLinked` is `false` inside
424
+ `on.unlinked`. VIEW-1's teardown-skip is therefore correctly grounded, not inverted.
425
+ - **`assert.*` masking.** The one finding where this mattered (VIEW-27) is *worse* in production, not better,
426
+ because the guard that would surface the null localisation is unasserted away. No finding depends on an
427
+ assert being live.
428
+ - **Unconstructable-class overreach.** `TabbedView`, `ToastLogView`, `ListController`, `Vector1Control`,
429
+ `MinimapTerrainView`, `RadialMenu` and `EmptyView` all construct fine in jsdom; the claimed defects are
430
+ behavioural, and each was reproduced against a real instance rather than inferred.
431
+ - **Deliberate-convention defences.** No comment or JSDoc anywhere in the implicated code documents any of the
432
+ reported behaviours as intended. In two cases the codebase's own sibling code proves the opposite intent:
433
+ `GMLEngine.compile`'s `try/finally` vs `TooltipManager.buildTipView` (VIEW-30), and
434
+ `BottomLeftResizeHandleView`'s `lastPosition.copy(position)` vs `SimpleWindow` (VIEW-17).
435
+
436
+ ## Reliability of each report
437
+
438
+ **`view.md`**: broadly reliable. All 6 CRITICALs and all 26 MAJORs reproduce; 22 of the 32 were reproduced by
439
+ executing real code rather than reading. The only overstatement is VIEW-32's severity. The reviewer's own
440
+ "Notes on evidence used" preamble (unlink ordering, Signal Map semantics, segment-intersection miss behaviour)
441
+ checked out on every point.
442
+
443
+ **`engine-misc.md`**: broadly reliable. All 13 MAJORs reproduce; 8 of them by direct execution against real
444
+ `Engine`, `Clock`, `GameStateLoader` and `WebEnginePlatform` instances. No severity inflation identified —
445
+ EMISC-13 is a packaging rather than runtime defect but genuinely breaks external consumers of a published
446
+ package, so MAJOR is defensible.