{"record":{"id":"b65b0893730ccf7d","repo":"rohitg00/ai-engineering-from-scratch","slug":"override-requires-task-id-finding-code-reason-u","errorCode":null,"errorMessage":"override requires task_id, finding_code, reason, user_id, head_commit","messagePattern":"override requires task_id, finding_code, reason, user_id, head_commit","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"phases/14-agent-engineering/38-verification-gates/code/main.py","lineNumber":179,"sourceCode":"        passed=not blocking,\n        strict=strict,\n        findings=findings,\n        coverage=art.coverage_report,\n        head_commit=art.head_commit,\n    )\n\n\ndef _sign(payload: dict[str, object]) -> str:\n    canonical = json.dumps(payload, sort_keys=True, separators=(\",\", \":\")).encode()\n    return hmac.new(_load_override_secret().encode(), canonical, hashlib.sha256).hexdigest()[:32]\n\n\ndef record_override(\n    task_id: str, finding_code: str, reason: str, user_id: str, head_commit: str\n) -> dict[str, object]:\n    \"\"\"Append a signed override entry. Refuses without all five fields populated.\"\"\"\n    if not all([task_id, finding_code, reason, user_id, head_commit]):\n        raise ValueError(\"override requires task_id, finding_code, reason, user_id, head_commit\")\n    payload = {\n        \"task_id\": task_id,\n        \"finding_code\": finding_code,\n        \"reason\": reason,\n        \"user_id\": user_id,\n        \"head_commit\": head_commit,\n        \"ts\": time.time(),\n    }\n    payload[\"signature\"] = _sign({k: v for k, v in payload.items() if k != \"signature\"})\n    with OVERRIDES_PATH.open(\"a\") as fh:\n        fh.write(json.dumps(payload) + \"\\n\")\n    return payload\n\n\ndef verify_signature(entry: dict[str, object]) -> bool:\n    expected = entry.get(\"signature\")\n    payload = {k: v for k, v in entry.items() if k != \"signature\"}\n    return hmac.compare_digest(_sign(payload), str(expected))","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/14-agent-engineering/38-verification-gates/code/main.py#L161-L197","documentation":"Error \"override requires task_id, finding_code, reason, user_id, head_commit\" thrown in rohitg00/ai-engineering-from-scratch.","triggerScenarios":"Thrown at phases/14-agent-engineering/38-verification-gates/code/main.py:179 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","schemaVersion":2},"datasetVersion":"2026-08-26T07:17:17.940Z"}