{"record":{"id":"7c40a5ab058ee42e","repo":"abhigyanpatwari/GitNexus","slug":"promotion-binding-is-missing-hidden-oracle-files","errorCode":null,"errorMessage":"promotion binding is missing hidden-oracle files","messagePattern":"promotion binding is missing hidden-oracle files","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/evolve.py","lineNumber":704,"sourceCode":"        raise ValueError(\"promotion binding uses an unsupported schema\")\n    sha256_pattern = re.compile(r\"[0-9a-f]{64}\")\n    if not selected_tasks:\n        raise ValueError(\"promotion binding has no selected tasks\")\n    for task in selected_tasks:\n        if not isinstance(task, dict) or any(\n            not isinstance(task.get(field), str) or sha256_pattern.fullmatch(task[field]) is None\n            for field in (\n                \"oracle_digest\",\n                \"oracle_command_digest\",\n                \"oracle_manifest_digest\",\n                \"sandbox_dependency_content_digest\",\n                \"sandbox_dependency_manifest_digest\",\n            )\n        ):\n            raise ValueError(\"promotion binding is missing hidden-oracle or dependency digests\")\n        oracle_files = task.get(\"oracle_files\")\n        if not isinstance(oracle_files, list) or not oracle_files:\n            raise ValueError(\"promotion binding is missing hidden-oracle files\")\n        for item in oracle_files:\n            if (\n                not isinstance(item, dict)\n                or not isinstance(item.get(\"target\"), str)\n                or not item[\"target\"]\n                or not isinstance(item.get(\"sha256\"), str)\n                or sha256_pattern.fullmatch(item[\"sha256\"]) is None\n                or not isinstance(item.get(\"size\"), int)\n                or isinstance(item.get(\"size\"), bool)\n                or item[\"size\"] < 0\n            ):\n                raise ValueError(\"promotion binding contains malformed hidden-oracle file evidence\")\n    expected_bindings = {\n        \"benchmark_model\": benchmark_model,\n        \"proposer_model\": proposer_model,\n        \"candidate_origin\": \"model-proposer\" if proposer_model is not None else \"manual-initial-overlay\",\n        \"candidate_overlay_digest\": overlay_digest,\n        \"required_candidate_arms\": required_candidate_arms,","sourceCodeStart":686,"sourceCodeEnd":722,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/evolve.py#L686-L722","documentation":"Raised by `validate_promotion_for_apply` when a selected task's `oracle_files` is missing, not a list, or empty. Each task must list at least one hidden-oracle file (with target, sha256, size) so apply can verify the oracle was intact.","triggerScenarios":"Calling `validate_promotion_for_apply(..., selected_tasks=[...])` where a task has no `oracle_files` key, `oracle_files: null`, or an empty list.","commonSituations":"A task definition with no oracle files, a promotion.json from a run where oracle file capture failed, or a task whose oracle_files were stripped.","solutions":["Ensure every selected task's promotion.json entry has a non-empty oracle_files list.","Re-run the benchmark so the runner records the oracle files for each task.","Fix or remove tasks that legitimately have no oracle files (promotion requires them)."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"for i, t in enumerate(selected_tasks):\n    of = t.get('oracle_files')\n    if not isinstance(of, list) or not of:\n        raise ValueError(f'selected task {i} has no hidden-oracle files')","typeGuard":"def has_oracle_files(task: dict) -> bool:\n    of = task.get('oracle_files')\n    return isinstance(of, list) and len(of) > 0","tryCatchPattern":null,"preventionTips":["Promotion requires >=1 hidden-oracle file per task; verify capture before apply."],"tags":["python","workflow-bench","promotion","oracle","validation"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}