bmad-plus 0.16.0 → 0.17.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +114 -29
  2. package/README.md +45 -27
  3. package/SECURITY.md +9 -1
  4. package/osint-agent-package/README.md +13 -0
  5. package/osint-agent-package/SETUP_KEYS.md +13 -0
  6. package/package.json +32 -8
  7. package/readme-international/README.de.md +134 -537
  8. package/readme-international/README.es.md +136 -556
  9. package/readme-international/README.fr.md +135 -553
  10. package/src/bmad-plus/agents/agent-shadow/SKILL.md +6 -0
  11. package/src/bmad-plus/packs/pack-memory/README.md +1 -1
  12. package/src/bmad-plus/packs/pack-memory/memory-orchestrator.md +1 -1
  13. package/src/bmad-plus/packs/pack-memory/shared/memory-protocol.md +1 -1
  14. package/src/bmad-plus/packs/pack-shield/README.md +2 -0
  15. package/src/bmad-plus/packs/pack-shield/SKILL.md +2 -0
  16. package/src/bmad-plus/packs/pack-shield/shared/audit-report-template.md +6 -0
  17. package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +4 -0
  18. package/src/bmad-plus/skills/bmad-plus-uat/SKILL.md +18 -4
  19. package/src/bmad-plus/skills/bmad-plus-uat/template/page.html +95 -19
  20. package/src/bmad-plus/skills/bmad-plus-uat/template/strings.json +90 -10
  21. package/src/bmad-plus/skills/bmad-plus-uat/templates/README.md +63 -0
  22. package/src/bmad-plus/skills/bmad-plus-uat/templates/example-uat-spec.json +95 -0
  23. package/src/bmad-plus/skills/bmad-plus-uat/templates/uat-release-gate.mjs +127 -0
  24. package/src/bmad-plus/skills/bmad-plus-uat/templates/uat-spec-present.mjs +77 -0
  25. package/tools/build/adapters.config.js +1 -1
  26. package/tools/build/generate-adapters.js +186 -60
  27. package/tools/build/generate.js +49 -13
  28. package/tools/cli/bmad-plus-cli.js +3 -6
  29. package/tools/cli/commands/autoconfig.js +66 -24
  30. package/tools/cli/commands/install.js +620 -356
  31. package/tools/cli/commands/memory.js +40 -13
  32. package/tools/cli/commands/scan.js +94 -30
  33. package/tools/cli/commands/uat.js +21 -5
  34. package/tools/cli/commands/uninstall.js +65 -16
  35. package/tools/cli/commands/update-check.js +8 -3
  36. package/tools/cli/commands/update-policy.js +14 -5
  37. package/tools/cli/commands/update.js +89 -20
  38. package/tools/cli/i18n.js +128 -66
  39. package/tools/cli/lib/ide-config.js +3 -1
  40. package/tools/cli/lib/install-manifest.js +13 -6
  41. package/tools/cli/lib/installation-health.js +33 -1
  42. package/tools/cli/lib/installed-adapters.js +29 -6
  43. package/tools/cli/lib/memory-init.js +19 -4
  44. package/tools/cli/lib/packs.js +17 -28
  45. package/tools/cli/lib/path-hash.js +5 -1
  46. package/tools/cli/lib/python-provision.js +51 -12
  47. package/tools/cli/lib/stack-detect.js +51 -25
  48. package/tools/cli/lib/uat.js +18 -0
  49. package/tools/cli/lib/update-check.js +132 -34
  50. package/tools/cli/lib/update-dispatch.js +2 -2
  51. package/tools/cli/lib/update-policy.js +57 -19
  52. package/tools/cli/lib/update-transaction.js +439 -85
  53. package/tools/build/README.md +0 -78
  54. package/tools/build/check-counts.js +0 -626
  55. package/tools/build/check-install-contract.js +0 -648
  56. package/tools/build/generated-adapters/.codex/AGENTS.md +0 -134
  57. package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +0 -139
  58. package/tools/build/generated-adapters/.opencode/AGENTS.md +0 -134
  59. package/tools/build/generated-adapters/AGENTS.md +0 -132
  60. package/tools/build/generated-adapters/CLAUDE.md +0 -135
  61. package/tools/build/generated-adapters/CONVENTIONS.md +0 -134
  62. package/tools/build/generated-adapters/GEMINI.md +0 -139
  63. package/tools/build/generated-adapters/README.md +0 -79
  64. package/tools/maintain/upstream-candidate.js +0 -456
  65. package/tools/release/publication-content.js +0 -903
  66. package/tools/release/supply-chain.js +0 -282
package/CHANGELOG.md CHANGED
@@ -7,6 +7,55 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.17.1] - 2026-09-24
11
+
12
+ ### Changed
13
+ - **`install` no longer overwrites a different installed version.** A downgrade is refused; an upgrade stops and points to `bmad-plus update`, which keeps backups and restorable receipts. Re-installing the same version only adds what is missing. Scripts that re-ran `install` to change versions must call `update` instead.
14
+ - **`--packs` and `--tools` add to the previous installation** instead of replacing it. An unknown pack or tool ID now fails before anything is written, and the error lists the valid IDs.
15
+ - **Unattended installs default to English.** Without a terminal, the communication language comes from `--lang`, then from the system locale, then English. `--yes` with no detected AI tool writes no adapter files.
16
+ - `update` deletes files that a new version no longer ships when you have not changed them; each deletion is backed up in the update receipt and `--restore` brings it back. Files you edited are kept and reported as `modified-orphaned-file`.
17
+ - The npm package no longer ships the maintainers' release and maintenance scripts, only the launcher, the CLI and the build modules it needs at runtime. The archive is smaller; installed projects are unaffected.
18
+ - The OSINT pack opens with a legal and ethics notice (GDPR lawful basis, platform terms, no private profiling), and Shadow's reports start with an AI-generated, not-legal-advice disclaimer. Shadow is described as governed public-source research; its lawful-basis gate is unchanged.
19
+ - The Shield pack and its audit report template carry a shared not-legal-advice notice, an AI-generated banner and a qualified-reviewer sign-off field.
20
+
21
+ ### Fixed
22
+ - Re-installing keeps your `_bmad/config.yaml`: existing settings win, missing defaults are added, and an unparsable file is left untouched. The manifest and configuration are written atomically, so an interrupted install cannot leave them half-written.
23
+ - A `.bmad/update.lock` left by a crashed process no longer blocks the project: when its owner is provably dead on this machine, the lock is moved aside and taken over. Other stale locks are reported by `doctor`, and the error states the manual remedy.
24
+ - `uninstall` accepts `-d`/`--directory` like the other maintenance commands. Help names the program `bmad-plus`, and a subcommand's `--lang` is no longer swallowed by a global option.
25
+ - The installer shows each pack with its emoji icon.
26
+ - Release automation now waits for npm's publish-time scanning before verifying public archive integrity. Polling is bounded to thirty attempts with thirty-second intervals and a twenty-minute step limit. An unavailable version still blocks the landing, and recovery instructions explicitly forbid uploading the same version again.
27
+
28
+ ### Security
29
+ - The development-only `js-yaml` copy used by the coverage tooling is pinned to the patched 4.3.2. The production dependency audit remains clean.
30
+
31
+ ### Documentation
32
+ - The French, Spanish and German READMEs mirror the public README section by section. The README states that BMAD+ is not affiliated with BMad Code, LLC, and replaces the BMAD-METHOD comparison with a factual list of what BMAD+ ships.
33
+ - The website shows the install command with a copy control in its hero, supports a dark color scheme, folds navigation on small screens and names the supported tools.
34
+
35
+ ## [0.17.0] - 2026-09-22
36
+
37
+ ### Added
38
+ - The acceptance skill ships the two project gates it describes: `uat-spec-present.mjs` refuses a version that no recipe names, and `uat-release-gate.mjs` refuses a deployment whose recipe has no finished, current and classified run. Both need only Node, read the gate's own answer rather than guessing from an exit code, and report a gate that could not run as exactly that — never as a pass. `templates/README.md` carries the wiring.
39
+
40
+ - BMAD+ submits to its own gate. Its recipe describes what a person walks in a fresh project — install, roster, doctor, one workflow, an acceptance page, update awareness, and an uninstall that keeps the project's memory. Recipes, runs and triage stay on the maintainer's machine under `recettes/`: they carry local paths and terminal output, so git ignores the folder, the public mirror scrubs it and npm never packs it. A versioned `.husky/pre-push` hook refuses to push a `v*` tag — the push that publishes — unless `npm run uat:spec` and `npm run uat:gate` pass on that machine.
41
+ - The skill ships `templates/example-uat-spec.json`, a complete specification to copy, with a witness and its proof, a writing step and its read-only confirmation, and a positive control. A test keeps it passing the lint it teaches.
42
+
43
+ ### Changed
44
+ - Public guides and generated npm documentation explain the acceptance fixes, include prompts for reviewing results and maintaining project memory, and stay synchronized in English, French, Spanish and German. The landing links to the official public source from its menu, footer and discovery assets.
45
+ - Release checks distinguish automated evidence, human observations and an explicit `accept-risk` decision by a named owner. A blocked expectation cannot be presented as observed merely because it was classified.
46
+
47
+ ### Fixed
48
+ - The distribution scrub now covers every maintainer adapter declared in the registry, including Codex, Cursor, OpenCode and Aider root files. Installed product templates remain available. A registry-derived regression check guards future adapter additions.
49
+ - **A blocked expectation can no longer pass the gate on a classification alone.** Nothing was observed, so explaining why establishes nothing about the product: the gate now requires a replay, or an `accept-risk` decision signed with `decidedBy`. The second run of BMAD+'s own recipe had 17 of 21 expectations blocked, all rightly classified as recipe defects — and would otherwise have passed.
50
+ - `uat build <id>` finds a recipe by its id whatever its file is called: the shipped `example-uat-spec.json` holds `example-1.0.0`, and building it by id used to report that no spec existed.
51
+ - **The acceptance page could discard a whole run in silence.** Classes that set `display` overrode the `hidden` attribute, so the steps showed before any run existed; a tester could tick and annotate every step, nothing was recorded, and "Save the JSON" exported `null.json`. The page now hides what must stay hidden whatever a class says, refuses to record, finish or export before a run starts, and says so where the tester is looking. Pages served inside claude.ai were protected by the host's own stylesheet, which is why the defect only appeared through `uat serve` and local files — it also affects 0.16.0.
52
+ - The page's progress bar shows one segment per step — green seen, red not seen, orange blocked, grey skipped — with the tester and the finish date ("Run by laurent · finished on 2026-09-16") and each count spelled out; a segment jumps to its step.
53
+ - A command in a "Do" line copies itself on click, and the lint warns when punctuation follows a command: testers had copied `doctor.` from a sentence into their terminal.
54
+ - The installer's test-environment question is translated into the ten installer languages.
55
+ - The skill asked for `recette.mode` while installation writes a `uat` block; it now names `uat.mode` and states that an absent block means `advisory`, which is what an updated project has until its configuration is extended by hand.
56
+ - The release gate ran the CLI through `npx`, which cannot be spawned without a shell on Windows: the gate reported `spawnSync npx.cmd EINVAL` instead of a verdict. It now runs the CLI's own entry point with the Node that started it, taken from `--cli`, from `BMAD_PLUS_CLI`, or from the project's `node_modules`, and says plainly when there is none.
57
+ - `autoconfig` no longer takes a health argument it never read.
58
+
10
59
  ## [0.16.0] - 2026-09-16
11
60
 
12
61
  ### Added
@@ -153,7 +202,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
153
202
  ### Verified
154
203
  - `npm test` 333/333 (16 suites); lint 0 errors under eslint 10; both `npx npm@10 ci --dry-run` and `npm ci --dry-run` green; CI + Platform workflows green on GOLDEN master.
155
204
 
156
- ## [0.12.0] — 2026-07-02
205
+ ## [0.12.0] - 2026-07-02
157
206
 
158
207
  ### Added — Load-bearing activation (north-star Pillars 3, 4, 5)
159
208
  - **Pillar 4 executable:** `evals/_runner/providers.py` — a provider-neutral model gateway (anthropic / openai / generic-HTTP adapters selected by `BMAD_EVAL_PROVIDER`, default deterministic **mock** so `--self-check` and CI never hit the network). `run_agent(spec, model)` now routes through it; the eval harness genuinely runs (3/3 specs pass).
@@ -166,7 +215,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
166
215
  ### Verified
167
216
  - `npm test` **333 passed / 16 suites**; `build:check` + `generate-adapters --check` no drift; `run.py --self-check` 3/3; edited Python parses.
168
217
 
169
- ## [0.11.0] — 2026-07-02
218
+ ## [0.11.0] - 2026-07-02
170
219
 
171
220
  ### Added — Karpathy loop CLI + multi-CLI adapters (north-star Pillars 3 & 5)
172
221
  - **`bmad mem` command (Pillar 3):** `recall <query>` / `write` / `reinforce` expose the memory-journal (append/recall + Elo reward + governance guard) from the CLI, so the learning loop is usable from any driving tool. `tests/unit/memory-journal-cmd.test.js`.
@@ -179,7 +228,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
179
228
  ### Verified
180
229
  - `npm test` **325 passed / 16 suites**; `npm run build:check` no drift; `generate-adapters.js --check` no drift.
181
230
 
182
- ## [0.10.0] — 2026-07-02
231
+ ## [0.10.0] - 2026-07-02
183
232
 
184
233
  ### Added — Platform-spine foundations (north-star Phase 2)
185
234
  Built as **new files only** (no existing core file modified); test suite grew from 176/10 to **258 passed / 13 suites**. Cut nothing; multi-tool/multi-model preserved.
@@ -192,7 +241,7 @@ Built as **new files only** (no existing core file modified); test suite grew fr
192
241
 
193
242
  Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remaining integration (provisioning called from install, memory exposed via MCP, generated multi-CLI adapters) lands next as its own tested commit — see `audit/2026-07-01/PHASE-2-STATUS.md`.
194
243
 
195
- ## [0.9.2] — 2026-07-01
244
+ ## [0.9.2] - 2026-07-01
196
245
 
197
246
  ### Security — Phase 1 remediation (exploitable findings)
198
247
  - **RCE closed** (`ci_cd.py`): command allowlist now uses exact-token matching (shlex.split) + realpath/commonpath containment instead of prefix/`startswith` — defeats argument injection (`make -f attacker.mk`) and sibling-path bypass; `shell=False` throughout; dead Makefile fallback removed.
@@ -213,7 +262,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
213
262
  - Documented residual follow-ups (SSRF crawler-class redirect hops, DNS-rebinding IP pinning, Dockerfile digest pin) are tracked in `audit/2026-07-01/PHASE-1-STATUS.md`.
214
263
  - Verified: `npm test` 176/176, `npm run lint` 0 errors, all edited Python parses; SEO report smoke-tested (renders + XSS escaped).
215
264
 
216
- ## [0.9.1] — 2026-07-01
265
+ ## [0.9.1] - 2026-07-01
217
266
 
218
267
  ### Fixed — Credibility (honest status)
219
268
  - **Real CI on push/PR** (`.github/workflows/ci.yml`): lint + test + npm audit, all blocking. Previously the only workflow ran at release-tag and swallowed failures with `|| echo`.
@@ -228,7 +277,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
228
277
  - Fixed the corrupted version-history table (0.9.0/0.8.0 were duplicated).
229
278
  - **Note on 0.9.0 below:** the "64/64 fixed, score A+" and "auth on all endpoints" claims in the 0.9.0 entry were **overstated**. A 2026-07-01 adversarial re-audit (see `audit/2026-07-01/`) found 102 open findings and re-graded the project **C+**. The MCP token *is* checked by middleware on `/sse` and `/messages/`, but the prior "all endpoints" phrasing and the A+ score were not accurate. This release begins the honest remediation.
230
279
 
231
- ## [0.9.0] — 2026-06-24
280
+ ## [0.9.0] - 2026-06-24
232
281
 
233
282
  ### Security
234
283
  - Full audit remediation: 64/64 findings fixed, score C- → A+
@@ -256,7 +305,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
256
305
  ### Tests
257
306
  - 143/143 tests passing
258
307
 
259
- ## [0.8.0] — 2026-06-24
308
+ ## [0.8.0] - 2026-06-24
260
309
 
261
310
  ### Added
262
311
  - 3 new packs: pack-animated (web animation agent), pack-backup (universal backup agent), pack-seo (full SEO audit — 15 files with agents, refs, templates, playbooks)
@@ -281,7 +330,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
281
330
  ### Tests
282
331
  - 143/143 tests passing ✅
283
332
 
284
- ## [0.7.5] — 2026-05-17
333
+ ## [0.7.5] - 2026-05-17
285
334
 
286
335
  ### 🩺 Quality & Compliance
287
336
 
@@ -299,7 +348,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
299
348
  - 2 decisions (anti-regression protocol, i18n-first CLI)
300
349
  - 2 patterns (dual-tier memory, surgical edit protocol)
301
350
 
302
- ## [0.7.4] — 2026-05-17
351
+ ## [0.7.4] - 2026-05-17
303
352
 
304
353
  ### 🧠 Smart Autoconfig
305
354
 
@@ -314,7 +363,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
314
363
  ### Fixed
315
364
  - `--tools none` installer crash (undefined IDE name)
316
365
 
317
- ## [0.7.3] — 2026-05-17
366
+ ## [0.7.3] - 2026-05-17
318
367
 
319
368
  ### 🎨 Scan UX Improvements
320
369
 
@@ -323,11 +372,11 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
323
372
  - **`--active-days <n>`** — Custom threshold for "active" status (default: 30 days)
324
373
  - **`--paused-days <n>`** — Custom threshold for "paused" status (default: 180 days)
325
374
 
326
- ## [0.7.2] - 2026-06-XX
375
+ ## [0.7.2] - 2026-05-17
327
376
  ### Fixed
328
377
  - `scan` command: `bmad-plus scan <path>` now accepts a positional path argument
329
378
 
330
- ## [0.7.1] — 2026-05-17
379
+ ## [0.7.1] - 2026-05-17
331
380
 
332
381
  ### 🛠️ CLI Commands & Guardrails Injection
333
382
 
@@ -346,7 +395,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
346
395
  - **Karpathy Guardrails injection** — 4 principles auto-injected into CLAUDE.md/GEMINI.md/AGENTS.md when Memory pack is installed
347
396
  - **i18n** — Memory + Dev Studio keys for EN and FR (other languages use fallback)
348
397
 
349
- ## [0.7.0] — 2026-05-17
398
+ ## [0.7.0] - 2026-05-17
350
399
 
351
400
  ### 🧠 Pack Memory — Persistent Brain
352
401
 
@@ -366,7 +415,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
366
415
  - IDE config generation: Zecher agent listed when memory pack selected
367
416
  - Install guide: memory-specific examples (Zecher commands)
368
417
 
369
- ## [0.6.0] — 2026-05-17
418
+ ## [0.6.0] - 2026-05-17
370
419
 
371
420
  ### 🏗️ Pack Dev Studio — Full Software Development Lifecycle
372
421
 
@@ -389,7 +438,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
389
438
  - **install.js** — IDE configs now include 6 Torah-named agents when Dev Studio is selected
390
439
  - **Version reference** — Updated from BMAD-METHOD v6.2.0 to v6.6.0
391
440
 
392
- ## [0.5.0] — 2026-05-17
441
+ ## [0.5.0] - 2026-05-17
393
442
 
394
443
  > **Correction (2026-07-15)** — as published, this section announced "38 expert compliance agents"
395
444
  > and "85 Reference Files". Both were false on the day they were written, so they are corrected
@@ -429,7 +478,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
429
478
 
430
479
  ---
431
480
 
432
- ## [0.4.4] — 2026-05-17
481
+ ## [0.4.4] - 2026-05-17
433
482
 
434
483
  ### 🔧 Encoding Fix + i18n Complete + Tests
435
484
 
@@ -445,7 +494,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
445
494
 
446
495
  ---
447
496
 
448
- ## [0.4.3] — 2026-05-17
497
+ ## [0.4.3] - 2026-05-17
449
498
 
450
499
  ### 🔧 CLI Commands + Security Hardening + UX Enhancements
451
500
 
@@ -473,7 +522,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
473
522
 
474
523
  ---
475
524
 
476
- ## [0.4.2] — 2026-03-19
525
+ ## [0.4.2] - 2026-03-19
477
526
 
478
527
  ### 📦 Public Packs — SEO/Backup/Animated now in npm
479
528
 
@@ -484,7 +533,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
484
533
 
485
534
  ---
486
535
 
487
- ## [0.4.1] — 2026-03-19
536
+ ## [0.4.1] - 2026-03-19
488
537
 
489
538
  ### 🌐 CLI Internationalization + DevOps Hardening
490
539
 
@@ -502,7 +551,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
502
551
 
503
552
  ---
504
553
 
505
- ## [0.4.0] — 2026-03-19
554
+ ## [0.4.0] - 2026-03-19
506
555
 
507
556
  ### 🏢 SEO Engine — Enterprise Extensions (Sprint 4)
508
557
 
@@ -518,7 +567,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
518
567
 
519
568
  ---
520
569
 
521
- ## [0.3.3] — 2026-03-19
570
+ ## [0.3.3] - 2026-03-19
522
571
 
523
572
  ### 🧪 SEO Engine — Quality & Security (Sprint 3)
524
573
 
@@ -530,7 +579,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
530
579
 
531
580
  ---
532
581
 
533
- ## [0.3.2] — 2026-03-19
582
+ ## [0.3.2] - 2026-03-19
534
583
 
535
584
  ### 📊 SEO Engine — Reports, Competitor & Hreflang (Sprint 2)
536
585
 
@@ -541,7 +590,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
541
590
 
542
591
  ---
543
592
 
544
- ## [0.3.1] — 2026-03-19
593
+ ## [0.3.1] - 2026-03-19
545
594
 
546
595
  ### 🔧 SEO Engine Enhancements (Sprint 1)
547
596
 
@@ -553,7 +602,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
553
602
 
554
603
  ---
555
604
 
556
- ## [0.3.0] — 2026-03-19
605
+ ## [0.3.0] - 2026-03-19
557
606
 
558
607
  ### 🚀 SEO Engine v2.0 — Complete Rewrite
559
608
 
@@ -590,7 +639,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
590
639
 
591
640
  ---
592
641
 
593
- ## [0.2.0] — 2026-03-18
642
+ ## [0.2.0] - 2026-03-18
594
643
 
595
644
  ### 🔀 Oveanet Fusion
596
645
 
@@ -611,7 +660,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
611
660
 
612
661
  ---
613
662
 
614
- ## [0.1.3] — 2026-03-18
663
+ ## [0.1.3] - 2026-03-18
615
664
 
616
665
  ### 🔧 Cross-Platform Fix
617
666
 
@@ -621,7 +670,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
621
670
 
622
671
  ---
623
672
 
624
- ## [0.1.2] — 2026-03-17
673
+ ## [0.1.2] - 2026-03-17
625
674
 
626
675
  ### 📝 Credits Update
627
676
 
@@ -631,7 +680,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
631
680
 
632
681
  ---
633
682
 
634
- ## [0.1.1] — 2026-03-17
683
+ ## [0.1.1] - 2026-03-17
635
684
 
636
685
  ### 👤 Author Attribution
637
686
 
@@ -641,7 +690,7 @@ Pillar 1 is wired (packs.js generated + `npm run build`/`build:check`). Remainin
641
690
 
642
691
  ---
643
692
 
644
- ## [0.1.0] — 2026-03-17
693
+ ## [0.1.0] - 2026-03-17
645
694
 
646
695
  ### 🎉 Initial Release — Foundation
647
696
 
@@ -709,3 +758,39 @@ First release of BMAD+, an augmented fork of BMAD-METHOD v6.2.0.
709
758
  ---
710
759
 
711
760
  *For earlier history, see the upstream [BMAD-METHOD CHANGELOG](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md).*
761
+
762
+ <!-- Version links point to the npm release page. The public repository is a single snapshot, so per-version compare links are not available. Not published on npm: 0.15.0, 0.11.0, 0.10.0, 0.1.2. -->
763
+
764
+ [0.17.1]: https://www.npmjs.com/package/bmad-plus/v/0.17.1
765
+ [0.17.0]: https://www.npmjs.com/package/bmad-plus/v/0.17.0
766
+ [0.16.0]: https://www.npmjs.com/package/bmad-plus/v/0.16.0
767
+ [0.14.0]: https://www.npmjs.com/package/bmad-plus/v/0.14.0
768
+ [0.13.0]: https://www.npmjs.com/package/bmad-plus/v/0.13.0
769
+ [0.12.2]: https://www.npmjs.com/package/bmad-plus/v/0.12.2
770
+ [0.12.1]: https://www.npmjs.com/package/bmad-plus/v/0.12.1
771
+ [0.12.0]: https://www.npmjs.com/package/bmad-plus/v/0.12.0
772
+ [0.9.2]: https://www.npmjs.com/package/bmad-plus/v/0.9.2
773
+ [0.9.1]: https://www.npmjs.com/package/bmad-plus/v/0.9.1
774
+ [0.9.0]: https://www.npmjs.com/package/bmad-plus/v/0.9.0
775
+ [0.8.0]: https://www.npmjs.com/package/bmad-plus/v/0.8.0
776
+ [0.7.5]: https://www.npmjs.com/package/bmad-plus/v/0.7.5
777
+ [0.7.4]: https://www.npmjs.com/package/bmad-plus/v/0.7.4
778
+ [0.7.3]: https://www.npmjs.com/package/bmad-plus/v/0.7.3
779
+ [0.7.2]: https://www.npmjs.com/package/bmad-plus/v/0.7.2
780
+ [0.7.1]: https://www.npmjs.com/package/bmad-plus/v/0.7.1
781
+ [0.7.0]: https://www.npmjs.com/package/bmad-plus/v/0.7.0
782
+ [0.6.0]: https://www.npmjs.com/package/bmad-plus/v/0.6.0
783
+ [0.5.0]: https://www.npmjs.com/package/bmad-plus/v/0.5.0
784
+ [0.4.4]: https://www.npmjs.com/package/bmad-plus/v/0.4.4
785
+ [0.4.3]: https://www.npmjs.com/package/bmad-plus/v/0.4.3
786
+ [0.4.2]: https://www.npmjs.com/package/bmad-plus/v/0.4.2
787
+ [0.4.1]: https://www.npmjs.com/package/bmad-plus/v/0.4.1
788
+ [0.4.0]: https://www.npmjs.com/package/bmad-plus/v/0.4.0
789
+ [0.3.3]: https://www.npmjs.com/package/bmad-plus/v/0.3.3
790
+ [0.3.2]: https://www.npmjs.com/package/bmad-plus/v/0.3.2
791
+ [0.3.1]: https://www.npmjs.com/package/bmad-plus/v/0.3.1
792
+ [0.3.0]: https://www.npmjs.com/package/bmad-plus/v/0.3.0
793
+ [0.2.0]: https://www.npmjs.com/package/bmad-plus/v/0.2.0
794
+ [0.1.3]: https://www.npmjs.com/package/bmad-plus/v/0.1.3
795
+ [0.1.1]: https://www.npmjs.com/package/bmad-plus/v/0.1.1
796
+ [0.1.0]: https://www.npmjs.com/package/bmad-plus/v/0.1.0
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # BMAD+
2
2
 
3
- [![Version](https://img.shields.io/badge/version-0.16.0-blue)](https://www.npmjs.com/package/bmad-plus)
3
+ [![Version](https://img.shields.io/badge/version-0.17.1-blue)](https://www.npmjs.com/package/bmad-plus)
4
4
 
5
- **Version 0.16.0** · Node.js `>=20.0.0` · MIT
5
+ **Version 0.17.1** · Node.js `>=20.0.0` · MIT
6
6
 
7
7
  Project-local AI development workflows with clear roles, shared context, safe updates and coding-tool adapters
8
8
 
@@ -35,7 +35,7 @@ Run the installer. Select the adapters for the AI tools you use and the packs yo
35
35
  **In your project terminal:**
36
36
 
37
37
  ```sh
38
- npx bmad-plus@0.16.0 install
38
+ npx bmad-plus@0.17.1 install
39
39
  ```
40
40
 
41
41
  The installer creates the agent instructions, shared project spine and selected tool adapters. Optional packs may need additional runtimes or API access.
@@ -136,37 +136,55 @@ Expected result: bounded assignments, explicit dependencies and one integrated r
136
136
  Use when a version reaches your test environment and someone must check it on screen.
137
137
 
138
138
  ```text
139
- Sentinel, write the acceptance recipe for this delivery on our test environment. One step per gesture, one verifiable fact per line, on-screen labels quoted from the code, and mark the steps that write for real. Build the page, then tell me the link, how long it takes and what I must not skip.
139
+ Sentinel, write the acceptance recipe for this delivery on our test environment. One step per gesture, one verifiable fact per line, on-screen labels quoted from the code, and mark the steps that write for real. Build the page, then tell me the link, how long it takes and what I must not skip. Use disposable test data when possible, name the exact folder and files each command changes, and keep automated evidence separate from the person’s answers.
140
140
  ```
141
141
 
142
142
  Expected result: a page a non-technical person can play, and a run the agent reads back to classify every failure before anything is fixed.
143
143
 
144
+ ### Save a session with Zecher
145
+
146
+ Use before ending a session, with the optional Memory pack installed.
147
+
148
+ ```text
149
+ Zecher, update this project’s memory from the changes and checks we actually completed. Separate implemented, tested, published and still pending work. Record decisions and useful evidence, archive superseded notes without deleting them, and write a short prompt for the next session. Keep project memory local and exclude secrets.
150
+ ```
151
+
152
+ Expected result: a concise current context, a dated session handoff and a restart prompt that identifies the next unfinished task.
153
+
154
+ ### Read a test run without guessing
155
+
156
+ Use when a person has completed or stopped an acceptance run.
157
+
158
+ ```text
159
+ Sentinel, read the latest acceptance run and compare its fingerprint with the current recipe. Ask what actually happened when answers and evidence disagree. Classify failures before proposing fixes, verify writing steps read-only, and distinguish human observations, automated checks and any explicit risk decision by its named owner. Never mark an unperformed step as passed.
160
+ ```
161
+
162
+ Expected result: a clear verdict, evidence for confirmed writes and a short list of checks still requiring action.
163
+
144
164
  ### Resume without losing decisions
145
165
 
146
- Use at the start of a later session in the same project.
166
+ Use at the start of a later session in the same project; no optional pack is required.
147
167
 
148
168
  ```text
149
- Read AGENTS.md and the available project memory. Summarize the last verified state, open decisions and the next unfinished task. Check that the notes still match the code before continuing.
169
+ Read AGENTS.md and the available project memory. Summarize the last verified state, open decisions and the next unfinished task. Distinguish released features from local candidates, and automated checks from human acceptance. Check that the notes still match the code before continuing.
150
170
  ```
151
171
 
152
172
  Expected result: a short, evidence-based restart. Project notes are useful context and still need to be checked against the current work.
153
173
 
154
- ## What’s new in 0.16.0
174
+ ## What’s new in 0.17.1
155
175
 
156
- Human acceptance, written down and read back
176
+ Safer installs and cleaner updates
157
177
 
158
- A delivery now produces a step-by-step page a person plays, and their run comes back as evidence the agents read, classify and gate on. This release also carries what 0.15.0 had prepared and never shipped: durable Nexus execution, evidence-ranked memory and scored checks for every pack.
178
+ Installing over a different version now stops and points to update, re-installs keep your settings, and updates remove files a version no longer ships while keeping a restorable backup. Some install behaviors changed; review your scripts before rerunning them.
159
179
 
160
- - bmad-plus uat builds a self-contained acceptance page from a JSON specification: one verifiable fact per line, on-screen labels quoted from your own code, and every step that writes for real marked as such.
161
- - The tester answers Seen, Not seen or Blocked and writes what they saw instead. Answers are saved as they go — straight into the project with uat serve, or in the page itself when it travels as a file.
162
- - uat read returns every failure with its expectation and the tester note; uat gate passes only when the run is finished, answers the current revision of the recipe, is fully classified, and every writing step was confirmed read-only.
163
- - The page speaks the ten languages of the installer, opens in the project language and lets the tester switch. Sentinel gains a Recette role, and the delivery report quotes the run instead of claiming acceptance.
164
- - Nexus records task dependencies, write scopes, attempts and recovery evidence. Use nexus create --plan plan.json, then nexus launch RUN TASK for an explicitly configured command or Codex CLI process.
165
- - After launch, inspect the run, collect its exact attempt identity, run nexus verify RUN TASK and finally nexus accept RUN TASK. A finished process or an agent's success message cannot replace independent checks; host permissions still apply.
166
- - mem observe --input observation.json links one project memory section to a currently accepted Nexus task. mem recall QUERY --ranking evidence --context-scope PATH rechecks the evidence; stale, superseded or explicitly conflicting advice is excluded.
167
- - All nine packs have scored deterministic replay checks with negative controls. A small native pilot and repeated-campaign tooling keep real model observations separate from replay results; no general model-quality gain is claimed.
168
- - The release workflow checks a production dependency SBOM, publishes the exact validated archive and compares npm integrity before updating this site. Source notices ship with the package; npm provenance is not enabled.
169
- - Existing project update policies and customized-file protections remain in force. Restart the assistant or reload AGENTS.md and the affected skills after applying the update.
180
+ - install refuses to overwrite a different installed version. A downgrade is refused; for an upgrade, run bmad-plus update, which keeps backups and restorable receipts. Re-installing the same version only adds missing files.
181
+ - Re-installing keeps your _bmad/config.yaml settings and adds only missing defaults. The manifest and configuration are written atomically.
182
+ - --packs and --tools add to the previous installation instead of replacing it. An unknown pack or tool ID fails before any write and lists the valid IDs.
183
+ - update deletes unchanged files that the new version no longer ships, backs them up in the update receipt and restores them with --restore. Files you edited are kept and reported.
184
+ - A project lock left by a crashed process is taken over automatically when its owner is provably no longer running on this machine; doctor reports other stale locks with the manual remedy.
185
+ - Without a terminal, installs use --lang, then the system locale, then English. --yes with no detected AI tool writes no adapter files. uninstall accepts -d/--directory.
186
+ - The npm package no longer includes maintainer release scripts. OSINT and Shield carry legal and AI-generated-output notices; Shadow is described as governed public-source research.
187
+ - Translated READMEs mirror the public README, which adds a non-affiliation notice and a factual comparison. The website shows the install command up front and supports a dark color scheme.
170
188
 
171
189
  ## Version History
172
190
 
@@ -174,21 +192,25 @@ These dates identify reviewed CHANGELOG notes, not npm publication dates. The we
174
192
 
175
193
  | Version | Release-notes date | Reviewed summary |
176
194
  | --- | --- | --- |
195
+ | 0.17.1 | 2026-09-24 | Installing over a different version now stops and points to update, re-installs keep your settings, and updates remove files a version no longer ships while keeping a restorable backup. Some install behaviors changed; review your scripts before rerunning them. |
196
+ | 0.17.0 | 2026-09-22 | Acceptance pages now prevent silent answer loss and empty exports, recipes build by their own identifier, and project release checks work directly with Node on Windows. Guides add practical prompts for reading results and preserving project context. |
177
197
  | 0.16.0 | 2026-09-16 | A delivery now produces a step-by-step page a person plays, and their run comes back as evidence the agents read, classify and gate on. This release also carries what 0.15.0 had prepared and never shipped: durable Nexus execution, evidence-ranked memory and scored checks for every pack. |
178
- | 0.14.0 | 2026-09-09 | Dev Studio gains complete instructions and verifiable context loading; release documentation follows the published package. |
179
- | 0.13.0 | 2026-09-08 | Discover published releases, control automatic-update policy and preserve customized agent files. |
180
198
 
181
199
  [Release history and update guide](https://bmad-plus.rochetta.fr/docs/#changelog) · [All published npm versions](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
182
200
 
183
201
  ---
184
202
 
185
- ## 📄 License
203
+ ## License
186
204
 
187
205
  MIT — Based on [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD) (MIT)
188
206
 
189
- BMAD+ is an independent derivative, not an official BMad Code, LLC release or endorsement.
207
+ BMAD+ is an independent community project derived from BMAD-METHOD (MIT) by BMad Code, LLC. It is not affiliated with, endorsed by or certified by BMad Code, LLC. BMad™ and BMad Method™ are trademarks of BMad Code, LLC; see the [BMad trademark guidelines](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/TRADEMARK.md).
190
208
  Bundled source attributions and terms: [Third-party notices](THIRD-PARTY-LICENSES.md).
191
209
 
210
+ The OSINT pack is governed: researching a named person requires a recorded purpose and legal basis. See the [OSINT legal notice](osint-agent-package/skills/bmad-osint-investigate/osint/references/gdpr-osint.md).
211
+
212
+ Translations: [Français](readme-international/README.fr.md) · [Español](readme-international/README.es.md) · [Deutsch](readme-international/README.de.md)
213
+
192
214
  ### Credits
193
215
 
194
216
  **Creator**
@@ -205,7 +227,3 @@ Bundled source attributions and terms: [Third-party notices](THIRD-PARTY-LICENSE
205
227
  - **OSINT Pipeline** based on [smixs/osint-skill](https://github.com/smixs/osint-skill) (MIT)
206
228
  - **Apify integration** — OSINT helper and inspiration from [Apify agent skills](https://github.com/apify/agent-skills) (upstream declares Apache-2.0; see notices)
207
229
  - **Karpathy Guardrails** — Memory Pack adaptation of [community guidelines by forrestchang](https://github.com/multica-ai/andrej-karpathy-skills), inspired by Andrej Karpathy (MIT declared upstream)
208
-
209
- **Tools & Infrastructure**
210
- - [Evolution API](https://github.com/EvolutionAPI/evolution-api) — WhatsApp notifications for upstream monitoring
211
- - [Gemini API](https://ai.google.dev/) — AI analysis for upstream change classification
package/SECURITY.md CHANGED
@@ -14,7 +14,15 @@ and in the [release history](https://bmad-plus.rochetta.fr/docs/#releases).
14
14
 
15
15
  If you discover a security vulnerability in BMAD+, please report it responsibly:
16
16
 
17
- ### 📧 Contact
17
+ ### 🔒 Preferred: GitHub private vulnerability reporting
18
+
19
+ Use **[Report a vulnerability](https://github.com/lrochetta/BMAD-PLUS/security/advisories/new)**
20
+ (repository *Security* tab → *Report a vulnerability*). The report stays private
21
+ between you and the maintainer, and the fix and advisory are coordinated there.
22
+
23
+ ### 📧 Fallback: email
24
+
25
+ If you cannot use GitHub private reporting:
18
26
 
19
27
  **Email:** [l.rochetta@gmail.com](mailto:l.rochetta@gmail.com)
20
28
 
@@ -1,5 +1,18 @@
1
1
  # 🔍 OSINT Agent Package — BMAD Compatible
2
2
 
3
+ > [!WARNING]
4
+ > **Avis juridique et éthique — à lire avant toute utilisation / Legal & ethics notice**
5
+ >
6
+ > - **Base légale obligatoire (RGPD art. 6).** Toute collecte ou analyse de données sur une personne identifiable est un traitement de données personnelles : il faut une base légale documentée (intérêt légitime mis en balance, obligation légale, mission d'intérêt public…) *avant* de lancer une investigation. La consigner dans [`lawful-basis-record.md`](skills/bmad-osint-investigate/osint/assets/lawful-basis-record.md).
7
+ > - **Données sensibles (RGPD art. 9).** Opinions politiques, religion, santé, orientation sexuelle, données biométriques, etc. sont interdites de traitement sauf exception de l'art. 9(2). Le psychoprofilage peut *inférer* ce type de données : ne pas le faire sans base légale explicite.
8
+ > - **Pas de profilage de particuliers sans base légale.** Aucun ciblage, surveillance ou profilage de personnes privées (ex-conjoint, voisin, salarié, candidat…) par curiosité ou pour harceler. Les personnalités publiques ne sont couvertes que pour leur rôle public.
9
+ > - **Conditions d'utilisation des plateformes.** Le scraping (Apify, LinkedIn, Instagram, Facebook, TikTok…) peut violer les CGU des plateformes et le droit local ; vérifier avant usage.
10
+ > - **Responsabilité de l'utilisateur.** Vous êtes le responsable de traitement : BMAD+ fournit un outil, pas une autorisation. Le résultat est généré par IA, peut être faux et doit être vérifié par un humain avant toute décision.
11
+ >
12
+ > Cadre de référence : [`gdpr-osint.md`](skills/bmad-osint-investigate/osint/references/gdpr-osint.md). La porte de conformité intégrée à l'agent (« Phase −1 — Lawful Basis Gate » du `SKILL.md`, qui refuse toute investigation nominative sans base légale) reste active et ne doit pas être contournée.
13
+ >
14
+ > *EN — You need a documented GDPR Art. 6 lawful basis (and an Art. 9(2) exception for special-category data) before investigating anyone; respect platform ToS; never profile private individuals without a legal basis; you, the user, are the data controller and bear full responsibility.*
15
+
3
16
  Agent d'intelligence OSINT pour les installations BMAD. De un nom ou pseudo à un dossier complet avec psychoprofil, parcours professionnel et grades de confiance.
4
17
 
5
18
  ## Features
@@ -1,5 +1,18 @@
1
1
  # 🔑 Configuration des Clés API
2
2
 
3
+ > [!WARNING]
4
+ > **Avis juridique et éthique — à lire avant toute utilisation / Legal & ethics notice**
5
+ >
6
+ > - **Base légale obligatoire (RGPD art. 6).** Toute collecte ou analyse de données sur une personne identifiable est un traitement de données personnelles : il faut une base légale documentée (intérêt légitime mis en balance, obligation légale, mission d'intérêt public…) *avant* de lancer une investigation. La consigner dans [`lawful-basis-record.md`](skills/bmad-osint-investigate/osint/assets/lawful-basis-record.md).
7
+ > - **Données sensibles (RGPD art. 9).** Opinions politiques, religion, santé, orientation sexuelle, données biométriques, etc. sont interdites de traitement sauf exception de l'art. 9(2). Le psychoprofilage peut *inférer* ce type de données : ne pas le faire sans base légale explicite.
8
+ > - **Pas de profilage de particuliers sans base légale.** Aucun ciblage, surveillance ou profilage de personnes privées (ex-conjoint, voisin, salarié, candidat…) par curiosité ou pour harceler. Les personnalités publiques ne sont couvertes que pour leur rôle public.
9
+ > - **Conditions d'utilisation des plateformes.** Le scraping (Apify, LinkedIn, Instagram, Facebook, TikTok…) peut violer les CGU des plateformes et le droit local ; vérifier avant usage.
10
+ > - **Responsabilité de l'utilisateur.** Vous êtes le responsable de traitement : BMAD+ fournit un outil, pas une autorisation. Le résultat est généré par IA, peut être faux et doit être vérifié par un humain avant toute décision.
11
+ >
12
+ > Cadre de référence : [`gdpr-osint.md`](skills/bmad-osint-investigate/osint/references/gdpr-osint.md). La porte de conformité intégrée à l'agent (« Phase −1 — Lawful Basis Gate » du `SKILL.md`, qui refuse toute investigation nominative sans base légale) reste active et ne doit pas être contournée.
13
+ >
14
+ > *EN — You need a documented GDPR Art. 6 lawful basis (and an Art. 9(2) exception for special-category data) before investigating anyone; respect platform ToS; never profile private individuals without a legal basis; you, the user, are the data controller and bear full responsibility.*
15
+
3
16
  Ce guide explique comment configurer les clés API pour l'agent OSINT.
4
17
  **Tu n'as besoin que d'UNE SEULE clé pour démarrer.** Plus tu en configures, plus l'agent est puissant.
5
18
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-plus",
4
- "version": "0.16.0",
4
+ "version": "0.17.1",
5
5
  "description": "Project-local AI development workflows with clear roles, shared context, safe updates and coding-tool adapters",
6
6
  "homepage": "https://bmad-plus.rochetta.fr",
7
7
  "keywords": [
@@ -25,7 +25,13 @@
25
25
  "bmad-plus": "tools/bmad-plus-npx.js"
26
26
  },
27
27
  "files": [
28
- "tools",
28
+ "tools/bmad-plus-npx.js",
29
+ "tools/cli",
30
+ "tools/build/adapters.config.js",
31
+ "tools/build/generate-adapters.js",
32
+ "tools/build/generate.js",
33
+ "tools/build/module.template.yaml",
34
+ "tools/build/pack-delivery.js",
29
35
  "src/bmad-plus",
30
36
  "osint-agent-package",
31
37
  "readme-international",
@@ -43,12 +49,17 @@
43
49
  "build": "node tools/build/generate.js --out tools/cli/lib/packs.js --module-out src/bmad-plus/module.yaml",
44
50
  "build:check": "node tools/build/generate.js --check",
45
51
  "check:counts": "node tools/build/check-counts.js",
52
+ "check:counts:full": "jest --coverage=false --silent --json --outputFile=coverage/jest-report.json && node tools/build/check-counts.js --jest-report coverage/jest-report.json",
53
+ "uat:spec": "node src/bmad-plus/skills/bmad-plus-uat/templates/uat-spec-present.mjs --dir recettes",
54
+ "uat:gate": "node src/bmad-plus/skills/bmad-plus-uat/templates/uat-release-gate.mjs --dir recettes --cli tools/cli/bmad-plus-cli.js",
46
55
  "lint": "eslint tools/ tests/",
47
56
  "format": "prettier --write \"tools/**/*.js\" \"tests/**/*.js\"",
48
57
  "format:check": "prettier --check \"tools/**/*.js\" \"tests/**/*.js\"",
49
58
  "test": "jest --coverage",
59
+ "test:parallel": "jest --coverage=false --testPathIgnorePatterns \"(nexus(-cli|-process)?|memory-outcomes|upstream-candidate|npm-runner)\\.test\\.js$\"",
60
+ "test:serial": "jest --coverage=false --runInBand --testPathPatterns \"(nexus(-cli|-process)?|memory-outcomes|upstream-candidate|npm-runner)\\.test\\.js$\"",
50
61
  "test:install-contract": "node tools/build/check-install-contract.js",
51
- "prepare": "husky || true",
62
+ "prepare": "node -e \"try{require('node:child_process').execSync('husky',{stdio:'inherit'})}catch{console.warn('WARNING: husky did not install the git hooks, so the pre-push release gate is inactive in this checkout. Run npx husky to retry.')}\"",
52
63
  "uninstall:bmad": "node tools/cli/bmad-plus-cli.js uninstall"
53
64
  },
54
65
  "dependencies": {
@@ -64,29 +75,42 @@
64
75
  },
65
76
  "overrides": {
66
77
  "@istanbuljs/load-nyc-config": {
67
- "js-yaml": "4.2.0"
78
+ "js-yaml": "4.3.2"
68
79
  }
69
80
  },
70
81
  "publishConfig": {
71
82
  "access": "public"
72
83
  },
73
84
  "jest": {
85
+ "roots": [
86
+ "<rootDir>/tests",
87
+ "<rootDir>/tools"
88
+ ],
74
89
  "testPathIgnorePatterns": [
75
90
  "/node_modules/",
76
91
  "/website/",
77
92
  "/evals/"
78
93
  ],
79
94
  "collectCoverage": true,
95
+ "collectCoverageFrom": [
96
+ "tools/**/*.js",
97
+ "!tools/build/generated-adapters/**"
98
+ ],
80
99
  "coverageDirectory": "coverage",
81
100
  "moduleNameMapper": {
82
101
  "^@clack/prompts$": "<rootDir>/tests/__mocks__/clack-prompts.js"
83
102
  },
84
103
  "coverageThreshold": {
85
104
  "global": {
86
- "branches": 35,
87
- "functions": 40,
88
- "lines": 40,
89
- "statements": 40
105
+ "branches": 65,
106
+ "functions": 70,
107
+ "lines": 70,
108
+ "statements": 70
109
+ },
110
+ "./tools/cli/commands/install.js": {
111
+ "lines": 65,
112
+ "statements": 65,
113
+ "functions": 45
90
114
  },
91
115
  "./tools/cli/commands/doctor.js": {
92
116
  "lines": 60,