Repository navigation
Replies: 2 comments
Enhancement: Prior Art, Feasibility Confirmation & Implementation OptionsPrior Art & Competitive SignalOpenAI's alias strategy is the clearest cautionary tale. Their The "model resolver" pattern is emerging as industry consensus. Open-source projects and internal platform teams increasingly use a central registry mapping logical roles → concrete model IDs. Benefits: single-point upgrade, canary-friendly rollout, auditable diffs. This proposal's "one resolver maps family → current model id" aligns directly with this pattern. Anthropic's 4.6+ versioning simplifies things. Starting with the 4.6 generation, dateless IDs like Technical Feasibility: Confirmed ✓Claude Code CLI natively supports bare family aliases today.
Provider-dependent resolution (key risk): The alias table is compiled per-release and varies by provider:
For this repo (using direct Anthropic API via Implementation Options
Recommendation: Start with B, graduate to C if the fleet grows. Approach B satisfies the acceptance criteria with minimal complexity while adding the traceability that A lacks. A small Risks & Unknowns
Phased Validation Path
Success Metrics
|
|
📋 Initiative planned by the BMAD Scrum Master (Bob). Epic #1208 — Adopt the model-family standard (name a family, never pin a version) in petry-projects/.github 5 stories created (inert — labelled
Open questions for review:
Review the epic and its sub-issue DAG, adjust as needed, then add |
Uh oh!
There was an error while loading. Please reload this page.
Story
As a maintainer,
I want the org standards to say that workflows name a Claude model family (
opus,sonnet,haiku) and never a specific model version,so that model upgrades don't leave stale pins across the fleet. The BMAD Business Analyst still runs
claude-opus-4-6, two Opus generations behind.The standard (maintainer decision, 2026-09-29)
Allowed exceptions, each marked with an inline
# model-pin-ok: <reason>comment:An operator-supplied override (a workflow input or an Actions variable set to a full id) is an operator choice and stays allowed. Only defaults in code must name a family.
The implementation and lint for
petry-projects/.github-privateis combsmith/.github-private#1979, under epic combsmith/.github-private#1895.Current pins in this repo
.github/workflows/feature-ideation-reusable.ymlL52–55 (modelinput)default: 'claude-opus-4-6', and the description says "Opus 4.6 is the default and recommended"standards/ci-standards.mdL1318, L1394, L1417claude-opus-4-6/ANTHROPIC_MODEL: claude-opus-4-6as the required settingstandards/workflows/feature-ideation.ymlL8, L23 (and each synced copy)(
.github/scripts/add-to-project/initiative-rules.tsvmentionsclaude-sonnet-5only inside a classification regex. That isn't a model pin, so leave it.)Acceptance Criteria
standards/agent-standards.mdas a new "Model selection" section, using the rule, the exceptions and the operator-override note above. Cross-link it fromstandards/ci-standards.md.modelinput default to the familyopus, and reword the description to "Model family (opusrecommended — Sonnet produces shallower adversarial passes) or an explicit model id override". The job passes it both as--modeland throughANTHROPIC_MODEL, whichci-standards.mdgotcha Add multi-agent isolation strategy using git worktrees #2 requires, so verify thatclaude-code-action/ the Claude Code CLI accept the family alias there and resolve it to the current Opus. Record the resolved model id from the run's output or usage in the PR. If the alias doesn't resolve to the current Opus, resolve the family to an id in a small step before the job instead, and still never write a version into the default.claude-opus-4-6statements with the family rule:ANTHROPIC_MODELis set from themodelinput, which defaults toopus. Keep gotcha Add multi-agent isolation strategy using git worktrees #2's point that the env var must be set on the step.standards/workflows/feature-ideation.ymlto "Opus-family model selection". Don't edit synced copies in consumer repos by hand; they arrive through the standards sync.claude-(opus|sonnet|haiku|fable)-[0-9]check as .github-private#1979 to this repo's lint, skipping the allowed exceptions andmodel-pin-ok:lines.Dev Notes
All reactions