Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
6a045cd
feat: implement issue #1210 — [Phase 2] Switch feature-ideation-reusa…
don-petry Oct 3, 2026
5cebabe
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 3, 2026
88d912f
fix(reviews): restore sonnet/haiku in model description; harden model…
don-petry Oct 3, 2026
2d642c9
fix(bot): install yq in feature-ideation test environment
don-petry Oct 4, 2026
7568bb1
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 4, 2026
051479b
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 4, 2026
bc282fb
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 4, 2026
70e38bb
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 5, 2026
ce8acb0
fix(bot): pin mikefarah/yq to v4.44.3 in feature-ideation-tests
don-petry Oct 6, 2026
6acab77
fix(reviews): hardcode yq sha256 and add curl timeouts
don-petry Oct 6, 2026
5759303
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 7, 2026
8f66d9c
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 8, 2026
fcb811b
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 9, 2026
1a404e9
fix(reviews): align model input description with #1210 AC2 exact wording
don-petry Oct 9, 2026
ea8322e
fix(reviews): add final period to model input description per #1210 AC2
don-petry Oct 9, 2026
58e9153
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
daba887
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
76bc433
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
ca64959
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
8d37617
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
9bb9be1
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
50f39f0
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
42daa3a
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
bccf21c
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 10, 2026
1d91de8
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
50c5f0f
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
e73eeb0
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
2837e2b
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
e0186bb
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
d6c40ad
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
d8b60f7
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
f3cf6f1
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
ee000d6
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
d40ed36
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
73cc7b2
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
78ea20c
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
762b020
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
810b7f5
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
f127635
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 11, 2026
b9fd734
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 12, 2026
df571a8
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 12, 2026
45b9ccc
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 12, 2026
7187a51
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 13, 2026
f8e6067
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 14, 2026
4f91f6d
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 14, 2026
33f9438
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 14, 2026
b471206
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 14, 2026
c06ff9a
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 16, 2026
739c1bd
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 18, 2026
15bb91f
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 18, 2026
dc038cf
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 18, 2026
ee4e516
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 20, 2026
b6ad643
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 20, 2026
ab4e992
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 20, 2026
01a10be
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 20, 2026
fc0f361
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 20, 2026
c19a903
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 20, 2026
27d04a9
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 21, 2026
3b5ac99
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 21, 2026
1c83244
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 21, 2026
a079452
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 22, 2026
ff0dafe
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 25, 2026
c4b2d82
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 25, 2026
510d91e
Merge branch 'main' into dev-lead/issue-1210-20261003-2213
don-petry Oct 25, 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
8 changes: 4 additions & 4 deletions .github/workflows/feature-ideation-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ on:
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 override.'
required: false
default: 'opus'
type: string
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 Python jsonschema and PyYAML
run: 'pip install --quiet --require-hashes --only-binary :all: -r scripts/feature-ideation-tests-requirements.txt'
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.
[ "$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 override.' ]
}

@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.
[ "$status" -eq 0 ]
[ "$output" = "false" ]
}
Loading