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_SECONDSView on GitHub (pinned to d540b00184)
Solutions
- Use only incumbent arms from INCUMBENT_ARMS: 'workflow' and/or 'workflow_direct'.
- Get arms via resolve_incumbent_arms() rather than typing them.
- 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
- Evolution incumbents are workflow / workflow_direct only; review is eval-only.
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
- --arms must name exactly the minimal incumbent set for this
- task count, runs, and session timeout must be positive
- transcript_artifacts must be a list
- promotion binding uses an unsupported schema
- promotion binding has no selected tasks
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/be3f2edcc2a92959.
Report an issue: GitHub.