{"record":{"id":"cc0eda95bdadd5b4","repo":"abhigyanpatwari/GitNexus","slug":"promotion-binding-uses-an-unsupported-schema","errorCode":null,"errorMessage":"promotion binding uses an unsupported schema","messagePattern":"promotion binding uses an unsupported schema","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/evolve.py","lineNumber":686,"sourceCode":"        env[\"GITNEXUS_BENCH_AUTH_TOKEN\"] = args.auth_token\n    return env\n\n\ndef validate_promotion_for_apply(\n    promotion: dict[str, Any],\n    *,\n    overlay_digest: str,\n    benchmark_model: str,\n    proposer_model: str | None,\n    selected_tasks: list[dict[str, Any]],\n    target_base_digests: dict[str, str],\n    required_candidate_arms: list[str],\n    policy: dict[str, Any],\n    now: datetime | None = None,\n) -> list[dict[str, Any]]:\n    \"\"\"Require one complete, current, exact evidence binding before apply.\"\"\"\n    if promotion.get(\"schema_version\") != 3:\n        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\")","sourceCodeStart":668,"sourceCodeEnd":704,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/evolve.py#L668-L704","documentation":"Raised by `validate_promotion_for_apply` when the promotion binding's `schema_version` is not 3. Promotion application requires the current evidence-binding schema; older or missing versions are refused before any canonical skill is touched.","triggerScenarios":"Calling `validate_promotion_for_apply(promotion, ...)` where `promotion['schema_version']` is absent, 1, 2, or any non-3 value. `promotion` is loaded from a run's promotion.json.","commonSituations":"Applying a promotion.json produced by an older workflow_bench version (schema 1/2), a hand-written promotion.json, or a results dir whose promotion.json predates the v3 binding.","solutions":["Regenerate the promotion.json with the current workflow_bench version so it emits schema_version 3.","If you must apply old evidence, re-run the benchmark/evolution loop to produce a fresh v3 promotion.json.","Never hand-author a promotion.json; the validator also checks digests, bindings, and timestamps."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if promotion.get('schema_version') != 3:\n    raise ValueError(f'promotion schema_version must be 3, got {promotion.get(\"schema_version\")!r}')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Promotion.json is version-coupled to the evolve/runner that produced it; regenerate on upgrade."],"tags":["python","workflow-bench","promotion","schema","validation"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}