research: Floating Islands planned around fixed tunnels (L140, 0/16; kept as patch)
Native FI binds and its own route/clearance/mouth-support checks pass on seeds 0 and 10, but 14/16 seeds have no island arrangement that clears the fixed passage tubes and reaches both mouth heights; seed 10 has one composed collision; ripple 6-7 cm vs the 3.5 cm limit on both upper passages. Third failure of the 'islands adapt to fixed tunnels' premise (L133 x2, L140). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
No files matched your search
@@ -0,0 +1,34 @@
|
|||||||
|
# L140 — Floating Islands planned around passages
|
||||||
|
|
||||||
|
**Not accepted: 0/16 composed seeds passed.** The new Core recipe reaches native S1 dispatch and meets its dedicated route, passage-clearance, and mouth-support checks on seeds 0 and 10. Seed 10 still has one blocked capsule in the composed owner route; both seeds fail the unchanged passage-ripple gate. Fourteen seeds cannot produce a corridor-aware plan.
|
||||||
|
|
||||||
|
## Change
|
||||||
|
|
||||||
|
Core evaluator version is 239 and Floating Islands geometry version is 10. The owner adapter resolves the fixed passage layout first, then plans nine native islands and a walk route around the 0–1 arrival and 1–2 departure tubes. The plan records route and island anchors in the resolved layout. The clearance check reserves the 1.053 m passage influence reach plus the 0.880 m capsule half-height and checks five support probes at each mouth. Shape composition preserves native landing support and passage shell distance for this recipe. Direct legacy recipe fixtures retain their earlier attach-before-layout order.
|
||||||
|
|
||||||
|
S1 binds to `FloatingIslands-native` in the explicit Core owner mode. `bUseVoxelForgeCore` remains opt-in; the fast-tier default owner pose still reports the legacy analytic S1 path.
|
||||||
|
|
||||||
|
## Composed sweep
|
||||||
|
|
||||||
|
The final-source Clang run covered seeds 0–15. Results and per-seed logs are in [`summary.json`](../../../../Saved/Linux/l140/seeds/summary.json) and `Saved/Linux/l140/seeds/` (source stamp `6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da`).
|
||||||
|
|
||||||
|
- **Seed 0:** the planner tried 11 detours; its 94.5 m route has 1.47 m conservative tube clearance. Native route audit: 128 points, 0 blocked capsule samples, 0 unsupported points, 0 grade failures. Passage check: 5,325 tube samples, 0 island conflicts, 676,275 route checks, 0 route conflicts, arrival and departure support 5/5, 2.824 m minimum excess clearance. The composed S1 route and seams pass. Ripple is 1/3: wall ripple is 6.85 cm on 0–1 and 7.10 cm on 1–2 against the unchanged 3.50 cm limit.
|
||||||
|
- **Seed 10:** the native route and passage checks pass, with 5/5 mouth support and 0 isolated route conflicts. The composed S1 capsule audit finds one blocked sample at `(-6.246, -28.615, -737.982) m`, inside the resolved 0–1 passage; composed density is `-0.002062` while native island density is `+1.730469`. Ripple is again 1/3 (6.22 cm on 0–1 and 7.19 cm on 1–2). Seams and negative controls pass.
|
||||||
|
- **Seeds 1, 2, 7, 8, 9, 12, 13, 15:** no candidate clears the tubes; best conservative clearances range from −5.994 m to −0.406 m. **Seeds 3, 5, 6, 14:** candidates clear the tubes but the supported island profile cannot reach both fixed mouth heights. **Seeds 4 and 11:** candidate islands escape the sealed vertical layout.
|
||||||
|
|
||||||
|
The dedicated gate is therefore 0/16. No geometry variant was attempted after these results. The repeated 0–1/1–2 ripple failure is also consistent with L67's closed authored-radius experiment: it measured 7.27 cm on 1–2 against the same 3.50 cm limit ([L67 report](../../Linux67/REPORT.md)).
|
||||||
|
|
||||||
|
## Other checks
|
||||||
|
|
||||||
|
- **Fast tier:** PASS, 287.8 s; negative controls and existing worker-hash checks passed. It continues to verify the default legacy S1 dispatch.
|
||||||
|
- **Determinism:** PASS, six runs (Clang/GCC × W1/W8/W12). All produced the same 512-tile density, mesh, payload, topology, material, and exact-query hashes, with layout identity `resolved-layout-v3-fnv64:08da20d55ff6820f`. Native recipe hash: `0b6a23bc73a3b867`. See the [baseline](baselines/native-owner-fi-seed0.json) and [`summary.json`](../../../../Saved/Linux/l140/determinism/summary.json).
|
||||||
|
- **Captures:** ten before/after JPEGs passed the existing image-quality gate. The [manifest](captures/manifest.json) records eye-height arrival, island edge, route between islands, departure, and wide silhouette views for both versions. See [before](captures/before-arrival-mouth.jpg), [before edge](captures/before-island-edge.jpg), [before route](captures/before-walk-between-islands.jpg), [before departure](captures/before-departure-mouth.jpg), [before wide](captures/before-wide-silhouette.jpg); [after](captures/after-arrival-mouth.jpg), [after edge](captures/after-island-edge.jpg), [after route](captures/after-walk-between-islands.jpg), [after departure](captures/after-departure-mouth.jpg), [after wide](captures/after-wide-silhouette.jpg).
|
||||||
|
- **Linux VFHostEditor:** PASS in 73.58 s. Build log: [`ubt.log`](../../../../Saved/Linux/l140/ubt.log).
|
||||||
|
- **L80 timing:** not completed. The machine gate passed (load 0.97, 2-second CPU idle 98.5%), but the candidate warm-up could not construct native S1 around the checked-in Unreal-exported passage layout: 0 detours, best clearance −3.509 m. No measured L80 pairs were recorded; the ±1% A/A floor remains the L137 reference. A separate 30-second setup probe with a regenerated seed-0 owner plan timed out during passage-route planning, so I did not run a mismatched or incomplete timing matrix.
|
||||||
|
- `git diff --check`: PASS.
|
||||||
|
|
||||||
|
## Remaining issues
|
||||||
|
|
||||||
|
The fixed exported owner layout and many generated seeds leave no route-clear island arrangement. On seed 10, the native-only clearance check also misses a collision that the final composed owner route catches. Ripple remains above the existing limit on both upper passages. Native S1 is still opt-in and is not promoted by this round.
|
||||||
|
|
||||||
|
Changed Unreal source: [`VoxelForgeCoreAdapter.cpp`](../../../../Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp). Windows compilation remains for the owner.
|
||||||
@@ -0,0 +1,224 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Capture comparable player-height and wide views of owner S1 before and after L140."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
import argparse
|
||||||
|
import math
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[4]
|
||||||
|
DATA = ROOT / "Standalone/data/owner_world.json"
|
||||||
|
LAYOUT = ROOT / "Saved/Linux/l140/seeds/seed0-composed-layout.json"
|
||||||
|
OUT = ROOT / "Saved/Linux/l140/captures"
|
||||||
|
ARTIFACTS = ROOT / "Standalone/Research/WorldAssemblerM3/Linux140/captures"
|
||||||
|
LIMIT = ["taskset", "-c", "0-11", "prlimit", "--as=6442450944", "--"]
|
||||||
|
STAMP_RE = re.compile(r"^\[VoxelForgeSourceStamp\] sha256=([0-9a-f]{64})$", re.M)
|
||||||
|
VERSIONS = {
|
||||||
|
"before-head": {
|
||||||
|
"headless": ROOT / "Saved/Linux/l139/bin/VoxelForgeCoreHeadless-l139-clang",
|
||||||
|
"renderer": ROOT / "Saved/Linux/l139/bin/VoxelForgeOffscreenCapture-l139-clang",
|
||||||
|
"stamp": "b8603b6cb3975ca0f9669759e4e2464561c557fdb7aa6836acef123ecf0b99d1",
|
||||||
|
"native": False,
|
||||||
|
},
|
||||||
|
"after-l140": {
|
||||||
|
"headless": ROOT / "Saved/Linux/l140/bin/VoxelForgeCoreHeadless-l140-clang",
|
||||||
|
"renderer": ROOT / "Saved/Linux/l140/bin/VoxelForgeOffscreenCapture-l140-clang",
|
||||||
|
"stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"native": True,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def fmt(values: tuple[float, ...]) -> str:
|
||||||
|
return ",".join(f"{value:.6f}" for value in values)
|
||||||
|
|
||||||
|
|
||||||
|
def angles(camera: tuple[float, float, float], target: tuple[float, float, float]) -> tuple[float, float]:
|
||||||
|
dx, dy, dz = (target[i] - camera[i] for i in range(3))
|
||||||
|
return math.degrees(math.atan2(dx, dy)), math.degrees(math.atan2(dz, math.hypot(dx, dy)))
|
||||||
|
|
||||||
|
|
||||||
|
def stamped_run(name: str, command: list[str], log: Path, expected: str,
|
||||||
|
env: dict[str, str]) -> str:
|
||||||
|
binary = Path(command[0])
|
||||||
|
probe = subprocess.run([*LIMIT, "timeout", "15s", str(binary), "--print-source-stamp"],
|
||||||
|
cwd=ROOT, env=env, text=True, stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.STDOUT, check=False, timeout=20)
|
||||||
|
match = STAMP_RE.search(probe.stdout or "")
|
||||||
|
if probe.returncode != 0 or not match or match.group(1) != expected:
|
||||||
|
raise RuntimeError(f"{name}: executable stamp mismatch for {binary}")
|
||||||
|
log.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
started = time.monotonic()
|
||||||
|
with log.open("w", encoding="utf-8") as stream:
|
||||||
|
result = subprocess.run([*LIMIT, "timeout", "1740s", *map(str, command)],
|
||||||
|
cwd=ROOT, env=env, stdout=stream, stderr=subprocess.STDOUT,
|
||||||
|
timeout=1745, check=False)
|
||||||
|
output = log.read_text(encoding="utf-8", errors="replace")
|
||||||
|
emitted = STAMP_RE.search(output)
|
||||||
|
if result.returncode != 0 or not emitted or emitted.group(1) != expected:
|
||||||
|
raise RuntimeError(f"{name}: process failed or source changed; see {log}")
|
||||||
|
print(f"[L140CaptureRun] step={name} elapsed_s={time.monotonic()-started:.1f} "
|
||||||
|
f"log={log.relative_to(ROOT)}", flush=True)
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def qpoint(values: list[int], scale_m: float) -> tuple[float, float, float]:
|
||||||
|
return tuple(value * scale_m for value in values[:3])
|
||||||
|
|
||||||
|
|
||||||
|
def make_views(layout: dict) -> list[dict[str, object]]:
|
||||||
|
scale_m = layout["core_voxel_size_um"] / 1_000_000.0 / 256.0
|
||||||
|
strate = next(row for row in layout["strates"] if row["strate_index"] == 1)
|
||||||
|
anchors = strate["anchors"]
|
||||||
|
route = [qpoint(row["values"], scale_m) for row in anchors if row["kind"] == "route_point"]
|
||||||
|
islands = [row for row in anchors if row["kind"] == "island_anchor"]
|
||||||
|
if len(route) < 8 or len(islands) < 5:
|
||||||
|
raise ValueError("seed-0 resolved layout lacks a complete S1 route or island chain")
|
||||||
|
|
||||||
|
def tangent(index: int) -> tuple[float, float]:
|
||||||
|
a, b = route[max(0, index - 1)], route[min(len(route) - 1, index + 1)]
|
||||||
|
dx, dy = b[0] - a[0], b[1] - a[1]
|
||||||
|
length = max(1e-9, math.hypot(dx, dy))
|
||||||
|
return dx / length, dy / length
|
||||||
|
|
||||||
|
def eye(point: tuple[float, float, float]) -> tuple[float, float, float]:
|
||||||
|
return point[0], point[1], point[2] + 1.45
|
||||||
|
|
||||||
|
i = len(route) // 3
|
||||||
|
tx, ty = tangent(i)
|
||||||
|
arrival_t = tangent(0)
|
||||||
|
departure_t = tangent(len(route) - 1)
|
||||||
|
arrival, departure = route[0], route[-1]
|
||||||
|
arrival_camera = eye((arrival[0] - 2.5 * arrival_t[0], arrival[1] - 2.5 * arrival_t[1], arrival[2]))
|
||||||
|
arrival_target = eye((arrival[0] + 8.0 * arrival_t[0], arrival[1] + 8.0 * arrival_t[1], arrival[2]))
|
||||||
|
departure_camera = eye((departure[0] - 2.5 * departure_t[0], departure[1] - 2.5 * departure_t[1], departure[2]))
|
||||||
|
departure_target = eye((departure[0] + 8.0 * departure_t[0], departure[1] + 8.0 * departure_t[1], departure[2]))
|
||||||
|
edge_point = route[i]
|
||||||
|
edge_camera = eye((edge_point[0] + 6.0 * ty, edge_point[1] - 6.0 * tx, edge_point[2]))
|
||||||
|
edge_target = (edge_point[0] + 4.0 * tx, edge_point[1] + 4.0 * ty, edge_point[2] + 0.35)
|
||||||
|
centers = [qpoint(row["values"], scale_m) for row in islands]
|
||||||
|
middle_index = len(route) // 2
|
||||||
|
midpoint = route[middle_index]
|
||||||
|
mid_t = tangent(middle_index)
|
||||||
|
walk_camera = eye((midpoint[0] - 2.0 * mid_t[0], midpoint[1] - 2.0 * mid_t[1], midpoint[2]))
|
||||||
|
next_island_index = min(len(centers) - 1, 5)
|
||||||
|
next_island_top = centers[next_island_index][2] + islands[next_island_index]["values"][4] * scale_m
|
||||||
|
walk_target = (centers[next_island_index][0], centers[next_island_index][1], next_island_top + 0.5)
|
||||||
|
walk_focus = tuple((centers[4][axis] + centers[5][axis]) * 0.5 for axis in range(3)) + (18.0,)
|
||||||
|
cx = sum(p[0] for p in centers) / len(centers)
|
||||||
|
cy = sum(p[1] for p in centers) / len(centers)
|
||||||
|
cz = sum(p[2] + row["values"][4] * scale_m for p, row in zip(centers, islands)) / len(centers)
|
||||||
|
wide_camera = (cx, cy + 23.0, cz + 10.0)
|
||||||
|
wide_target = (cx, cy, cz)
|
||||||
|
return [
|
||||||
|
{"name": "arrival-mouth", "camera": arrival_camera, "target": arrival_target,
|
||||||
|
"focus": (*arrival, 14.0), "note": "player eye at the fixed 0-1 arrival mouth"},
|
||||||
|
{"name": "island-edge", "camera": edge_camera, "target": edge_target,
|
||||||
|
"focus": (*edge_point, 18.0), "note": "player eye beside the route on an island edge"},
|
||||||
|
{"name": "walk-between-islands", "camera": walk_camera, "target": walk_target,
|
||||||
|
"focus": walk_focus, "note": "player eye looking from one route landing toward the next island"},
|
||||||
|
{"name": "departure-mouth", "camera": departure_camera, "target": departure_target,
|
||||||
|
"focus": (*departure, 14.0), "note": "player eye approaching the fixed 1-2 departure mouth"},
|
||||||
|
{"name": "wide-silhouette", "camera": wide_camera, "target": wide_target,
|
||||||
|
"focus": (cx, cy, cz, 48.0), "fov": 72.0,
|
||||||
|
"note": "wide side view showing the island chain silhouette"},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
parser = argparse.ArgumentParser(description=__doc__)
|
||||||
|
parser.add_argument("--views", nargs="*", default=None,
|
||||||
|
help="optional view names to rerender in both phases")
|
||||||
|
args = parser.parse_args()
|
||||||
|
if not DATA.is_file() or not LAYOUT.is_file():
|
||||||
|
raise SystemExit("missing owner fixture or final seed-0 resolved layout")
|
||||||
|
layout = json.loads(LAYOUT.read_text(encoding="utf-8"))
|
||||||
|
views = make_views(layout)
|
||||||
|
if args.views:
|
||||||
|
unknown = set(args.views) - {str(view["name"]) for view in views}
|
||||||
|
if unknown:
|
||||||
|
raise SystemExit(f"unknown capture views: {sorted(unknown)}")
|
||||||
|
views = [view for view in views if view["name"] in set(args.views)]
|
||||||
|
OUT.mkdir(parents=True, exist_ok=True)
|
||||||
|
ARTIFACTS.mkdir(parents=True, exist_ok=True)
|
||||||
|
env = os.environ.copy()
|
||||||
|
env["LP_NUM_THREADS"] = "12"
|
||||||
|
env["XDG_CACHE_HOME"] = str(OUT / "xdg-cache")
|
||||||
|
quality = ROOT / "Standalone/Tools/verify/capture_quality.py"
|
||||||
|
manifest: list[dict[str, object]] = []
|
||||||
|
old_manifest_path = ARTIFACTS / "manifest.json"
|
||||||
|
existing = json.loads(old_manifest_path.read_text(encoding="utf-8")) \
|
||||||
|
if old_manifest_path.is_file() else {"captures": []}
|
||||||
|
rerendered = {str(view["name"]) for view in views}
|
||||||
|
for row in existing.get("captures", []):
|
||||||
|
if row.get("view") not in rerendered:
|
||||||
|
manifest.append(row)
|
||||||
|
for version, config in VERSIONS.items():
|
||||||
|
phase = "before" if version.startswith("before") else "after"
|
||||||
|
for view in views:
|
||||||
|
name = str(view["name"])
|
||||||
|
camera, target = view["camera"], view["target"]
|
||||||
|
assert isinstance(camera, tuple) and isinstance(target, tuple)
|
||||||
|
yaw, pitch = angles(camera, target)
|
||||||
|
mesh_dir = OUT / "meshes" / phase
|
||||||
|
mesh_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
mesh = mesh_dir / f"{name}.vfmesh"
|
||||||
|
capture_layout = mesh_dir / f"{name}-layout.json"
|
||||||
|
flags = ["--world-assembler-prototype", "--stream-benchmark", "--stream-pipeline",
|
||||||
|
"--workers=12", "--clip-radius=6", "--max-clip-level=0", "--max-level=0",
|
||||||
|
"--force-generate", "--seed=0", "--recipe=surface-world",
|
||||||
|
"--render-distance-chunks=0", f"--camera={fmt((*camera,yaw,pitch))}",
|
||||||
|
f"--resolved-layout-output={capture_layout}", f"--mesh-export={mesh}"]
|
||||||
|
if config["native"]:
|
||||||
|
flags.extend(["--native-owner-fi", "--density-dispatch-report"])
|
||||||
|
export = [config["headless"], DATA, *flags]
|
||||||
|
stamped_run(f"{phase}-{name}-export", list(map(str, export)),
|
||||||
|
OUT / f"{phase}-{name}-export.log", config["stamp"], env)
|
||||||
|
if not mesh.is_file() or mesh.stat().st_size == 0:
|
||||||
|
raise RuntimeError(f"{phase}-{name}: empty mesh export")
|
||||||
|
png = OUT / f"{phase}-{name}.png"
|
||||||
|
jpg = ARTIFACTS / f"{phase}-{name}.jpg"
|
||||||
|
focus = view["focus"]
|
||||||
|
assert isinstance(focus, tuple)
|
||||||
|
fov = float(view.get("fov", 78.0))
|
||||||
|
render = [config["renderer"], mesh, png, "--size=1280x720",
|
||||||
|
f"--fov-deg={fov:.1f}", f"--camera-m={fmt(camera)}", f"--yaw-deg={yaw:.6f}",
|
||||||
|
f"--pitch-deg={pitch:.6f}", "--tile-skirts=off", "--shade=readable",
|
||||||
|
"--headlamp=on", "--height-tint=on", "--height-center-m=-740",
|
||||||
|
"--height-range-m=70", "--tile-edges=off", f"--focus-region={fmt(focus)}"]
|
||||||
|
stamped_run(f"{phase}-{name}-render", list(map(str, render)),
|
||||||
|
OUT / f"{phase}-{name}-render.log", config["stamp"], env)
|
||||||
|
subprocess.run([*LIMIT, "timeout", "120s", "ffmpeg", "-nostdin", "-hide_banner",
|
||||||
|
"-loglevel", "error", "-y", "-i", png, "-frames:v", "1", "-q:v", "4", jpg],
|
||||||
|
cwd=ROOT, env=env, check=True, stdout=subprocess.DEVNULL,
|
||||||
|
stderr=subprocess.STDOUT, timeout=125)
|
||||||
|
check = subprocess.run([*LIMIT, "timeout", "120s", sys.executable,
|
||||||
|
quality, jpg], cwd=ROOT, env=env, text=True, stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.STDOUT, check=False, timeout=125)
|
||||||
|
result = check.stdout.strip().splitlines()[-1] if check.stdout.strip() else f"exit={check.returncode}"
|
||||||
|
ok = check.returncode == 0 and "status=PASS" in check.stdout
|
||||||
|
manifest.append({"phase": phase, "view": name, "file": str(jpg.relative_to(ROOT)),
|
||||||
|
"bytes": jpg.stat().st_size, "camera_m": camera, "target_m": target,
|
||||||
|
"yaw_deg": yaw, "pitch_deg": pitch, "fov_deg": fov,
|
||||||
|
"note": view["note"], "quality_status": "PASS" if ok else "FAIL", "quality": result})
|
||||||
|
print(f"[L140Capture] phase={phase} view={name} file={jpg.relative_to(ROOT)} "
|
||||||
|
f"quality={'PASS' if ok else 'FAIL'} {result}", flush=True)
|
||||||
|
manifest.sort(key=lambda row: (str(row["phase"]), str(row["view"])))
|
||||||
|
summary = {"seed": 0, "source_stamp": VERSIONS["after-l140"]["stamp"],
|
||||||
|
"before_stamp": VERSIONS["before-head"]["stamp"], "views_per_phase": 5,
|
||||||
|
"all_quality_pass": all(row["quality_status"] == "PASS" for row in manifest),
|
||||||
|
"captures": manifest}
|
||||||
|
(ARTIFACTS / "manifest.json").write_text(json.dumps(summary, indent=2) + "\n", encoding="utf-8")
|
||||||
|
print(f"[L140CaptureSummary] views_per_phase={len(views)} captures={len(manifest)} "
|
||||||
|
f"all_quality_pass={summary['all_quality_pass']}", flush=True)
|
||||||
|
return 0 if summary["all_quality_pass"] else 1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Check native Floating Islands owner identity and hashes at W1/W8/W12."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[4]
|
||||||
|
OUT = ROOT / "Saved/Linux/l140/determinism"
|
||||||
|
DATA = ROOT / "Standalone/data/owner_world.json"
|
||||||
|
STAMP = "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da"
|
||||||
|
BINARIES = {
|
||||||
|
"clang": ROOT / "Saved/Linux/l140/bin/VoxelForgeCoreHeadless-l140-clang",
|
||||||
|
"gcc": ROOT / "Saved/Linux/l140/bin/VoxelForgeCoreHeadless-l140-gcc",
|
||||||
|
}
|
||||||
|
CAMERA = "25.836914,3.199219,-737.000000,0,0"
|
||||||
|
STAMP_RE = re.compile(r"^\[VoxelForgeSourceStamp\] sha256=([0-9a-f]+)$", re.M)
|
||||||
|
HASH_RE = re.compile(
|
||||||
|
r"^\[Pipeline(?:FullDetailHash|WholeViewHash|MaterialHash|LODHash|ExactQueryHash)\].*$",
|
||||||
|
re.M)
|
||||||
|
NATIVE_FI = re.compile(
|
||||||
|
r"^\[DensityDispatch\] strate=1 generator=FloatingIslands "
|
||||||
|
r"recipe=FloatingIslands\.ClusterField version=10 "
|
||||||
|
r"bound_path=FloatingIslands-native adapter=FFloatingIslandFieldAdapter$", re.M)
|
||||||
|
FI_RECIPE_HASH = re.compile(r"^\[FloatingIslandWorldAssembly\].*recipe_hash=([0-9a-f]+) status=PASS$", re.M)
|
||||||
|
FI_CLEARANCE = re.compile(r"^\[FloatingIslandPassageClearance\].*status=PASS$", re.M)
|
||||||
|
FI_ROUTE_AUDIT = re.compile(r"^\[FloatingIslandRouteAudit\].*status=PASS$", re.M)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
if not DATA.is_file() or any(not path.is_file() for path in BINARIES.values()):
|
||||||
|
raise SystemExit("missing L140 Clang/GCC determinism binary or owner fixture")
|
||||||
|
OUT.mkdir(parents=True, exist_ok=True)
|
||||||
|
rows: list[dict[str, object]] = []
|
||||||
|
reference_hashes: list[str] | None = None
|
||||||
|
reference_identity: str | None = None
|
||||||
|
for compiler, binary in BINARIES.items():
|
||||||
|
for workers in (1, 8, 12):
|
||||||
|
name = f"native-owner-fi-{compiler}-w{workers}"
|
||||||
|
log, layout = OUT / f"{name}.log", OUT / f"{name}.json"
|
||||||
|
command = ["taskset", "-c", "0-11", "prlimit", "--as=6442450944", "--",
|
||||||
|
"timeout", "1740s", str(binary), str(DATA), "--world-assembler-prototype",
|
||||||
|
"--stream-benchmark", "--stream-pipeline", f"--workers={workers}",
|
||||||
|
"--clip-radius=3", "--max-clip-level=8", "--max-level=0",
|
||||||
|
f"--camera={CAMERA}", "--stream-hash", "--force-generate", "--seed=0",
|
||||||
|
"--recipe=surface-world", "--native-owner-fi", "--render-distance-chunks=0",
|
||||||
|
"--density-dispatch-report", f"--resolved-layout-output={layout}"]
|
||||||
|
started = time.monotonic()
|
||||||
|
with log.open("w", encoding="utf-8") as output:
|
||||||
|
proc = subprocess.run(command, cwd=ROOT, stdout=output,
|
||||||
|
stderr=subprocess.STDOUT, check=False, timeout=1740)
|
||||||
|
content = log.read_text(encoding="utf-8", errors="replace")
|
||||||
|
stamp = STAMP_RE.search(content)
|
||||||
|
hashes = HASH_RE.findall(content)
|
||||||
|
current_layout = json.loads(layout.read_text(encoding="utf-8")) if layout.is_file() else {}
|
||||||
|
identity = current_layout.get("stable_identity")
|
||||||
|
native_ok = bool(NATIVE_FI.search(content))
|
||||||
|
plan_ok = ("[FloatingIslandRouteAudit]" in content
|
||||||
|
and "[FloatingIslandPassageClearance]" in content)
|
||||||
|
recipe_hash = FI_RECIPE_HASH.search(content)
|
||||||
|
clearance = FI_CLEARANCE.search(content)
|
||||||
|
route_audit = FI_ROUTE_AUDIT.search(content)
|
||||||
|
passed = (proc.returncode == 0 and stamp is not None and stamp.group(1) == STAMP
|
||||||
|
and len(hashes) >= 4 and native_ok and plan_ok and recipe_hash is not None
|
||||||
|
and clearance is not None and route_audit is not None and bool(identity))
|
||||||
|
if reference_hashes is None and passed:
|
||||||
|
reference_hashes, reference_identity = hashes, identity
|
||||||
|
else:
|
||||||
|
passed = passed and hashes == reference_hashes and identity == reference_identity
|
||||||
|
row = {"compiler": compiler, "workers": workers, "exit": proc.returncode,
|
||||||
|
"source_stamp": stamp.group(1) if stamp else None, "hash_lines": hashes,
|
||||||
|
"layout_identity": identity, "native_fi_dispatch": native_ok,
|
||||||
|
"native_plan_audits": plan_ok, "floating_island_recipe_hash":
|
||||||
|
recipe_hash.group(1) if recipe_hash else None,
|
||||||
|
"passage_clearance_line": clearance.group(0) if clearance else None,
|
||||||
|
"route_audit_line": route_audit.group(0) if route_audit else None,
|
||||||
|
"passed": bool(passed),
|
||||||
|
"elapsed_s": round(time.monotonic() - started, 3),
|
||||||
|
"log": str(log.relative_to(ROOT)), "layout": str(layout.relative_to(ROOT))}
|
||||||
|
rows.append(row)
|
||||||
|
print("[L140DeterminismRun] " + json.dumps(row, sort_keys=True), flush=True)
|
||||||
|
(OUT / "runs-partial.json").write_text(json.dumps(rows, indent=2) + "\n")
|
||||||
|
if not passed:
|
||||||
|
(OUT / "summary.json").write_text(json.dumps({"status": "FAIL", "runs": rows}, indent=2) + "\n")
|
||||||
|
raise SystemExit(f"native owner determinism mismatch; see {log}")
|
||||||
|
summary = {"status": "PASS", "source_stamp": STAMP,
|
||||||
|
"layout_identity": reference_identity, "runs": rows}
|
||||||
|
(OUT / "summary.json").write_text(json.dumps(summary, indent=2) + "\n")
|
||||||
|
(ROOT / "Standalone/Research/WorldAssemblerM3/Linux140/baselines").mkdir(parents=True, exist_ok=True)
|
||||||
|
(ROOT / "Standalone/Research/WorldAssemblerM3/Linux140/baselines/native-owner-fi-seed0.json").write_text(
|
||||||
|
json.dumps(summary, indent=2) + "\n", encoding="utf-8")
|
||||||
|
print(f"[L140DeterminismSummary] runs={len(rows)} source_stamp={STAMP} status=PASS")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Run the composed L140 owner gates for all requested seeds."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[4]
|
||||||
|
OUT = ROOT / "Saved/Linux/l140/seeds"
|
||||||
|
BIN = ROOT / "Saved/Linux/l140/bin/VoxelForgeCoreHeadless-l140-clang"
|
||||||
|
DATA = ROOT / "Standalone/data/owner_world.json"
|
||||||
|
STAMP = "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da"
|
||||||
|
STAMP_RE = re.compile(r"^\[VoxelForgeSourceStamp\] sha256=([0-9a-f]+)$", re.M)
|
||||||
|
CHECKS = {
|
||||||
|
"native_dispatch": re.compile(
|
||||||
|
r"^\[DensityDispatch\] strate=1 generator=FloatingIslands "
|
||||||
|
r"recipe=FloatingIslands\.ClusterField version=10 "
|
||||||
|
r"bound_path=FloatingIslands-native adapter=FFloatingIslandFieldAdapter$", re.M),
|
||||||
|
"island_route": re.compile(r"^\[FloatingIslandRouteAudit\].*status=PASS$", re.M),
|
||||||
|
"passage_clearance": re.compile(r"^\[FloatingIslandPassageClearance\].*status=PASS$", re.M),
|
||||||
|
"strate1_route": re.compile(
|
||||||
|
r"^\[ResolvedStrateRouteAudit\] strate=1 .*blocked=0 .*unsupported=0 "
|
||||||
|
r"grade_failures=0 mouth_binding=PASS status=PASS$", re.M),
|
||||||
|
"route_summary": re.compile(
|
||||||
|
r"^\[ResolvedPassageAuditSummary\].*route_walkable=4 .*route_bindings=4 "
|
||||||
|
r"route_binding_failures=0 .*blocked_controls=3/3", re.M),
|
||||||
|
"passages": re.compile(r"^\[ResolvedPassageAuditSummary\].*status=PASS$", re.M),
|
||||||
|
"shell": re.compile(r"^\[PassageShellAuditSummary\].*status=PASS$", re.M),
|
||||||
|
"naturalness": re.compile(r"^\[PassageNaturalnessSummary\].*status=PASS$", re.M),
|
||||||
|
"mouth_profile": re.compile(r"^\[PassageMouthProfileSummary\].*status=PASS$", re.M),
|
||||||
|
"ripple": re.compile(r"^\[PassageRippleAuditSummary\].*status=PASS$", re.M),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def run(seed: int, label: str, seams_only: bool) -> tuple[int, str, float]:
|
||||||
|
log = OUT / f"seed{seed}-{label}.log"
|
||||||
|
layout = OUT / f"seed{seed}-{label}-layout.json"
|
||||||
|
command = ["taskset", "-c", "0-11", "prlimit", "--as=6442450944", "--",
|
||||||
|
"timeout", "1740s", str(BIN), str(DATA), "--world-assembler-prototype",
|
||||||
|
"--stream-benchmark", "--stream-pipeline", "--workers=8", "--clip-radius=3",
|
||||||
|
"--max-clip-level=8", "--max-level=0", "--force-generate", f"--seed={seed}",
|
||||||
|
"--recipe=surface-world", "--native-owner-fi", "--density-dispatch-report"]
|
||||||
|
command.append("--audit-passage-tile-seams" if seams_only else "--audit-resolved-layout-passages")
|
||||||
|
if not seams_only:
|
||||||
|
command.append("--audit-passage-tile-seams")
|
||||||
|
command.append(f"--resolved-layout-output={layout}")
|
||||||
|
started = time.monotonic()
|
||||||
|
with log.open("w", encoding="utf-8") as output:
|
||||||
|
proc = subprocess.run(command, cwd=ROOT, stdout=output,
|
||||||
|
stderr=subprocess.STDOUT, check=False, timeout=1740)
|
||||||
|
return proc.returncode, str(log.relative_to(ROOT)), round(time.monotonic() - started, 3)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
if not BIN.is_file() or not DATA.is_file():
|
||||||
|
raise SystemExit("missing L140 Clang binary or composed owner fixture")
|
||||||
|
OUT.mkdir(parents=True, exist_ok=True)
|
||||||
|
results = []
|
||||||
|
for seed in range(16):
|
||||||
|
exit_code, log_name, elapsed = run(seed, "composed", False)
|
||||||
|
content = (ROOT / log_name).read_text(encoding="utf-8", errors="replace")
|
||||||
|
stamp = STAMP_RE.search(content)
|
||||||
|
checks = {name: bool(pattern.search(content)) for name, pattern in CHECKS.items()}
|
||||||
|
checks["source_stamp"] = stamp is not None and stamp.group(1) == STAMP
|
||||||
|
checks["blocked_controls"] = len(re.findall(
|
||||||
|
r"^\[ResolvedPassageBlockedControl\].*detected=true$", content, re.M)) == 3
|
||||||
|
checks["negative_controls"] = (
|
||||||
|
"[ResolvedLayoutValidatorControls] rejected=10/10 status=PASS" in content
|
||||||
|
and len(re.findall(r"^\[PassageNaturalnessNegativeControl\].*detected=true$",
|
||||||
|
content, re.M)) == 1
|
||||||
|
and len(re.findall(r"^\[PassageMouthProfileNegativeControl\].*detected=true$",
|
||||||
|
content, re.M)) == 1
|
||||||
|
and len(re.findall(r"^\[PassageFloorStepNegativeControl\].*detected=true$",
|
||||||
|
content, re.M)) == 3
|
||||||
|
and "synthetic_spheres_negative_control=DETECTED" in content
|
||||||
|
and "floor_beaded_negative_control=DETECTED" in content)
|
||||||
|
seam_match = re.search(r"^\[PassageTileSeamAudit\].*status=(PASS|FAIL)$", content, re.M)
|
||||||
|
seam_exit = exit_code
|
||||||
|
seam_log = log_name
|
||||||
|
seam_elapsed = 0.0
|
||||||
|
if seam_match is None:
|
||||||
|
seam_exit, seam_log, seam_elapsed = run(seed, "seams", True)
|
||||||
|
seam_content = (ROOT / seam_log).read_text(encoding="utf-8", errors="replace")
|
||||||
|
stamp = STAMP_RE.search(seam_content)
|
||||||
|
checks["source_stamp"] &= stamp is not None and stamp.group(1) == STAMP
|
||||||
|
seam_match = re.search(
|
||||||
|
r"^\[PassageTileSeamAudit\].*status=(PASS|FAIL)$", seam_content, re.M)
|
||||||
|
content += "\n" + seam_content
|
||||||
|
checks["seams"] = seam_match is not None and seam_match.group(1) == "PASS"
|
||||||
|
all_gates = all(checks.values()) and exit_code == 0 and seam_exit == 0
|
||||||
|
row = {"seed": seed, "exit": exit_code, "seam_exit": seam_exit,
|
||||||
|
"passed": all_gates, "checks": checks,
|
||||||
|
"elapsed_s": elapsed + seam_elapsed, "log": log_name, "seam_log": seam_log}
|
||||||
|
results.append(row)
|
||||||
|
print("[L140SeedSweep] " + json.dumps(row, sort_keys=True), flush=True)
|
||||||
|
(OUT / "runs-partial.json").write_text(json.dumps(results, indent=2) + "\n")
|
||||||
|
passed = sum(row["passed"] for row in results)
|
||||||
|
summary = {"source_stamp": STAMP, "seeds": list(range(16)),
|
||||||
|
"passed": passed, "failed": 16 - passed, "results": results}
|
||||||
|
(OUT / "summary.json").write_text(json.dumps(summary, indent=2) + "\n")
|
||||||
|
print(f"[L140SeedSweepSummary] passed={passed}/16 failed={16-passed} status={'PASS' if passed==16 else 'FAIL'}",
|
||||||
|
flush=True)
|
||||||
|
return 0 if passed == 16 else 1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""L80 timing: native L140 vs L139 HEAD and assembler/world, all owner strata."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import statistics
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[4]
|
||||||
|
OUT = ROOT / "Saved/Linux/l140/timing"
|
||||||
|
DATA = ROOT / "Standalone/data/owner_world.json"
|
||||||
|
BINARIES = {
|
||||||
|
"assembler-world": (
|
||||||
|
ROOT / "Saved/Linux/l137/bin/VoxelForgeCoreHeadless-l137-aa-a",
|
||||||
|
"4499fb2a8a4ede7d6cbc68d1b794f104658cdaae93ed9cacbc91fe7ff3fc3621"),
|
||||||
|
"head": (
|
||||||
|
ROOT / "Saved/Linux/l139/bin/VoxelForgeCoreHeadless-l139-clang",
|
||||||
|
"b8603b6cb3975ca0f9669759e4e2464561c557fdb7aa6836acef123ecf0b99d1"),
|
||||||
|
"l140-native-fi": (
|
||||||
|
ROOT / "Saved/Linux/l140/bin/VoxelForgeCoreHeadless-l140-clang",
|
||||||
|
"6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da"),
|
||||||
|
}
|
||||||
|
CAMERAS = {
|
||||||
|
# The camera override also selects the owner SurfaceWorld departure mouth.
|
||||||
|
# Hold XY to the seed-0 native-FI valid mouth so every layer/version shares one layout.
|
||||||
|
0: (25.8369140625, 3.19921875, -372.2626953125),
|
||||||
|
1: (25.8369140625, 3.19921875, -737.0),
|
||||||
|
2: (25.8369140625, 3.19921875, -753.3740234375),
|
||||||
|
3: (25.8369140625, 3.19921875, -900.353515625),
|
||||||
|
}
|
||||||
|
PIPELINE_RE = re.compile(r"^\[StreamPipeline\] (.*)$", re.M)
|
||||||
|
FIELDS_RE = re.compile(r"([a-zA-Z0-9_]+)=([^ ]+)")
|
||||||
|
NEAR_RE = re.compile(
|
||||||
|
r"^\[WorldAssemblerNearLODReady\] lods=0-2 tiles=(\d+)/(\d+) cold_ready_s=([0-9.]+)$",
|
||||||
|
re.M)
|
||||||
|
STAMP_RE = re.compile(r"^\[VoxelForgeSourceStamp\] sha256=([0-9a-f]{64})$", re.M)
|
||||||
|
L140_AA_FLOOR_PCT = 1.0 # L137's same-binary A/A median control.
|
||||||
|
|
||||||
|
|
||||||
|
def quiet_machine() -> tuple[float, float]:
|
||||||
|
load_1m = os.getloadavg()[0]
|
||||||
|
|
||||||
|
def totals() -> tuple[int, int]:
|
||||||
|
fields = Path("/proc/stat").read_text().splitlines()[0].split()
|
||||||
|
values = [int(value) for value in fields[1:]]
|
||||||
|
return sum(values), values[3] + values[4]
|
||||||
|
|
||||||
|
before = totals()
|
||||||
|
time.sleep(2.0)
|
||||||
|
after = totals()
|
||||||
|
idle = 100.0 * (after[1] - before[1]) / max(1, after[0] - before[0])
|
||||||
|
return load_1m, idle
|
||||||
|
|
||||||
|
|
||||||
|
def run(strate: int, workers: int, version: str, phase: str, replicate: int) -> dict[str, object]:
|
||||||
|
binary, expected_stamp = BINARIES[version]
|
||||||
|
camera = ",".join(f"{value:.12f}" for value in CAMERAS[strate]) + ",0,0"
|
||||||
|
label = f"s{strate}-w{workers}-{version}-{phase}{replicate}"
|
||||||
|
log = OUT / f"{label}.log"
|
||||||
|
command = ["taskset", "-c", "0-11", "prlimit", "--as=6442450944", "--",
|
||||||
|
"timeout", "1740s", str(binary), str(DATA), "--world-assembler-prototype",
|
||||||
|
"--stream-benchmark", "--stream-pipeline", f"--workers={workers}",
|
||||||
|
"--clip-radius=3", "--max-clip-level=8", "--max-level=8",
|
||||||
|
f"--camera={camera}", "--profile-lod-work", "--stream-scheduler-policy=3",
|
||||||
|
"--recipe=surface-world"]
|
||||||
|
if version == "l140-native-fi":
|
||||||
|
command.append("--native-owner-fi")
|
||||||
|
started = time.monotonic()
|
||||||
|
with log.open("w", encoding="utf-8") as output:
|
||||||
|
proc = subprocess.run(command, cwd=ROOT, stdout=output,
|
||||||
|
stderr=subprocess.STDOUT, check=False, timeout=1740)
|
||||||
|
content = log.read_text(encoding="utf-8", errors="replace")
|
||||||
|
pipeline, near, stamp = PIPELINE_RE.search(content), NEAR_RE.search(content), STAMP_RE.search(content)
|
||||||
|
if (proc.returncode or pipeline is None or near is None or stamp is None
|
||||||
|
or stamp.group(1) != expected_stamp):
|
||||||
|
raise SystemExit(f"L80 run failed or stamp mismatch: {log}; exit={proc.returncode}")
|
||||||
|
if version == "l140-native-fi" and not re.search(
|
||||||
|
r"^\[FloatingIslandWorldAssembly\].*dispatch=FloatingIslands-native .*status=PASS$",
|
||||||
|
content, re.M):
|
||||||
|
raise SystemExit(f"candidate timing did not bind native FloatingIslands: {log}")
|
||||||
|
fields = dict(FIELDS_RE.findall(pipeline.group(1)))
|
||||||
|
row = {"strate": strate, "workers": workers, "version": version,
|
||||||
|
"phase": phase, "replicate": replicate, "source_stamp": stamp.group(1),
|
||||||
|
"lod02_ready_s": float(near.group(3)),
|
||||||
|
"whole_view_ready_s": float(fields["whole_view_ready"].removesuffix("s")),
|
||||||
|
"whole_tiles": int(fields["whole_tiles"].split("/")[0]),
|
||||||
|
"wall_s": round(time.monotonic() - started, 3), "log": str(log.relative_to(ROOT))}
|
||||||
|
print("[L140TimingRun] " + json.dumps(row, sort_keys=True), flush=True)
|
||||||
|
return row
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
if any(not path.is_file() for path, _ in BINARIES.values()) or not DATA.is_file():
|
||||||
|
raise SystemExit("missing L80 timing binaries or owner fixture")
|
||||||
|
OUT.mkdir(parents=True, exist_ok=True)
|
||||||
|
load_1m, idle = quiet_machine()
|
||||||
|
(OUT / "machine-load-before.txt").write_text(
|
||||||
|
f"1-minute load: {load_1m:.2f}\n2-second CPU idle: {idle:.1f}%\n")
|
||||||
|
print(f"[L140TimingGate] load_1m={load_1m:.2f} cpu_idle_2s={idle:.1f}%", flush=True)
|
||||||
|
if load_1m >= 1.5 or idle < 97.0:
|
||||||
|
raise SystemExit("timing refused: machine is above the L80 quiet-load gate")
|
||||||
|
rows: list[dict[str, object]] = []
|
||||||
|
for strate in range(4):
|
||||||
|
for workers in (8, 12):
|
||||||
|
for version in BINARIES:
|
||||||
|
run(strate, workers, version, "warmup", 0)
|
||||||
|
for replicate in range(1, 6):
|
||||||
|
order = tuple(BINARIES)
|
||||||
|
order = order[replicate % len(order):] + order[:replicate % len(order)]
|
||||||
|
if replicate % 2 == 0:
|
||||||
|
order = tuple(reversed(order))
|
||||||
|
for version in order:
|
||||||
|
rows.append(run(strate, workers, version, "measured", replicate))
|
||||||
|
(OUT / "runs-partial.json").write_text(json.dumps(rows, indent=2) + "\n")
|
||||||
|
measured = [row for row in rows if row["phase"] == "measured"]
|
||||||
|
summary = []
|
||||||
|
for strate in range(4):
|
||||||
|
for workers in (8, 12):
|
||||||
|
group = [row for row in measured if row["strate"] == strate and row["workers"] == workers]
|
||||||
|
medians = {version: {key: statistics.median(
|
||||||
|
row[key] for row in group if row["version"] == version)
|
||||||
|
for key in ("lod02_ready_s", "whole_view_ready_s")} for version in BINARIES}
|
||||||
|
entry: dict[str, object] = {"strate": strate, "workers": workers,
|
||||||
|
"replicates_per_version": 5, "medians": medians}
|
||||||
|
for key in ("lod02_ready_s", "whole_view_ready_s"):
|
||||||
|
for baseline in ("head", "assembler-world"):
|
||||||
|
entry[f"l140_vs_{baseline}_{key}_delta_pct"] = round(
|
||||||
|
100.0 * (medians["l140-native-fi"][key] / medians[baseline][key] - 1.0), 2)
|
||||||
|
entry[f"l140_vs_{baseline}_{key}_paired_deltas_pct"] = [round(100.0 * (
|
||||||
|
next(row[key] for row in group if row["version"] == "l140-native-fi"
|
||||||
|
and row["replicate"] == replicate)
|
||||||
|
/ next(row[key] for row in group if row["version"] == baseline
|
||||||
|
and row["replicate"] == replicate) - 1.0), 3)
|
||||||
|
for replicate in range(1, 6)]
|
||||||
|
summary.append(entry)
|
||||||
|
result = {"a_a_noise_floor_pct": L140_AA_FLOOR_PCT,
|
||||||
|
"a_a_reference": "L137 same-binary median control; assembler/world source stamp",
|
||||||
|
"timing_protocol": "quiet machine; one warm-up per binary per cell; five interleaved measured runs; W8/W12; all four owner layers",
|
||||||
|
"machine": {"load_1m": load_1m, "cpu_idle_2s_pct": idle},
|
||||||
|
"source_stamps": {name: stamp for name, (_path, stamp) in BINARIES.items()},
|
||||||
|
"runs": rows, "summary": summary}
|
||||||
|
(OUT / "summary.json").write_text(json.dumps(result, indent=2) + "\n")
|
||||||
|
print(f"[L140TimingSummary] measured_runs={len(measured)} warmups=24 aa_floor_pct=1.0 status=PASS",
|
||||||
|
flush=True)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
{
|
||||||
|
"status": "PASS",
|
||||||
|
"source_stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"layout_identity": "resolved-layout-v3-fnv64:08da20d55ff6820f",
|
||||||
|
"runs": [
|
||||||
|
{
|
||||||
|
"compiler": "clang",
|
||||||
|
"workers": 1,
|
||||||
|
"exit": 0,
|
||||||
|
"source_stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"hash_lines": [
|
||||||
|
"[PipelineFullDetailHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineWholeViewHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineMaterialHash] tiles=512 material=0xc3cb5fcccf78f4ee",
|
||||||
|
"[PipelineLODHash] lod=0 tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineLODHash] lod=1 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=2 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=3 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=4 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=5 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=6 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=7 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=8 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineExactQueryHash] probes=9 density=0x74eac0457ddc2026 unclamped=0x74eac0457ddc2026 detail=0xefcba20c0c70c415 collision=0xdd5b083a1fa82cc7 path=direct-Core-queries"
|
||||||
|
],
|
||||||
|
"layout_identity": "resolved-layout-v3-fnv64:08da20d55ff6820f",
|
||||||
|
"native_fi_dispatch": true,
|
||||||
|
"native_plan_audits": true,
|
||||||
|
"passed": true,
|
||||||
|
"elapsed_s": 101.92,
|
||||||
|
"log": "Saved/Linux/l140/determinism/native-owner-fi-clang-w1.log",
|
||||||
|
"layout": "Saved/Linux/l140/determinism/native-owner-fi-clang-w1.json",
|
||||||
|
"floating_island_recipe_hash": "0b6a23bc73a3b867",
|
||||||
|
"passage_clearance_line": "[FloatingIslandPassageClearance] strate=1 tube_samples=5325 island_blocked=0 route_checks=676275 route_blocked=0 arrival_support=5/5 departure_support=5/5 clearance_excess_m=2.824 portal_exclusion_m=13.0 influence_reach_m=1.053 capsule_bound_m=0.880 status=PASS",
|
||||||
|
"route_audit_line": "[FloatingIslandRouteAudit] points=128 centers=911 capsule_samples=247792 blocked=0 support_samples=6961 unsupported=0 grade_failures=0 status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compiler": "clang",
|
||||||
|
"workers": 8,
|
||||||
|
"exit": 0,
|
||||||
|
"source_stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"hash_lines": [
|
||||||
|
"[PipelineFullDetailHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineWholeViewHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineMaterialHash] tiles=512 material=0xc3cb5fcccf78f4ee",
|
||||||
|
"[PipelineLODHash] lod=0 tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineLODHash] lod=1 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=2 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=3 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=4 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=5 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=6 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=7 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=8 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineExactQueryHash] probes=9 density=0x74eac0457ddc2026 unclamped=0x74eac0457ddc2026 detail=0xefcba20c0c70c415 collision=0xdd5b083a1fa82cc7 path=direct-Core-queries"
|
||||||
|
],
|
||||||
|
"layout_identity": "resolved-layout-v3-fnv64:08da20d55ff6820f",
|
||||||
|
"native_fi_dispatch": true,
|
||||||
|
"native_plan_audits": true,
|
||||||
|
"passed": true,
|
||||||
|
"elapsed_s": 68.892,
|
||||||
|
"log": "Saved/Linux/l140/determinism/native-owner-fi-clang-w8.log",
|
||||||
|
"layout": "Saved/Linux/l140/determinism/native-owner-fi-clang-w8.json",
|
||||||
|
"floating_island_recipe_hash": "0b6a23bc73a3b867",
|
||||||
|
"passage_clearance_line": "[FloatingIslandPassageClearance] strate=1 tube_samples=5325 island_blocked=0 route_checks=676275 route_blocked=0 arrival_support=5/5 departure_support=5/5 clearance_excess_m=2.824 portal_exclusion_m=13.0 influence_reach_m=1.053 capsule_bound_m=0.880 status=PASS",
|
||||||
|
"route_audit_line": "[FloatingIslandRouteAudit] points=128 centers=911 capsule_samples=247792 blocked=0 support_samples=6961 unsupported=0 grade_failures=0 status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compiler": "clang",
|
||||||
|
"workers": 12,
|
||||||
|
"exit": 0,
|
||||||
|
"source_stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"hash_lines": [
|
||||||
|
"[PipelineFullDetailHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineWholeViewHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineMaterialHash] tiles=512 material=0xc3cb5fcccf78f4ee",
|
||||||
|
"[PipelineLODHash] lod=0 tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineLODHash] lod=1 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=2 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=3 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=4 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=5 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=6 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=7 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=8 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineExactQueryHash] probes=9 density=0x74eac0457ddc2026 unclamped=0x74eac0457ddc2026 detail=0xefcba20c0c70c415 collision=0xdd5b083a1fa82cc7 path=direct-Core-queries"
|
||||||
|
],
|
||||||
|
"layout_identity": "resolved-layout-v3-fnv64:08da20d55ff6820f",
|
||||||
|
"native_fi_dispatch": true,
|
||||||
|
"native_plan_audits": true,
|
||||||
|
"passed": true,
|
||||||
|
"elapsed_s": 68.96,
|
||||||
|
"log": "Saved/Linux/l140/determinism/native-owner-fi-clang-w12.log",
|
||||||
|
"layout": "Saved/Linux/l140/determinism/native-owner-fi-clang-w12.json",
|
||||||
|
"floating_island_recipe_hash": "0b6a23bc73a3b867",
|
||||||
|
"passage_clearance_line": "[FloatingIslandPassageClearance] strate=1 tube_samples=5325 island_blocked=0 route_checks=676275 route_blocked=0 arrival_support=5/5 departure_support=5/5 clearance_excess_m=2.824 portal_exclusion_m=13.0 influence_reach_m=1.053 capsule_bound_m=0.880 status=PASS",
|
||||||
|
"route_audit_line": "[FloatingIslandRouteAudit] points=128 centers=911 capsule_samples=247792 blocked=0 support_samples=6961 unsupported=0 grade_failures=0 status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compiler": "gcc",
|
||||||
|
"workers": 1,
|
||||||
|
"exit": 0,
|
||||||
|
"source_stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"hash_lines": [
|
||||||
|
"[PipelineFullDetailHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineWholeViewHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineMaterialHash] tiles=512 material=0xc3cb5fcccf78f4ee",
|
||||||
|
"[PipelineLODHash] lod=0 tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineLODHash] lod=1 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=2 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=3 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=4 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=5 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=6 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=7 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=8 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineExactQueryHash] probes=9 density=0x74eac0457ddc2026 unclamped=0x74eac0457ddc2026 detail=0xefcba20c0c70c415 collision=0xdd5b083a1fa82cc7 path=direct-Core-queries"
|
||||||
|
],
|
||||||
|
"layout_identity": "resolved-layout-v3-fnv64:08da20d55ff6820f",
|
||||||
|
"native_fi_dispatch": true,
|
||||||
|
"native_plan_audits": true,
|
||||||
|
"passed": true,
|
||||||
|
"elapsed_s": 100.676,
|
||||||
|
"log": "Saved/Linux/l140/determinism/native-owner-fi-gcc-w1.log",
|
||||||
|
"layout": "Saved/Linux/l140/determinism/native-owner-fi-gcc-w1.json",
|
||||||
|
"floating_island_recipe_hash": "0b6a23bc73a3b867",
|
||||||
|
"passage_clearance_line": "[FloatingIslandPassageClearance] strate=1 tube_samples=5325 island_blocked=0 route_checks=676275 route_blocked=0 arrival_support=5/5 departure_support=5/5 clearance_excess_m=2.824 portal_exclusion_m=13.0 influence_reach_m=1.053 capsule_bound_m=0.880 status=PASS",
|
||||||
|
"route_audit_line": "[FloatingIslandRouteAudit] points=128 centers=911 capsule_samples=247792 blocked=0 support_samples=6961 unsupported=0 grade_failures=0 status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compiler": "gcc",
|
||||||
|
"workers": 8,
|
||||||
|
"exit": 0,
|
||||||
|
"source_stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"hash_lines": [
|
||||||
|
"[PipelineFullDetailHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineWholeViewHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineMaterialHash] tiles=512 material=0xc3cb5fcccf78f4ee",
|
||||||
|
"[PipelineLODHash] lod=0 tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineLODHash] lod=1 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=2 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=3 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=4 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=5 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=6 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=7 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=8 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineExactQueryHash] probes=9 density=0x74eac0457ddc2026 unclamped=0x74eac0457ddc2026 detail=0xefcba20c0c70c415 collision=0xdd5b083a1fa82cc7 path=direct-Core-queries"
|
||||||
|
],
|
||||||
|
"layout_identity": "resolved-layout-v3-fnv64:08da20d55ff6820f",
|
||||||
|
"native_fi_dispatch": true,
|
||||||
|
"native_plan_audits": true,
|
||||||
|
"passed": true,
|
||||||
|
"elapsed_s": 70.398,
|
||||||
|
"log": "Saved/Linux/l140/determinism/native-owner-fi-gcc-w8.log",
|
||||||
|
"layout": "Saved/Linux/l140/determinism/native-owner-fi-gcc-w8.json",
|
||||||
|
"floating_island_recipe_hash": "0b6a23bc73a3b867",
|
||||||
|
"passage_clearance_line": "[FloatingIslandPassageClearance] strate=1 tube_samples=5325 island_blocked=0 route_checks=676275 route_blocked=0 arrival_support=5/5 departure_support=5/5 clearance_excess_m=2.824 portal_exclusion_m=13.0 influence_reach_m=1.053 capsule_bound_m=0.880 status=PASS",
|
||||||
|
"route_audit_line": "[FloatingIslandRouteAudit] points=128 centers=911 capsule_samples=247792 blocked=0 support_samples=6961 unsupported=0 grade_failures=0 status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compiler": "gcc",
|
||||||
|
"workers": 12,
|
||||||
|
"exit": 0,
|
||||||
|
"source_stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"hash_lines": [
|
||||||
|
"[PipelineFullDetailHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineWholeViewHash] tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineMaterialHash] tiles=512 material=0xc3cb5fcccf78f4ee",
|
||||||
|
"[PipelineLODHash] lod=0 tiles=512 density=0xe10ac12305f1dbc0 mesh=0x822e56e8f5bfa6f0 payload=0x0be1f08906997251 topology=0x650bbeb9e554d390",
|
||||||
|
"[PipelineLODHash] lod=1 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=2 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=3 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=4 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=5 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=6 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=7 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineLODHash] lod=8 tiles=0 density=0xcbf29ce484222325 mesh=0xcbf29ce484222325 payload=0xcbf29ce484222325 topology=0xcbf29ce484222325",
|
||||||
|
"[PipelineExactQueryHash] probes=9 density=0x74eac0457ddc2026 unclamped=0x74eac0457ddc2026 detail=0xefcba20c0c70c415 collision=0xdd5b083a1fa82cc7 path=direct-Core-queries"
|
||||||
|
],
|
||||||
|
"layout_identity": "resolved-layout-v3-fnv64:08da20d55ff6820f",
|
||||||
|
"native_fi_dispatch": true,
|
||||||
|
"native_plan_audits": true,
|
||||||
|
"passed": true,
|
||||||
|
"elapsed_s": 69.061,
|
||||||
|
"log": "Saved/Linux/l140/determinism/native-owner-fi-gcc-w12.log",
|
||||||
|
"layout": "Saved/Linux/l140/determinism/native-owner-fi-gcc-w12.json",
|
||||||
|
"floating_island_recipe_hash": "0b6a23bc73a3b867",
|
||||||
|
"passage_clearance_line": "[FloatingIslandPassageClearance] strate=1 tube_samples=5325 island_blocked=0 route_checks=676275 route_blocked=0 arrival_support=5/5 departure_support=5/5 clearance_excess_m=2.824 portal_exclusion_m=13.0 influence_reach_m=1.053 capsule_bound_m=0.880 status=PASS",
|
||||||
|
"route_audit_line": "[FloatingIslandRouteAudit] points=128 centers=911 capsule_samples=247792 blocked=0 support_samples=6961 unsupported=0 grade_failures=0 status=PASS"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"world_assembly_evaluator_version": 239,
|
||||||
|
"floating_island_geometry_version": 10,
|
||||||
|
"native_dispatch": "FloatingIslands-native",
|
||||||
|
"route_and_clearance_baseline": {
|
||||||
|
"route_audit": "[FloatingIslandRouteAudit] points=128 centers=... status=PASS",
|
||||||
|
"passage_clearance": "[FloatingIslandPassageClearance] strate=1 tube_samples=5325 island_blocked=0 route_checks=676275 route_blocked=0 arrival_support=5/5 departure_support=5/5 clearance_excess_m=2.824 portal_exclusion_m=13.0 influence_reach_m=1.053 capsule_bound_m=0.880 status=PASS",
|
||||||
|
"note": "The six identical hash/layout rows are the concrete baselines; route point counts differ by seed only in other sweep cases."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,229 @@
|
|||||||
|
{
|
||||||
|
"seed": 0,
|
||||||
|
"source_stamp": "6205e6c180ef32c41792dc3e0d8bf443a96df41974f40334af4bf3a157ab88da",
|
||||||
|
"before_stamp": "b8603b6cb3975ca0f9669759e4e2464561c557fdb7aa6836acef123ecf0b99d1",
|
||||||
|
"views_per_phase": 5,
|
||||||
|
"all_quality_pass": true,
|
||||||
|
"captures": [
|
||||||
|
{
|
||||||
|
"phase": "after",
|
||||||
|
"view": "arrival-mouth",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/after-arrival-mouth.jpg",
|
||||||
|
"bytes": 20205,
|
||||||
|
"camera_m": [
|
||||||
|
23.77218612173332,
|
||||||
|
4.6087926326387905,
|
||||||
|
-735.55
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
32.44404347295337,
|
||||||
|
-1.3114176744441277,
|
||||||
|
-735.55
|
||||||
|
],
|
||||||
|
"yaw_deg": 124.32105280346487,
|
||||||
|
"pitch_deg": 0.0,
|
||||||
|
"fov_deg": 78.0,
|
||||||
|
"note": "player eye at the fixed 0-1 arrival mouth",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/after-arrival-mouth.jpg pixels=921600 mean_luma=111.598 stddev_luma=5.081 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "after",
|
||||||
|
"view": "departure-mouth",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/after-departure-mouth.jpg",
|
||||||
|
"bytes": 23901,
|
||||||
|
"camera_m": [
|
||||||
|
21.556817528943192,
|
||||||
|
-14.930993681478485,
|
||||||
|
-730.751171875
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
11.51544953238179,
|
||||||
|
-11.861640531768845,
|
||||||
|
-730.751171875
|
||||||
|
],
|
||||||
|
"yaw_deg": -73.00313688448165,
|
||||||
|
"pitch_deg": 0.0,
|
||||||
|
"fov_deg": 78.0,
|
||||||
|
"note": "player eye approaching the fixed 1-2 departure mouth",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/after-departure-mouth.jpg pixels=921600 mean_luma=112.186 stddev_luma=5.529 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "after",
|
||||||
|
"view": "island-edge",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/after-island-edge.jpg",
|
||||||
|
"bytes": 19984,
|
||||||
|
"camera_m": [
|
||||||
|
47.84242754056169,
|
||||||
|
-19.331304817383565,
|
||||||
|
-734.4728515625
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
54.57926831575571,
|
||||||
|
-16.75934518129221,
|
||||||
|
-735.5728515625
|
||||||
|
],
|
||||||
|
"yaw_deg": 69.10437717375885,
|
||||||
|
"pitch_deg": -8.673184187101441,
|
||||||
|
"fov_deg": 78.0,
|
||||||
|
"note": "player eye beside the route on an island edge",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/after-island-edge.jpg pixels=921600 mean_luma=114.169 stddev_luma=8.688 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "after",
|
||||||
|
"view": "walk-between-islands",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/after-walk-between-islands.jpg",
|
||||||
|
"bytes": 20752,
|
||||||
|
"camera_m": [
|
||||||
|
64.3971173756484,
|
||||||
|
-22.884388870806152,
|
||||||
|
-733.137890625
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
53.12109375,
|
||||||
|
-24.2802734375,
|
||||||
|
-734.537109375
|
||||||
|
],
|
||||||
|
"yaw_deg": -97.05687302971492,
|
||||||
|
"pitch_deg": -7.020510748634912,
|
||||||
|
"fov_deg": 78.0,
|
||||||
|
"note": "player eye looking from one route landing toward the next island",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/after-walk-between-islands.jpg pixels=921600 mean_luma=111.849 stddev_luma=7.186 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "after",
|
||||||
|
"view": "wide-silhouette",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/after-wide-silhouette.jpg",
|
||||||
|
"bytes": 22894,
|
||||||
|
"camera_m": [
|
||||||
|
41.099609375,
|
||||||
|
8.620008680555555,
|
||||||
|
-725.6368272569445
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
41.099609375,
|
||||||
|
-14.379991319444445,
|
||||||
|
-735.6368272569445
|
||||||
|
],
|
||||||
|
"yaw_deg": 180.0,
|
||||||
|
"pitch_deg": -23.498565675952097,
|
||||||
|
"fov_deg": 72.0,
|
||||||
|
"note": "wide side view showing the island chain silhouette",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/after-wide-silhouette.jpg pixels=921600 mean_luma=116.109 stddev_luma=7.003 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "before",
|
||||||
|
"view": "arrival-mouth",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/before-arrival-mouth.jpg",
|
||||||
|
"bytes": 13808,
|
||||||
|
"camera_m": [
|
||||||
|
23.77218612173332,
|
||||||
|
4.6087926326387905,
|
||||||
|
-735.55
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
32.44404347295337,
|
||||||
|
-1.3114176744441277,
|
||||||
|
-735.55
|
||||||
|
],
|
||||||
|
"yaw_deg": 124.32105280346487,
|
||||||
|
"pitch_deg": 0.0,
|
||||||
|
"fov_deg": 78.0,
|
||||||
|
"note": "player eye at the fixed 0-1 arrival mouth",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/before-arrival-mouth.jpg pixels=921600 mean_luma=132.078 stddev_luma=8.080 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "before",
|
||||||
|
"view": "departure-mouth",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/before-departure-mouth.jpg",
|
||||||
|
"bytes": 17309,
|
||||||
|
"camera_m": [
|
||||||
|
21.556817528943192,
|
||||||
|
-14.930993681478485,
|
||||||
|
-730.751171875
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
11.51544953238179,
|
||||||
|
-11.861640531768845,
|
||||||
|
-730.751171875
|
||||||
|
],
|
||||||
|
"yaw_deg": -73.00313688448165,
|
||||||
|
"pitch_deg": 0.0,
|
||||||
|
"fov_deg": 78.0,
|
||||||
|
"note": "player eye approaching the fixed 1-2 departure mouth",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/before-departure-mouth.jpg pixels=921600 mean_luma=118.383 stddev_luma=9.908 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "before",
|
||||||
|
"view": "island-edge",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/before-island-edge.jpg",
|
||||||
|
"bytes": 15208,
|
||||||
|
"camera_m": [
|
||||||
|
47.84242754056169,
|
||||||
|
-19.331304817383565,
|
||||||
|
-734.4728515625
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
54.57926831575571,
|
||||||
|
-16.75934518129221,
|
||||||
|
-735.5728515625
|
||||||
|
],
|
||||||
|
"yaw_deg": 69.10437717375885,
|
||||||
|
"pitch_deg": -8.673184187101441,
|
||||||
|
"fov_deg": 78.0,
|
||||||
|
"note": "player eye beside the route on an island edge",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/before-island-edge.jpg pixels=921600 mean_luma=109.945 stddev_luma=4.383 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "before",
|
||||||
|
"view": "walk-between-islands",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/before-walk-between-islands.jpg",
|
||||||
|
"bytes": 15126,
|
||||||
|
"camera_m": [
|
||||||
|
64.3971173756484,
|
||||||
|
-22.884388870806152,
|
||||||
|
-733.137890625
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
53.12109375,
|
||||||
|
-24.2802734375,
|
||||||
|
-734.537109375
|
||||||
|
],
|
||||||
|
"yaw_deg": -97.05687302971492,
|
||||||
|
"pitch_deg": -7.020510748634912,
|
||||||
|
"fov_deg": 78.0,
|
||||||
|
"note": "player eye looking from one route landing toward the next island",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/before-walk-between-islands.jpg pixels=921600 mean_luma=110.305 stddev_luma=4.132 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"phase": "before",
|
||||||
|
"view": "wide-silhouette",
|
||||||
|
"file": "Standalone/Research/WorldAssemblerM3/Linux140/captures/before-wide-silhouette.jpg",
|
||||||
|
"bytes": 15268,
|
||||||
|
"camera_m": [
|
||||||
|
41.099609375,
|
||||||
|
8.620008680555555,
|
||||||
|
-725.6368272569445
|
||||||
|
],
|
||||||
|
"target_m": [
|
||||||
|
41.099609375,
|
||||||
|
-14.379991319444445,
|
||||||
|
-735.6368272569445
|
||||||
|
],
|
||||||
|
"yaw_deg": 180.0,
|
||||||
|
"pitch_deg": -23.498565675952097,
|
||||||
|
"fov_deg": 72.0,
|
||||||
|
"note": "wide side view showing the island chain silhouette",
|
||||||
|
"quality_status": "PASS",
|
||||||
|
"quality": "[CaptureQuality] image=/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux140/captures/before-wide-silhouette.jpg pixels=921600 mean_luma=114.186 stddev_luma=3.531 coverage_luma_gt12=1.00000 thresholds=(stddev>=2.0,coverage>=0.001) status=PASS"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||