"""Verify frozen gate receipts and source ZIP; never infer a native/full-suite pass.""" import datetime import hashlib import json from pathlib import Path import re import sys import zipfile base = Path(__file__).resolve().parent root = base.parents[1] inputs, focused, clippy = sys.argv[1:] assert re.fullmatch(r"inputs[0-9]+", inputs) assert re.fullmatch(r"focused[0-9]+", focused) assert re.fullmatch(r"clippy[0-9]+", clippy) def read(name): return json.loads((base / name).read_text(encoding="utf-8-sig")) def sha(raw): return hashlib.sha256(raw).hexdigest() manifest = read(inputs + ".json") readback = read(inputs + "-readback.json") assert readback["passed"] and not any(readback[k] for k in ("changed", "added", "removed")) archive = base / (inputs + ".zip") assert sha(archive.read_bytes()) == manifest["archiveSha256"] expected = {item["path"]: item for item in manifest["files"]} with zipfile.ZipFile(archive) as bundle: assert len(bundle.infolist()) == len(expected) assert set(bundle.namelist()) == set(expected) for path, item in expected.items(): raw = bundle.read(path) assert len(raw) == item["bytes"] and sha(raw) == item["sha256"], path assert (root / path).read_bytes() == raw, path gates = {name: read(name + "-status.json") for name in (focused, clippy)} assert all(gate["exitCode"] == 0 for gate in gates.values()) log = (base / (focused + ".log")).read_text(encoding="utf-8-sig") match = re.search(r"test result: ok\. (\d+) passed; (\d+) failed; (\d+) ignored; (\d+) measured; (\d+) filtered out; finished in ([0-9.]+)s", log) assert match, "No executed successful Rust test summary" counts = dict(zip(("passed", "failed", "ignored", "measured", "filtered"), map(int, match.groups()[:5]))) assert counts["failed"] == 0 required = [ "closed_results_stay_closed_on_exact_back_and_reopen_only_for_a_return_notice", "find_only_captured_escape_closes_once_and_preserves_raw_query_and_selection", "old_find_close_cannot_cancel_a_new_file_session_or_reopened_find_intent", "find_close_releases_removed_input_and_guarded_focus_respects_later_input", "source_header_keeps_editor_bounds_stable_through_lint_and_find_rebuilds", "source_header_remains_scrollable_and_preserves_offset_across_diagnostic_refresh", "source_editor_windows_menu_payload_is_inert_but_space_and_altgr_still_edit", ] for name in required: assert re.search(r"test [^\r\n]*::" + re.escape(name) + r" \.\.\. ok", log), name owned = ["crates/oa-desktop/src/" + path for path in ( "views.rs", "app.rs", "app/source_symbols.rs", "app/source_symbols/tests.rs" )] result = { "atUtc": datetime.datetime.now(datetime.timezone.utc).isoformat(), "scope": "Focused Windows desktop tests and strict all-target Clippy only; no corrected GUI, native OS payload, full desktop suite, Linux, or release acceptance.", "sourceHead": manifest["head"], "uncommittedOwnedInputs": [expected[path] for path in owned], "inputs": inputs, "inputFiles": len(expected), "inputBytes": sum(item["bytes"] for item in expected.values()), "archiveSha256": manifest["archiveSha256"], "sourceZipAndCurrentBytesMatch": True, "gates": gates, "tests": counts, "testExecutionSeconds": float(match.group(6)), "requiredRegressionTestsPassed": required, } with (base / "final-gate-result.json").open("x", encoding="utf-8", newline="\n") as stream: json.dump(result, stream, indent=2, ensure_ascii=False) stream.write("\n") print(json.dumps(result, ensure_ascii=False, indent=2))