abhigyanpatwari/GitNexus · error · ValueError
promotion binding is missing hidden-oracle or dependency dig
Error message
promotion binding is missing hidden-oracle or dependency digests
What it means
Raised by `validate_promotion_for_apply` when any selected task is not a dict, or any of its five digest fields (oracle_digest, oracle_command_digest, oracle_manifest_digest, sandbox_dependency_content_digest, sandbox_dependency_manifest_digest) is not a 64-hex-char SHA-256 string. These hidden-oracle and dependency digests pin exact evidence.
Source
Thrown at eval/workflow_bench/evolve.py:701
) -> list[dict[str, Any]]:
"""Require one complete, current, exact evidence binding before apply."""
if promotion.get("schema_version") != 3:
raise ValueError("promotion binding uses an unsupported schema")
sha256_pattern = re.compile(r"[0-9a-f]{64}")
if not selected_tasks:
raise ValueError("promotion binding has no selected tasks")
for task in selected_tasks:
if not isinstance(task, dict) or any(
not isinstance(task.get(field), str) or sha256_pattern.fullmatch(task[field]) is None
for field in (
"oracle_digest",
"oracle_command_digest",
"oracle_manifest_digest",
"sandbox_dependency_content_digest",
"sandbox_dependency_manifest_digest",
)
):
raise ValueError("promotion binding is missing hidden-oracle or dependency digests")
oracle_files = task.get("oracle_files")
if not isinstance(oracle_files, list) or not oracle_files:
raise ValueError("promotion binding is missing hidden-oracle files")
for item in oracle_files:
if (
not isinstance(item, dict)
or not isinstance(item.get("target"), str)
or not item["target"]
or not isinstance(item.get("sha256"), str)
or sha256_pattern.fullmatch(item["sha256"]) is None
or not isinstance(item.get("size"), int)
or isinstance(item.get("size"), bool)
or item["size"] < 0
):
raise ValueError("promotion binding contains malformed hidden-oracle file evidence")
expected_bindings = {
"benchmark_model": benchmark_model,
"proposer_model": proposer_model,View on GitHub (pinned to d540b00184)
Solutions
- Inspect each selected task's five digest fields and confirm each is a 64-char lowercase hex string.
- Re-run the benchmark ensuring oracle and sandbox-dependency assets are fully captured for every selected task.
- Drop tasks whose oracle/dependency digests cannot be produced, or fix the task definitions to include them.
Defensive patterns
Strategy: validation
Validate before calling
import re
pat = re.compile(r'[0-9a-f]{64}')
fields = ('oracle_digest','oracle_command_digest','oracle_manifest_digest','sandbox_dependency_content_digest','sandbox_dependency_manifest_digest')
for i, t in enumerate(selected_tasks):
if not isinstance(t, dict) or any(not isinstance(t.get(f), str) or pat.fullmatch(t[f]) is None for f in fields):
raise ValueError(f'selected task {i} missing valid hidden-oracle/dependency digests') Type guard
def has_valid_digests(task: dict) -> bool:
import re
pat = re.compile(r'[0-9a-f]{64}')
fields = ('oracle_digest','oracle_command_digest','oracle_manifest_digest','sandbox_dependency_content_digest','sandbox_dependency_manifest_digest')
return isinstance(task, dict) and all(isinstance(task.get(f), str) and pat.fullmatch(task[f]) for f in fields) Prevention
- Every selected task needs a complete hidden-oracle + dependency digest set before apply.
When it happens
Trigger: Calling `validate_promotion_for_apply(..., selected_tasks=[...])` where a task is missing a digest field, has a wrong-length hash, or contains a non-hex digest.
Common situations: A promotion.json from a run whose hidden oracle/dependency capture was incomplete (e.g. dependency manifest not materialized), or a tasks file missing oracle/dependency definitions for a selected task.
Related errors
- promotion binding is missing hidden-oracle files
- promotion binding uses an unsupported schema
- promotion binding has no selected tasks
- unsupported promotion metric: {metric}
- transcript_artifacts must be a list
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/30b14e92e33cc396.
Report an issue: GitHub.