Review findings: the mesa forced rock onto the canyon bed, two runners
declared the wrong TEST_COUNT, and the escarpment check could pass on the
slope alone. Canyon gains floor_material, the showcase is re-baked with sand
beds, the contract measures the step across the crest band, counts distinct
ledges, and probes the crevasse against the open plateau. Degenerate recipe
parameters now fail an assert.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Five reference landforms on one 512 m field at 1 m per cell: a stratified
canyon through a mesa, a crevasse between two buttes, a boulder field on
rippled sand, two rock spurs framing a sand channel, and a sinuous
escarpment with knolls on the slope below.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The bake order is now primitive sum, modifiers (with the local gradient),
floor clamp, slope material, primitive materials, material patches. A
regression test checks the Banc du Vigilant still bakes byte for byte.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Drop a dead initial value in PlayableBoundsRule, guard
DiveSite.configure() when called before the node is in the tree, and
align the zone 1 brief with what was built: generic dive_site.tscn,
the resolved collision check, and the graybox shader deviation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lighter fog and volumetric fog, brighter key and ambient light, terrain
tiles visible to 420 m (60 m fade), and a background colour equal to
the fog colour times its energy so culled tiles never read as a dark
band. The seabed shader culls back faces again now that the tiles are
wound front-face up.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The architecture check scans tools/ for duplicate class names and fails
when game/ or content/ references res://tools/. The three tools scripts
drop their global class_name (every caller preloads them), and ADR 0012
records that tools/ depends on the domain only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The site terrain integration now also configures zone 1 (3 s budget,
seabed under the hull, trench at the groove entrance, reference scan
from the spawn). The actor test uses an 81 x 65 grid with an
off-diagonal bump, checks tile vertices against their field cells and
samples the collision between vertices.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Building the 64 tiles of the Banc du Vigilant cost about 1.9 s through
per-vertex cell_world_position/normal_at_cell calls, leaving the 3 s
load budget with too little headroom (2.1-2.9 s measured, one 4.8 s
outlier). TerrainHeightField now returns positions and normals of a
cell block in one call, with normal_at_cell sharing the same formula;
the tile build drops to about 0.5 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The landmark sat on GROOVE_START, where the groove's end taper brings
its depth to zero, so the marker (-34 m) was below the seabed (-26.5 m)
and a probe there saw no trench. It now sits two half-widths inside the
groove, on the groove floor.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DiveSite.configure() builds the height field once (TerrainHeightField
validates the data) instead of running the definition validation and
then the field construction again; the composition root relies on the
error returned by configure(). The collision shape takes the field's
row-major elevations directly instead of copying 263k cells one by one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The target hull now lies along the groove axis (yaw derived from the
groove constants), set back 22 m from the groove end so both hull ends
rest on the flat groove floor. The mooring, spawn and first route
waypoints move to z = -210 and the decoy yacht to (-30, -150) so no
wreck is farther than 320 m from the mooring and no two wrecks are
farther than 260 m apart (spec 4.1). The spawn faces south toward the
site. Four contract assertions pin the budget, the spawn heading and
the hull orientation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zone 1 becomes the default dive site; the foundation suite still selects the
calibration site explicitly. Documents the site suites, the site content
workflow and the authored heightfield terrain (ADR 0012), and aligns the zone 1
brief with the baked data (storage format, route lengths, 6 m ridge and
pinnacles).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The calibration site spawn sat 16 m from the south bounds edge, inside the
40 m warning margin. The vehicle_test recipe now extends the terrain and
playable bounds 42 m to the south so the spawn is inside the zone.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
MSYS mangles the single-byte separator argument on Windows, and the swallowed
rg error made the Input check pass vacuously.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ripgrep prints backslash paths on Windows, so the infrastructure/input
exclusion never matched and the architecture check failed on a clean tree.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>