research: headroom-only landings, band fit, bore exemption (L156; last landing round, kept as patch)
Band fit works (all chambers inside host bands, 16/16 seeds both sweeps); chamber support exemption + open-floor control work; found a metres/subvoxel mix in the shell-opening predicate. Still fails: upper landing evaluated grade 22.85 deg over native ground; TN and VS sweeps 0/16; UE 30 m/s near coverage 39.0% vs 45.5%. Owner: stop forcing landings after this round. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
63d774bae2
commit
a751a01b11
26 files changed
+2673
No files matched your search
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Recompute the full 16-seed sweep summaries and landing band margins."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from PassageEnvelopeAudit import _landing_content_band_audit
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[4]
|
||||
OUT = ROOT / "Saved/Linux/l156/seeds"
|
||||
|
||||
|
||||
def finalize(kind: str) -> dict:
|
||||
directory = OUT / kind
|
||||
partial = directory / "runs-partial.json"
|
||||
results = json.loads(partial.read_text(encoding="utf-8")) if partial.is_file() else []
|
||||
for row in results:
|
||||
layout_path = ROOT / row["layout"]
|
||||
bands = _landing_content_band_audit(
|
||||
json.loads(layout_path.read_text(encoding="utf-8"))) if layout_path.is_file() else []
|
||||
band_pass = len(bands) == 6 and all(entry["passed"] for entry in bands)
|
||||
envelope = row.get("envelope_audit") or {}
|
||||
envelope["landing_content_band"] = bands
|
||||
envelope["landing_content_band_passed"] = band_pass
|
||||
envelope["passed"] = bool(envelope.get("passed") and band_pass)
|
||||
row["envelope_audit"] = envelope
|
||||
checks = row.setdefault("checks", {})
|
||||
checks["envelope"] = bool(envelope["passed"]
|
||||
and envelope.get("outside_chamber_conflicts") == 0)
|
||||
checks["envelope_negative_control"] = bool(
|
||||
envelope.get("negative_controls") == envelope.get("negative_controls_expected") == 1)
|
||||
checks["landing_content_band"] = band_pass
|
||||
failed = [name for name, passed in checks.items() if not passed]
|
||||
row["verdict"] = "PASS" if not failed else "FAIL"
|
||||
row["reason"] = ", ".join(failed) if failed else "all requested gates pass"
|
||||
results.sort(key=lambda row: row["seed"])
|
||||
completed = len(results)
|
||||
passed = sum(row["verdict"] == "PASS" for row in results)
|
||||
missing = sorted(set(range(16)) - {row["seed"] for row in results})
|
||||
summary = {"kind": kind, "source_stamp": (
|
||||
"4bf096c0a06f72eb765ff8785d55c00ded946ed1bd1f39fa1914b3658ceb61f0"),
|
||||
"completed": completed, "passed": passed, "failed": completed - passed,
|
||||
"missing_seeds": missing, "status": "PASS" if completed == 16 and passed == 16 else "FAIL",
|
||||
"results": results}
|
||||
partial.write_text(json.dumps(results, indent=2) + "\n", encoding="utf-8")
|
||||
(directory / "summary.json").write_text(json.dumps(summary, indent=2) + "\n",
|
||||
encoding="utf-8")
|
||||
print(f"[L156SeedSweepFinal] kind={kind} passed={passed}/{completed} "
|
||||
f"missing={len(missing)} status={summary['status']}")
|
||||
return summary
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--kind", choices=("tunnel-network", "vertical-shafts"), required=True)
|
||||
args = parser.parse_args()
|
||||
raise SystemExit(0 if finalize(args.kind)["status"] == "PASS" else 1)
|
||||
Reference in new issue
Block a user