bmad-method 6.5.0 → 6.5.1-next.1

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-method",
4
- "version": "6.5.0",
4
+ "version": "6.5.1-next.1",
5
5
  "description": "Breakthrough Method of Agile AI-driven Development",
6
6
  "keywords": [
7
7
  "agile",
package/removals.txt CHANGED
@@ -15,3 +15,40 @@ bmad-quick-spec
15
15
  bmad-quick-flow
16
16
  bmad-quick-dev-new-preview
17
17
  bmad-init
18
+
19
+ # Pre-v6.2.0 wrapper skills (module-prefixed naming, dropped in v6.2.0).
20
+ # Users upgrading from v6.0.x / v6.1.x had these installed and the cleanup
21
+ # never knew to remove them; they remained alongside the new self-contained
22
+ # skills causing duplicates and broken-file errors. See issue #2309.
23
+ bmad-agent-bmm-analyst
24
+ bmad-agent-bmm-architect
25
+ bmad-agent-bmm-dev
26
+ bmad-agent-bmm-pm
27
+ bmad-agent-bmm-qa
28
+ bmad-agent-bmm-quick-flow-solo-dev
29
+ bmad-agent-bmm-sm
30
+ bmad-agent-bmm-tech-writer
31
+ bmad-agent-bmm-ux-designer
32
+ bmad-bmm-check-implementation-readiness
33
+ bmad-bmm-code-review
34
+ bmad-bmm-correct-course
35
+ bmad-bmm-create-architecture
36
+ bmad-bmm-create-epics-and-stories
37
+ bmad-bmm-create-prd
38
+ bmad-bmm-create-product-brief
39
+ bmad-bmm-create-story
40
+ bmad-bmm-create-ux-design
41
+ bmad-bmm-dev-story
42
+ bmad-bmm-document-project
43
+ bmad-bmm-domain-research
44
+ bmad-bmm-edit-prd
45
+ bmad-bmm-generate-project-context
46
+ bmad-bmm-market-research
47
+ bmad-bmm-qa-generate-e2e-tests
48
+ bmad-bmm-quick-dev
49
+ bmad-bmm-quick-spec
50
+ bmad-bmm-retrospective
51
+ bmad-bmm-sprint-planning
52
+ bmad-bmm-sprint-status
53
+ bmad-bmm-technical-research
54
+ bmad-bmm-validate-prd
@@ -23,13 +23,10 @@ checkForUpdate().catch(() => {
23
23
 
24
24
  async function checkForUpdate() {
25
25
  try {
26
- // For beta versions, check the beta tag; otherwise check latest
27
- const isBeta =
28
- packageJson.version.includes('Beta') ||
29
- packageJson.version.includes('beta') ||
30
- packageJson.version.includes('alpha') ||
31
- packageJson.version.includes('rc');
32
- const tag = isBeta ? 'beta' : 'latest';
26
+ // Prereleases (e.g. 6.5.1-next.0) live on the `next` dist-tag; stable
27
+ // releases live on `latest`. semver.prerelease() returns null for stable,
28
+ // so this correctly routes pre-1.0-next/rc/etc. without string matching.
29
+ const tag = semver.prerelease(packageJson.version) ? 'next' : 'latest';
33
30
 
34
31
  const result = execSync(`npm view ${packageName}@${tag} version`, {
35
32
  encoding: 'utf8',
@@ -2,6 +2,7 @@ const path = require('node:path');
2
2
  const os = require('node:os');
3
3
  const semver = require('semver');
4
4
  const fs = require('./fs-native');
5
+ const installerPackageJson = require('../../package.json');
5
6
  const { CLIUtils } = require('./cli-utils');
6
7
  const { ExternalModuleManager } = require('./modules/external-manager');
7
8
  const { resolveModuleVersion } = require('./modules/version-resolver');
@@ -128,6 +129,24 @@ class UI {
128
129
  await prompts.log.warn(warning);
129
130
  }
130
131
 
132
+ // When the user launched the installer from a prerelease (npx bmad-method@next),
133
+ // mirror that intent for external modules: seed the global channel to 'next' so
134
+ // the module picker's version labels resolve from main HEAD (matching what
135
+ // actually gets installed) and the interactive channel gate skips — the user
136
+ // already declared "next" intent by typing @next. Explicit channel flags
137
+ // override this seed.
138
+ if (
139
+ semver.prerelease(installerPackageJson.version) !== null &&
140
+ !channelOptions.global &&
141
+ channelOptions.nextSet.size === 0 &&
142
+ channelOptions.pins.size === 0
143
+ ) {
144
+ channelOptions.global = 'next';
145
+ await prompts.log.info(
146
+ 'Launched from a prerelease — installing all external modules from main HEAD (next channel). Pass --all-stable or --pin to override.',
147
+ );
148
+ }
149
+
131
150
  // Get directory from options or prompt
132
151
  let confirmedDirectory;
133
152
  if (options.directory) {
@@ -332,8 +351,10 @@ class UI {
332
351
 
333
352
  // Interactive channel gate: "Ready to install (all stable)? [Y/n]"
334
353
  // Only shown for fresh installs with no channel flags and an external module
335
- // selected. Non-interactive installs skip this and fall through to the
336
- // registry default (stable) or whatever flags were supplied.
354
+ // selected. Skipped for prerelease launches because channelOptions.global
355
+ // was already seeded to 'next' upstream. Non-interactive installs skip this
356
+ // and fall through to the registry default (stable) or whatever flags were
357
+ // supplied.
337
358
  await this._interactiveChannelGate({ options, channelOptions, selectedModules });
338
359
 
339
360
  let toolSelection = await this.promptToolSelection(confirmedDirectory, options);
@@ -1783,7 +1804,9 @@ class UI {
1783
1804
  *
1784
1805
  * Skipped when:
1785
1806
  * - running non-interactively (--yes)
1786
- * - the user already passed channel flags (--channel / --pin / --next)
1807
+ * - the user already passed channel flags (--channel / --pin / --next), OR
1808
+ * the installer was launched from a prerelease (which seeds
1809
+ * channelOptions.global = 'next' upstream in promptInstall)
1787
1810
  * - no externals/community modules are selected
1788
1811
  *
1789
1812
  * Mutates channelOptions.pins and channelOptions.nextSet to reflect picker choices.