Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
8e1b5c7
feat: implement issue #1210 — [Phase 2] Switch feature-ideation-reusa…
don-petry Oct 3, 2026
e2c6733
fix(reviews): restore sonnet/haiku in model description; harden model…
don-petry Oct 3, 2026
b319c9a
fix(bot): install yq in feature-ideation test environment
don-petry Oct 4, 2026
4c4539e
fix(bot): pin mikefarah/yq to v4.44.3 in feature-ideation-tests
don-petry Oct 6, 2026
a270350
fix(reviews): hardcode yq sha256 and add curl timeouts
don-petry Oct 6, 2026
518353b
fix(reviews): align model input description with #1210 AC2 exact wording
don-petry Oct 9, 2026
26b040f
fix(reviews): add final period to model input description per #1210 AC2
don-petry Oct 9, 2026
e5bdb21
fix(bot): record claude-code-action v1.0.259 model resolution for opu…
don-petry Oct 30, 2026
a2bbacd
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 3, 2026
ac0ef33
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 3, 2026
fd35bcc
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 3, 2026
12ae281
fix(bot): update claude-code-action version in model resolution comme…
don-petry Nov 3, 2026
eda1adc
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 3, 2026
b0cf1e5
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 3, 2026
94eeb7f
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 3, 2026
95cc5ef
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 4, 2026
f2f16b3
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 4, 2026
a206176
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 4, 2026
3846222
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 5, 2026
72ccf20
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 5, 2026
e451dab
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 5, 2026
e79706a
fix(bot): clarify model input description and update test
don-petry Nov 5, 2026
00df7be
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 6, 2026
e970908
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 6, 2026
f332e54
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 8, 2026
8ad6500
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 8, 2026
49b13a8
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Nov 9, 2026
8a15c83
fix(bot): Add final periods and clarify model resolution guidance
don-petry Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .github/workflows/feature-ideation-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@
default: 'standard'
type: string
model:
description: >
Model family — `opus` (default, recommended), `sonnet`, or `haiku`.
The resolver/CLI maps the family to the current version ID. An
operator MAY override with a concrete model ID for a one-off pin.
# The Claude Code CLI resolves the family client-side (`--model opus`
# in the analyst step) to the current version ID — never pin a
# version ID here. See standards/agent-standards.md.
description: 'Model family (`opus` recommended — Sonnet produces shallower adversarial passes) or an explicit model ID. Client-side resolution by the Claude Code CLI; never pin a version-specific model ID.'

Check failure on line 78 in .github/workflows/feature-ideation-reusable.yml

View workflow job for this annotation

GitHub Actions / Lint

78:201 [line-length] line too long (214 > 200 characters)
required: false
default: 'opus'
type: string
Expand Down Expand Up @@ -332,6 +332,8 @@
ENHANCE_BACKLOG: ${{ inputs.enhance_backlog && '1' || '0' }}
SOURCES_FILE_PATH: ${{ inputs.sources_file }}
RESEARCH_DEPTH: ${{ inputs.research_depth }}
# Model family resolution: as of claude-code-action v1.0.264, the family
# `opus` resolves client-side to claude-opus-4-1-20250514 (#1210 AC3).
uses: anthropics/claude-code-action@d70510b174a1244958df0b03166a54912811f3e6 # v1.0.264
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
Expand Down
22 changes: 21 additions & 1 deletion .github/workflows/feature-ideation-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,31 @@ jobs:
with:
fetch-depth: 1

- name: Install bats, shellcheck, and jq
- name: Install bats, shellcheck, jq, and yq
run: |
set -euo pipefail
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends bats shellcheck jq
# Install a pinned mikefarah/yq so the suite is reproducible and not
# dependent on whatever version ships in the runner image.
YQ_VERSION="v4.44.3"
# --proto '=https' --proto-redir '=https' enforces HTTPS on both the
# initial request and any redirects (GitHub releases redirect to
# objects.githubusercontent.com).
# --retry 5 --retry-delay 2 --retry-connrefused --retry-all-errors
# rides out the transient network/5xx blips from that redirect target
# that otherwise flake this suite (#739); --connect-timeout/--max-time
# bound each attempt so a stalled connection cannot eat the job budget.
curl -sSfL --proto '=https' --proto-redir '=https' --connect-timeout 10 --max-time 60 \
--retry 5 --retry-delay 2 --retry-connrefused --retry-all-errors \
"https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64" \
-o /tmp/yq_linux_amd64
# SHA-256 of yq_linux_amd64 for v4.44.3, hardcoded (vetted) rather than
# fetched from the same release, so a swapped release asset is detected.
# Update together with YQ_VERSION.
YQ_SHA256="a2c097180dd884a8d50c956ee16a9cec070f30a7947cf4ebf87d5f36213e9ed7"
echo "${YQ_SHA256} /tmp/yq_linux_amd64" | sha256sum -c -
sudo install -m 755 /tmp/yq_linux_amd64 /usr/local/bin/yq

- name: Install pinned yq (v4.44.3)
# The static bats guards parse workflows with yq; pin the oldest
Expand Down
39 changes: 39 additions & 0 deletions test/workflows/feature-ideation/model-input.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env bats
# Tests for the `model` input of the reusable feature-ideation workflow
# (issue #1210). The default must be the model FAMILY (`opus`) so the BMAD
# Analyst auto-tracks the current Opus via the Claude Code CLI's client-side
# alias resolution — a pinned version id must never be the default.

load 'helpers/setup'

WF="${TT_REPO_ROOT}/.github/workflows/feature-ideation-reusable.yml"

@test "model input: default is the opus family" {
run yq -r '.on.workflow_call.inputs.model.default' "$WF"
Comment thread
don-petry marked this conversation as resolved.
Resolved
[ "$status" -eq 0 ]
[ "$output" = "opus" ]
}

@test "model input: default is not a pinned claude-* version id" {
run yq -r '.on.workflow_call.inputs.model.default' "$WF"
[ "$status" -eq 0 ]
[[ "$output" != claude-* ]]
}

@test "model input: description recommends the opus family with an id override" {
run yq -r '.on.workflow_call.inputs.model.description' "$WF"
[ "$status" -eq 0 ]
[ "$output" = 'Model family (`opus` recommended — Sonnet produces shallower adversarial passes) or an explicit model ID. Client-side resolution by the Claude Code CLI; never pin a version-specific model ID.' ]
}

@test "analyst step: model is passed via --model so the CLI resolves the family" {
run yq -r '.jobs[].steps[]? | select(.name == "Run Claude Code — BMAD Analyst") | .with.claude_args' "$WF"
[ "$status" -eq 0 ]
[[ "$output" == *'--model ${{ inputs.model }}'* ]]
}

@test "analyst step: no ANTHROPIC_MODEL env bypasses the CLI's alias resolver" {
run yq -r '.jobs[].steps[]? | select(.name == "Run Claude Code — BMAD Analyst") | .env // {} | has("ANTHROPIC_MODEL")' "$WF"
Comment thread
don-petry marked this conversation as resolved.
Resolved
[ "$status" -eq 0 ]
[ "$output" = "false" ]
}
Loading