Captures stream LOD0-8 (hills repeat at 80 m to the horizon). Road: cubic swept solid deck, 376.8 m, 8 m wide, max 12.06 deg, 17 supports, cloud floor ~45 m below; walk audit 0 blocked/unsupported, 300 m negative control fails as expected. 15x15 identical pillar grid at 76 m. Owner canonical hashes unchanged; fast tier, Clang/GCC green. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
114 lines
3.4 KiB
Python
114 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Build the L142 liminal pictures and walk-audit controls."""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[4]
|
|
OWNER = Path(os.environ.get("VOXELFORGE_OWNER_DATA",
|
|
ROOT / "Standalone/data/owner_world.json"))
|
|
OUT_DEFAULT = Path(os.environ.get("VOXELFORGE_VERIFY_OUT", ROOT / "Saved/Linux/l142"))
|
|
|
|
FLAT_FIELD = {
|
|
"version": 1,
|
|
"kind": "flatField",
|
|
"minimum_arena_clearance_m": 0.0,
|
|
}
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--out", type=Path, default=OUT_DEFAULT / "fixtures")
|
|
args = parser.parse_args()
|
|
args.out.mkdir(parents=True, exist_ok=True)
|
|
base = json.loads(OWNER.read_text(encoding="utf-8"))
|
|
|
|
monolith = dict(base)
|
|
monolith["surface_profile_override"] = dict(FLAT_FIELD)
|
|
monolith["motif_family_override"] = {
|
|
"version": 1,
|
|
"strate_index": 0,
|
|
"placement_policy": "seed,strate,stable_id",
|
|
"motifs": [{
|
|
"stable_id": "liminal/oversized-familiar-monolith-v1",
|
|
"kind": "cappedCylinder",
|
|
"radius_m": 1.6,
|
|
"height_m": 26.0,
|
|
"route_side_offset_m": 42.0,
|
|
"placement_radius_m": 0.0,
|
|
"fillet_radius_m": 0.6,
|
|
"blend_width_m": 1.2,
|
|
"minimum_spacing_m": 0.0,
|
|
"yaw_quarter_turns": 0,
|
|
"attachment": "seated_floor",
|
|
}],
|
|
}
|
|
|
|
hills = dict(base)
|
|
hills["surface_profile_override"] = {
|
|
"version": 1,
|
|
"kind": "periodicHills",
|
|
"amplitude_x_m": 2.2,
|
|
"amplitude_y_m": 2.2,
|
|
"wavelength_x_m": 80.0,
|
|
"wavelength_y_m": 80.0,
|
|
"minimum_arena_clearance_m": 0.0,
|
|
}
|
|
|
|
road_override = {
|
|
"stable_id": "liminal/road-clouds-v2",
|
|
"strate_index": 0,
|
|
"start_xy_m": [120.0, 340.0],
|
|
"path_length_m": 360.0,
|
|
"curve_control_offset_m": 84.0,
|
|
"deck_height_above_field_m": 44.0,
|
|
"rise_control_m": 22.0,
|
|
"half_width_m": 4.0,
|
|
"half_thickness_m": 1.0,
|
|
"sample_spacing_m": 2.0,
|
|
"support_spacing_m": 24.0,
|
|
"support_radius_m": 0.55,
|
|
}
|
|
road = dict(base)
|
|
road["surface_profile_override"] = dict(FLAT_FIELD)
|
|
road["liminal_road_override"] = dict(road_override)
|
|
|
|
short_control = dict(base)
|
|
short_control["surface_profile_override"] = dict(FLAT_FIELD)
|
|
short_override = dict(road_override)
|
|
short_override["path_length_m"] = 180.0
|
|
short_control["liminal_road_override"] = short_override
|
|
|
|
pillars = dict(base)
|
|
pillars["surface_profile_override"] = dict(FLAT_FIELD)
|
|
pillars["liminal_pillar_grid_override"] = {
|
|
"stable_id": "liminal/horizon-pillar-grid-v1",
|
|
"strate_index": 0,
|
|
"center_xy_m": [700.0, 800.0],
|
|
"rows": 15,
|
|
"columns": 15,
|
|
"spacing_m": 76.0,
|
|
"radius_m": 5.5,
|
|
"height_m": 40.0,
|
|
}
|
|
|
|
fixtures = (
|
|
("flatField-monolith", monolith),
|
|
("periodicHills", hills),
|
|
("road-in-clouds", road),
|
|
("road-short-control", short_control),
|
|
("pillar-grid", pillars),
|
|
)
|
|
for name, fixture in fixtures:
|
|
path = args.out / f"liminal-{name}.json"
|
|
path.write_text(json.dumps(fixture, indent=2) + "\n", encoding="utf-8")
|
|
print(f"[L142Fixture] name={name} file={path} status=PASS")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|