search-with-proof: split compressed verifier archives, isolated pip installs, verifier module paths

Archives are gzipped and uploaded in parts of at most 90 MB with per-part
digests (edge request limit); pip installs ignore the task venv so transitive
dependencies land in products; the verifier sets NODE_PATH and the Java
classpath from products when starting the app.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
Marius Ciepluch
2026-10-06 11:15:09 +02:00
co-authored by Claude Fable 5.1
parent da804472b9
commit 0d3e6df31c
13 changed files with 437 additions and 44 deletions
+15 -1
View File
@@ -536,7 +536,9 @@ def test_pilot_executor_deletes_task_when_submit_times_out(tmp_path, monkeypatch
with pytest.raises(TimeoutError, match="upload deadline"), pilot.executor("a" * 40, deadline=60) as session:
session.client.submit("list_files", {})
assert calls[-1][0][:2] == ("delete", "task")
assert len(deleted) == 4
from openultrasast.search.verify_task import MAX_PARTS
assert len(deleted) == 4 + MAX_PARTS
assert pilot.record["executor_task_metrics"][-1]["end"] == "execution_failure"
@@ -593,3 +595,15 @@ def test_ax_pilot_uses_verification_task_limits_for_deadline(tmp_path, monkeypat
assert captured == [17]
assert deadlines == [17 * (len(schema["steps"]) + 1) + 65]
assert pilot.lane.workload is None
def test_verify_failure_reason_is_last_300_stderr_characters(tmp_path):
from openultrasast.search.verify import SideRecord
pilot = make_pilot(tmp_path)
stderr = "Traceback:\n" + "middle of traceback " * 200 + "\nModuleNotFoundError: No module named 'sniffio'"
side = SideRecord("could_not_run", (), 0, "app readiness failed", phase="start", exit_code=1, stderr=stderr)
pilot.failure("verify/could_not_run", side.reason, side)
failure = pilot.record["failures"][-1]
assert failure["reason"] == stderr[-300:]
assert failure["reason"].endswith("ModuleNotFoundError: No module named 'sniffio'")