ma-agents 3.8.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -5
- package/bin/cli.js +140 -63
- package/lib/agents.js +12 -20
- package/lib/bmad-cache/cache-manifest.json +8 -8
- package/lib/bmad-cache/cis/_git_preserved/index +0 -0
- package/lib/bmad-cache/cis/_git_preserved/logs/HEAD +1 -1
- package/lib/bmad-cache/cis/_git_preserved/logs/refs/heads/main +1 -1
- package/lib/bmad-cache/cis/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.pack → pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.pack} +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.rev +0 -0
- package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/cis/src/module-help.csv +5 -5
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/logs/HEAD +1 -1
- package/lib/bmad-cache/gds/_git_preserved/logs/refs/heads/main +1 -1
- package/lib/bmad-cache/gds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.pack → pack-9427a146a90c00bb542cba038874bf9671ba4dc0.pack} +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/gds/src/module-help.csv +34 -34
- package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-cache/tea/.github/workflows/publish.yaml +168 -0
- package/lib/bmad-cache/tea/README.md +67 -57
- package/lib/bmad-cache/tea/_git_preserved/index +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.pack → pack-f0df537f2649464ff6c5aee241165eb9c8664227.pack} +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/tea/package-lock.json +2 -2
- package/lib/bmad-cache/tea/package.json +5 -6
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/contract-testing.md +2 -3
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-consumer-framework-setup.md +42 -95
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-consumer-helpers.md +5 -6
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-provider-verifier.md +1 -1
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/module-help.csv +9 -9
- package/lib/bmad-extension/.claude-plugin/marketplace.json.template +2 -2
- package/lib/bmad-extension/skills/add-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/bmad-dev-story/workflow.md +39 -0
- package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +41 -0
- package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +39 -0
- package/lib/bmad-extension/skills/cleanup-done/SKILL.md +39 -0
- package/lib/bmad-extension/skills/close-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/generate-backlog/SKILL.md +41 -0
- package/lib/bmad-extension/skills/modify-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/module.yaml +1 -1
- package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +39 -0
- package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +39 -0
- package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +39 -0
- package/lib/bmad-extension/workflows/add-sprint/workflow.md +39 -0
- package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +39 -0
- package/lib/bmad-extension/workflows/modify-sprint/workflow.md +39 -0
- package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +39 -0
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -2
- package/lib/bmad-extension-plugin/skills/add-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/add-to-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/bmad-dev-story/workflow.md +39 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/workflow.md +41 -0
- package/lib/bmad-extension-plugin/skills/bmad-sprint-status/workflow.md +39 -0
- package/lib/bmad-extension-plugin/skills/cleanup-done/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/close-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/generate-backlog/SKILL.md +41 -0
- package/lib/bmad-extension-plugin/skills/modify-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
- package/lib/bmad-extension-plugin/skills/prioritize-backlog/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/remove-from-sprint/SKILL.md +39 -0
- package/lib/bmad-extension-plugin/skills/sprint-status-view/SKILL.md +39 -0
- package/lib/bmad.js +76 -8
- package/lib/installer.js +6 -1
- package/package.json +4 -4
- package/skills/add-sprint/SKILL.md +39 -0
- package/skills/add-to-sprint/SKILL.md +39 -0
- package/skills/bmad-sprint-planning/SKILL.md +41 -0
- package/skills/bmad-sprint-status/SKILL.md +39 -0
- package/skills/cleanup-done/SKILL.md +39 -0
- package/skills/close-sprint/SKILL.md +39 -0
- package/skills/generate-backlog/SKILL.md +41 -0
- package/skills/modify-sprint/SKILL.md +39 -0
- package/skills/prioritize-backlog/SKILL.md +39 -0
- package/skills/remove-from-sprint/SKILL.md +39 -0
- package/skills/sprint-status-view/SKILL.md +39 -0
- package/skills/story-status-lookup/SKILL.md +38 -21
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.rev +0 -0
- package/lib/bmad-cache/tea/.github/workflows/manual-release.yaml +0 -216
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.rev +0 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "src/**"
|
|
8
|
+
- "package.json"
|
|
9
|
+
- "package-lock.json"
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
inputs:
|
|
12
|
+
channel:
|
|
13
|
+
description: "Publish channel"
|
|
14
|
+
required: true
|
|
15
|
+
default: "latest"
|
|
16
|
+
type: choice
|
|
17
|
+
options:
|
|
18
|
+
- latest
|
|
19
|
+
- next
|
|
20
|
+
bump:
|
|
21
|
+
description: "Version bump type (latest channel only)"
|
|
22
|
+
required: false
|
|
23
|
+
default: "patch"
|
|
24
|
+
type: choice
|
|
25
|
+
options:
|
|
26
|
+
- patch
|
|
27
|
+
- minor
|
|
28
|
+
- major
|
|
29
|
+
|
|
30
|
+
concurrency:
|
|
31
|
+
group: publish-${{ github.event_name }}-${{ github.ref_name }}-${{ inputs.channel || 'push' }}
|
|
32
|
+
cancel-in-progress: ${{ github.event_name == 'push' }}
|
|
33
|
+
|
|
34
|
+
permissions:
|
|
35
|
+
id-token: write
|
|
36
|
+
contents: write
|
|
37
|
+
|
|
38
|
+
jobs:
|
|
39
|
+
publish:
|
|
40
|
+
if: github.repository == 'bmad-code-org/bmad-method-test-architecture-enterprise' && (github.event_name != 'workflow_dispatch' || github.ref == 'refs/heads/main')
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
steps:
|
|
43
|
+
- name: Generate GitHub App token
|
|
44
|
+
id: app-token
|
|
45
|
+
if: github.event_name == 'workflow_dispatch' && inputs.channel == 'latest'
|
|
46
|
+
uses: actions/create-github-app-token@v2
|
|
47
|
+
with:
|
|
48
|
+
app-id: ${{ secrets.RELEASE_APP_ID }}
|
|
49
|
+
private-key: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
|
|
50
|
+
|
|
51
|
+
- name: Checkout
|
|
52
|
+
uses: actions/checkout@v4
|
|
53
|
+
with:
|
|
54
|
+
fetch-depth: 0
|
|
55
|
+
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
|
56
|
+
|
|
57
|
+
- name: Setup Node
|
|
58
|
+
uses: actions/setup-node@v4
|
|
59
|
+
with:
|
|
60
|
+
node-version-file: ".nvmrc"
|
|
61
|
+
cache: "npm"
|
|
62
|
+
registry-url: "https://registry.npmjs.org"
|
|
63
|
+
|
|
64
|
+
- name: Ensure trusted publishing toolchain
|
|
65
|
+
run: |
|
|
66
|
+
# npm trusted publishing requires modern npm on the runner.
|
|
67
|
+
npm install --global npm@11.6.2
|
|
68
|
+
|
|
69
|
+
- name: Configure git user
|
|
70
|
+
if: github.event_name == 'workflow_dispatch' && inputs.channel == 'latest'
|
|
71
|
+
run: |
|
|
72
|
+
git config user.name "github-actions[bot]"
|
|
73
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
74
|
+
|
|
75
|
+
- name: Install dependencies
|
|
76
|
+
run: npm ci
|
|
77
|
+
|
|
78
|
+
- name: Run tests
|
|
79
|
+
run: npm test
|
|
80
|
+
|
|
81
|
+
- name: Derive next prerelease version
|
|
82
|
+
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.channel == 'next')
|
|
83
|
+
run: |
|
|
84
|
+
NEXT_VER=$(npm view bmad-method-test-architecture-enterprise@next version 2>/dev/null || echo "")
|
|
85
|
+
LATEST_VER=$(npm view bmad-method-test-architecture-enterprise@latest version 2>/dev/null || echo "")
|
|
86
|
+
|
|
87
|
+
BASE=$(node -e "
|
|
88
|
+
const semver = require('semver');
|
|
89
|
+
const next = process.argv[1] || null;
|
|
90
|
+
const latest = process.argv[2] || null;
|
|
91
|
+
if (!next && !latest) process.exit(0);
|
|
92
|
+
if (!next) { console.log(latest); process.exit(0); }
|
|
93
|
+
if (!latest) { console.log(next); process.exit(0); }
|
|
94
|
+
const nextBase = next.replace(/-next\.\d+$/, '');
|
|
95
|
+
console.log(semver.gte(latest, nextBase) ? latest : next);
|
|
96
|
+
" "$NEXT_VER" "$LATEST_VER")
|
|
97
|
+
|
|
98
|
+
if [ -n "$BASE" ]; then
|
|
99
|
+
npm version "$BASE" --no-git-tag-version --allow-same-version
|
|
100
|
+
fi
|
|
101
|
+
npm version prerelease --preid=next --no-git-tag-version
|
|
102
|
+
|
|
103
|
+
- name: Bump stable version
|
|
104
|
+
if: github.event_name == 'workflow_dispatch' && inputs.channel == 'latest'
|
|
105
|
+
run: npm version "${{ inputs.bump }}" --no-git-tag-version
|
|
106
|
+
|
|
107
|
+
- name: Sync marketplace version
|
|
108
|
+
run: |
|
|
109
|
+
node <<'NODE'
|
|
110
|
+
const fs = require('node:fs');
|
|
111
|
+
|
|
112
|
+
const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
|
|
113
|
+
const marketplacePath = '.claude-plugin/marketplace.json';
|
|
114
|
+
const marketplace = JSON.parse(fs.readFileSync(marketplacePath, 'utf8'));
|
|
115
|
+
const plugin = (marketplace.plugins || []).find((entry) => entry && entry.name === packageJson.name);
|
|
116
|
+
|
|
117
|
+
if (!plugin) {
|
|
118
|
+
throw new Error(`Marketplace entry not found for ${packageJson.name}`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
plugin.version = packageJson.version;
|
|
122
|
+
fs.writeFileSync(marketplacePath, `${JSON.stringify(marketplace, null, 2)}\n`);
|
|
123
|
+
NODE
|
|
124
|
+
|
|
125
|
+
- name: Validate release metadata
|
|
126
|
+
run: npm run test:release-metadata
|
|
127
|
+
|
|
128
|
+
- name: Publish prerelease to npm
|
|
129
|
+
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.channel == 'next')
|
|
130
|
+
run: npm publish --tag next --provenance
|
|
131
|
+
|
|
132
|
+
- name: Commit version bump
|
|
133
|
+
if: github.event_name == 'workflow_dispatch' && inputs.channel == 'latest'
|
|
134
|
+
run: |
|
|
135
|
+
VERSION=$(node -p 'require("./package.json").version')
|
|
136
|
+
git add package.json package-lock.json .claude-plugin/marketplace.json
|
|
137
|
+
git commit -m "release: bump to v${VERSION} [skip ci]"
|
|
138
|
+
git tag -a "v${VERSION}" -m "Release v${VERSION}"
|
|
139
|
+
|
|
140
|
+
- name: Push version commit and tag
|
|
141
|
+
if: github.event_name == 'workflow_dispatch' && inputs.channel == 'latest'
|
|
142
|
+
run: git push origin main --follow-tags
|
|
143
|
+
|
|
144
|
+
- name: Publish stable release to npm
|
|
145
|
+
if: github.event_name == 'workflow_dispatch' && inputs.channel == 'latest'
|
|
146
|
+
run: npm publish --tag latest --provenance
|
|
147
|
+
|
|
148
|
+
- name: Create GitHub Release
|
|
149
|
+
if: github.event_name == 'workflow_dispatch' && inputs.channel == 'latest'
|
|
150
|
+
run: |
|
|
151
|
+
TAG="v$(node -p 'require("./package.json").version')"
|
|
152
|
+
VERSION="${TAG#v}"
|
|
153
|
+
BODY=$(awk -v ver="$VERSION" '
|
|
154
|
+
/^## / {
|
|
155
|
+
if (found) exit
|
|
156
|
+
if ($0 ~ ("^##[[:space:]]*\\[?[[:space:]]*v?" ver "[[:space:]]*\\]?([[:space:]]*-[[:space:]].*)?$")) found=1
|
|
157
|
+
next
|
|
158
|
+
}
|
|
159
|
+
found { print }
|
|
160
|
+
' CHANGELOG.md)
|
|
161
|
+
if [ -z "$BODY" ]; then
|
|
162
|
+
echo "::warning::No CHANGELOG.md entry for $TAG — falling back to auto-generated notes"
|
|
163
|
+
gh release create "$TAG" --generate-notes
|
|
164
|
+
else
|
|
165
|
+
gh release create "$TAG" --notes "$BODY"
|
|
166
|
+
fi
|
|
167
|
+
env:
|
|
168
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -216,17 +216,28 @@ See `CONTRIBUTING.md` for guidelines.
|
|
|
216
216
|
|
|
217
217
|
## Publishing TEA to NPM
|
|
218
218
|
|
|
219
|
-
TEA uses an automated
|
|
219
|
+
TEA uses an automated publish workflow modeled after the main `BMAD-METHOD` repo. It supports:
|
|
220
|
+
|
|
221
|
+
- `next` prereleases published automatically from `main`
|
|
222
|
+
- manual stable releases on the `latest` dist-tag
|
|
223
|
+
- trusted npm publishing (no `NPM_TOKEN` secret)
|
|
224
|
+
- metadata sync for `package.json`, `package-lock.json`, and `.claude-plugin/marketplace.json`
|
|
220
225
|
|
|
221
226
|
### Prerequisites (One-Time Setup)
|
|
222
227
|
|
|
223
|
-
1. **
|
|
224
|
-
-
|
|
225
|
-
-
|
|
226
|
-
-
|
|
227
|
-
|
|
228
|
+
1. **npm Trusted Publishing:**
|
|
229
|
+
- In npm package settings for `bmad-method-test-architecture-enterprise`, configure Trusted Publishers for this GitHub repository
|
|
230
|
+
- Allow publishes from the `bmad-code-org/bmad-method-test-architecture-enterprise` repo and the `.github/workflows/publish.yaml` workflow
|
|
231
|
+
- GitHub Actions must be able to request an OIDC token (`id-token: write`), which the workflow already does
|
|
232
|
+
|
|
233
|
+
2. **GitHub App Secrets for Stable Releases:**
|
|
234
|
+
- Add `RELEASE_APP_ID`
|
|
235
|
+
- Add `RELEASE_APP_PRIVATE_KEY`
|
|
236
|
+
- Install the corresponding GitHub App on this repository with contents write access
|
|
237
|
+
- If `main` is protected, ensure the app is allowed to push the release commit and tag
|
|
238
|
+
- These are used only for manual stable releases so the workflow can push the version bump commit and tag back to `main`
|
|
228
239
|
|
|
229
|
-
|
|
240
|
+
3. **Verify Package Configuration:**
|
|
230
241
|
```bash
|
|
231
242
|
# Check package.json settings
|
|
232
243
|
cat package.json | grep -A 3 "publishConfig"
|
|
@@ -242,71 +253,61 @@ TEA uses an automated release workflow that handles versioning, metadata sync, t
|
|
|
242
253
|
|
|
243
254
|
#### Option 1: Using npm Scripts (Recommended)
|
|
244
255
|
|
|
245
|
-
From your local terminal after merging to
|
|
256
|
+
From your local terminal after merging to `main`:
|
|
246
257
|
|
|
247
258
|
```bash
|
|
248
|
-
#
|
|
249
|
-
npm run release:
|
|
250
|
-
|
|
251
|
-
# Alpha release (early testing)
|
|
252
|
-
npm run release:alpha
|
|
259
|
+
# Publish the next prerelease from current main
|
|
260
|
+
npm run release:next
|
|
253
261
|
|
|
254
|
-
#
|
|
262
|
+
# Publish a stable patch release
|
|
255
263
|
npm run release:patch
|
|
256
264
|
|
|
257
|
-
#
|
|
265
|
+
# Publish a stable minor release
|
|
258
266
|
npm run release:minor
|
|
259
267
|
|
|
260
|
-
#
|
|
268
|
+
# Publish a stable major release
|
|
261
269
|
npm run release:major
|
|
262
270
|
```
|
|
263
271
|
|
|
264
272
|
#### Option 2: Manual Workflow Trigger
|
|
265
273
|
|
|
266
274
|
1. Go to **Actions** tab in GitHub
|
|
267
|
-
2. Click **"
|
|
275
|
+
2. Click **"Publish"** workflow
|
|
268
276
|
3. Click **"Run workflow"**
|
|
269
277
|
4. Choose the branch to release, typically `main`
|
|
270
|
-
5. Select
|
|
271
|
-
|
|
278
|
+
5. Select channel:
|
|
279
|
+
- `next` for a prerelease publish
|
|
280
|
+
- `latest` for a stable release
|
|
281
|
+
6. If using `latest`, choose the bump type (`patch`, `minor`, `major`)
|
|
282
|
+
7. Click **"Run workflow"**
|
|
272
283
|
|
|
273
284
|
### What Happens Automatically
|
|
274
285
|
|
|
275
286
|
The workflow performs these steps:
|
|
276
287
|
|
|
277
288
|
1. ✅ **Validation**: Runs the full `npm test` suite, including schema checks, install tests, knowledge checks, linting, markdown linting, formatting, and release metadata validation
|
|
278
|
-
2. ✅ **Version Bump**:
|
|
279
|
-
- `
|
|
280
|
-
- `
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
- `
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
### Version Bump Strategy
|
|
295
|
-
|
|
296
|
-
**For TEA Module:**
|
|
297
|
-
|
|
298
|
-
- **Beta (`1.12.x-beta.x`)**: Release candidate testing on the next patch line
|
|
299
|
-
- **Alpha (`1.12.x-alpha.x`)**: Early development and experimental validation
|
|
300
|
-
- **Patch (`1.12.x`)**: Bug fixes, no breaking changes
|
|
301
|
-
- **Minor (`1.x.0`)**: New features, backwards compatible
|
|
302
|
-
- **Major (`x.0.0`)**: Breaking changes
|
|
289
|
+
2. ✅ **Version Bump**:
|
|
290
|
+
- `next`: derives the next prerelease version and publishes it with dist-tag `next`
|
|
291
|
+
- `latest`: bumps the stable version (`patch`, `minor`, or `major`)
|
|
292
|
+
3. ✅ **Metadata Sync**: Updates `.claude-plugin/marketplace.json` to match the package version before publishing
|
|
293
|
+
4. ✅ **Publish**: Publishes to npm with provenance enabled
|
|
294
|
+
- `next` → `npm publish --tag next --provenance`
|
|
295
|
+
- `latest` → `npm publish --tag latest --provenance`
|
|
296
|
+
5. ✅ **Stable Release Finalization**: For `latest`, creates a version bump commit, tags it, pushes it to `main`, and creates a GitHub Release
|
|
297
|
+
|
|
298
|
+
### Channel Strategy
|
|
299
|
+
|
|
300
|
+
- **`next`**: prerelease channel for the newest merged changes
|
|
301
|
+
- **`latest`**: stable channel for intentional releases
|
|
302
|
+
- **`patch`**: bug fixes, no breaking changes
|
|
303
|
+
- **`minor`**: new features, backwards compatible
|
|
304
|
+
- **`major`**: breaking changes
|
|
303
305
|
|
|
304
306
|
**Recommended Release Path:**
|
|
305
307
|
|
|
306
|
-
1.
|
|
307
|
-
2.
|
|
308
|
-
3. `
|
|
309
|
-
4. When stable: `1.12.4-beta.1` → `1.12.4`
|
|
308
|
+
1. Merge releasable work to `main`
|
|
309
|
+
2. Let `next` publish for early validation
|
|
310
|
+
3. When ready, cut a stable `latest` release via `patch`, `minor`, or `major`
|
|
310
311
|
|
|
311
312
|
### Verify Publication
|
|
312
313
|
|
|
@@ -314,6 +315,7 @@ The workflow performs these steps:
|
|
|
314
315
|
|
|
315
316
|
```bash
|
|
316
317
|
npm view bmad-method-test-architecture-enterprise
|
|
318
|
+
npm view bmad-method-test-architecture-enterprise dist-tags
|
|
317
319
|
```
|
|
318
320
|
|
|
319
321
|
**Install TEA:**
|
|
@@ -337,24 +339,31 @@ If you need to unpublish a version:
|
|
|
337
339
|
|
|
338
340
|
```bash
|
|
339
341
|
# Unpublish specific version (within 72 hours)
|
|
340
|
-
npm unpublish bmad-method-test-architecture-enterprise@1.
|
|
342
|
+
npm unpublish bmad-method-test-architecture-enterprise@1.13.2-next.0
|
|
341
343
|
|
|
342
344
|
# Deprecate version (preferred for older releases)
|
|
343
|
-
npm deprecate bmad-method-test-architecture-enterprise@1.
|
|
345
|
+
npm deprecate bmad-method-test-architecture-enterprise@1.13.2-next.0 "Use version X.Y.Z instead"
|
|
344
346
|
```
|
|
345
347
|
|
|
346
348
|
### Troubleshooting
|
|
347
349
|
|
|
348
|
-
**
|
|
350
|
+
**Trusted publishing failed:**
|
|
349
351
|
|
|
350
|
-
- Verify
|
|
351
|
-
-
|
|
352
|
+
- Verify npm Trusted Publishing is configured for this repository and workflow
|
|
353
|
+
- Verify the workflow has `id-token: write`
|
|
354
|
+
- Confirm the publish is running from the canonical repository, not a fork
|
|
352
355
|
|
|
353
356
|
**"Package already exists":**
|
|
354
357
|
|
|
355
358
|
- Check if package name is already taken on NPM
|
|
356
359
|
- Update `name` in `package.json` if needed
|
|
357
360
|
|
|
361
|
+
**"Version push failed":**
|
|
362
|
+
|
|
363
|
+
- Verify `RELEASE_APP_ID` and `RELEASE_APP_PRIVATE_KEY` are configured
|
|
364
|
+
- Verify the GitHub App is installed on this repository with contents write access
|
|
365
|
+
- If branch protection is enabled on `main`, verify the app is allowed to push the release commit and tag
|
|
366
|
+
|
|
358
367
|
**"Tests failed":**
|
|
359
368
|
|
|
360
369
|
- Fix failing tests before release
|
|
@@ -362,9 +371,9 @@ npm deprecate bmad-method-test-architecture-enterprise@1.12.4-beta.0 "Use versio
|
|
|
362
371
|
|
|
363
372
|
**"Git push failed (protected branch)":**
|
|
364
373
|
|
|
365
|
-
- This is expected
|
|
366
|
-
-
|
|
367
|
-
-
|
|
374
|
+
- This is not expected once the release GitHub App is configured correctly
|
|
375
|
+
- Verify branch protection allows the app to push the release commit and tag
|
|
376
|
+
- If needed, create the GitHub Release manually after resolving the app permissions
|
|
368
377
|
|
|
369
378
|
### Release Checklist
|
|
370
379
|
|
|
@@ -375,7 +384,8 @@ Before releasing:
|
|
|
375
384
|
- [ ] CHANGELOG.md updated
|
|
376
385
|
- [ ] No uncommitted changes
|
|
377
386
|
- [ ] On `main` branch
|
|
378
|
-
- [ ]
|
|
387
|
+
- [ ] npm Trusted Publishing configured
|
|
388
|
+
- [ ] `RELEASE_APP_ID` and `RELEASE_APP_PRIVATE_KEY` configured
|
|
379
389
|
- [ ] Package name available on NPM
|
|
380
390
|
|
|
381
391
|
After releasing:
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# pack-refs with: peeled fully-peeled sorted
|
|
2
|
-
|
|
2
|
+
b0ee2a5128d0f0b9f32c30a0017722a846518349 refs/remotes/origin/main
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
b0ee2a5128d0f0b9f32c30a0017722a846518349
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
b0ee2a5128d0f0b9f32c30a0017722a846518349
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bmad-method-test-architecture-enterprise",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "bmad-method-test-architecture-enterprise",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.15.1",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@clack/prompts": "^0.11.0",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "bmad-method-test-architecture-enterprise",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.15.1",
|
|
5
5
|
"description": "Master Test Architect for quality strategy, test automation, and release gates",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"bmad",
|
|
@@ -33,11 +33,10 @@
|
|
|
33
33
|
"lint:fix": "eslint . --fix",
|
|
34
34
|
"lint:md": "markdownlint-cli2 '**/*.md'",
|
|
35
35
|
"prepare": "command -v husky >/dev/null 2>&1 && husky || exit 0",
|
|
36
|
-
"release:
|
|
37
|
-
"release:
|
|
38
|
-
"release:
|
|
39
|
-
"release:
|
|
40
|
-
"release:patch": "gh workflow run manual-release.yaml -f version_bump=patch",
|
|
36
|
+
"release:major": "gh workflow run publish.yaml -f channel=latest -f bump=major",
|
|
37
|
+
"release:minor": "gh workflow run publish.yaml -f channel=latest -f bump=minor",
|
|
38
|
+
"release:next": "gh workflow run publish.yaml -f channel=next",
|
|
39
|
+
"release:patch": "gh workflow run publish.yaml -f channel=latest -f bump=patch",
|
|
41
40
|
"test": "npm run test:schemas && npm run test:install && npm run test:knowledge && npm run test:release-metadata && npm run test:tea-workflow-descriptions && npm run validate:schemas && npm run lint && npm run lint:md && npm run format:check",
|
|
42
41
|
"test:coverage": "c8 npm test",
|
|
43
42
|
"test:install": "node test/test-installation-components.js",
|
|
@@ -167,8 +167,7 @@ describe('User API Contract', () => {
|
|
|
167
167
|
```json
|
|
168
168
|
{
|
|
169
169
|
"scripts": {
|
|
170
|
-
"test:pact:consumer": "
|
|
171
|
-
"test:pact:consumer:run": "vitest run --config vitest.config.pact.ts",
|
|
170
|
+
"test:pact:consumer": "vitest run --config vitest.config.pact.ts",
|
|
172
171
|
"publish:pact": ". ./scripts/env-setup.sh && ./scripts/publish-pact.sh"
|
|
173
172
|
}
|
|
174
173
|
}
|
|
@@ -1056,7 +1055,7 @@ Four rules that together prevent both (a) non-deterministic pact generation fail
|
|
|
1056
1055
|
1. **Consumer Vitest `fileParallelism: false`** in `vitest.config.pact.ts` — prevents parallel workers from racing on the shared pact JSON. See `pact-consumer-framework-setup.md` Example 2.
|
|
1057
1056
|
2. **Consumer Vitest `pool: 'forks'` + `poolOptions.forks.singleFork: true`** in `vitest.config.pact.ts` — same config as the provider side (`pactjs-utils-provider-verifier.md` Example 7). Best current understanding: the `@pact-foundation/pact` napi-rs binding is not robust across Vitest worker threads sharing a process; serialization alone (via `fileParallelism: false`) is insufficient on the default threads pool in Vitest v1. Forks + `singleFork: true` runs every pact file in one subprocess with a coherent FFI handle and eliminated a reproducible Linux-CI flake on two repos (`pactjs-utils`, `seon-mcp-server`). Single-file consumer suites have not been observed to flake; this rule is still recommended as a future-proof. See `pact-consumer-framework-setup.md` Example 2.
|
|
1058
1057
|
3. **One `addInteraction()` per `it()` block** — see `pactjs-utils-consumer-helpers.md` Example 6.
|
|
1059
|
-
4.
|
|
1058
|
+
4. **`publish-pact.sh` jq normalization** sorts interactions before publish — ensures byte-stable payload to PactFlow regardless of generator ordering quirks. See `pact-consumer-framework-setup.md` Example 4.
|
|
1060
1059
|
|
|
1061
1060
|
Provider suites require the same `pool: 'forks'` + `singleFork: true` combination — see `pactjs-utils-provider-verifier.md` Example 7.
|
|
1062
1061
|
|