abhigyanpatwari/GitNexus · error · ValueError
--arms must name exactly the minimal incumbent set for this
Error message
--arms must name exactly the minimal incumbent set for this overlay:
What it means
Raised by `resolve_incumbent_arms` when an explicit `--arms` list is given but does not exactly equal the minimal incumbent set the overlay requires (derived from `required_candidate_arms(overlay)` via the skills the overlay actually touches). The user-selected arms must match the overlay's skill coverage.
Source
Thrown at eval/workflow_bench/evolve.py:557
try:
runner.remove_clone(clone)
except OSError as cleanup:
if primary is None:
raise
primary.add_note(f"proposer clone cleanup also failed: {type(cleanup).__name__}: {cleanup}")
# Promotion application lives in promotion_apply; the public helpers are
# re-exported above so existing callers of workflow_bench.evolve keep working.
# ─── Driver ──────────────────────────────────────────────────────────────────
def resolve_incumbent_arms(overlay: Path, explicit_arms: list[str] | None) -> list[str]:
candidates = required_candidate_arms(overlay)
required = [CANDIDATE_ARMS[candidate] for candidate in candidates]
if explicit_arms is not None and explicit_arms != required:
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 excView on GitHub (pinned to d540b00184)
Solutions
- Omit --arms entirely and let the harness derive the minimal set from the overlay.
- Or run `required_candidate_arms(overlay)` to learn the exact required list, then pass that exact set in the same order.
- Make sure the overlay only edits skills for the arms you intend to benchmark.
Example fix
# before: overlay edits both gitnexus-plan and gitnexus-work, but you pass only # --arms workflow_direct (workflow_direct exercises only gitnexus-work) # after: omit --arms, or pass the derived set, e.g. # --arms workflow workflow_direct
Defensive patterns
Strategy: validation
Validate before calling
from workflow_bench.evolution import required_candidate_arms, CANDIDATE_ARMS
required = [CANDIDATE_ARMS[c] for c in required_candidate_arms(overlay)]
if explicit_arms is not None and explicit_arms != required:
raise ValueError(f'--arms must be exactly {required} (got {explicit_arms})') Prevention
- Prefer deriving arms from the overlay; only pass --arms when you must pin them.
- Remember CANDIDATE_ARMS maps candidate_workflow->workflow and candidate_workflow_direct->workflow_direct.
When it happens
Trigger: Invoked from `runner_argv` (building the benchmark command) or `main` (validating --initial-overlay): `resolve_incumbent_arms(overlay, args.arms)` where args.arms != the arms implied by the overlay's candidate files.
Common situations: Passing `--arms workflow_direct` for an overlay that also modifies gitnexus-plan (which requires the `workflow` arm), or vice versa; or listing arms in a different order than the canonical CANDIDATE_ARMS derivation.
Related errors
- task count, runs, and session timeout must be positive
- unsupported evolution arm: {exc.args[0]}
- transcript_artifacts must be a list
- transcript_artifacts exceeds the per-row session limit of {M
- transcript_artifacts exceeds the global evidence limit of {M
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/d006a7c6b3cfb122.
Report an issue: GitHub.