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

  1. Inspect each selected task's five digest fields and confirm each is a 64-char lowercase hex string.
  2. Re-run the benchmark ensuring oracle and sandbox-dependency assets are fully captured for every selected task.
  3. 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

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


AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12). Data as JSON: /api/errors/30b14e92e33cc396. Report an issue: GitHub.