stale-model-alias

Stale model alias: claude:sonnet resolves to outdated claude-sonnet-4-20250514 instead of current claude-sonnet-4-6

Metadata

Statusdone
Assignedagent-46
Agent identityf51439356729d112a6c404803d88015d5b44832c6c584c62b96732b63c2b0c7e
Created2026-04-26T15:15:41.464458828+00:00
Started2026-04-26T16:17:16.819990887+00:00
Completed2026-04-26T16:39:19.596170705+00:00
Tagseval-scheduled
Eval score0.05
└ blocking impact0.00
└ completeness0.00
└ coordination overhead0.00
└ correctness0.00
└ downstream usability0.00
└ efficiency0.00
└ intent fidelity0.16
└ style adherence0.50

Description

Description

wg show <task> reports concrete dated model ids like claude-opus-4-6, claude-sonnet-4-20250514, etc. when the user wrote claude:opus / claude:sonnet in config or CLI. That's wrong — we should pass the bare alias (opus, sonnet, haiku) to the claude CLI, which knows how to resolve to the current model on its end. Hardcoding dated ids in wg means we're forever chasing Anthropic's release cadence in our config.

Required mapping

AliasShould resolve to (string passed to claude CLI)
claude:opusopus
claude:sonnetsonnet
claude:haikuhaiku

Yes, just the bare tier name. The claude CLI accepts these and resolves to current production models on its side. We should not be in the business of tracking which dated id is 'current.'

Fix

  1. Find where the alias resolution happens (likely in src/models/ or src/config/ — grep for the existing dated ids claude-opus-4-6, claude-sonnet-4-20250514, claude-haiku-).
  2. Replace the lookup table to map to the bare strings above.
  3. wg show should display the bare alias (opus) for tasks created with claude:opus, NOT a dated id. If wg currently 'helpfully' canonicalizes to a dated id at task-creation time, stop doing that — store the alias as written and only resolve at spawn time when invoking claude CLI.
  4. Add unit tests asserting the alias → 'opus' / 'sonnet' / 'haiku' bare-string mapping. The tests must NOT contain any dated id; if they do, drift will silently re-introduce the bug.
  5. Document the bare-alias contract in a single source-of-truth comment + corresponding entry in docs/AGENT-SERVICE.md or wherever models are listed.

Additionally

  • Audit the codebase for any OTHER place that hardcodes dated model ids (claude-*-4-*, claude-*-202[0-9]-*-*). If found, replace with bare aliases or a single defaults constant.
  • Coordinator-launch surfaces (TUI dialog, IPC CreateCoordinator) should also show / pass bare aliases — user reported seeing --executor claude --model claude-opus-4-6 in the launch dialog.

Out of scope

  • Don't redesign the alias system; just stop hardcoding dated ids.
  • Don't change the alias names themselves (claude:opus etc. stay).

Validation

  • Failing tests first: test_alias_claude_opus_resolves_to_bare_opus, test_alias_claude_sonnet_resolves_to_bare_sonnet, test_alias_claude_haiku_resolves_to_bare_haiku, test_no_dated_model_ids_anywhere_in_source (grep src/ for 'claude--4-' regex; assert zero matches outside test fixtures and docs)
  • Implementation makes tests pass
  • cargo build + cargo test pass with no regressions
  • Manual: wg add 'test' --model claude:opus then wg show <id> reports opus (or claude:opus), NOT claude-opus-4-6 or any dated id
  • Manual: TUI new-coordinator dialog launch line shows --model opus not --model claude-opus-4-6

Depends on

Required by

Log