# ALE local world format, version 1

This format follows the representation introduced by 4DCodeBench, adapted to a calibrated, finite-pulse task. It does not claim compatibility with the official scorer.

```
solution/build.sh
solution/README.md
solution/<source files>
world/camera.json
world/render.mp4
world/meshes/<positive integer>.npz
world/dynamics/water.npz
world/dynamics/sand.npz
```

- 49 frames, index 0000 through 0048. 32 fps. 640 x 400. Times 0 through 1.5 seconds inclusive. Video playback duration is 49/32 seconds.
- `camera.json`: `intrinsics` is a 3x3 pinhole matrix. `extrinsic` is a 4x4 camera-to-world transform: camera X right, Y down, Z forward. Use the provided calibration exactly.
- Every mesh archive contains `vertices_TTTT` float32 `(V,3)` and `faces_TTTT` int32 `(N,3)` for every frame. Faces are triangles indexing the vertices. Geometry must be finite. Topology may change.
- Each dynamics archive contains `pos` float32 `(49,P,3)` and `ids` uint16 `(M,)` identifying its rendered mesh archives. Column j must always represent the same material point. For this finite, closed system, all points are finite in all frames; 128 <= P <= 100000. Point count may differ from reference. Material labels must not swap.
- Static geometry has no dynamics entry and must be unchanged across time. Each moving mesh ID must occur in a dynamics archive.
- Do not include lights as geometry. All visible non-light geometry must be exported. The rendered video and exported world must agree.

## Numeric rubric (100 points)
For each material separately: mean symmetric nearest-neighbour distance across all frames (15 points, linear score from zero error to zero points at 0.06 m); full-path assignment error (10, 0.14 m); sliced displacement-distribution distance (10, 0.015 m per frame); centroid error (5, 0.08 m); coordinate standard-deviation error (5, 0.05 m). Both materials total 90 points. Three-view occupancy intersection-over-union on a 0.025 m grid contributes 10 points. Higher scores are better.

The full-path measure uses up to 192 persistent paths from each material and one Hungarian assignment across 17 synchronized frames. No framewise reassignment or time warping is allowed. Displacement comparisons use 24 fixed random projection directions and 128 quantiles. Evaluation code in the private package defines the exact implementation. A sampling-robustness audit is recorded separately.

Numeric pass requires score >= 80 AND, for each material:
- shape error <= 0.025 m;
- path error <= 0.06 m;
- displacement distribution error <= 0.005 m/frame.

Malformed, missing, nonfinite or incorrectly timed outputs fail with zero. Calibration must agree to 0.01 in intrinsics and 0.0001 in extrinsics.

## Mandatory reviewer gates
Numeric pass alone is not overall success. Run the candidate source offline in a fresh, restricted execution environment; do not expose private reference files. Rebuild all artifacts from source. Compare the rebuilt numerical arrays with the delivered arrays (absolute tolerance 1e-5 m). Visually audit the exported meshes through the camera at frames 0, 8, 16, 24, 32 and 48 and from a new side view. Reject any copied video planes, hidden geometry, point-identity resets, omitted visible surfaces, or discrepancy between render and exported world. Confirm the two materials, pipes, floor and glass enclosure are represented with the reference appearance. These are binary review gates; the numeric script intentionally does not mark them complete.

A structurally valid reference self-comparison is not an independent model difficulty self-test. Tolerances are task-design choices, to be frozen before an independent agent attempt and revisited only with documented domain review.
