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.
Files changed (98) hide show
  1. package/README.md +13 -5
  2. package/bin/cli.js +140 -63
  3. package/lib/agents.js +12 -20
  4. package/lib/bmad-cache/cache-manifest.json +8 -8
  5. package/lib/bmad-cache/cis/_git_preserved/index +0 -0
  6. package/lib/bmad-cache/cis/_git_preserved/logs/HEAD +1 -1
  7. package/lib/bmad-cache/cis/_git_preserved/logs/refs/heads/main +1 -1
  8. package/lib/bmad-cache/cis/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
  9. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.idx +0 -0
  10. package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.pack → pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.pack} +0 -0
  11. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.rev +0 -0
  12. package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
  13. package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
  14. package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
  15. package/lib/bmad-cache/cis/src/module-help.csv +5 -5
  16. package/lib/bmad-cache/gds/_git_preserved/index +0 -0
  17. package/lib/bmad-cache/gds/_git_preserved/logs/HEAD +1 -1
  18. package/lib/bmad-cache/gds/_git_preserved/logs/refs/heads/main +1 -1
  19. package/lib/bmad-cache/gds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
  20. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.idx +0 -0
  21. package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.pack → pack-9427a146a90c00bb542cba038874bf9671ba4dc0.pack} +0 -0
  22. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.rev +0 -0
  23. package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
  24. package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
  25. package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
  26. package/lib/bmad-cache/gds/src/module-help.csv +34 -34
  27. package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +1 -1
  28. package/lib/bmad-cache/tea/.github/workflows/publish.yaml +168 -0
  29. package/lib/bmad-cache/tea/README.md +67 -57
  30. package/lib/bmad-cache/tea/_git_preserved/index +0 -0
  31. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.idx +0 -0
  32. package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.pack → pack-f0df537f2649464ff6c5aee241165eb9c8664227.pack} +0 -0
  33. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.rev +0 -0
  34. package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
  35. package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
  36. package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
  37. package/lib/bmad-cache/tea/package-lock.json +2 -2
  38. package/lib/bmad-cache/tea/package.json +5 -6
  39. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/contract-testing.md +2 -3
  40. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-consumer-framework-setup.md +42 -95
  41. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-consumer-helpers.md +5 -6
  42. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-provider-verifier.md +1 -1
  43. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +1 -1
  44. package/lib/bmad-cache/tea/src/module-help.csv +9 -9
  45. package/lib/bmad-extension/.claude-plugin/marketplace.json.template +2 -2
  46. package/lib/bmad-extension/skills/add-sprint/SKILL.md +39 -0
  47. package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +39 -0
  48. package/lib/bmad-extension/skills/bmad-dev-story/workflow.md +39 -0
  49. package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +41 -0
  50. package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +39 -0
  51. package/lib/bmad-extension/skills/cleanup-done/SKILL.md +39 -0
  52. package/lib/bmad-extension/skills/close-sprint/SKILL.md +39 -0
  53. package/lib/bmad-extension/skills/generate-backlog/SKILL.md +41 -0
  54. package/lib/bmad-extension/skills/modify-sprint/SKILL.md +39 -0
  55. package/lib/bmad-extension/skills/module.yaml +1 -1
  56. package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +39 -0
  57. package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +39 -0
  58. package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +39 -0
  59. package/lib/bmad-extension/workflows/add-sprint/workflow.md +39 -0
  60. package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +39 -0
  61. package/lib/bmad-extension/workflows/modify-sprint/workflow.md +39 -0
  62. package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +39 -0
  63. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -2
  64. package/lib/bmad-extension-plugin/skills/add-sprint/SKILL.md +39 -0
  65. package/lib/bmad-extension-plugin/skills/add-to-sprint/SKILL.md +39 -0
  66. package/lib/bmad-extension-plugin/skills/bmad-dev-story/workflow.md +39 -0
  67. package/lib/bmad-extension-plugin/skills/bmad-sprint-planning/workflow.md +41 -0
  68. package/lib/bmad-extension-plugin/skills/bmad-sprint-status/workflow.md +39 -0
  69. package/lib/bmad-extension-plugin/skills/cleanup-done/SKILL.md +39 -0
  70. package/lib/bmad-extension-plugin/skills/close-sprint/SKILL.md +39 -0
  71. package/lib/bmad-extension-plugin/skills/generate-backlog/SKILL.md +41 -0
  72. package/lib/bmad-extension-plugin/skills/modify-sprint/SKILL.md +39 -0
  73. package/lib/bmad-extension-plugin/skills/module.yaml +1 -1
  74. package/lib/bmad-extension-plugin/skills/prioritize-backlog/SKILL.md +39 -0
  75. package/lib/bmad-extension-plugin/skills/remove-from-sprint/SKILL.md +39 -0
  76. package/lib/bmad-extension-plugin/skills/sprint-status-view/SKILL.md +39 -0
  77. package/lib/bmad.js +76 -8
  78. package/lib/installer.js +6 -1
  79. package/package.json +4 -4
  80. package/skills/add-sprint/SKILL.md +39 -0
  81. package/skills/add-to-sprint/SKILL.md +39 -0
  82. package/skills/bmad-sprint-planning/SKILL.md +41 -0
  83. package/skills/bmad-sprint-status/SKILL.md +39 -0
  84. package/skills/cleanup-done/SKILL.md +39 -0
  85. package/skills/close-sprint/SKILL.md +39 -0
  86. package/skills/generate-backlog/SKILL.md +41 -0
  87. package/skills/modify-sprint/SKILL.md +39 -0
  88. package/skills/prioritize-backlog/SKILL.md +39 -0
  89. package/skills/remove-from-sprint/SKILL.md +39 -0
  90. package/skills/sprint-status-view/SKILL.md +39 -0
  91. package/skills/story-status-lookup/SKILL.md +38 -21
  92. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.idx +0 -0
  93. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-cad8ff313ea5db860ddcc7780f03917dcba1da8d.rev +0 -0
  94. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.idx +0 -0
  95. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-c1322f7c8531a89dc4f3f34c4955d194f286c1e6.rev +0 -0
  96. package/lib/bmad-cache/tea/.github/workflows/manual-release.yaml +0 -216
  97. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9b16db8eb5022c18cef1f0a27d63b6e0f4bc2b2a.idx +0 -0
  98. 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 release workflow that handles versioning, metadata sync, tagging, NPM publishing, and GitHub releases.
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. **NPM Token Configuration:**
224
- - Generate NPM automation token: [npmjs.com/settings/tokens](https://www.npmjs.com/settings/your-username/tokens)
225
- - Add to GitHub Secrets: `Settings` `Secrets and variables` `Actions` → `New repository secret`
226
- - Name: `NPM_TOKEN`
227
- - Value: [your token]
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
- 2. **Verify Package Configuration:**
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 the release branch you want to publish, typically `main`:
256
+ From your local terminal after merging to `main`:
246
257
 
247
258
  ```bash
248
- # Beta release (first release or testing)
249
- npm run release:beta
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
- # Patch release (bug fixes)
262
+ # Publish a stable patch release
255
263
  npm run release:patch
256
264
 
257
- # Minor release (new features, backwards compatible)
265
+ # Publish a stable minor release
258
266
  npm run release:minor
259
267
 
260
- # Major release (breaking changes)
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 **"Manual Release"** workflow
275
+ 2. Click **"Publish"** workflow
268
276
  3. Click **"Run workflow"**
269
277
  4. Choose the branch to release, typically `main`
270
- 5. Select version bump type (alpha, beta, patch, minor, major)
271
- 6. Click **"Run workflow"**
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**: Updates `package.json`, `package-lock.json`, and `.claude-plugin/marketplace.json`
279
- - `beta`: 1.12.3 1.12.4-beta.0
280
- - `alpha`: 1.12.3 1.12.4-alpha.0
281
- - `patch`: 1.12.3 1.12.4
282
- - `minor`: 1.12.3 1.13.0
283
- - `major`: 1.12.3 2.0.0
284
- 3. **Commit**: Creates version bump commit
285
- 4. ✅ **Tag**: Creates git tag (e.g., v1.12.4-beta.0)
286
- 5. ✅ **Publish**: Publishes to NPM registry
287
- - Alpha → dist-tag `alpha` (`npm install bmad-method-test-architecture-enterprise@alpha`)
288
- - Beta → dist-tag `beta` (`npm install bmad-method-test-architecture-enterprise@beta`)
289
- - Stable dist-tag `latest` (`npm install bmad-method-test-architecture-enterprise`)
290
- 6. **Push**: Pushes the version bump commit back to the selected branch when permitted, and always pushes the tag
291
- 7. **GitHub Release**: Creates release with auto-generated notes
292
- 8. **Summary**: Displays installation instructions and distribution links
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. `1.12.3` `1.12.4-beta.0` (first beta)
307
- 2. Test beta with early adopters
308
- 3. `1.12.4-beta.0` `1.12.4-beta.1` (fixes)
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.12.4-beta.0
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.12.4-beta.0 "Use version X.Y.Z instead"
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
- **"NPM_TOKEN not found":**
350
+ **Trusted publishing failed:**
349
351
 
350
- - Verify secret is set: GitHub repo Settings Secrets and variables → Actions
351
- - Secret name must be exactly: `NPM_TOKEN`
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 for a protected release branch
366
- - The tag and version bump are still created
367
- - You may need to manually merge the version bump commit
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
- - [ ] NPM token configured in GitHub Secrets
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:
@@ -1,2 +1,2 @@
1
1
  # pack-refs with: peeled fully-peeled sorted
2
- 3016dd0390208ef4c9b68841252f6db07fb8805e refs/remotes/origin/main
2
+ b0ee2a5128d0f0b9f32c30a0017722a846518349 refs/remotes/origin/main
@@ -1 +1 @@
1
- 3016dd0390208ef4c9b68841252f6db07fb8805e
1
+ b0ee2a5128d0f0b9f32c30a0017722a846518349
@@ -1 +1 @@
1
- 3016dd0390208ef4c9b68841252f6db07fb8805e
1
+ b0ee2a5128d0f0b9f32c30a0017722a846518349
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "bmad-method-test-architecture-enterprise",
3
- "version": "1.13.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.13.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.13.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:alpha": "gh workflow run manual-release.yaml -f version_bump=alpha",
37
- "release:beta": "gh workflow run manual-release.yaml -f version_bump=beta",
38
- "release:major": "gh workflow run manual-release.yaml -f version_bump=major",
39
- "release:minor": "gh workflow run manual-release.yaml -f version_bump=minor",
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": "./scripts/check-pact-determinism.sh 'npm run test:pact:consumer:run' 3 ./pacts",
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. **Determinism gate** runs the consumer suite N times and fails on byte-different pact JSON before publish see `pact-consumer-framework-setup.md` Example 10 (`scripts/check-pact-determinism.sh`).
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