All courses · Course overview · Lesson sequence
Skip to lesson textcapstone/starter.py
"""Runnable learner driver. Implement the two decision helpers; no live actions."""
import hashlib
import json
from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "project"))
import opslab
def blocking_reasons(evidence: dict) -> list[str]:
"""Apply every condition in capstone/BRIEF.md; missing evidence blocks.
Return sorted reason strings; do not mutate supplied evidence.
"""
raise NotImplementedError("Complete the cross-layer decision")
def recommend(evidence: dict) -> dict:
"""Return decision, blocking_reasons, recovery_required, live_authorization.
A pass is PASS_SIMULATION only. Live authorization is always False.
"""
raise NotImplementedError("Complete the bounded recommendation")
def main() -> int:
evidence = opslab.capstone_evidence(opslab.load())
try:
decision = recommend(evidence)
except NotImplementedError as error:
print(json.dumps({"status": "starter_incomplete", "message": str(error),
"evidence_kind": evidence["evidence_kind"], "live_authorization": False,
"holdout_route_decision": evidence["route"]["decision"]}, indent=2))
return 3
print(json.dumps({"recommendation": decision, "evidence": evidence,
"decision_code_sha256": hashlib.sha256(Path(__file__).read_bytes()).hexdigest()},
indent=2, sort_keys=True, allow_nan=False))
return 0
if __name__ == "__main__":
raise SystemExit(main())