Files
ARCADIA-Studio/harness/experiments/text-navigation-native-20260911/corrections/finalize.py
T

81 lines
3.5 KiB
Python

"""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))