File size: 1,869 Bytes
ed1d39f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def test_worker_has_pi_diagnosis_before_patch_protocol():
worker = (ROOT / "src" / "worker_payload.py").read_text()
assert "BLOCKAGE DIAGNOSIS MODE" in worker
assert "INCIDENT_BRIEF.md" in worker
assert "PI_DIAGNOSIS_GOAL.md" in worker
assert "REPAIR_DECISION.json" in worker
assert "diagnose_failure_with_pi" in worker
assert "recover_after_live_validation_failure" in worker
def test_worker_allowed_actions_and_empty_logs_guardrails():
worker = (ROOT / "src" / "worker_payload.py").read_text()
for action in [
"wait_for_logs",
"inspect_more_logs",
"factory_rebuild_same_code",
"patch_code",
"request_manual_hardware",
"declare_technical_blocker",
]:
assert action in worker
assert "patch_code_blocked_without_actionable_logs" in worker
assert "Logs are not actionable" in worker
assert "Re-uploading the same workspace to force a same-code Space rebuild" in worker
def test_patch_repair_is_only_after_decision():
worker = (ROOT / "src" / "worker_payload.py").read_text()
assert "This patch is allowed only because the diagnosis decision selected `patch_code`" in worker
assert "patch_allowed" in worker
assert "Pi diagnosis allows a minimal code patch" in worker
def test_progress_knows_blockage_protocol_steps():
py = (ROOT / "src" / "progress.py").read_text()
js = (ROOT / "web" / "static" / "progress.js").read_text()
for step in [
"failure_detected",
"failure_diagnosis",
"pi_diagnosis",
"repair_decision",
"wait_for_logs",
"factory_rebuild",
"technical_blocker",
"manual_hardware_required",
]:
assert step in py
assert step in js
assert "Repair recovery" in js
|