Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux145/BuildL145Fixtures.py
T
Fr0zkaandClaude Opus 5.5 7d654ff861 wip: opt-in landing-pad contract + Core.Liminal.Field v2 pads (L145)
Layers may publish certified arrival/departure pads; the passage planner binds endpoints and tangents to them;
no-pad layouts serialize unchanged (owner canonical hashes match v227). Pads removed the endpoint grade failures;
seeds 0-4 passed at a 45 m margin, but seed 5 still has 289 blocked passage-capsule samples ~29 m before the
departure pad, where the composed field stays solid (-0.162) inside the tube over native ground (-3.6). Ripple
audit now keeps true route distance across masked gaps (with a synthetic control).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-11-01 12:19:30 +01:00

59 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""Build the 3-strata composed Core.Liminal.Field v2 fixture."""
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/l145"))
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)
world = json.loads(OWNER.read_text(encoding="utf-8"))
if len(world.get("strates", [])) < 3:
raise SystemExit("owner fixture needs at least three authored strate slots")
world["strates"] = world["strates"][:3]
world["total_strates"] = 3
world["settings_asset"]["TotalStrates"] = 3
world["settings_asset"]["FixedStrates"] = world["settings_asset"]["FixedStrates"][:3]
# Keep the resolved arrival near the departure depth. The owner's 5000-unit
# reach clamps to liminal bedrock on most seeds and leaves no field floor.
world["strates"][0]["passage_config"]["ReachMin"] = 1536
world["strates"][0]["passage_config"]["ReachMax"] = 1792
world["surface_profile_override"] = {
"version": 1,
"kind": "flatField",
"minimum_arena_clearance_m": 0.0,
}
middle = world["strates"][1]
middle["asset"]["GeneratorType"] = 4 # ECaveGeneratorType::SurfaceWorld
middle["asset"]["StrateName"] = "Liminal Field"
# Keep the departure mouth 24–32 m above liminal bedrock so every variant
# has room for its floor, road landing and support footings.
middle["passage_config"]["ReachMin"] = 192
middle["passage_config"]["ReachMax"] = 256
world["core_liminal_field"] = {
"version": 2,
"strate_index": int(middle["index"]),
"variant_policy": "seed_modulo_4",
}
output = args.out / "core-liminal-field-3-strata.json"
output.write_text(json.dumps(world, separators=(",", ":")) + "\n", encoding="utf-8")
print(f"[L145Fixture] path={output} strates=SurfaceWorld,Core.Liminal.Field,TunnelNetwork status=PASS")
if __name__ == "__main__":
main()