@woosh/meep-engine 3.0.2 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +188 -188
- package/README.md +152 -145
- package/editor/Editor.js +598 -598
- package/editor/EditorCameraNavigation.js +205 -205
- package/editor/EditorKeyMap.js +182 -182
- package/editor/SelectionVisualizer.js +127 -127
- package/editor/actions/concrete/ActionInvalidateSampler.js +27 -27
- package/editor/actions/concrete/PatchTerrainHeightAction.js +85 -85
- package/editor/camera/camera_framing.js +104 -104
- package/editor/clipboard.js +184 -184
- package/editor/ecs/component/editors/ObservedIntegerEditor.js +22 -22
- package/editor/ecs/component/editors/ObservedStringEditor.js +34 -34
- package/editor/ecs/component/editors/common/two_way_sync.js +50 -50
- package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +19 -19
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +35 -35
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -17
- package/editor/ecs/component/editors/ecs/SGMeshEditor.js +24 -24
- package/editor/ecs/component/editors/ecs/ShadedGeometryEditor.js +33 -33
- package/editor/ecs/component/editors/ecs/Trail3DEditor.js +45 -45
- package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.js +19 -19
- package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +72 -72
- package/editor/ecs/component/editors/shade/MeshletGeometryEditor.js +30 -30
- package/editor/ecs/component/editors/shade/ShadeImageEditor.js +70 -70
- package/editor/ecs/component/editors/shade/ShadeMaterialEditor.js +34 -34
- package/editor/ecs/component/editors/shade/ShadeTextureEditor.js +46 -46
- package/editor/ecs/component/editors/shade/StandardShadeMaterialEditor.js +24 -24
- package/editor/ecs/component/prototypeObjectEditor.js +265 -265
- package/editor/ecs/component/registerBasicTypeEditors.js +100 -100
- package/editor/ecs/component/registerEngineComponentEditors.js +95 -95
- package/editor/entity_world_bounds.js +27 -27
- package/editor/particles/lut_ops.js +148 -148
- package/editor/particles/particleEditEvents.js +12 -12
- package/editor/particles/rebuildParticleEmitter.js +31 -31
- package/editor/persistence/EditorLayoutStore.js +71 -71
- package/editor/persistence/SceneMetadata.js +52 -52
- package/editor/persistence/SceneSlotManager.js +144 -144
- package/editor/persistence/buildNewSceneDataset.js +67 -67
- package/editor/persistence/files.js +68 -68
- package/editor/persistence/scene_import.js +143 -143
- package/editor/persistence/scene_serialization.js +79 -79
- package/editor/persistence/string_buffer_codec.js +41 -41
- package/editor/process/GridDisplayProcess.js +125 -125
- package/editor/process/SymbolicDisplayProcess.js +106 -108
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/process/symbolic/PathSymbolicDisplay.js +118 -118
- package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.js +79 -79
- package/editor/process/symbolic/SoundEmitterSymbolicDisplay.js +57 -57
- package/editor/process/symbolic/SymbolicDisplay.js +62 -62
- package/editor/process/symbolic/gizmo_draw_wire_box_oriented.js +85 -85
- package/editor/process/symbolic/gizmo_draw_wire_circle.js +53 -53
- package/editor/prototypeEditorShell.js +156 -156
- package/editor/selection/editor_pick.js +130 -130
- package/editor/selection/screen_rect_frustum.js +119 -119
- package/editor/style/controls.scss +168 -168
- package/editor/style/inspector.scss +223 -223
- package/editor/templates/entity_templates.js +167 -167
- package/editor/tools/GridPaintTool.js +273 -273
- package/editor/tools/SelectionTool.js +307 -307
- package/editor/tools/TransformToolV2.js +378 -378
- package/editor/tools/engine/ToolEngine.js +188 -188
- package/editor/tools/paint/TerrainTexturePaintTool.js +250 -250
- package/editor/tools/v2/BlenderCameraOrientationGizmo.js +501 -501
- package/editor/tools/v2/TransformControls.js +971 -971
- package/editor/tools/v2/handle/gizmo_drag_plane.js +141 -141
- package/editor/tools/v2/handle/gizmo_draw.js +399 -399
- package/editor/tools/v2/handle/gizmo_handles.js +364 -364
- package/editor/tools/v2/handle/gizmo_ray_shapes.js +239 -239
- package/editor/view/ecs/HierarchicalEntityListView.js +339 -339
- package/editor/view/ecs/components/DatGuiController.js +2 -2
- package/editor/view/ecs/components/common/AutoCanvasView.js +100 -100
- package/editor/view/ecs/components/common/TextController.js +59 -59
- package/editor/view/library/MeshLibraryView.js +175 -175
- package/editor/view/library/mesh_library_drag.js +63 -63
- package/editor/view/library/model_thumbnail_source.js +86 -86
- package/editor/view/makeEntityDecorators.js +125 -125
- package/editor/view/node-graph/NodeGraphSelection.js +89 -89
- package/editor/view/node-graph/NodeView.js +211 -211
- package/editor/view/node-graph/actions/ConnectionDeleteAction.js +36 -36
- package/editor/view/node-graph/actions/NodesMoveAction.js +41 -41
- package/editor/view/node-graph/connection_wire_geometry.js +107 -107
- package/editor/view/particles/ColorLutGradientView.js +291 -291
- package/editor/view/particles/ScalarLutCurveView.js +279 -279
- package/editor/view/prepareMeshLibrary.js +188 -188
- package/editor/view/shell/SceneTreePanelView.js +119 -119
- package/editor/view/v2/SplitView.js +2 -2
- package/package.json +94 -94
- package/samples/generation/generators/interactive/mir_generator_place_buff_objects.js +362 -362
- package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +738 -738
- package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +79 -79
- package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +93 -93
- package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +80 -80
- package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +164 -164
- package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +69 -69
- package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +102 -102
- package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +129 -129
- package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +72 -72
- package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +74 -74
- package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +169 -169
- package/src/DUPLICATION_AUDIT_2026_08_07.md +254 -254
- package/src/DUPLICATION_AUDIT_REMEDIATION.md +250 -250
- package/src/REVIEW_2026_08_06/adv-core.md +511 -511
- package/src/REVIEW_2026_08_06/adv-gfx.md +480 -480
- package/src/REVIEW_2026_08_06/adv-view.md +446 -446
- package/src/REVIEW_2026_08_06/api-core.md +296 -296
- package/src/REVIEW_2026_08_06/api-engine.md +195 -195
- package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +507 -507
- package/src/REVIEW_2026_08_06/core-binary.md +348 -348
- package/src/REVIEW_2026_08_06/core-collection.md +376 -376
- package/src/REVIEW_2026_08_06/core-math.md +221 -221
- package/src/REVIEW_2026_08_06/core-process.md +266 -266
- package/src/REVIEW_2026_08_06/core-science.md +223 -223
- package/src/REVIEW_2026_08_06/engine-ai-nav.md +279 -279
- package/src/REVIEW_2026_08_06/engine-animation.md +167 -167
- package/src/REVIEW_2026_08_06/engine-asset.md +166 -166
- package/src/REVIEW_2026_08_06/engine-ecs.md +920 -920
- package/src/REVIEW_2026_08_06/engine-input.md +197 -197
- package/src/REVIEW_2026_08_06/engine-misc.md +248 -248
- package/src/REVIEW_2026_08_06/engine-terrain.md +52 -52
- package/src/REVIEW_2026_08_06/generation.md +176 -176
- package/src/REVIEW_2026_08_06/geom-2d.md +434 -434
- package/src/REVIEW_2026_08_06/geom-3d.md +117 -117
- package/src/REVIEW_2026_08_06/gfx-gi.md +143 -143
- package/src/REVIEW_2026_08_06/gfx-render.md +740 -740
- package/src/REVIEW_2026_08_06/gfx-texture.md +690 -690
- package/src/REVIEW_2026_08_06/prior-criticals.md +49 -49
- package/src/REVIEW_2026_08_06/prior-highs.md +138 -138
- package/src/REVIEW_2026_08_06/test-gaps.md +364 -364
- package/src/REVIEW_2026_08_06/view.md +667 -667
- package/src/REVIEW_2026_08_06.md +610 -610
- package/src/avif/codec/dec/avif_dec.cpp +233 -233
- package/src/avif/codec/dec/avif_dec.js +16 -16
- package/src/core/binary/BitImage2.js +246 -246
- package/src/core/binary/align_32.js +21 -21
- package/src/core/binary/data_view/DataType2DataViewReaders.js +23 -23
- package/src/core/binary/data_view/DataType2DataViewWriters.js +25 -25
- package/src/core/binary/hash/XXH128Hash.js +55 -55
- package/src/core/binary/hash/XXH3_SECRET.js +25 -25
- package/src/core/binary/hash/xxh3_128.js +341 -341
- package/src/core/binary/hash/xxh3_64.js +241 -241
- package/src/core/binary/hash/xxh3_common.js +476 -476
- package/src/core/binary/lz4/LZ4_MAX_INPUT_SIZE.js +9 -9
- package/src/core/binary/lz4/lz4_compress_block.js +385 -385
- package/src/core/binary/lz4/lz4_compress_bound.js +25 -25
- package/src/core/binary/lz4/lz4_decompress_block.js +139 -139
- package/src/core/binary/lz4/lz4_decompress_bound.js +30 -30
- package/src/core/binary/meshopt/MESHOPT_GROUP_SIZE.js +18 -18
- package/src/core/binary/meshopt/MeshoptCompressionFilter.js +30 -30
- package/src/core/binary/meshopt/MeshoptCompressionMode.js +21 -21
- package/src/core/binary/meshopt/__meshopt_test_streams.js +237 -237
- package/src/core/binary/meshopt/meshopt_decode.js +73 -73
- package/src/core/binary/meshopt/meshopt_decode_byte_group.js +67 -67
- package/src/core/binary/meshopt/meshopt_decode_data_block.js +59 -59
- package/src/core/binary/meshopt/meshopt_decode_filter_color.js +69 -69
- package/src/core/binary/meshopt/meshopt_decode_filter_exponential.js +43 -43
- package/src/core/binary/meshopt/meshopt_decode_filter_octahedral.js +60 -60
- package/src/core/binary/meshopt/meshopt_decode_filter_quaternion.js +71 -71
- package/src/core/binary/meshopt/meshopt_decode_index_buffer.js +294 -294
- package/src/core/binary/meshopt/meshopt_decode_index_sequence.js +115 -115
- package/src/core/binary/meshopt/meshopt_decode_vertex_buffer.js +381 -381
- package/src/core/binary/meshopt/meshopt_read_uint_var.js +59 -59
- package/src/core/binary/reinterpret_float32_as_uint32.js +13 -13
- package/src/core/binary/reinterpret_uint32_as_float32.js +14 -14
- package/src/core/binary/type/DataType2TypedArrayConstructorMapping.js +35 -35
- package/src/core/bvh2/bvh3/ebvh_geometry_query_any_triangle_ray.js +149 -149
- package/src/core/bvh2/bvh3/ebvh_sort_for_traversal_depth_first.js +96 -96
- package/src/core/bvh2/bvh3/query/bvh_query_depth_range_in_frustum.js +101 -101
- package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.js +77 -77
- package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.js +90 -90
- package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray_segment.js +94 -94
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.js +86 -86
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_capsule.js +101 -101
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_sphere.js +92 -92
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray.js +96 -96
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray_segment.js +100 -100
- package/src/core/bvh2/visual/BVHGeometry.js +131 -131
- package/src/core/bvh8/BVH8.js +436 -436
- package/src/core/bvh8/aabb3_round_to_float32.js +22 -22
- package/src/core/bvh8/build/BVH8Converter.js +588 -588
- package/src/core/bvh8/build/TriangleCluster.js +122 -122
- package/src/core/bvh8/build/aabb3_compute_merge_cost.js +28 -28
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.js +17 -17
- package/src/core/bvh8/build/bvh8_build_for_geometry.js +303 -303
- package/src/core/bvh8/build/bvh8_from_proxy.js +256 -256
- package/src/core/bvh8/build/byte.js +9 -9
- package/src/core/bvh8/build/encode_bounds_e.js +11 -11
- package/src/core/bvh8/bvh8_convert_to_dot.js +132 -132
- package/src/core/bvh8/bvh8_count_primitives.js +98 -98
- package/src/core/bvh8/bvh8_geometry_validate.js +138 -138
- package/src/core/bvh8/bvh8_geometry_validate_indirect.js +166 -166
- package/src/core/bvh8/bvh8_get_node_bounds.js +34 -34
- package/src/core/bvh8/bvh8_get_node_child_bounds.js +52 -52
- package/src/core/bvh8/bvh8_node_child_surface_area.js +18 -18
- package/src/core/bvh8/bvh8_node_count_triangles.js +27 -27
- package/src/core/bvh8/bvh8_quality.js +72 -72
- package/src/core/bvh8/bvh8_validate_structure.js +87 -87
- package/src/core/clipboard/obtainClipBoard.js +29 -29
- package/src/core/clipboard/safeClipboardReadText.js +55 -55
- package/src/core/clipboard/safeClipboardWriteText.js +23 -23
- package/src/core/collection/array/typed/typed_array_value_denormalize.js +52 -52
- package/src/core/collection/array/typed/typed_array_value_normalize.js +51 -51
- package/src/core/collection/union-find/union_find.js +79 -79
- package/src/core/color/YCoCg/rgb_to_ycocg.js +20 -20
- package/src/core/color/YCoCg/ycocg_to_rgb.js +17 -17
- package/src/core/color/colormap/MAGMA_LUT.js +26 -26
- package/src/core/color/illuminant/D65_TRISTIMULUS_XYZ.js +19 -19
- package/src/core/color/lab/lab_apply_hunt_adjustment.js +27 -27
- package/src/core/color/lab/lab_distance_hyab.js +23 -23
- package/src/core/color/lab/xyz_to_lab.js +62 -62
- package/src/core/color/operations/color_darken.js +24 -24
- package/src/core/color/operations/color_desaturate.js +24 -24
- package/src/core/color/operations/color_lighten.js +24 -24
- package/src/core/color/operations/color_saturate.js +24 -24
- package/src/core/color/operations/color_scale_okhsv_channel.js +45 -45
- package/src/core/color/tonemap/tonemap_aces.js +41 -41
- package/src/core/color/ycxcz/xyz_to_ycxcz.js +28 -28
- package/src/core/color/ycxcz/ycxcz_to_xyz.js +19 -19
- package/src/core/dom/isImageBitmap.js +12 -12
- package/src/core/function/frameThrottle.js +23 -23
- package/src/core/geom/2d/aabb/aabb2_array_combine.js +7 -7
- package/src/core/geom/2d/aabb/aabb2_compute_area.js +7 -7
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.js +7 -7
- package/src/core/geom/2d/aabb/aabb2_compute_overlap.js +7 -7
- package/src/core/geom/2d/aabb/aabb2_from_v2_array.js +7 -7
- package/src/core/geom/2d/aabb/aabb2_intersects_point.js +7 -7
- package/src/core/geom/2d/aabb/aabb2_overlap_exists.js +7 -7
- package/src/core/geom/2d/circle/circle_compute_circle_intersection.js +7 -7
- package/src/core/geom/2d/circle/circle_compute_circle_penetration.js +7 -7
- package/src/core/geom/2d/circle/circle_intersects_point.js +7 -7
- package/src/core/geom/2d/compute_polygon_area_2d.js +7 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.js +7 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.js +7 -7
- package/src/core/geom/2d/convex-hull/orientation3_array.js +7 -7
- package/src/core/geom/2d/intersect_ray_2d.js +7 -7
- package/src/core/geom/2d/line/line2_distance_to_point_sqr.js +7 -7
- package/src/core/geom/2d/line/line2_segment_intersection_fraction_2d.js +44 -44
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.js +7 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.js +7 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.js +7 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.js +7 -7
- package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.js +7 -7
- package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.js +7 -7
- package/src/core/geom/2d/line/segment2_intersects_segment2_2d.js +25 -25
- package/src/core/geom/2d/line/segment2_segment_compute_intersection_array_2d.js +46 -46
- package/src/core/geom/2d/line/segment2_segment_intersection_fractions.js +52 -52
- package/src/core/geom/2d/oriented-box/min_area_rect_2d.js +69 -69
- package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +433 -433
- package/src/core/geom/2d/polygon/polygon2_clip_axis_halfplane.js +51 -51
- package/src/core/geom/2d/polygon/polygon2_clip_halfplane.js +50 -50
- package/src/core/geom/2d/polygon/polygon2_is_counter_clockwise.js +84 -84
- package/src/core/geom/2d/polygon/polygon2_signed_area.js +52 -52
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +86 -86
- package/src/core/geom/2d/polygon/polygon2_triangulate.js +1280 -1280
- package/src/core/geom/2d/polygon/polygon2_triangulation_deviation.js +77 -77
- package/src/core/geom/2d/quad-tree/qt_collect_by_circle.js +39 -39
- package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.js +101 -101
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +7 -7
- package/src/core/geom/2d/rectangle_to_aabb.js +7 -7
- package/src/core/geom/2d/spline_bezier2_2d.js +7 -7
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.js +99 -99
- package/src/core/geom/2d/triangle/tri2_signed_area.js +35 -35
- package/src/core/geom/2d/triangle2d_compute_area.js +7 -7
- package/src/core/geom/2d/triangle2d_contains_point.js +7 -7
- package/src/core/geom/2d/triangle2d_get_barycentric.js +7 -7
- package/src/core/geom/2d/v2_morton_encode.js +23 -23
- package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_build_frustum.js +5 -5
- package/src/core/geom/3d/aabb/aabb3_closest_point_on_surface.js +57 -57
- package/src/core/geom/3d/aabb/aabb3_combined_surface_area.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_compute_projected_area.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_compute_surface_area.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_from_threejs_geometry.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_from_triangle_group.js +46 -46
- package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_ray_segment_entry_distance.js +95 -95
- package/src/core/geom/3d/aabb/aabb3_raycast.js +7 -7
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +93 -93
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.js +82 -82
- package/src/core/geom/3d/aabb/compute_aabb_from_points.js +7 -7
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +7 -7
- package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +486 -486
- package/src/core/geom/3d/atlas/BFF_PLAN.md +174 -174
- package/src/core/geom/3d/atlas/Chart.js +77 -77
- package/src/core/geom/3d/atlas/REVIEW_02.md +392 -392
- package/src/core/geom/3d/atlas/atlas_bench_lib.js +315 -315
- package/src/core/geom/3d/atlas/atlas_chart_type.js +16 -16
- package/src/core/geom/3d/atlas/atlas_compute_charts.js +188 -188
- package/src/core/geom/3d/atlas/atlas_extract_chart.js +107 -107
- package/src/core/geom/3d/atlas/atlas_generate.js +50 -50
- package/src/core/geom/3d/atlas/atlas_test_fixtures.js +266 -266
- package/src/core/geom/3d/atlas/atlas_write_chart_uvs.js +36 -36
- package/src/core/geom/3d/atlas/data/atlas_build_edge_dihedrals.js +62 -62
- package/src/core/geom/3d/atlas/data/atlas_build_edge_lengths.js +33 -33
- package/src/core/geom/3d/atlas/data/atlas_build_face_areas.js +50 -50
- package/src/core/geom/3d/atlas/io/atlas_mesh_weld_colocals.js +39 -39
- package/src/core/geom/3d/atlas/io/bt_loop_uv.js +35 -35
- package/src/core/geom/3d/atlas/pack/ChartPlacement.js +46 -46
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.js +269 -269
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.js +209 -209
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_ortho.js +38 -38
- package/src/core/geom/3d/atlas/param/atlas_chart_stretch_metric.js +86 -86
- package/src/core/geom/3d/atlas/param/atlas_piecewise_resegment.js +183 -183
- package/src/core/geom/3d/atlas/param/fit_plane_basis.js +66 -66
- package/src/core/geom/3d/atlas/segment/RegionGraph.js +40 -40
- package/src/core/geom/3d/atlas/segment/atlas_build_region_graph.js +136 -136
- package/src/core/geom/3d/atlas/segment/atlas_chart_roundness_delta.js +30 -30
- package/src/core/geom/3d/atlas/segment/atlas_compute_planar_regions.js +77 -77
- package/src/core/geom/3d/atlas/segment/atlas_merge_charts.js +116 -116
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts.js +271 -271
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.js +191 -191
- package/src/core/geom/3d/box/box3_projected_half_extent.js +35 -35
- package/src/core/geom/3d/capsule/capsule_intersects_aabb3_closed.js +67 -67
- package/src/core/geom/3d/capsule/capsule_intersects_aabb3_iterative.js +137 -137
- package/src/core/geom/3d/compute_circle_bounding_box.js +7 -7
- package/src/core/geom/3d/cone/computeConeBoundingBox.js +7 -7
- package/src/core/geom/3d/cone/computeConePlaneSide.js +7 -7
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js +7 -7
- package/src/core/geom/3d/cylinder/cylinder3_raycast.d.ts +38 -0
- package/src/core/geom/3d/cylinder/cylinder3_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/cylinder/cylinder3_raycast.js +105 -0
- package/src/core/geom/3d/equirectangular/equirectangular_direction_to_uv.js +18 -18
- package/src/core/geom/3d/equirectangular/equirectangular_uv_to_direction.js +24 -24
- package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.js +7 -7
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +7 -7
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +117 -117
- package/src/core/geom/3d/frustum/frustum_matrix4_project.js +7 -7
- package/src/core/geom/3d/frustum/hexahedron_from_aabb.js +7 -7
- package/src/core/geom/3d/frustum/read_frustum_corner.js +17 -17
- package/src/core/geom/3d/frustum/read_three_planes_to_array.js +7 -7
- package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.js +7 -7
- package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +146 -146
- package/src/core/geom/3d/gjk/gjk.js +430 -430
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +520 -520
- package/src/core/geom/3d/gjk/minkowski_support.js +71 -71
- package/src/core/geom/3d/gjk/mpr.js +368 -368
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +7 -7
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +7 -7
- package/src/core/geom/3d/line/line3_compute_point_segment_point_distance_unfolded.js +64 -64
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.js +153 -153
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.js +7 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.js +7 -7
- package/src/core/geom/3d/line/line3_compute_segment_segment_closest_points.js +88 -88
- package/src/core/geom/3d/line/line3_segment_segment_closest_point_pair.js +71 -71
- package/src/core/geom/3d/line/segment3_point_distance_to_segments.js +25 -25
- package/src/core/geom/3d/mat4/allocate_m4.js +7 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.js +7 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.js +7 -7
- package/src/core/geom/3d/mat4/compose_matrix4_array.js +7 -7
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.js +7 -7
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +7 -7
- package/src/core/geom/3d/mat4/m4_compose.js +22 -22
- package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.js +7 -7
- package/src/core/geom/3d/mat4/m4_decompose.js +64 -64
- package/src/core/geom/3d/mat4/m4_decompose_array.js +157 -157
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.js +32 -32
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.js +67 -67
- package/src/core/geom/3d/mat4/m4_linear_matrix3.js +29 -29
- package/src/core/geom/3d/mat4/m4_look_at.js +96 -96
- package/src/core/geom/3d/mat4/m4_make_rotation_x.js +47 -47
- package/src/core/geom/3d/mat4/m4_make_rotation_y.js +47 -47
- package/src/core/geom/3d/mat4/m4_make_rotation_z.js +47 -47
- package/src/core/geom/3d/mat4/m4_normal_matrix3.js +39 -39
- package/src/core/geom/3d/mat4/m4_perspective.js +66 -66
- package/src/core/geom/3d/mat4/m4_transpose.js +48 -48
- package/src/core/geom/3d/morton/mortonEncode_LUT.js +7 -7
- package/src/core/geom/3d/morton/mortonEncode_magicbits.js +7 -7
- package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.js +5 -5
- package/src/core/geom/3d/normal/hemioct/encode_unit_to_hemioct.js +28 -28
- package/src/core/geom/3d/normal/lambert_azimuth/decode_azimuth_to_unit.js +30 -30
- package/src/core/geom/3d/normal/lambert_azimuth/encode_unit_to_azimuth.js +19 -19
- package/src/core/geom/3d/normal/spherical/decode_spheremap_to_unit.js +38 -38
- package/src/core/geom/3d/normal/spherical/encode_unit_to_spheremap.js +30 -30
- package/src/core/geom/3d/plane/is_point_within_planes.js +7 -7
- package/src/core/geom/3d/plane/orient3d_fast_point.js +47 -47
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.js +7 -7
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.js +7 -7
- package/src/core/geom/3d/plane/plane3_intersect_plane.js +7 -7
- package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.js +7 -7
- package/src/core/geom/3d/point/point3_raycast.d.ts +33 -0
- package/src/core/geom/3d/point/point3_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/point/point3_raycast.js +47 -0
- package/src/core/geom/3d/polygon/polygon3_compute_normal.js +60 -60
- package/src/core/geom/3d/polygon/polygon3_triangulate.js +94 -94
- package/src/core/geom/3d/polyhedron/convex_polyhedron3_raycast.d.ts +40 -0
- package/src/core/geom/3d/polyhedron/convex_polyhedron3_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/polyhedron/convex_polyhedron3_raycast.js +94 -0
- package/src/core/geom/3d/quadric/QUADRIC3_SIZE.js +14 -14
- package/src/core/geom/3d/quadric/Quadric3.js +282 -282
- package/src/core/geom/3d/quadric/quadric3_add.js +33 -33
- package/src/core/geom/3d/quadric/quadric3_clear.js +25 -25
- package/src/core/geom/3d/quadric/quadric3_copy.js +27 -27
- package/src/core/geom/3d/quadric/quadric3_distance.js +36 -36
- package/src/core/geom/3d/quadric/quadric3_evaluate.js +25 -25
- package/src/core/geom/3d/quadric/quadric3_optimize.js +45 -45
- package/src/core/geom/3d/quadric/quadric3_scale.js +32 -32
- package/src/core/geom/3d/quadric/quadric3_set_from_plane_through_point.js +30 -30
- package/src/core/geom/3d/quadric/quadric3_set_from_vector4.js +35 -35
- package/src/core/geom/3d/quadric/quadric3_sub.js +36 -36
- package/src/core/geom/3d/quadric/quadric3_to_tensor_m3.js +28 -28
- package/src/core/geom/3d/quadric/quadric3_to_tensor_m3_inverse.js +56 -56
- package/src/core/geom/3d/quadric/quadric3_to_vector3.js +19 -19
- package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.js +7 -7
- package/src/core/geom/3d/quaternion/quat3_integrate.js +62 -62
- package/src/core/geom/3d/quaternion/quat3_multiply.js +31 -31
- package/src/core/geom/3d/quaternion/quat3_nlerp.js +72 -72
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +69 -69
- package/src/core/geom/3d/quaternion/quat_decode_from_uint32.js +7 -7
- package/src/core/geom/3d/quaternion/quat_encode_to_uint32.js +7 -7
- package/src/core/geom/3d/ray/ray3_array_compose.js +7 -7
- package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.js +7 -7
- package/src/core/geom/3d/ray/ray3_distance_to_point.js +7 -7
- package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.js +7 -7
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +17 -0
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +43 -0
- package/src/core/geom/3d/shape/CylinderShape3D.d.ts +1 -0
- package/src/core/geom/3d/shape/CylinderShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CylinderShape3D.js +21 -0
- package/src/core/geom/3d/shape/PointShape3D.d.ts +7 -0
- package/src/core/geom/3d/shape/PointShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PointShape3D.js +88 -63
- package/src/core/geom/3d/shape/PosedShape3D.d.ts +6 -0
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +27 -0
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts +10 -0
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +13 -0
- package/src/core/geom/3d/shape/Triangle3D.d.ts +1 -0
- package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/Triangle3D.js +26 -0
- package/src/core/geom/3d/shape/UnionShape3D.d.ts +6 -0
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +7 -0
- package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -45
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +44 -44
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.js +64 -64
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.js +7 -7
- package/src/core/geom/3d/shape/util/compute_signed_distance_gradient_by_sampling.js +51 -51
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +7 -7
- package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.js +7 -7
- package/src/core/geom/3d/sphere/harmonics/sh3_convolve_with_zh.js +53 -53
- package/src/core/geom/3d/sphere/harmonics/sh3_ggx_zh.js +30 -30
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.js +7 -7
- package/src/core/geom/3d/sphere/harmonics/sh_compute_K.js +7 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_point.js +7 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_ray.js +7 -7
- package/src/core/geom/3d/sphere/sphere_intersects_point.js +7 -7
- package/src/core/geom/3d/sphere/sphere_matrix4_transform.js +5 -5
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.js +7 -7
- package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.js +7 -7
- package/src/core/geom/3d/sphere/spherical_from_cartesian.js +7 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +174 -174
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +7 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.js +7 -7
- package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.js +7 -7
- package/src/core/geom/3d/tetrahedra/graphics/build_tetrahedral_mesh_geometry.js +39 -39
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.js +48 -48
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +173 -173
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_quality.js +22 -22
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -146
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -232
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -255
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +387 -387
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +140 -140
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.js +7 -7
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +97 -97
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -66
- package/src/core/geom/3d/tetrahedra/triangle/triangle_decode_depth.js +59 -59
- package/src/core/geom/3d/tetrahedra/triangle/triangle_rasterized_depth_sample_index.js +54 -54
- package/src/core/geom/3d/tetrahedra/validate_neighbour.js +70 -70
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.js +314 -314
- package/src/core/geom/3d/topology/struct/binary/BinaryDataLayer.js +364 -364
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +567 -567
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +1085 -1085
- package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.js +73 -73
- package/src/core/geom/3d/topology/struct/binary/io/bt_loop_kill.js +35 -35
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_append.js +119 -119
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +84 -84
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +172 -172
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.js +56 -56
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.js +227 -227
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +161 -161
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.js +490 -490
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.js +120 -120
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_indexed_geometry.js +120 -120
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_collapse.js +52 -52
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +115 -115
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_flip.js +142 -142
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -21
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +92 -92
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_split.js +179 -179
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_swap_vertex_slots.js +28 -28
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_kill_only_edge.js +8 -8
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.js +83 -83
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +89 -89
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_kill.js +25 -25
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.js +127 -127
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.js +268 -268
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_kill_only_face.js +8 -8
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_mesh_kill_degenerate_faces.js +72 -72
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_mesh_relative_merge_distance.js +48 -48
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_mesh_split_pinched_vertices.js +256 -256
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_mesh_vertex_merge_distance.js +77 -77
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.js +148 -148
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_kill_only.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_collect_boundary_segments.js +29 -29
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_collapse_breaks_link_condition.js +107 -107
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_flip_is_legal.js +41 -41
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_flip_would_fold.js +120 -120
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -42
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_is_boundary.js +20 -20
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_read_diamond.js +96 -96
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_compute_newell_normal.js +72 -72
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces.js +39 -39
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces_weighted.js +93 -93
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_shared_loop.js +48 -48
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_island_flood_fill.js +45 -45
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_read_triangle.js +66 -66
- package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.js +7 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_assert_valid.js +44 -44
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_euclidean_distance_field.js +32 -32
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_face_islands.js +53 -53
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path.js +703 -703
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +181 -181
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_segment_penetrates_surface.js +133 -133
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.js +82 -82
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_validate.js +599 -599
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -108
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +7 -7
- package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.js +7 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +7 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.js +7 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +7 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.js +7 -7
- package/src/core/geom/3d/triangle/compute_triangle_area_3d.js +7 -7
- package/src/core/geom/3d/triangle/compute_triangle_normal.js +7 -7
- package/src/core/geom/3d/triangle/rayTriangleIntersection.js +7 -7
- package/src/core/geom/3d/triangle/tri3_closest_point.js +65 -65
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.js +171 -171
- package/src/core/geom/3d/triangle/tri3_flatten_isometric.js +79 -79
- package/src/core/geom/3d/triangle/tri3_ray_intersection.js +160 -160
- package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.js +96 -96
- package/src/core/geom/3d/triangle/tri3_raycast.d.ts +42 -0
- package/src/core/geom/3d/triangle/tri3_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/tri3_raycast.js +94 -0
- package/src/core/geom/3d/triangle/triangle3_incenter.js +7 -7
- package/src/core/geom/3d/triangle/triangle_compute_plane_side.js +7 -7
- package/src/core/geom/3d/triangle/triangle_compute_signed_volume.js +7 -7
- package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.js +7 -7
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +7 -7
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.js +7 -7
- package/src/core/geom/3d/util/make_justified_point_grid.js +7 -7
- package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +381 -381
- package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +684 -684
- package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +554 -554
- package/src/core/geom/mat3/m3_cm_from_translation.js +7 -7
- package/src/core/geom/mat3/m3_cm_invert.js +7 -7
- package/src/core/geom/mat3/m3_make_rotation.js +5 -5
- package/src/core/geom/mat3/m3_make_rotation_TBN.js +31 -31
- package/src/core/geom/mat3/m3_multiply_vec3.js +7 -7
- package/src/core/geom/packing/computeBoundingSphereOfSpheres.js +7 -7
- package/src/core/geom/packing/max-rect/cost/costByBestShortSide.js +7 -7
- package/src/core/geom/packing/max-rect/cost/costByRemainingArea.js +7 -7
- package/src/core/geom/packing/max-rect/cutArea.js +7 -7
- package/src/core/geom/packing/max-rect/findBestContainer.js +7 -7
- package/src/core/geom/packing/max-rect/packMaxRectangles.js +7 -7
- package/src/core/geom/packing/max-rect/packOneBox.js +7 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.js +7 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.js +7 -7
- package/src/core/geom/random/randomPointInBox.js +7 -7
- package/src/core/geom/random/randomPointInCircle.js +7 -7
- package/src/core/geom/random/randomPointInPoint.js +7 -7
- package/src/core/geom/random/randomPointInSphere.js +7 -7
- package/src/core/geom/random/randomPointOnBox.js +7 -7
- package/src/core/geom/random/randomPointOnSphere.js +7 -7
- package/src/core/geom/random/random_orthonormal_basis.js +31 -31
- package/src/core/geom/vec/vector_axpy.js +15 -15
- package/src/core/geom/vec/vector_axpy_offset.js +20 -20
- package/src/core/geom/vec/vector_copy.js +7 -7
- package/src/core/geom/vec/vector_dot_offset.js +25 -25
- package/src/core/geom/vec/vector_scale_array.js +7 -7
- package/src/core/geom/vec2/v2_rotate.js +21 -21
- package/src/core/geom/vec2/v2_rotate_cos_sin.js +21 -21
- package/src/core/geom/vec3/v3_angle_atan2_between.js +7 -7
- package/src/core/geom/vec3/v3_angle_between.js +7 -7
- package/src/core/geom/vec3/v3_angle_cos_between.js +7 -7
- package/src/core/geom/vec3/v3_array_add_in_place.js +7 -7
- package/src/core/geom/vec3/v3_array_centroid.js +7 -7
- package/src/core/geom/vec3/v3_array_copy.js +7 -7
- package/src/core/geom/vec3/v3_array_displace_in_direction.js +7 -7
- package/src/core/geom/vec3/v3_array_equals.js +7 -7
- package/src/core/geom/vec3/v3_array_immediate_add.js +7 -7
- package/src/core/geom/vec3/v3_array_matrix4_rotate.js +7 -7
- package/src/core/geom/vec3/v3_array_normalize.js +7 -7
- package/src/core/geom/vec3/v3_array_scale.js +7 -7
- package/src/core/geom/vec3/v3_compute_interior_angle.js +7 -7
- package/src/core/geom/vec3/v3_cotangent.js +33 -33
- package/src/core/geom/vec3/v3_dot_array_array.js +7 -7
- package/src/core/geom/vec3/v3_matrix3_multiply.js +30 -30
- package/src/core/geom/vec3/v3_matrix3_rotate.js +49 -49
- package/src/core/geom/vec3/v3_matrix4_rotate.js +7 -7
- package/src/core/geom/vec3/v3_multiply.js +23 -23
- package/src/core/geom/vec3/v3_multiply_scalar.js +7 -7
- package/src/core/geom/vec3/v3_orthonormal_matrix_from_normal.js +49 -49
- package/src/core/geom/vec3/v3_quat3_apply.js +7 -7
- package/src/core/geom/vec3/v3_quat3_apply_inverse.js +7 -7
- package/src/core/geom/vec3/v3_quaternion_apply.js +39 -39
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.js +41 -41
- package/src/core/geom/vec3/v3_reflect.js +24 -24
- package/src/core/geom/vec3/v3_scale_array.js +18 -18
- package/src/core/geom/vec3/v3_triple_cross.js +45 -45
- package/src/core/geom/vec3/v3_triple_cross_product.js +7 -7
- package/src/core/geom/vec3/v3_uniform_sample_cone.js +21 -21
- package/src/core/geom/vec4/v4_multiply_mat4.js +7 -7
- package/src/core/graph/csr/csr_graph_build_distance_field.js +112 -112
- package/src/core/graph/csr/csr_graph_find_edge.js +25 -25
- package/src/core/graph/csr/csr_graph_find_shortest_path.js +105 -105
- package/src/core/graph/csr/csr_graph_from_undirected_edge_list.js +94 -94
- package/src/core/graph/graph_k_means_cluster.js +250 -250
- package/src/core/graph/layout/CircleLayout.js +1 -1
- package/src/core/graph/layout/box/BoxLayouter.js +1 -1
- package/src/core/graph/layout/graph_peel_topological_layer.js +45 -45
- package/src/core/graph/metis/BinaryTopologyFaceGraph.js +49 -49
- package/src/core/graph/metis/bt_mesh_build_face_graph.js +111 -111
- package/src/core/graph/metis/cluster_mesh_metis.js +137 -137
- package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -100
- package/src/core/graph/metis/native/bisection/compute_2way_params.js +86 -86
- package/src/core/graph/metis/native/bisection/fm_2way.js +297 -297
- package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -137
- package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -119
- package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -94
- package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -158
- package/src/core/graph/metis/native/coarsen/match_shem.js +175 -175
- package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -122
- package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -170
- package/src/core/graph/metis/native/metis_partition_kway.js +126 -126
- package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -53
- package/src/core/graph/metis/native/refine/fm_kway.js +487 -487
- package/src/core/graph/metis/native/refine/project_kway.js +43 -43
- package/src/core/graph/metis/native/refine/refine_kway.js +43 -43
- package/src/core/lang/reactive/pegjs/parser.js +3458 -3458
- package/src/core/math/complex/complex_horner_eval.js +31 -31
- package/src/core/math/computeWholeDivisorLow.js +33 -33
- package/src/core/math/f32_next_down.js +24 -24
- package/src/core/math/f32_next_up.js +27 -27
- package/src/core/math/hash/hash_mix2.js +22 -22
- package/src/core/math/hash/hash_mix3.js +19 -19
- package/src/core/math/linalg/cg/cg_solve.js +106 -106
- package/src/core/math/linalg/cg/cg_solve_normal_equations.js +59 -59
- package/src/core/math/linalg/cubic_residual_times_derivative_accumulate.js +43 -43
- package/src/core/math/linalg/eigen/matrix_householder_in_place.js +122 -122
- package/src/core/math/linalg/eigen/matrix_qr_in_place.js +190 -190
- package/src/core/math/linalg/eigen/matrix_symmetric_3x3_eigen.js +117 -117
- package/src/core/math/linalg/givens/givens_apply_rows.js +28 -28
- package/src/core/math/linalg/givens/givens_apply_rows_offset.js +30 -30
- package/src/core/math/linalg/givens/givens_rotation_coefficients.js +39 -39
- package/src/core/math/linalg/lu_factor_linear_system.js +108 -108
- package/src/core/math/linalg/lu_solve_linear_system.js +53 -53
- package/src/core/math/linalg/polynomial_add_into.js +29 -29
- package/src/core/math/linalg/polynomial_complex_roots_aberth_ehrlich.js +159 -159
- package/src/core/math/linalg/polynomial_cubic_derivative_eval.js +16 -16
- package/src/core/math/linalg/polynomial_cubic_horner_eval.js +19 -19
- package/src/core/math/linalg/polynomial_cubic_second_derivative_eval.js +14 -14
- package/src/core/math/linalg/polynomial_multiply.js +41 -41
- package/src/core/math/linalg/polynomial_real_roots_in_interval.js +211 -211
- package/src/core/math/linalg/polynomial_root_bound_cauchy.js +30 -30
- package/src/core/math/linalg/polynomial_scale_into.js +17 -17
- package/src/core/math/linalg/polynomial_sub_into.js +29 -29
- package/src/core/math/linalg/solve_linear_system_GEPP_2x2.js +96 -96
- package/src/core/math/linalg/sor_optimal_omega.js +42 -42
- package/src/core/math/linalg/sparse/SparseMatrixCSR.js +88 -88
- package/src/core/math/linalg/sparse/spm_matvec.js +22 -22
- package/src/core/math/linalg/sparse/spm_matvec_transpose.js +29 -29
- package/src/core/math/lookup/LUT_HEATMAP.js +30 -30
- package/src/core/math/lookup/ParameterLookupTable.js +495 -495
- package/src/core/math/lookup/ParameterLookupTableFlags.js +6 -6
- package/src/core/math/noise/curl_noise_3d.js +18 -18
- package/src/core/math/physics/brdf/cone_cosine_from_roughness.js +28 -28
- package/src/core/math/physics/brdf/reflection_sample_weight.js +48 -48
- package/src/core/math/physics/kinematics/computeInterceptPoint.js +79 -79
- package/src/core/math/random/randomSeed.js +16 -16
- package/src/core/math/random/random_pick_weighted_index.js +26 -26
- package/src/core/math/round_half_away_from_zero.js +13 -13
- package/src/core/math/spline/spline3_hermite_apply_transform.js +107 -107
- package/src/core/math/spline/spline3_hermite_intersection_spline3_hermite_1d.js +125 -125
- package/src/core/math/spline/spline3_hermite_intersects_spline3_hermite.js +50 -50
- package/src/core/math/spline/spline3_hermite_reverse.js +49 -49
- package/src/core/math/spline/spline3_hermite_to_monomial.js +37 -37
- package/src/core/math/statistics/hammersley_sequence.js +53 -53
- package/src/core/model/reactive/model/util/createRandomReactiveExpression.js +185 -185
- package/src/core/path/convertPathToURL.js +107 -107
- package/src/core/process/delay.js +16 -16
- package/src/core/science/units/MEASUREMENT_UNITS_SCIENTIFIC.js +87 -87
- package/src/core/science/units/MEASUREMENT_UNITS_SI.js +17 -17
- package/src/core/science/units/NamedUnit.js +48 -48
- package/src/core/science/units/UNIT_DIMENSION_MAPPING.js +29 -29
- package/src/core/science/units/UnitDimension.js +28 -28
- package/src/core/science/units/format_quantity.js +74 -74
- package/src/core/science/units/magnitude_prefix.js +127 -127
- package/src/core/science/units/si/AMPERE.js +13 -13
- package/src/core/science/units/si/CANDELA.js +13 -13
- package/src/core/science/units/si/DIMENSIONLESS.js +14 -14
- package/src/core/science/units/si/KELVIN.js +13 -13
- package/src/core/science/units/si/KILOGRAM.js +13 -13
- package/src/core/science/units/si/METER.js +13 -13
- package/src/core/science/units/si/MOLE.js +13 -13
- package/src/core/science/units/si/SECOND.js +13 -13
- package/src/core/science/units/si/derived/BECQUEREL.js +16 -16
- package/src/core/science/units/si/derived/COULOMB.js +13 -13
- package/src/core/science/units/si/derived/FARAD.js +13 -13
- package/src/core/science/units/si/derived/GRAY.js +16 -16
- package/src/core/science/units/si/derived/HENRY.js +13 -13
- package/src/core/science/units/si/derived/HERTZ.js +16 -16
- package/src/core/science/units/si/derived/JOULE.js +13 -13
- package/src/core/science/units/si/derived/KATAL.js +13 -13
- package/src/core/science/units/si/derived/LUMEN.js +14 -14
- package/src/core/science/units/si/derived/LUX.js +13 -13
- package/src/core/science/units/si/derived/NEWTON.js +13 -13
- package/src/core/science/units/si/derived/OHM.js +13 -13
- package/src/core/science/units/si/derived/PASCAL.js +13 -13
- package/src/core/science/units/si/derived/SIEMENS.js +13 -13
- package/src/core/science/units/si/derived/SIEVERT.js +16 -16
- package/src/core/science/units/si/derived/TESLA.js +13 -13
- package/src/core/science/units/si/derived/VOLT.js +13 -13
- package/src/core/science/units/si/derived/WATT.js +13 -13
- package/src/core/science/units/si/derived/WEBER.js +13 -13
- package/src/core/science/units/unit_matrix_to_string.js +403 -403
- package/src/engine/Engine.js +726 -726
- package/src/engine/EngineHarness.js +590 -590
- package/src/engine/REVIEW_2026_07_03.md +211 -211
- package/src/engine/animation/AnimatedActions.js +81 -81
- package/src/engine/animation/AnimationUtils.js +252 -252
- package/src/engine/animation/async/TimeSeries.js +300 -300
- package/src/engine/animation/curve/animation_curve_binary_codec.js +60 -60
- package/src/engine/animation/curve/draw/canvas_point_to_curve.js +22 -22
- package/src/engine/animation/curve/draw/curve_point_to_canvas.js +38 -38
- package/src/engine/animation/curve/draw/position_canvas_to_curve.js +22 -22
- package/src/engine/animation/curve/draw/position_curve_to_canvas.js +22 -22
- package/src/engine/asset/GameAssetType.d.ts +0 -1
- package/src/engine/asset/GameAssetType.js +0 -1
- package/src/engine/asset/load_model_scene_bundle.js +27 -27
- package/src/engine/asset/loaders/font/FontAsset.js +21 -21
- package/src/engine/asset/loaders/font/FontAssetLoader.js +20 -20
- package/src/engine/asset/loaders/gltf_test_fixtures.js +358 -358
- package/src/engine/asset/loaders/image/ImageBitmapAssetLoader.js +52 -52
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +94 -94
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterAverage.js +59 -59
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.js +55 -55
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterPaeth.js +74 -74
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.js +34 -34
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.js +46 -46
- package/src/engine/control/first-person/DESIGN.md +640 -640
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -563
- package/src/engine/control/first-person/FirstPersonMotionPhase.js +134 -134
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2045 -2045
- package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -30
- package/src/engine/control/first-person/math/Spring.js +71 -71
- package/src/engine/control/first-person/math/computeJumpFromApex.js +23 -23
- package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -41
- package/src/engine/control/first-person/math/computeMassRatios.js +44 -44
- package/src/engine/control/first-person/math/criticallyDampedSpring.js +34 -34
- package/src/engine/control/first-person/math/dampedSpringStep.js +72 -72
- package/src/engine/control/first-person/math/jumpDynamics.js +108 -108
- package/src/engine/control/first-person/math/stepTowards.js +20 -20
- package/src/engine/control/first-person/pose/FirstPersonPose.js +137 -137
- package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -27
- package/src/engine/control/first-person/test/buildTestPlayer.js +36 -36
- package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +531 -531
- package/src/engine/ecs/EntityManager.d.ts +7 -3
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +10 -5
- package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
- package/src/engine/ecs/async/SystemWorkerHost.js +329 -329
- package/src/engine/ecs/async/SystemWorkerLoopback.js +143 -143
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +246 -246
- package/src/engine/ecs/async/WorkerSystem.js +702 -702
- package/src/engine/ecs/async/WorkerSystemProtocol.js +150 -150
- package/src/engine/ecs/fow/FogOfWar.js +707 -707
- package/src/engine/ecs/fow/FogOfWarEdgeMode.js +40 -40
- package/src/engine/ecs/fow/fog_of_war_mask_world_bounds.js +24 -24
- package/src/engine/ecs/fow/fog_of_war_uv_transform.js +30 -30
- package/src/engine/ecs/gui/hud/testHudEdgeStick.js +132 -134
- package/src/engine/ecs/hierarchy/EntityChildIndex.js +140 -140
- package/src/engine/ecs/ik/IKProblem.js +42 -42
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +193 -193
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +134 -134
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +97 -97
- package/src/engine/ecs/ik/ik_bone_chain.js +85 -85
- package/src/engine/ecs/ik/ik_probe_terrain_contact.js +119 -119
- package/src/engine/ecs/parent/EntityNode.d.ts +1 -1
- package/src/engine/ecs/parent/EntityNode.js +2 -2
- package/src/engine/ecs/parent/ParentEntitySystem.js +255 -255
- package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +13 -7
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +269 -269
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +315 -315
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectSerializer.js +331 -331
- package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +199 -199
- package/src/engine/ecs/storage/binary/object-v2/ObjectBinaryFormat.js +57 -57
- package/src/engine/ecs/storage/binary/object-v2/ObjectSerializationAdapter.js +56 -56
- package/src/engine/ecs/storage/binary/object-v2/README.md +110 -110
- package/src/engine/ecs/storage/binary/object-v2/objectStringCodec.js +48 -48
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +44 -44
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +265 -265
- package/src/engine/ecs/terrain/TerrainClouds.js +97 -97
- package/src/engine/ecs/terrain/ecs/StubTerrainBuildWorker.js +65 -65
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +4 -0
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
- package/src/engine/ecs/terrain/ecs/TerrainSystem.js +209 -209
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +316 -316
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +416 -416
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +525 -525
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +302 -302
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +561 -561
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +896 -896
- package/src/engine/ecs/terrain/tiles/tile_geometry_to_meshlets.js +36 -36
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
- package/src/engine/ecs/transform/Transform64.js +814 -814
- package/src/engine/ecs/transform/t64_copy_from_transform.js +35 -35
- package/src/engine/ecs/transform/t64_equals_transform.js +55 -55
- package/src/engine/ecs/transform/t64_look_rotation.js +36 -36
- package/src/engine/ecs/transform/t64_transform_direction.js +25 -25
- package/src/engine/ecs/transform/transform_copy_from_t64.js +28 -28
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +345 -345
- package/src/engine/ecs/transform-attachment/transform_attachment_find_descendant_by_name.js +65 -65
- package/src/engine/ecs/transform-attachment/transform_attachment_parent_of.js +24 -24
- package/src/engine/ecs/util/hideEntityGracefully.js +208 -208
- package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +446 -446
- package/src/engine/graphics/FULL_SCREEN_QUAD_VERTEX_SHADER.js +14 -14
- package/src/engine/graphics/FrameThrottle.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/graph/AnimationState.js +207 -207
- package/src/engine/graphics/ecs/animation/animator/graph/AnimationTransition.js +151 -151
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.js +22 -22
- package/src/engine/graphics/ecs/camera/Camera.js +165 -165
- package/src/engine/graphics/ecs/camera/camera_active_frustum.js +25 -25
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
- package/src/engine/graphics/ecs/camera/camera_traverse_active.js +18 -18
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +170 -170
- package/src/engine/graphics/ecs/camera/serialization/CameraSerializationAdapter.js +68 -68
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +296 -296
- package/src/engine/graphics/ecs/decal/v2/Decal.js +220 -220
- package/src/engine/graphics/ecs/decal/v2/DecalSerializationAdapter.js +56 -56
- package/src/engine/graphics/ecs/decal/v2/DecalSerializationUpgrader_0_1.js +38 -38
- package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.js +62 -62
- package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.js +77 -77
- package/src/engine/graphics/ecs/make_bvh_depth_range_computer.js +33 -33
- package/src/engine/graphics/ecs/mesh-v2/DeferredBoundsQueue.js +88 -88
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.js +303 -303
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshSystem.d.ts +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/serialization/SGMeshSerializationAdapter.js +39 -39
- package/src/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.js +36 -36
- package/src/engine/graphics/ecs/path/tube/build/GeometryStream.js +94 -94
- package/src/engine/graphics/ecs/path/tube/build/build_stream_catmullrom.js +310 -310
- package/src/engine/graphics/ecs/path/tube/build/build_stream_linear.js +73 -73
- package/src/engine/graphics/ecs/path/tube/build/computeFrenetFrames.js +199 -199
- package/src/engine/graphics/ecs/path/tube/build/makeTubeStream.js +217 -217
- package/src/engine/graphics/ecs/path/tube/build/make_cap.js +340 -340
- package/src/engine/graphics/ecs/path/tube/build/make_ring_faces.js +40 -40
- package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.js +153 -153
- package/src/engine/graphics/ecs/render_layers_compute_depth_range.js +64 -64
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +483 -483
- package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +26 -26
- package/src/engine/graphics/ecs/trail3d/advance_trail.js +42 -42
- package/src/engine/graphics/ecs/trail3d/make_gradient_stroke.js +58 -58
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +90 -90
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +75 -75
- package/src/engine/graphics/ecs/trail3d/trail_head_position.js +19 -19
- package/src/engine/graphics/ecs/water/Water.js +104 -104
- package/src/engine/graphics/geometry/AttributeData.js +84 -84
- package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.js +49 -49
- package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.js +288 -288
- package/src/engine/graphics/geometry/buffered/query/nearest_point_on_triangle_record.js +87 -87
- package/src/engine/graphics/geometry/buffered/read_triangle_vertices.js +102 -102
- package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_buffered_geometry.js +52 -52
- package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_indexed_geometry.js +20 -20
- package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_unindexed_geometry.js +19 -19
- package/src/engine/graphics/geometry/optimization/geometry_optimize_uv_tension.js +135 -135
- package/src/engine/graphics/impostors/voxel/README.md +149 -149
- package/src/engine/graphics/impostors/voxel/VoxelImpostorDescription.js +141 -141
- package/src/engine/graphics/particles/node-based/codegen/glsl/getTypeByteSize.js +20 -20
- package/src/engine/graphics/particles/node-based/nodes/FloatConstant.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/FloatConstant.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/ReadFloatUniform.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/ReadFloatUniform.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/ReadVelocity.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/ReadVelocity.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/ShaderNode.d.ts +1 -2
- package/src/engine/graphics/particles/node-based/nodes/ShaderNode.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/Vector3Constant.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/Vector3Constant.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/Vector3Merge.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/Vector3Merge.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/Vector3Split.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/Vector3Split.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/WriteVelocity.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/WriteVelocity.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/attribute/ReadVector3Attribute.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/attribute/ReadVector3Attribute.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/attribute/WriteVector3Attribute.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/attribute/WriteVector3Attribute.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/math/AddFloatNode.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/math/AddFloatNode.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Add.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Add.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Divide.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Divide.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Multiply.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Multiply.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Subtract.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/math/Vector3Subtract.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/noise/CurlNoiseNode.d.ts +2 -0
- package/src/engine/graphics/particles/node-based/nodes/noise/CurlNoiseNode.d.ts.map +1 -1
- package/src/engine/graphics/particles/node-based/nodes/particle_data_type_component_count.js +45 -45
- package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +229 -229
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +2 -10
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1149 -1149
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +472 -472
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -2
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +2 -2
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.js +3 -5
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +135 -135
- package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.js +168 -168
- package/src/engine/graphics/render/forward_plus/plugin/forwardPlusMaterialMarker.js +18 -18
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.js +2 -2
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +219 -219
- package/src/engine/graphics/render/frame_graph/FrameGraph.js +900 -900
- package/src/engine/graphics/render/frame_graph/FrameGraphScope.js +72 -72
- package/src/engine/graphics/render/frame_graph/FrameGraphState.js +39 -39
- package/src/engine/graphics/render/frame_graph/ResourceEntry.js +96 -96
- package/src/engine/graphics/render/gizmo/GizmoShapeBuffer.js +105 -105
- package/src/engine/graphics/render/gizmo/GizmoShapeRenderingInterface.js +162 -162
- package/src/engine/graphics/render/layers/RenderLayer.js +95 -95
- package/src/engine/graphics/sh3/build_injected_shader.js +56 -56
- package/src/engine/graphics/sh3/grid_dilate_average.js +175 -175
- package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +506 -506
- package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.js +161 -161
- package/src/engine/graphics/sh3/path_tracer/PathTracedRenderer.js +205 -205
- package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +698 -698
- package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +490 -490
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.js +2 -2
- package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.js +45 -45
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +73 -73
- package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +32 -32
- package/src/engine/graphics/sh3/path_tracer/texture/apply_texture_clamping_to_coordinate.js +28 -28
- package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +142 -142
- package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.js +70 -70
- package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +388 -388
- package/src/engine/graphics/shaders/chunks/glsl_octahedral_impostor.js +277 -277
- package/src/engine/graphics/shaders/chunks/glsl_voxel_impostor_splat.js +57 -57
- package/src/engine/graphics/shadows/vsm.glsl.js +43 -43
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +81 -81
- package/src/engine/graphics/texture/EnvironmentTextureProjection.js +15 -15
- package/src/engine/graphics/texture/channel_count_to_format_prefix.js +26 -26
- package/src/engine/graphics/texture/isImageBitmap.js +2 -2
- package/src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.js +189 -189
- package/src/engine/graphics/texture/reflection/equirectangular_reflection_roughness.js +51 -51
- package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.js +145 -145
- package/src/engine/graphics/texture/sampler/Sampler2DArray.js +172 -172
- package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +466 -466
- package/src/engine/graphics/texture/sampler/compare/flip/FlipParameters.js +18 -18
- package/src/engine/graphics/texture/sampler/compare/flip/FlipPooling.js +33 -33
- package/src/engine/graphics/texture/sampler/compare/flip/flip_build_feature_kernel.js +147 -147
- package/src/engine/graphics/texture/sampler/compare/flip/flip_build_spatial_kernel.js +177 -177
- package/src/engine/graphics/texture/sampler/compare/flip/flip_compute_color_difference.js +104 -104
- package/src/engine/graphics/texture/sampler/compare/flip/flip_compute_feature_difference.js +76 -76
- package/src/engine/graphics/texture/sampler/compare/flip/flip_compute_pixels_per_degree.js +34 -34
- package/src/engine/graphics/texture/sampler/compare/flip/flip_constants.js +77 -77
- package/src/engine/graphics/texture/sampler/compare/flip/flip_filter_feature.js +48 -48
- package/src/engine/graphics/texture/sampler/compare/flip/flip_filter_spatial.js +86 -86
- package/src/engine/graphics/texture/sampler/compare/flip/flip_pool.js +71 -71
- package/src/engine/graphics/texture/sampler/compare/flip/flip_srgb_to_ycxcz.js +55 -55
- package/src/engine/graphics/texture/sampler/compare/flip/sampler2d_flip_ldr.js +80 -80
- package/src/engine/graphics/texture/sampler/filter/SeparableKernel.js +82 -82
- package/src/engine/graphics/texture/sampler/filter/sampler2d_convolve_separable.js +122 -122
- package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.js +148 -148
- package/src/engine/graphics/texture/sampler/sampler2d_channel_apply_lut.js +82 -82
- package/src/engine/graphics/texture/sampler/sampler2d_combine.js +67 -67
- package/src/engine/graphics/texture/sampler/sampler2d_linear_f16_to_srgb_u8.js +54 -54
- package/src/engine/graphics/texture/sampler/sampler2d_sample_equirectangular_direction.js +63 -63
- package/src/engine/graphics/texture/sampler/sampler2d_srgb_to_linear.js +33 -33
- package/src/engine/graphics/texture/sampler/sampler2d_srgb_u8_to_linear_f16.js +68 -68
- package/src/engine/graphics/texture/shade_image_preview.js +103 -103
- package/src/engine/graphics/trail/TrailSpawnMode.js +20 -20
- package/src/engine/graphics/trail/tube/TubeX.js +573 -573
- package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +58 -58
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +34 -34
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +69 -69
- package/src/engine/graphics/trail/tube/tube_frame.js +83 -83
- package/src/engine/graphics3/AnimationGraphSystem3.js +329 -329
- package/src/engine/graphics3/AnimationSystem3.js +352 -352
- package/src/engine/graphics3/CameraSystem3.js +170 -170
- package/src/engine/graphics3/DecalSystem3.js +441 -441
- package/src/engine/graphics3/FogOfWarSystem3.js +265 -265
- package/src/engine/graphics3/GraphicsEngine3.js +776 -776
- package/src/engine/graphics3/HighlightSystem3.js +241 -241
- package/src/engine/graphics3/LightSystem3.js +211 -211
- package/src/engine/graphics3/MeshSystem3.js +646 -646
- package/src/engine/graphics3/ParticleEmitterSystem3.js +289 -289
- package/src/engine/graphics3/PathDisplaySystem3.js +309 -309
- package/src/engine/graphics3/PickingQuery.js +48 -48
- package/src/engine/graphics3/PickingResult.js +47 -47
- package/src/engine/graphics3/PickingSystem3.js +273 -273
- package/src/engine/graphics3/ShadeCameraAdapter.js +55 -55
- package/src/engine/graphics3/ShadedGeometrySystem3.js +169 -169
- package/src/engine/graphics3/TerrainSystem3.js +566 -566
- package/src/engine/graphics3/TooltipComponentSystem3.js +328 -328
- package/src/engine/graphics3/Trail3DSystem3.js +221 -221
- package/src/engine/graphics3/WaterSystem3.js +293 -293
- package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
- package/src/engine/graphics3/animation/wrap_clip_time.js +23 -23
- package/src/engine/graphics3/animation/write_graph_playback.js +48 -48
- package/src/engine/graphics3/camera_sync_from_transform.js +29 -29
- package/src/engine/graphics3/debug/gizmo_view_from_camera.js +48 -48
- package/src/engine/graphics3/decal/DECAL_CLUSTER.js +61 -61
- package/src/engine/graphics3/decal/DECAL_GPU_RECORD.js +117 -117
- package/src/engine/graphics3/decal/DecalAtlas.js +194 -194
- package/src/engine/graphics3/decal/DecalAtlasFill.js +32 -32
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +360 -360
- package/src/engine/graphics3/decal/chunk_decal_intersects_frustum.js +59 -59
- package/src/engine/graphics3/decal/chunk_decal_sampling_info.js +57 -57
- package/src/engine/graphics3/decal/chunk_decal_surface_frame.js +54 -54
- package/src/engine/graphics3/decal/decal_atlas_border.js +69 -69
- package/src/engine/graphics3/decal/decal_gpu_records.js +120 -120
- package/src/engine/graphics3/decal/decal_material_samplers.js +109 -109
- package/src/engine/graphics3/decal/graph_build_decal_clusters.js +212 -212
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +207 -207
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +108 -108
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +151 -151
- package/src/engine/graphics3/highlight/HIGHLIGHT_OUTLINE.js +23 -23
- package/src/engine/graphics3/highlight/chunk_highlight_lookup.js +53 -53
- package/src/engine/graphics3/highlight/pack_highlight_color.js +44 -44
- package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
- package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
- package/src/engine/graphics3/load_cube_environment.js +68 -68
- package/src/engine/graphics3/make_default_environment.js +107 -107
- package/src/engine/graphics3/particles/particle_gpu_records.js +221 -221
- package/src/engine/graphics3/path/build_tube_path_streams.js +98 -98
- package/src/engine/graphics3/path/tube_stream_write_geometry.js +90 -90
- package/src/engine/graphics3/preview/ModelPreviewFraming.js +35 -35
- package/src/engine/graphics3/preview/make_model_preview_scene.js +154 -154
- package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
- package/src/engine/graphics3/preview/model_preview_framing.js +70 -70
- package/src/engine/graphics3/shade_bundle_bounds.js +55 -55
- package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
- package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
- package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.js +481 -481
- package/src/engine/graphics3/terrain/chunk_terrain_grid_overlay.js +61 -61
- package/src/engine/graphics3/terrain/chunk_terrain_splat_mix.js +66 -66
- package/src/engine/graphics3/terrain/pack_terrain_row_table.js +53 -53
- package/src/engine/graphics3/terrain/shader_terrain_splat.js +215 -215
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +158 -158
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +2 -2
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
- package/src/engine/input/GAMEPAD_API_PROPOSAL.md +717 -717
- package/src/engine/input/analog/apply_radial_dead_zone.js +38 -38
- package/src/engine/input/devices/GamepadDevice.js +466 -466
- package/src/engine/input/devices/ManualInputDevice.js +152 -152
- package/src/engine/input/devices/PointerCoordinates.js +26 -26
- package/src/engine/input/devices/events/GamepadEvents.js +10 -10
- package/src/engine/input/devices/gamepad/GamepadAxes.js +19 -19
- package/src/engine/input/devices/gamepad/GamepadButtons.js +29 -29
- package/src/engine/input/devices/gamepad/GamepadCoordinates.js +17 -17
- package/src/engine/input/devices/gamepad/GamepadDeviceLayout.js +323 -323
- package/src/engine/input/devices/gamepad/GamepadHandle.js +286 -286
- package/src/engine/input/devices/gamepad/GamepadLayout.js +160 -160
- package/src/engine/input/devices/gamepad/GamepadStandardMapping.js +31 -31
- package/src/engine/input/devices/gamepad/GamepadStick.js +169 -169
- package/src/engine/input/devices/gamepad/GamepadStickCalibration.js +119 -119
- package/src/engine/input/devices/gamepad/GamepadStickCalibrator.js +250 -250
- package/src/engine/input/devices/gamepad/gamepad_layout_database.js +144 -144
- package/src/engine/input/devices/gamepad/gamepad_read_hat_axis.js +61 -61
- package/src/engine/input/devices/gamepad/gamepad_write_dpad_vector.js +30 -30
- package/src/engine/input/devices/gamepad/prototypeGamepadTester.js +2124 -2124
- package/src/engine/input/devices/mouse/MouseButtons.js +22 -22
- package/src/engine/input/ecs/components/Input.js +118 -118
- package/src/engine/input/ecs/components/InputController.js +78 -78
- package/src/engine/input/ecs/ism/ISM_DESIGN.md +1523 -1523
- package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +627 -627
- package/src/engine/input/ecs/ism/InputActionEvent.js +40 -40
- package/src/engine/input/ecs/ism/InputBinding.js +71 -71
- package/src/engine/input/ecs/ism/InputCoordinateKind.js +25 -25
- package/src/engine/input/ecs/ism/InputCoordinateSource.js +86 -86
- package/src/engine/input/ecs/ism/InputDirection.js +33 -33
- package/src/engine/input/ecs/ism/InputMapProgram.js +236 -236
- package/src/engine/input/ecs/ism/InputMapSystem.js +976 -976
- package/src/engine/input/ecs/ism/InputOcclusion.js +31 -31
- package/src/engine/input/ecs/ism/InputSource.js +67 -67
- package/src/engine/input/ecs/ism/InputSourceTable.js +107 -107
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.js +93 -93
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateChannelType.js +11 -11
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.js +153 -153
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateSwitches.js +160 -160
- package/src/engine/input/ecs/ism/device/GAMEPAD_INPUT_DEVICE_ID.js +9 -9
- package/src/engine/input/ecs/ism/device/GamepadInputDeviceAdapter.js +88 -88
- package/src/engine/input/ecs/ism/device/InputDeviceAdapter.js +72 -72
- package/src/engine/input/ecs/ism/device/KEYBOARD_INPUT_DEVICE_ID.js +9 -9
- package/src/engine/input/ecs/ism/device/KeyboardInputDeviceAdapter.js +63 -63
- package/src/engine/input/ecs/ism/device/ManualInputDeviceAdapter.js +55 -55
- package/src/engine/input/ecs/ism/device/POINTER_INPUT_DEVICE_ID.js +9 -9
- package/src/engine/input/ecs/ism/device/PointerInputDeviceAdapter.js +160 -160
- package/src/engine/input/ecs/ism/map/InputBinding.js +88 -88
- package/src/engine/input/ecs/ism/map/InputCoordinateBinding.js +102 -102
- package/src/engine/input/ecs/ism/map/InputLayer.js +220 -220
- package/src/engine/input/ecs/ism/map/InputMap.js +331 -331
- package/src/engine/input/ecs/ism/prototypeInputMap.js +309 -309
- package/src/engine/input/ecs/ism/trigger/InputTrigger.js +148 -148
- package/src/engine/input/ecs/ism/trigger/InputTriggerChord.js +173 -173
- package/src/engine/input/ecs/ism/trigger/InputTriggerGamepadButton.js +37 -37
- package/src/engine/input/ecs/ism/trigger/InputTriggerHold.js +176 -176
- package/src/engine/input/ecs/ism/trigger/InputTriggerKey.js +39 -39
- package/src/engine/input/ecs/ism/trigger/InputTriggerMouseButton.js +38 -38
- package/src/engine/input/ecs/ism/trigger/InputTriggerRelease.js +120 -120
- package/src/engine/input/ecs/ism/trigger/InputTriggerSequence.js +315 -315
- package/src/engine/input/ecs/ism/trigger/InputTriggerSwitch.js +105 -105
- package/src/engine/input/ecs/ism/trigger/InputTriggerType.js +17 -17
- package/src/engine/input/ecs/systems/InputControllerSystem.js +253 -253
- package/src/engine/input/ecs/systems/InputSystem.js +162 -162
- package/src/engine/intelligence/behavior/primitive/FailingBehaviorSerializationAdapter.js +25 -25
- package/src/engine/intelligence/behavior/primitive/SucceedingBehaviorSerializationAdapter.js +26 -26
- package/src/engine/intelligence/behavior/util/AsynchronousDelayAction.js +55 -55
- package/src/engine/interpolation/BinaryInterpolationAdapter.js +56 -56
- package/src/engine/interpolation/Interpoland.js +49 -49
- package/src/engine/interpolation/Interpolated.js +149 -149
- package/src/engine/interpolation/PoseInterpolationAdapter.js +61 -61
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +57 -57
- package/src/engine/interpolation/pose_interpoland.js +27 -27
- package/src/engine/navigation/ecs/path_following/PathFollower.js +222 -222
- package/src/engine/navigation/mesh/NavigationMesh.js +145 -145
- package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +661 -0
- package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +229 -229
- package/src/engine/navigation/mesh/build/clip_soup_against_overhangs.d.ts.map +1 -1
- package/src/engine/navigation/mesh/build/clip_soup_against_overhangs.js +628 -520
- package/src/engine/network/CONGESTION_CONTROL.md +87 -87
- package/src/engine/network/README.md +52 -52
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +43 -43
- package/src/engine/network/adapters/TransformInterpolationAdapter.js +84 -84
- package/src/engine/network/adapters/TransformReplicationAdapter.js +87 -87
- package/src/engine/network/adapters/Vector3InterpolationAdapter.js +46 -46
- package/src/engine/network/convertPathToURL.js +2 -2
- package/src/engine/network/core/MalformedPacketError.js +26 -26
- package/src/engine/network/core/quantize/quantize_float.js +73 -73
- package/src/engine/network/core/quantize/quantize_position.js +65 -65
- package/src/engine/network/core/sequence/ack_bitfield.js +77 -77
- package/src/engine/network/core/sequence/seq16.js +69 -69
- package/src/engine/network/core/sequence/seq32.js +73 -73
- package/src/engine/network/ecs/NetworkSystem.js +84 -84
- package/src/engine/network/ecs/components/NetworkIdentity.js +73 -73
- package/src/engine/network/ecs/owner_authorization.js +55 -55
- package/src/engine/network/ecs/serialization/NetworkIdentitySerializationAdapter.js +64 -64
- package/src/engine/network/replication/ScopeFilter.js +71 -71
- package/src/engine/network/sim/ActionLog.js +152 -152
- package/src/engine/network/sim/SimAction.js +273 -273
- package/src/engine/network/sim/Snapshotter.js +222 -222
- package/src/engine/network/state/FrameBufferRing.js +168 -168
- package/src/engine/network/state/InputRing.js +134 -134
- package/src/engine/network/state/PriorityAccumulator.js +180 -180
- package/src/engine/network/time/TimeDilation.js +62 -62
- package/src/engine/network/transport/Channel.js +336 -336
- package/src/engine/network/transport/Transport.js +203 -203
- package/src/engine/network/transport/adapters/NodeUDPTransport.js +186 -186
- package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.js +105 -105
- package/src/engine/network/transport/fragments/fragment_send.js +147 -147
- package/src/engine/network/transport/fragments/packet_size.js +101 -101
- package/src/engine/network/xhr.js +23 -23
- package/src/engine/physics/BULLET_REVIEW.md +945 -945
- package/src/engine/physics/CANNON_REVIEW.md +1300 -1300
- package/src/engine/physics/CONSTRAINT_SOLVER_BENCH_LOG.md +208 -208
- package/src/engine/physics/CONSTRAINT_SOLVER_IMPROVEMENTS_PLAN.md +364 -364
- package/src/engine/physics/INTEPOLATION_SYSTEM_PLAN.md +287 -287
- package/src/engine/physics/JOLT_REVIEW.md +913 -913
- package/src/engine/physics/PLAN.md +1120 -1094
- package/src/engine/physics/RAPIER_REVIEW.md +934 -934
- package/src/engine/physics/REVIEW_001_ACTION_PLAN.md +642 -642
- package/src/engine/physics/REVIEW_002.md +151 -151
- package/src/engine/physics/REVIEW_003.md +166 -166
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +97 -97
- package/src/engine/physics/constraint/DofMode.js +35 -35
- package/src/engine/physics/constraint/solve_constraints.js +1 -1
- package/src/engine/physics/contact/combine_material.js +35 -35
- package/src/engine/physics/ecs/BodyKind.js +29 -29
- package/src/engine/physics/ecs/Collider.js +177 -177
- package/src/engine/physics/ecs/ColliderFlags.js +15 -15
- package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -37
- package/src/engine/physics/ecs/Joint.js +475 -475
- package/src/engine/physics/ecs/JointSerializationAdapter.js +72 -72
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +3 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +7 -2
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.js +37 -37
- package/src/engine/physics/ecs/SleepState.js +12 -12
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +76 -76
- package/src/engine/physics/fluid/FluidField.js +867 -867
- package/src/engine/physics/fluid/FluidSimulator.js +832 -832
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +243 -243
- package/src/engine/physics/fluid/SliceVisualiser.js +190 -190
- package/src/engine/physics/fluid/ecs/FluidComponent.js +239 -239
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -89
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +97 -97
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +348 -348
- package/src/engine/physics/fluid/ecs/FluidSystem.js +142 -142
- package/src/engine/physics/fluid/ecs/FluidWorkerCore.js +123 -123
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +395 -395
- package/src/engine/physics/fluid/ecs/fluid.worker.js +12 -12
- package/src/engine/physics/fluid/ecs/fluid_build_world_to_grid.js +32 -32
- package/src/engine/physics/fluid/ecs/fluid_gather_visible_effectors.js +47 -47
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +85 -85
- package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.js +16 -16
- package/src/engine/physics/fluid/ecs/fluid_worker_protocol.js +111 -111
- package/src/engine/physics/fluid/ecs/makeFluidWorker.js +18 -18
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -81
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +202 -202
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +257 -257
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +405 -405
- package/src/engine/physics/fluid/prototype.js +126 -126
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +143 -143
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +162 -162
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +107 -107
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js +131 -131
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +90 -90
- package/src/engine/physics/fluid/solver/v3_grid_limit8_at_indices.js +38 -38
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.js +77 -77
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -113
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +92 -92
- package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -107
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +135 -135
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +511 -511
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +108 -108
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +317 -317
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +236 -236
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +217 -217
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.js +174 -174
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.js +95 -95
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.js +77 -77
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.js +131 -131
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.js +104 -104
- package/src/engine/physics/inertia/world_inverse_inertia.js +160 -160
- package/src/engine/physics/integration/integrate_position.js +97 -97
- package/src/engine/physics/narrowphase/box_box_manifold.js +681 -681
- package/src/engine/physics/narrowphase/box_triangle_contact.js +906 -906
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +395 -395
- package/src/engine/physics/narrowphase/compute_penetration.js +369 -369
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +55 -55
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +37 -37
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +117 -117
- package/src/engine/physics/narrowphase/narrowphase_step.js +1738 -1738
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +74 -74
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +12 -11
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +228 -36
- package/src/engine/physics/narrowphase/sphere_sphere_contact.js +52 -52
- package/src/engine/physics/narrowphase/sphere_triangle_contact.js +138 -138
- package/src/engine/physics/persistence/solver_caches.js +309 -309
- package/src/engine/physics/queries/overlap_shape.js +187 -187
- package/src/engine/physics/queries/raycast.d.ts +7 -4
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +11 -5
- package/src/engine/physics/queries/shape_cast.js +417 -417
- package/src/engine/physics/solver/apply_impulse_to_body.js +86 -86
- package/src/engine/physics/solver/friction_cone.js +37 -37
- package/src/engine/physics/solver/solve_contacts.js +1 -1
- package/src/engine/platform/WebEnginePlatform.d.ts.map +1 -1
- package/src/engine/platform/WebEnginePlatform.js +1 -2
- package/src/engine/scene/SerializedScene.d.ts +2 -2
- package/src/engine/scene/SerializedScene.d.ts.map +1 -1
- package/src/engine/scene/transitionToScene.js +121 -121
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +33 -0
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +345 -345
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +140 -140
- package/src/engine/sound/simulation/AcousticSimulator.js +646 -646
- package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +432 -432
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +250 -250
- package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +322 -322
- package/src/engine/sound/simulation/README.md +277 -277
- package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +261 -261
- package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +121 -121
- package/src/engine/sound/simulation/configureAcousticSimulation.js +48 -48
- package/src/engine/sound/simulation/core/AcousticMedium.js +113 -113
- package/src/engine/sound/simulation/core/AcousticMediumSerializationAdapter.js +27 -27
- package/src/engine/sound/simulation/core/AcousticOccluderIndex.js +312 -312
- package/src/engine/sound/simulation/core/AcousticRegionIndex.js +159 -159
- package/src/engine/sound/simulation/core/AcousticSolution.js +90 -90
- package/src/engine/sound/simulation/core/AcousticSourceState.js +109 -109
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.js +73 -73
- package/src/engine/sound/simulation/core/OcclusionSolver.js +112 -112
- package/src/engine/sound/simulation/core/RayHit.js +50 -50
- package/src/engine/sound/simulation/core/VolumeField.js +149 -149
- package/src/engine/sound/simulation/definition/AcousticDirectivity.js +114 -114
- package/src/engine/sound/simulation/definition/AcousticDirectivitySerializationAdapter.js +30 -30
- package/src/engine/sound/simulation/definition/AcousticMaterial.js +122 -122
- package/src/engine/sound/simulation/definition/AcousticMaterialSerializationAdapter.js +32 -32
- package/src/engine/sound/simulation/ecs/AcousticBody.js +48 -48
- package/src/engine/sound/simulation/ecs/AcousticBodySerializationAdapter.js +34 -34
- package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.js +64 -64
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +75 -75
- package/src/engine/sound/simulation/ecs/AcousticVolume.js +74 -74
- package/src/engine/sound/simulation/ecs/AcousticVolumeSerializationAdapter.js +37 -37
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.js +66 -66
- package/src/engine/sound/simulation/probe/AcousticProbeField.js +578 -578
- package/src/engine/sound/simulation/probe/AcousticProbeFieldSerializationAdapter.js +60 -60
- package/src/engine/sound/simulation/probe/ProbeFieldPathingSolution.js +64 -64
- package/src/engine/sound/simulation/probe/ProbeVisibilityRecheck.js +132 -132
- package/src/engine/sound/simulation/probe/acoustic_probe_transfer.js +103 -103
- package/src/engine/sound/simulation/probe/acoustic_trace_energy.js +136 -136
- package/src/engine/sound/simulation/probe/bakeProbeField.js +169 -169
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +110 -110
- package/src/engine/sound/simulation/probe/bakeReverbBands.js +110 -110
- package/src/engine/sound/simulation/probe/bakeVisibility.js +148 -148
- package/src/engine/sound/simulation/probe/echogram_band_rt60.js +83 -83
- package/src/engine/sound/simulation/probe/probe_delaunay_edges.js +215 -215
- package/src/engine/sound/simulation/probe/probe_densify_portals.js +140 -140
- package/src/engine/sound/simulation/probe/probe_detect_portals.js +196 -196
- package/src/engine/sound/simulation/probe/probe_edge_key.js +38 -38
- package/src/engine/sound/simulation/probe/probe_edge_visible.js +41 -41
- package/src/engine/sound/simulation/probe/probe_place_sdf_cover.js +82 -82
- package/src/engine/sound/simulation/probe/probe_refine_connectivity.js +181 -181
- package/src/engine/sound/simulation/probe/probe_sdf_grid.js +171 -171
- package/src/engine/sound/simulation/probe/probe_visibility_augment.js +146 -146
- package/src/engine/sound/simulation/probe/probe_visibility_bridge_components.js +167 -167
- package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.js +354 -354
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.js +231 -231
- package/src/engine/sound/simulation/render/foaReverbImpulseResponse.js +105 -105
- package/src/engine/sound/simulation/render/reverbImpulseResponse.js +66 -66
- package/src/engine/sound/simulation/render/reverb_band_tails.js +93 -93
- package/src/engine/sound/simulation/serialization/populateAcousticSerializationRegistry.js +25 -25
- package/src/engine/sound/sopra/README.md +643 -643
- package/src/engine/sound/sopra/SopraEngine.js +432 -432
- package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.js +71 -71
- package/src/engine/sound/sopra/asset/BufferProvider.js +29 -29
- package/src/engine/sound/sopra/asset/StubBufferProvider.js +58 -58
- package/src/engine/sound/sopra/definition/BusDefinition.js +142 -142
- package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.js +54 -54
- package/src/engine/sound/sopra/definition/DuckingRule.js +106 -106
- package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.js +31 -31
- package/src/engine/sound/sopra/definition/EventDescription.js +262 -262
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +55 -55
- package/src/engine/sound/sopra/definition/MixerSnapshot.js +83 -83
- package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.js +39 -39
- package/src/engine/sound/sopra/definition/ParameterDefinition.js +117 -117
- package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.js +31 -31
- package/src/engine/sound/sopra/definition/VoiceStealMode.js +18 -18
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +109 -109
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +185 -185
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.js +59 -59
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +128 -128
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +226 -226
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.js +54 -54
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +191 -191
- package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.js +39 -39
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.js +79 -79
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.js +42 -42
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +77 -77
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.js +27 -27
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +5 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +125 -125
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.js +41 -41
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +24 -24
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +120 -120
- package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.js +31 -31
- package/src/engine/sound/sopra/definition/effect/EqEffect.js +128 -128
- package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.js +29 -29
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +113 -113
- package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.js +25 -25
- package/src/engine/sound/sopra/runtime/BusGraph.js +231 -231
- package/src/engine/sound/sopra/runtime/ParameterStore.js +98 -98
- package/src/engine/sound/sopra/runtime/SopraPlaybackContext.js +68 -68
- package/src/engine/sound/sopra/runtime/Voice.js +145 -145
- package/src/engine/sound/sopra/runtime/VoiceManager.js +136 -136
- package/src/engine/sound/sopra/runtime/VoicePool.js +17 -17
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +42 -42
- package/src/engine/sound/sopra/serialization/sopraJSON.js +99 -99
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +49 -49
- package/src/engine/sound/sopra/util/MockAudioContext.js +224 -224
- package/src/engine/sound/sopra/util/fadeOutAndStop.js +60 -60
- package/src/engine/ui/DraggableAspect.js +115 -115
- package/src/engine/ui/apply_pointer_tilt_3d.js +50 -50
- package/src/generation/COORDINATES.md +54 -54
- package/src/generation/GridGenerationResource.js +24 -24
- package/src/generation/GridTaskGroup.js +214 -214
- package/src/generation/REVIEW_01_ACTION_PLAN.md +628 -628
- package/src/generation/automata/CaveGeneratorCellularAutomata.js +79 -79
- package/src/generation/automata/CellularAutomata.js +22 -22
- package/src/generation/compute_writes_union.js +25 -25
- package/src/generation/filtering/CellFilter.js +117 -117
- package/src/generation/filtering/core/CellFilterBinaryOperation.js +37 -37
- package/src/generation/filtering/core/CellFilterOperationTertiary.js +43 -43
- package/src/generation/filtering/core/CellFilterUnaryOperation.js +29 -29
- package/src/generation/filtering/numeric/process/computeCellFilterSobel.js +36 -36
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.js +42 -42
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +18 -18
- package/src/generation/filtering/numeric/util/write_cell_filter_to_sampler2d.js +47 -47
- package/src/generation/filtering/util/cell_filter_weights_pick.js +54 -54
- package/src/generation/grid/GridData.js +233 -233
- package/src/generation/grid/coords/grid_to_texel.js +10 -10
- package/src/generation/grid/coords/texel_to_grid.js +10 -10
- package/src/generation/grid/generation/GridTaskApplyActionToCells.js +90 -90
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +388 -388
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.js +127 -127
- package/src/generation/grid/generation/GridTaskSequence.js +58 -58
- package/src/generation/grid/generation/NoopGridTaskGenerator.js +12 -12
- package/src/generation/grid/generation/discrete/GridTaskActionRuleSet.js +48 -48
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.js +146 -146
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.js +540 -540
- package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +222 -222
- package/src/generation/grid/generation/grid/GridTaskAddNodesFixed.js +44 -44
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +614 -614
- package/src/generation/markers/GridCellActionPlaceMarker.js +244 -244
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +86 -86
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.js +266 -266
- package/src/generation/markers/emitter/MarkerNodeEmitterGridCellAction.js +49 -49
- package/src/generation/placement/GridCellActionTransformNearbyMarkers.js +120 -120
- package/src/generation/placement/action/GridCellAction.js +45 -45
- package/src/generation/placement/action/GridCellActionPlaceTags.js +140 -140
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +89 -89
- package/src/generation/placement/action/random/CellActionSelectRandom.js +69 -69
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +91 -91
- package/src/generation/placement/action/util/GridCellActionSequence.js +61 -61
- package/src/generation/placement/action/util/GridCellDisplacedAction.js +61 -61
- package/src/generation/rules/cell/CellMatcherRemovalPreservesConnectivity.js +183 -183
- package/src/generation/theme/ThemeEngine.js +666 -666
- package/src/shade/RENDERER_CONTRACT.md +568 -0
- package/src/shade/descriptor/texture/format/gpu_texture_format_info.js +267 -267
- package/src/shade/device/ShadeDeviceFailure.js +104 -104
- package/src/shade/device/ShadeDeviceFailureReason.js +41 -41
- package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +255 -255
- package/src/shade/device/mock/REVIEW_2026_08_22.md +527 -527
- package/src/shade/device/mock/SoftwareGPUBindGroup.js +23 -23
- package/src/shade/device/mock/SoftwareGPUBindGroupLayout.js +22 -22
- package/src/shade/device/mock/SoftwareGPUError.js +63 -63
- package/src/shade/device/mock/SoftwareGPUPipeline.js +75 -75
- package/src/shade/device/mock/SoftwareGPUQuerySet.js +113 -113
- package/src/shade/device/mock/SoftwareGPUSampler.js +30 -30
- package/src/shade/device/mock/SoftwareGPUShaderModule.js +32 -32
- package/src/shade/device/mock/SoftwareGPUTextureView.js +22 -22
- package/src/shade/device/mock/SoftwareGPUUncapturedErrorEvent.js +23 -23
- package/src/shade/device/mock/normalize_dynamic_offsets.js +26 -26
- package/src/shade/device/mock/texture_copy.js +287 -287
- package/src/shade/device/timing/GPUTimer.js +285 -285
- package/src/shade/device/timing/GPUTimerArray.js +205 -205
- package/src/shade/playground/add_random_lights.js +49 -49
- package/src/shade/playground/add_random_meshes.js +83 -83
- package/src/shade/playground/animation_prototype.js +508 -508
- package/src/shade/playground/animation_prototype_skinning.js +647 -647
- package/src/shade/playground/animation_prototype_stress.js +765 -765
- package/src/shade/playground/enable_picker.js +59 -59
- package/src/shade/playground/gltf_skinned_prototype.js +560 -560
- package/src/shade/playground/gltf_skinned_stress_prototype.js +387 -387
- package/src/shade/playground/gltf_viewer.js +282 -282
- package/src/shade/playground/load_default_environment.js +19 -19
- package/src/shade/playground/main.js +2727 -2727
- package/src/shade/playground/make_animated_instances.js +117 -117
- package/src/shade/playground/prototype_virtual_texture.js +274 -274
- package/src/shade/playground/prototype_volumetrics_01.js +206 -206
- package/src/shade/playground/sample.js +234 -234
- package/src/shade/playground/sample_load_gltf.js +102 -102
- package/src/shade/playground/spread_node3d_grid.js +19 -19
- package/src/shade/renderer/Renderer.js +2436 -2436
- package/src/shade/renderer/ShadeIndirectLightingMode.js +14 -14
- package/src/shade/renderer/animation/ShadeAnimationChannel.js +414 -414
- package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +531 -531
- package/src/shade/renderer/animation/pose/PosePlayback.js +55 -55
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +179 -179
- package/src/shade/renderer/animation/pose/pose_evaluate_world.js +76 -76
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +1024 -1024
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +79 -79
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +56 -56
- package/src/shade/renderer/binding/BindGroupManager.js +282 -282
- package/src/shade/renderer/binding/adapt_cache_capacity.js +25 -25
- package/src/shade/renderer/buffer/GPUBufferAllocator.js +116 -116
- package/src/shade/renderer/buffer/buffer_pool_ops.js +123 -123
- package/src/shade/renderer/buffer/table/GPU_DATABASE_PAGE_SIZE.js +9 -9
- package/src/shade/renderer/buffer/table/GPU_DATABASE_UPLOAD_BUFFER_LIMIT.js +8 -8
- package/src/shade/renderer/buffer/table/PageBufferPool.js +71 -71
- package/src/shade/renderer/buffer/table/PageSlotAllocator.js +95 -95
- package/src/shade/renderer/camera/Camera.js +281 -281
- package/src/shade/renderer/camera/GPUCameraContext.js +233 -233
- package/src/shade/renderer/camera/orbital/README.md +84 -84
- package/src/shade/renderer/deferred/shader_composite_volumetrics.js +75 -75
- package/src/shade/renderer/dynamic/DYNAMIC_MESH_VERTEX.js +25 -25
- package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.js +342 -342
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +170 -170
- package/src/shade/renderer/extension/FrameContext.js +263 -263
- package/src/shade/renderer/extension/FramePhase.js +104 -104
- package/src/shade/renderer/extension/FrameRecord.js +126 -126
- package/src/shade/renderer/extension/GBufferTextures.js +83 -83
- package/src/shade/renderer/extension/PresentTarget.js +34 -34
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/extension/RenderExtension.js +69 -69
- package/src/shade/renderer/extension/RenderExtensionRegistry.js +319 -319
- package/src/shade/renderer/extension/SceneColor.js +40 -40
- package/src/shade/renderer/extension/ViewTextures.js +78 -78
- package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +182 -182
- package/src/shade/renderer/geometry/Geometry.js +608 -608
- package/src/shade/renderer/geometry/geometry_build_from_meshlet_geometry.js +342 -342
- package/src/shade/renderer/geometry/meshlet_geometry_transfer.js +41 -41
- package/src/shade/renderer/geometry/primitives/make_box_geometry.js +153 -153
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.js +240 -240
- package/src/shade/renderer/geometry/primitives/make_plane_geometry.js +145 -145
- package/src/shade/renderer/geometry/primitives/make_polyhedron_geometry.js +327 -327
- package/src/shade/renderer/geometry/primitives/make_torus_geometry.js +107 -107
- package/src/shade/renderer/geometry/primitives/make_torus_knot_geometry.js +165 -165
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +607 -607
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +66 -66
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildResult.js +32 -32
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.js +103 -103
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.js +25 -25
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.js +33 -33
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.js +62 -62
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.js +49 -49
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.js +20 -20
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.js +214 -214
- package/src/shade/renderer/geometry/virtual/build/gltf/GltfByteSource.js +122 -122
- package/src/shade/renderer/geometry/virtual/build/gltf/GltfCollectReport.js +29 -29
- package/src/shade/renderer/geometry/virtual/build/gltf/GltfDocument.js +210 -210
- package/src/shade/renderer/geometry/virtual/build/gltf/GltfGeometry.js +48 -48
- package/src/shade/renderer/geometry/virtual/build/gltf/GltfGeometryInstance.js +25 -25
- package/src/shade/renderer/geometry/virtual/build/gltf/GltfGeometrySelection.js +28 -28
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_collect_geometries.js +296 -296
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.js +166 -166
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_read_geometry.js +199 -199
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.js +173 -173
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.js +28 -28
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +200 -200
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.js +1786 -1786
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.js +157 -157
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.js +26 -26
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.js +75 -75
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.js +143 -143
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.js +44 -44
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.js +41 -41
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.js +71 -71
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.js +123 -123
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.js +26 -26
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.js +112 -112
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.js +56 -56
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.js +70 -70
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.js +187 -187
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.js +207 -207
- package/src/shade/renderer/geometry/virtual/format/VGEO_DEFECT.js +18 -18
- package/src/shade/renderer/geometry/virtual/format/VGeoDefect.js +38 -38
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +64 -64
- package/src/shade/renderer/geometry/virtual/format/attribute/VGEO_ATTRIBUTE.js +13 -13
- package/src/shade/renderer/geometry/virtual/format/attribute/VGEO_ATTRIBUTES.js +50 -50
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attribute_allocate.js +28 -28
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attribute_mask.js +23 -23
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.js +31 -31
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.js +32 -32
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.js +46 -46
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.js +19 -19
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.js +27 -27
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_asset_id_preimage.js +62 -62
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.js +20 -20
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_RECORD_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_MAX_CHILD_REF.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_MAX_CLUSTER_TRIANGLE_COUNT.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_MAX_CLUSTER_VERTEX_COUNT.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_NO_CHILD.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_NO_GROUP.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_SAME_PAGE.js +6 -6
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +81 -81
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryGroup.js +37 -37
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryPageNode.js +55 -55
- package/src/shade/renderer/geometry/virtual/format/directory/VGEO_DIRECTORY_BLOCK_RECORDS.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/directory/VGEO_DIRECTORY_FLAG_ROOT_PAGE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/directory/VGEO_DIRECTORY_RECORD_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/directory/vgeo_directory_block_count.js +12 -12
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CHILD_OFFSET.js +11 -11
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CHILD_TABLE_ENTRY_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js +11 -11
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_RAW.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_FRAME_ALIGNMENT.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_FRAME_HEADER_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_FRAME_OFFSET.js +13 -13
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_PAGE_MAGIC.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/frame/VGeoFrameBlob.js +21 -21
- package/src/shade/renderer/geometry/virtual/format/frame/VGeoFrameExtent.js +59 -59
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js +27 -27
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js +84 -84
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +56 -56
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.js +35 -35
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_scan_frames.js +74 -74
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +6 -6
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_HASH_ALGO_XXH3.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_HEADER_OFFSET.js +31 -31
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_HEADER_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_LEVEL_OFFSET.js +20 -20
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_LEVEL_RECORD_SIZE.js +9 -9
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAGIC.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_PAYLOAD_ENCODING_SHADE_MESHLET_V1.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/header/VGeoLevelRecord.js +41 -41
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_RECORD_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_GROUP_CLUSTER_COUNT.js +6 -6
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_METRIC_OFFSET.js +21 -21
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_METRIC_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_NODE_FANOUT.js +9 -9
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_NODE_FLAG_LEAF.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_NODE_OFFSET.js +10 -10
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_NODE_RECORD_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_HEADER_SIZE.js +5 -5
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +16 -16
- package/src/shade/renderer/geometry/virtual/format/payload/VGEO_ENCODING_FLAGS_MASK.js +6 -6
- package/src/shade/renderer/geometry/virtual/format/payload/VGeoEncodedPayload.js +18 -18
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +200 -200
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_payload_attribute_offset.js +39 -39
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_payload_size.js +20 -20
- package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js +2063 -2063
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +1622 -1622
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +485 -485
- package/src/shade/renderer/gpu_primitive/sort/ffx/graph_radix_sort.js +115 -115
- package/src/shade/renderer/gpu_primitive/sort/one_sweep/verify_radix_sort_one_sweep.js +110 -110
- package/src/shade/renderer/light/environment/octahedral_resample_kernel.js +50 -50
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.js +30 -30
- package/src/shade/renderer/light/environment/resample_cube_to_octahedral.js +157 -157
- package/src/shade/renderer/light/make_sunlight.js +35 -35
- package/src/shade/renderer/light/model/io/light_record_point.js +39 -39
- package/src/shade/renderer/loader/gltf/GLTF_PRIMITIVE_MODE.js +23 -23
- package/src/shade/renderer/loader/gltf/MESHOPT_COMPRESSION_PLAN.md +793 -793
- package/src/shade/renderer/loader/gltf/ext/GltfBufferViewExtension.js +54 -54
- package/src/shade/renderer/loader/gltf/ext/GltfBufferViewExtensionSet.js +109 -109
- package/src/shade/renderer/loader/gltf/ext/gltf_apply_buffer_view_extensions.js +69 -69
- package/src/shade/renderer/loader/gltf/ext/gltf_buffer_view_extensions.js +22 -22
- package/src/shade/renderer/loader/gltf/ext/gltf_geometry_extensions.js +39 -39
- package/src/shade/renderer/loader/gltf/ext/meshopt/MeshoptBufferViewExtension.js +301 -301
- package/src/shade/renderer/loader/gltf/gltf_component_type.js +223 -223
- package/src/shade/renderer/loader/gltf/gltf_node_world_matrices.js +137 -137
- package/src/shade/renderer/loader/gltf/gltf_parse_container.js +241 -241
- package/src/shade/renderer/loader/gltf/gltf_read_accessor.js +294 -294
- package/src/shade/renderer/loader/gltf/gltf_used_image_indices.js +49 -49
- package/src/shade/renderer/loader/gltf/load_gltf.js +1253 -1253
- package/src/shade/renderer/loader/gltf/tiny-gltf.js +646 -646
- package/src/shade/renderer/loader/usd/UsdError.js +33 -33
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +69 -69
- package/src/shade/renderer/loader/usd/load_usd.js +226 -226
- package/src/shade/renderer/loader/usd/parse_usda.js +931 -931
- package/src/shade/renderer/loader/usd/unpack_usdz.js +106 -106
- package/src/shade/renderer/loader/usd/usd_build_scene.js +658 -658
- package/src/shade/renderer/loader/usd/usd_compose_transform.js +258 -258
- package/src/shade/renderer/loader/usd/usd_decode_image.js +384 -384
- package/src/shade/renderer/loader/usd/usd_lz4.js +182 -182
- package/src/shade/renderer/loader/usd/usd_triangulate.js +159 -159
- package/src/shade/renderer/material/ShadeMaterial.d.ts +2 -2
- package/src/shade/renderer/material/ShadeMaterial.js +2 -2
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +334 -334
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.js +45 -45
- package/src/shade/renderer/material/standard_material_to_struct.js +23 -23
- package/src/shade/renderer/particles/prototypeParticleSystem.js +450 -450
- package/src/shade/renderer/particles/runtime/spawn_request_encoding.js +52 -52
- package/src/shade/renderer/pool/TransientResourcePool.js +392 -392
- package/src/shade/renderer/postprocess/bloom/bloom_chain_resolution.js +29 -29
- package/src/shade/renderer/postprocess/bloom/graph_bloom_downsample.js +109 -109
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.js +155 -155
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +114 -114
- package/src/shade/renderer/postprocess/dof/DOF_AUTOFOCUS_PARAMS_STRUCT.js +25 -25
- package/src/shade/renderer/postprocess/dof/DOF_FOCUS_STATE_STRUCT.js +23 -23
- package/src/shade/renderer/postprocess/dof/DOF_PRESETS.js +27 -27
- package/src/shade/renderer/postprocess/dof/chunk_dof_coc_band_diameter.js +41 -41
- package/src/shade/renderer/postprocess/dof/chunk_dof_coc_band_radius.js +32 -32
- package/src/shade/renderer/postprocess/dof/chunk_dof_coc_coefficient.js +26 -26
- package/src/shade/renderer/postprocess/dof/compute_dof_autofocus_params.js +64 -64
- package/src/shade/renderer/postprocess/dof/compute_dof_uniform.js +54 -54
- package/src/shade/renderer/postprocess/dof/gather/DOF2_CONFIG.js +91 -91
- package/src/shade/renderer/postprocess/dof/gather/DOF2_PRESETS.js +9 -9
- package/src/shade/renderer/postprocess/dof/gather/DOF2_SETTINGS_STRUCT.js +66 -66
- package/src/shade/renderer/postprocess/dof/gather/DOF2_TEXTURE_FORMAT.js +22 -22
- package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.js +292 -292
- package/src/shade/renderer/postprocess/dof/gather/chunk_dof2_coc_to_near_far.js +25 -25
- package/src/shade/renderer/postprocess/dof/gather/chunk_dof2_gather_weight.js +30 -30
- package/src/shade/renderer/postprocess/dof/gather/compute_dof2_uniform.js +54 -54
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +194 -194
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_fill.js +68 -68
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +140 -140
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +142 -142
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +99 -99
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +102 -102
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_tile_dilate.js +75 -75
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_tile_max.js +73 -73
- package/src/shade/renderer/postprocess/dof/raymarch/DOF_SETTINGS_STRUCT.js +49 -49
- package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.js +298 -298
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +244 -244
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +91 -91
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_firefly_cleanup.js +61 -61
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +90 -90
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +267 -267
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +271 -271
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_tile_dilate.js +70 -70
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_tile_max.js +72 -72
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +99 -99
- package/src/shade/renderer/postprocess/gtao/generate_magic_square_noise.js +51 -51
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +56 -56
- package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +78 -78
- package/src/shade/renderer/postprocess/upscale-dither/UpscaleDither.js +95 -95
- package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +204 -204
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +58 -58
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +230 -230
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +278 -278
- package/src/shade/renderer/rasterize/native/oit/chunk_material_side_should_draw.js +26 -26
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +235 -235
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +208 -208
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +206 -206
- package/src/shade/renderer/scene/DynamicMesh.js +70 -70
- package/src/shade/renderer/scene/DynamicMeshBatch.js +90 -90
- package/src/shade/renderer/scene/GPUSceneContext.js +901 -901
- package/src/shade/renderer/scene/SceneNodeBinding.js +56 -56
- package/src/shade/renderer/scene/SkinnedMesh.js +55 -55
- package/src/shade/renderer/scene/TransformAuthority.js +33 -33
- package/src/shade/renderer/scene/optimization/deduplicate_geometries.js +38 -38
- package/src/shade/renderer/scene/optimization/deduplicate_images.js +93 -93
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.js +127 -127
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.js +492 -492
- package/src/shade/renderer/scene/optimization/optimize_texture_set.js +81 -81
- package/src/shade/renderer/scene/optimization/source_to_sampler2d.js +21 -21
- package/src/shade/renderer/scene/serialization/STANDARD_MATERIAL_SERIALIZED_BYTE_SIZE.js +12 -12
- package/src/shade/renderer/shader/chunk/geometry/quaternion/dual/chunk_dual_quat_transform_point.js +26 -26
- package/src/shade/renderer/shader/chunk/noise/chunk_interleaved_gradient_noise.js +20 -20
- package/src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh2_dering_optimize_positive.js +61 -61
- package/src/shade/renderer/shader/chunk/texture/chunk_texture_filter_fxaa_lite.js +225 -225
- package/src/shade/renderer/shader/chunk/texture/dither/chunk_dither_color_8bit_gradient_noise.js +25 -25
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +384 -384
- package/src/shade/renderer/shadow/map/PointLightShadowmap.js +105 -105
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +63 -63
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +89 -89
- package/src/shade/renderer/shadow/map/shadowmap_update_score.js +232 -232
- package/src/shade/renderer/texture/GPUTextureAllocator.js +85 -85
- package/src/shade/renderer/texture/texture_pool_ops.js +171 -171
- package/src/shade/renderer/texture/virtual/PageTableQuadAllocator.js +253 -253
- package/src/shade/renderer/texture/virtual/README.md +276 -276
- package/src/shade/renderer/texture/virtual/VTPageTable.js +330 -330
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +349 -349
- package/src/shade/renderer/texture/virtual/VT_CONSTANTS.js +154 -154
- package/src/shade/renderer/texture/virtual/VT_STACK_INFO_STRUCT.js +20 -20
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +1276 -1276
- package/src/shade/renderer/texture/virtual/VirtualTextureStack.js +106 -106
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +150 -150
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +232 -232
- package/src/shade/renderer/texture/virtual/chunk_vt_request_key.js +28 -28
- package/src/shade/renderer/texture/virtual/source/VTSourceImage.js +207 -207
- package/src/shade/renderer/texture/virtual/source/VTSourceProcedural.js +135 -135
- package/src/shade/renderer/texture/virtual/source/VTSourceTiled.js +132 -132
- package/src/shade/renderer/water/GPUWaterRenderer.js +167 -167
- package/src/shade/renderer/water/shader_water.js +246 -246
- package/src/shade/renderer/water/water_height_texture_from_sampler.js +56 -56
- package/src/shade/vitest.setup.mjs +89 -89
- package/src/shade/wgsl/validate_wgsl_source.js +316 -316
- package/src/view/controller/controls/NumericIntervalControl.js +90 -90
- package/src/view/controller/controls/Vector2Control.js +83 -83
- package/src/view/controller/controls/Vector3Control.js +90 -90
- package/src/view/elements/Group.js +56 -56
- package/src/view/elements/drawCheckers.js +33 -33
- package/src/view/elements/windrose/WindRoseDiagram.js +369 -369
- package/src/view/graphics/WebGLContextFailureView.js +76 -76
- package/src/view/layout/DockPanel.js +51 -51
- package/src/view/layout/SplitView.js +365 -365
- package/src/view/layout/show_popup_menu.js +81 -81
- package/src/view/minimap/MinimapCanvasView.js +411 -411
- package/src/view/minimap/MinimapImageCache.js +88 -88
- package/src/view/minimap/MinimapMarkerCollection.d.ts +0 -1
- package/src/view/minimap/MinimapMarkerCollection.d.ts.map +1 -1
- package/src/view/minimap/MinimapMarkerCollection.js +180 -180
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/view/minimap/minimap_focus_area.js +97 -97
- package/editor/process/symbolic/SocketsSymbolicDisplay.js +0 -192
- package/src/core/geom/3d/topology/struct/binary/io/moved_tests.txt +0 -37
- package/src/engine/ecs/attachment/Attachment.d.ts +0 -40
- package/src/engine/ecs/attachment/Attachment.d.ts.map +0 -1
- package/src/engine/ecs/attachment/Attachment.js +0 -57
- package/src/engine/ecs/attachment/AttachmentBinding.d.ts +0 -28
- package/src/engine/ecs/attachment/AttachmentBinding.d.ts.map +0 -1
- package/src/engine/ecs/attachment/AttachmentBinding.js +0 -41
- package/src/engine/ecs/attachment/AttachmentSystem.d.ts +0 -61
- package/src/engine/ecs/attachment/AttachmentSystem.d.ts.map +0 -1
- package/src/engine/ecs/attachment/AttachmentSystem.js +0 -307
- package/src/engine/ecs/attachment/BoneAttachmentBinding.d.ts +0 -27
- package/src/engine/ecs/attachment/BoneAttachmentBinding.d.ts.map +0 -1
- package/src/engine/ecs/attachment/BoneAttachmentBinding.js +0 -69
- package/src/engine/ecs/attachment/TransformAttachmentBinding.d.ts +0 -4
- package/src/engine/ecs/attachment/TransformAttachmentBinding.d.ts.map +0 -1
- package/src/engine/ecs/attachment/TransformAttachmentBinding.js +0 -51
- package/src/engine/ecs/sockets/AttachmentSocket.d.ts +0 -32
- package/src/engine/ecs/sockets/AttachmentSocket.d.ts.map +0 -1
- package/src/engine/ecs/sockets/AttachmentSocket.js +0 -60
- package/src/engine/ecs/sockets/AttachmentSocketType.d.ts +0 -6
- package/src/engine/ecs/sockets/AttachmentSocketType.d.ts.map +0 -1
- package/src/engine/ecs/sockets/AttachmentSocketType.js +0 -8
- package/src/engine/ecs/sockets/AttachmentSockets.d.ts +0 -57
- package/src/engine/ecs/sockets/AttachmentSockets.d.ts.map +0 -1
- package/src/engine/ecs/sockets/AttachmentSockets.js +0 -130
- package/src/engine/ecs/sockets/BoneAttachmentSocket.d.ts +0 -29
- package/src/engine/ecs/sockets/BoneAttachmentSocket.d.ts.map +0 -1
- package/src/engine/ecs/sockets/BoneAttachmentSocket.js +0 -56
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts +0 -6
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts.map +0 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.js +0 -19
- package/src/shade/renderer/animation/_dump_resolve.d.mts +0 -2
- package/src/shade/renderer/animation/_dump_resolve.d.mts.map +0 -1
- package/src/shade/renderer/animation/_dump_resolve.mjs +0 -5
|
@@ -1,511 +1,511 @@
|
|
|
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).
|
|
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).
|