abhigyanpatwari/GitNexus · error · ValueError

unsupported evolution arm: {exc.args[0]}

Error message

unsupported evolution arm: {exc.args[0]}

What it means

Raised by `generation_timeout_seconds` when an incumbent arm name is not a key in `ARM_SESSION_COUNTS` (valid keys: 'workflow', 'workflow_direct'). The budget sums per-arm session counts, so unknown arms are rejected.

Source

Thrown at eval/workflow_bench/evolve.py:575

        raise ValueError("--arms must name exactly the minimal incumbent set for this overlay: " + " ".join(required))
    return required


def generation_timeout_seconds(
    *,
    task_count: int,
    runs: int,
    session_timeout: int,
    incumbent_arms: list[str],
) -> int:
    """Budget every sequential bounded phase in the generated benchmark."""

    if task_count < 1 or runs < 1 or session_timeout < 1:
        raise ValueError("task count, runs, and session timeout must be positive")
    try:
        session_slots = sum(2 * ARM_SESSION_COUNTS[arm] for arm in incumbent_arms)
    except KeyError as exc:
        raise ValueError(f"unsupported evolution arm: {exc.args[0]}") from exc
    paired_arm_cells = 2 * len(incumbent_arms)
    workspace_snapshot_slots = sum(2 * ARM_WORKSPACE_SNAPSHOT_COUNTS[arm] for arm in incumbent_arms)
    per_task_preparation = (
        TASK_BINDING_GIT_PHASES * GIT_COMMAND_TIMEOUT_SECONDS
        + 2 * TASK_SNAPSHOT_TIMEOUT_SECONDS
        + WORKTREE_PREPARATION_TIMEOUT_SECONDS
        + GRAPH_SOURCE_PREPARATION_TIMEOUT_SECONDS
        + GRAPH_BUILD_TIMEOUT_SECONDS
        + 2 * GRAPH_QUERY_TIMEOUT_SECONDS
        + CLEANUP_TIMEOUT_SECONDS
    )
    per_task_run = session_slots * (session_timeout + SESSION_FINALIZATION_TIMEOUT_SECONDS) + paired_arm_cells * (
        WORKTREE_PREPARATION_TIMEOUT_SECONDS
        + ARM_ASSET_MATERIALIZATION_PHASES * TASK_SNAPSHOT_TIMEOUT_SECONDS
        + SETUP_TIMEOUT_SECONDS
        + 2 * session_timeout
        + ARM_EVIDENCE_GIT_PHASES * GIT_COMMAND_TIMEOUT_SECONDS
        + CLEANUP_TIMEOUT_SECONDS

View on GitHub (pinned to d540b00184)

Solutions

  1. Use only incumbent arms from INCUMBENT_ARMS: 'workflow' and/or 'workflow_direct'.
  2. Get arms via resolve_incumbent_arms() rather than typing them.
  3. Drop 'review' from --arms; it is not an evolution arm.

Example fix

# before: --arms review          # not an evolution incumbent
# after:  --arms workflow workflow_direct
Defensive patterns

Strategy: validation

Validate before calling

from workflow_bench.evolve import ARM_SESSION_COUNTS
unknown = [a for a in incumbent_arms if a not in ARM_SESSION_COUNTS]
if unknown:
    raise ValueError(f'unsupported evolution arm(s): {unknown}; valid: {list(ARM_SESSION_COUNTS)}')

Type guard

def is_supported_arm(arm: str) -> bool:
    return arm in {'workflow', 'workflow_direct'}

Prevention

When it happens

Trigger: Calling `generation_timeout_seconds(..., incumbent_arms=['review'])` or any misspelled/unsupported arm like 'workflow-direct'. The 'review' arm exists in EVALUATED_ARM_SKILLS but is not an evolution incumbent.

Common situations: Passing 'review' (a read-only eval arm, not promotable) as an evolution arm, or a typo like 'workflow-dirct'.

Related errors


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