On the real FloatingIslands recipe, column caps sit inside anchor-island rock and native bedrock; the old check sampled the route foot. The audit now samples each planned cap against the native field (negative control: a cap moved into air is detected). The audit runner records requested vs actual recipe and exits on mismatch. All 16 passage rows (4 styles x 2 recipes x 2 compilers) pass. The readable shader uses a smooth tint. Interim: FI Gradient displacement capped at width/256 (flat floor, no contour rings); restoring real undulation is L32. Evaluator 19. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
121 lines
6.1 KiB
Python
121 lines
6.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Run the recipe-stamped L31 passage audit matrix and reject mislabeled runs."""
|
|
import json
|
|
import re
|
|
import subprocess
|
|
import time
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[4]
|
|
OUT = ROOT / "Saved/Linux/l31"
|
|
OUT.mkdir(parents=True, exist_ok=True)
|
|
BINARIES = {
|
|
"clang": OUT / "bin/VoxelForgeCoreHeadless-linux31-clang",
|
|
"gcc": OUT / "bin/VoxelForgeCoreHeadless-linux31-gcc",
|
|
}
|
|
MARKERS = (
|
|
"[ResolvedPassageAuditSummary]",
|
|
"[PassageOpenAirAuditSummary]",
|
|
"[PassageNaturalnessSummary]",
|
|
"[PassageNoLongBridgeAudit]",
|
|
"[PassageRockColumnAuditSummary]",
|
|
)
|
|
rows = []
|
|
failed = False
|
|
|
|
for recipe in ("surface-world", "floating-islands"):
|
|
for style in range(4):
|
|
data = ROOT / f"Saved/Linux/linux25-owner-{recipe}-style{style}.json"
|
|
for compiler, binary in BINARIES.items():
|
|
name = f"passage-{recipe}-style{style}-{compiler}"
|
|
logfile = OUT / f"{name}.log"
|
|
command = [
|
|
str(binary), str(data), "--workers=12", "--world-assembler-prototype",
|
|
"--stream-benchmark", "--stream-pipeline", "--force-generate",
|
|
"--clip-radius=3", "--max-clip-level=8", "--max-level=-1",
|
|
f"--recipe={recipe}", "--audit-resolved-layout-passages",
|
|
]
|
|
started = time.monotonic()
|
|
try:
|
|
with logfile.open("w", encoding="utf-8") as stream:
|
|
result = subprocess.run(command, stdout=stream, stderr=subprocess.STDOUT,
|
|
timeout=1800, check=False)
|
|
except subprocess.TimeoutExpired:
|
|
result = None
|
|
elapsed = time.monotonic() - started
|
|
text = logfile.read_text(encoding="utf-8", errors="replace")
|
|
stamps = re.findall(
|
|
r"^\[WorldAssemblerRecipeAudit\] requested=([^ ]+) actual=([^ ]+).*status=([^ ]+)$",
|
|
text, re.M)
|
|
recipe_ok = stamps == [(recipe, recipe, "PASS")]
|
|
markers_ok = all(re.search(re.escape(marker) + r".*status=PASS", text)
|
|
for marker in MARKERS)
|
|
capsule_ok = bool(re.search(
|
|
r"^\[ResolvedPassageAudit\].* blocked=0 support_samples=\d+ "
|
|
r"unsupported=0 grade_failures=0 mouth_content=2/2 mouth_radius=2/2 "
|
|
r"walkability=PASS$", text, re.M))
|
|
island_route_ok = (recipe != "floating-islands" or bool(re.search(
|
|
r"^\[FloatingIslandRouteAudit\].* blocked=0 support_samples=\d+ "
|
|
r"unsupported=0 grade_failures=0 status=PASS$", text, re.M)))
|
|
binding_ok = bool(re.search(
|
|
r"\[ResolvedPassageAuditSummary\].*route_bindings=[1-9][0-9]* "
|
|
r"route_binding_failures=0 .*status=PASS", text))
|
|
walk_ok = "[Walkability] PASS" in text
|
|
if recipe == "floating-islands":
|
|
control_ok = "[PassageColumnDisconnectedEndControl]" in text and bool(
|
|
re.search(r"\[PassageColumnDisconnectedEndControl\].*detected=true", text))
|
|
else:
|
|
control_ok = True
|
|
ok = (result is not None and result.returncode == 0 and recipe_ok
|
|
and markers_ok and capsule_ok and island_route_ok and binding_ok
|
|
and walk_ok and control_ok)
|
|
actual_recipe = stamps[0][1] if len(stamps) == 1 else "MISSING"
|
|
rows.append((recipe, actual_recipe, style, compiler, elapsed,
|
|
result.returncode if result else "TIMEOUT", ok))
|
|
print(f"{name} elapsed={elapsed:.1f}s exit={result.returncode if result else 'TIMEOUT'} "
|
|
f"recipe={stamps[0][1] if stamps else 'MISSING'} "
|
|
f"capsule={'PASS' if capsule_ok and island_route_ok else 'FAIL'} "
|
|
f"column_control={'PASS' if control_ok else 'FAIL'} {'PASS' if ok else 'FAIL'}",
|
|
flush=True)
|
|
if not ok:
|
|
failed = True
|
|
|
|
summary = OUT / "passage-audit-matrix.csv"
|
|
summary.write_text(
|
|
"requested_recipe,actual_recipe,style,compiler,elapsed_seconds,exit_code,status\n" +
|
|
"".join(f"{requested},{actual},{style},{compiler},{elapsed:.3f},{code},"
|
|
f"{'PASS' if ok else 'FAIL'}\n"
|
|
for requested, actual, style, compiler, elapsed, code, ok in rows), encoding="utf-8")
|
|
|
|
control_log = OUT / "recipe-mismatch-control.log"
|
|
control_owner = OUT / "recipe-mismatch-control-owner.json"
|
|
control_owner_data = json.loads(
|
|
(ROOT / "Saved/Linux/linux25-owner-surface-world-style0.json").read_text(encoding="utf-8"))
|
|
top_owner_stratum = max(control_owner_data["strates"], key=lambda stratum: stratum["top_chunk_z"])
|
|
top_owner_stratum["asset"]["GeneratorType"] = 6 # ECaveGeneratorType::FloatingIslands
|
|
control_owner.write_text(json.dumps(control_owner_data, separators=(",", ":")), encoding="utf-8")
|
|
control_command = [
|
|
str(BINARIES["clang"]),
|
|
str(control_owner),
|
|
"--workers=12", "--world-assembler-prototype", "--stream-benchmark",
|
|
"--stream-pipeline", "--force-generate", "--clip-radius=3",
|
|
"--max-clip-level=8", "--max-level=-1", "--recipe=surface-world",
|
|
"--audit-resolved-layout-passages",
|
|
]
|
|
with control_log.open("w", encoding="utf-8") as stream:
|
|
control = subprocess.run(control_command, stdout=stream, stderr=subprocess.STDOUT,
|
|
timeout=1800, check=False)
|
|
control_text = control_log.read_text(encoding="utf-8", errors="replace")
|
|
control_ok = (control.returncode == 2 and
|
|
"[WorldAssemblerRecipeAudit] requested=surface-world actual=floating-islands "
|
|
"top_generator=FloatingIslands " in control_text and
|
|
"floating_islands_stratum=present status=FAIL" in control_text)
|
|
print(f"[L31RecipeMismatchControl] requested=surface-world actual=floating-islands "
|
|
f"exit={control.returncode} detected={'true' if control_ok else 'false'} "
|
|
f"{'PASS' if control_ok else 'FAIL'}", flush=True)
|
|
|
|
print(f"[L31PassageMatrix] runs={len(rows)} pass={sum(row[-1] for row in rows)} "
|
|
f"fail={sum(not row[-1] for row in rows)} summary={summary}", flush=True)
|
|
raise SystemExit(1 if failed or not control_ok or len(rows) != 16 else 0)
|