bmad-plus 0.17.0 → 0.18.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/CHANGELOG.md +108 -30
- package/README.md +23 -23
- package/SECURITY.md +9 -1
- package/osint-agent-package/README.md +13 -0
- package/osint-agent-package/SETUP_KEYS.md +13 -0
- package/package.json +32 -8
- package/readme-international/README.de.md +133 -542
- package/readme-international/README.es.md +135 -561
- package/readme-international/README.fr.md +134 -558
- package/src/bmad-plus/agents/agent-shadow/SKILL.md +6 -0
- package/src/bmad-plus/packs/pack-memory/README.md +1 -1
- package/src/bmad-plus/packs/pack-memory/memory-orchestrator.md +1 -1
- package/src/bmad-plus/packs/pack-memory/shared/memory-protocol.md +1 -1
- package/src/bmad-plus/packs/pack-shield/README.md +2 -0
- package/src/bmad-plus/packs/pack-shield/SKILL.md +2 -0
- package/src/bmad-plus/packs/pack-shield/shared/audit-report-template.md +6 -0
- package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +4 -0
- package/src/bmad-plus/skills/bmad-plus-uat/SKILL.md +61 -1
- package/src/bmad-plus/skills/bmad-plus-uat/ref/uat-results.schema.json +11 -0
- package/src/bmad-plus/skills/bmad-plus-uat/template/page.html +455 -137
- package/src/bmad-plus/skills/bmad-plus-uat/template/strings.json +230 -20
- package/tools/build/adapters.config.js +1 -1
- package/tools/build/generate-adapters.js +186 -60
- package/tools/build/generate.js +49 -13
- package/tools/cli/bmad-plus-cli.js +3 -6
- package/tools/cli/commands/autoconfig.js +62 -22
- package/tools/cli/commands/install.js +620 -356
- package/tools/cli/commands/memory.js +40 -13
- package/tools/cli/commands/scan.js +94 -30
- package/tools/cli/commands/uat.js +50 -5
- package/tools/cli/commands/uninstall.js +65 -16
- package/tools/cli/commands/update-check.js +13 -4
- package/tools/cli/commands/update-policy.js +14 -5
- package/tools/cli/commands/update.js +96 -21
- package/tools/cli/i18n.js +120 -68
- package/tools/cli/lib/ide-config.js +3 -1
- package/tools/cli/lib/install-manifest.js +32 -7
- package/tools/cli/lib/installation-health.js +33 -1
- package/tools/cli/lib/installed-adapters.js +29 -6
- package/tools/cli/lib/memory-init.js +19 -4
- package/tools/cli/lib/packs.js +17 -28
- package/tools/cli/lib/path-hash.js +5 -1
- package/tools/cli/lib/python-provision.js +51 -12
- package/tools/cli/lib/stack-detect.js +51 -25
- package/tools/cli/lib/uat.js +139 -1
- package/tools/cli/lib/update-check.js +132 -34
- package/tools/cli/lib/update-dispatch.js +2 -2
- package/tools/cli/lib/update-policy.js +57 -19
- package/tools/cli/lib/update-transaction.js +439 -85
- package/tools/build/README.md +0 -78
- package/tools/build/check-counts.js +0 -626
- package/tools/build/check-install-contract.js +0 -648
- package/tools/build/generated-adapters/.codex/AGENTS.md +0 -134
- package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +0 -139
- package/tools/build/generated-adapters/.opencode/AGENTS.md +0 -134
- package/tools/build/generated-adapters/AGENTS.md +0 -132
- package/tools/build/generated-adapters/CLAUDE.md +0 -135
- package/tools/build/generated-adapters/CONVENTIONS.md +0 -134
- package/tools/build/generated-adapters/GEMINI.md +0 -139
- package/tools/build/generated-adapters/README.md +0 -79
- package/tools/maintain/upstream-candidate.js +0 -456
- package/tools/release/publication-content.js +0 -904
- package/tools/release/supply-chain.js +0 -282
|
@@ -61,6 +61,12 @@ or a public entity). This gate governs every direct menu path — there is no pa
|
|
|
61
61
|
personal data that skips it. It does not remove any capability or restrict lawful,
|
|
62
62
|
authorized use (CG-02); `QS` on a public handle, `DG`, and tooling paths are exempt.
|
|
63
63
|
|
|
64
|
+
**Output disclaimer.** Open every dossier or profile with: *"AI-generated OSINT output —
|
|
65
|
+
may contain errors; not legal advice. The operator is the data controller and is
|
|
66
|
+
responsible for the lawful basis (GDPR Art. 6/9), platform Terms of Service, and human
|
|
67
|
+
verification before any decision."* Never profile a private individual without a
|
|
68
|
+
recorded legal basis.
|
|
69
|
+
|
|
64
70
|
## Required Setup
|
|
65
71
|
|
|
66
72
|
- Python 3.10+
|
|
@@ -29,7 +29,7 @@ While executing the protocol, the host agent should:
|
|
|
29
29
|
A session that ends without an agent turn has no guaranteed handoff.
|
|
30
30
|
|
|
31
31
|
Manual activation via Zecher:
|
|
32
|
-
- `"Zecher, scan projects in
|
|
32
|
+
- `"Zecher, scan projects in ~/dev"` — discover and index all projects
|
|
33
33
|
- `"Zecher, consolidate memory"` — deduplicate, archive stale, promote
|
|
34
34
|
- `"Zecher, where were we?"` — reconstruct context from last session
|
|
35
35
|
- `"Zecher, health check"` — verify memory integrity
|
|
@@ -165,7 +165,7 @@ AGENTS.md → Already agent-aware
|
|
|
165
165
|
### Project Metadata (per scan)
|
|
166
166
|
```yaml
|
|
167
167
|
# ~/.bmad-plus/brain/projects/<hash>.yaml
|
|
168
|
-
path: "
|
|
168
|
+
path: "~/dev/my-project"
|
|
169
169
|
name: "my-project"
|
|
170
170
|
hash: "a1b2c3d4" # SHA256 of absolute path
|
|
171
171
|
stack:
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
> **27 compliance agents across 6 categories, plus 11 GDPR & AI Act workflows** + 1 orchestrator covering Data Privacy, Cybersecurity, Industry Compliance, Defense & Export, AI Governance, and Accessibility & ESG.
|
|
4
4
|
|
|
5
|
+
> ⚠️ **Not legal advice.** Shield output is AI-generated, may be incomplete or out of date, and does not replace a lawyer, DPO or certified auditor. Human review by a qualified person is required before any compliance decision, filing or attestation.
|
|
6
|
+
|
|
5
7
|
## Overview
|
|
6
8
|
|
|
7
9
|
Pack Shield transforms BMAD+ into a comprehensive GRC (Governance, Risk & Compliance) assistant. Each agent is an expert system prompt for a specific regulatory framework, providing structured compliance guidance including gap analysis, policy drafting, control mapping, and audit support.
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
> **Version:** 1.0.0
|
|
5
5
|
> **Created by:** Laurent Rochetta — https://github.com/lrochetta/BMAD-PLUS
|
|
6
6
|
|
|
7
|
+
> ⚠️ **Not legal advice.** Shield output is AI-generated, may be incomplete or out of date, and does not replace a lawyer, DPO or certified auditor. Human review by a qualified person is required before any compliance decision, filing or attestation.
|
|
8
|
+
|
|
7
9
|
## Overview
|
|
8
10
|
|
|
9
11
|
Shield transforms BMAD+ into a comprehensive GRC (Governance, Risk & Compliance) assistant. It serves as an intelligent orchestrator for 27 compliance agents across 6 categories, plus 11 GDPR & AI Act workflows, covering 25+ regulatory frameworks. Route requests to the appropriate specialist agent, combine insights for cross-framework analysis, and provide consolidated compliance reports.
|
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
> **Purpose:** Standardized compliance audit report format
|
|
5
5
|
> **Version:** 1.0.0
|
|
6
6
|
|
|
7
|
+
> ⚠️ **Not legal advice.** Shield output is AI-generated, may be incomplete or out of date, and does not replace a lawyer, DPO or certified auditor. Human review by a qualified person is required before any compliance decision, filing or attestation.
|
|
8
|
+
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
## Compliance Audit Report
|
|
10
12
|
|
|
13
|
+
> 🤖 **AI-GENERATED DRAFT — Not legal advice.** Produced with BMAD+ Shield (AI-assisted). Requires review and sign-off by a qualified person (lawyer, DPO or certified auditor) before use. Keep this banner on every copy.
|
|
14
|
+
|
|
11
15
|
### Cover Page
|
|
12
16
|
|
|
13
17
|
| Field | Value |
|
|
@@ -21,6 +25,8 @@
|
|
|
21
25
|
| **Report Date** | [DATE] |
|
|
22
26
|
| **Prepared by** | [NAME] |
|
|
23
27
|
| **Classification** | Confidential |
|
|
28
|
+
| **Generation** | AI-generated draft — human review required |
|
|
29
|
+
| **Reviewed by (qualified person)** | [NAME, ROLE, DATE] |
|
|
24
30
|
|
|
25
31
|
---
|
|
26
32
|
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
> **Version:** 1.0.0
|
|
6
6
|
> **Created by:** Laurent Rochetta — https://github.com/lrochetta/BMAD-PLUS
|
|
7
7
|
|
|
8
|
+
> ⚠️ **Not legal advice.** Shield output is AI-generated, may be incomplete or out of date, and does not replace a lawyer, DPO or certified auditor. Human review by a qualified person is required before any compliance decision, filing or attestation.
|
|
9
|
+
|
|
8
10
|
---
|
|
9
11
|
|
|
10
12
|
## Persona
|
|
@@ -216,6 +218,8 @@ Which area? (1-8, or describe your situation)
|
|
|
216
218
|
3. Use cross-framework-mapper for overlaps
|
|
217
219
|
4. Present consolidated report with `shared/audit-report-template.md`
|
|
218
220
|
|
|
221
|
+
Every report or assessment you produce MUST keep the template's "AI-generated" marking and the "Not legal advice" disclaimer above.
|
|
222
|
+
|
|
219
223
|
### Uncertainty
|
|
220
224
|
If the framework is ambiguous:
|
|
221
225
|
1. Ask 2-3 clarifying questions (jurisdiction, industry, data types)
|
|
@@ -87,6 +87,60 @@ Deliver in the way the host allows, and say so plainly:
|
|
|
87
87
|
Then tell the tester four things: the link or file, how long it takes, **which steps write for
|
|
88
88
|
real**, and the play order when several recipes share an environment (`bmad-plus uat order`).
|
|
89
89
|
|
|
90
|
+
### What the page guarantees — and what you check before a person opens it
|
|
91
|
+
|
|
92
|
+
A run takes tens of minutes. The tester answers in passing, opens the product in another
|
|
93
|
+
tab, comes back, reloads. On 2026-09-25 a page built outside this command showed its steps
|
|
94
|
+
before any run existed: every tick was displayed and none was kept, a reload emptied the
|
|
95
|
+
form, and the status read "saved" on nobody's word. What follows exists so that this
|
|
96
|
+
cannot happen again, on any project.
|
|
97
|
+
|
|
98
|
+
**The page is built, never written.** Persistence lives in one place, the template that
|
|
99
|
+
`bmad-plus uat build` fills. Do not hand-write an acceptance page, do not re-implement
|
|
100
|
+
saving in a project, do not edit the produced HTML. A page that needs something the
|
|
101
|
+
template lacks is a change to the template, made in BMAD+ with its tests.
|
|
102
|
+
|
|
103
|
+
**What every built page guarantees, by construction** (`uat build --json` lists them under
|
|
104
|
+
`guarantees`, and the build refuses a template that lost one):
|
|
105
|
+
|
|
106
|
+
| Guarantee | What the tester gets |
|
|
107
|
+
|---|---|
|
|
108
|
+
| `hidden-before-start` · `no-answer-before-run` | no answer field before a run exists, whatever a stylesheet says; a tick before that is refused and explained, never dropped |
|
|
109
|
+
| `verified-local-write` · `honest-save-status` | a write counts only once it reads back; the status names a refused save ("Could not save in this browser — save or copy the JSON") and never says "saved" otherwise |
|
|
110
|
+
| `save-on-every-change` | every tick and every keystroke in a note is kept at once, no blur needed, and the cursor never moves |
|
|
111
|
+
| `restore-before-capabilities` · `newer-copy-wins` | the browser's copy comes back synchronously on reload, before any optional capability answers; an older remote copy never overwrites a newer local one |
|
|
112
|
+
| `revision-guard` | a run that answered another revision of the recipe is offered, not poured in: identical lines keep their answers, changed lines are asked again, the earlier run stays untouched and exportable (`carriedFrom` in the results) |
|
|
113
|
+
| `other-tab-notice` | two tabs on one run converge on the latest change, and the page says so |
|
|
114
|
+
| `unreadable-draft-kept` | a saved run that cannot be read is reported and exportable, never deleted |
|
|
115
|
+
| `progress-accessible` | the share of lines *answered* — not passed — as a `progressbar` with its value, next to the seen / not seen / blocked counts |
|
|
116
|
+
| `storage-explained` | where the answers live and what makes them disappear (site data cleared, private window closed), and that nobody receives them until the JSON is handed over |
|
|
117
|
+
| `finished-is-not-accepted` · `unload-guard` | unanswered lines are said on the page before finishing (a second click finishes anyway); finishing keeps the date and says it is not an acceptance; leaving with an unsaved run is questioned |
|
|
118
|
+
| `utf8-and-escaped-diacritics` · `export-is-the-run` | UTF-8 declared, diacritics handled as escapes, and the exported JSON is the run as answered |
|
|
119
|
+
|
|
120
|
+
**Before a person opens the page**, in this order, and say in the delivery which ones ran:
|
|
121
|
+
|
|
122
|
+
1. `bmad-plus uat lint <id> --src <dir>` passes.
|
|
123
|
+
2. `bmad-plus uat build <id>` writes the page and lists its guarantees.
|
|
124
|
+
3. Open the built page in a real browser and play the essential pass yourself: no answer
|
|
125
|
+
field before starting → enter a name and start → tick one *Seen* → tick one *Not seen* →
|
|
126
|
+
type a remark without leaving the field → type an overall remark → **reload at once,
|
|
127
|
+
without clicking anywhere** → everything is back and the progress says two lines are
|
|
128
|
+
answered. `tools/qa/uat-page-browser-check.js` in the BMAD+ repository is this pass,
|
|
129
|
+
automated; the framework's own suite (`tests/unit/uat-page.test.js`) replays every
|
|
130
|
+
scenario of the incident, storage refusal and revision change included.
|
|
131
|
+
4. Run these where the project's execution policy allows: if tests do not run on this
|
|
132
|
+
machine, run them on the project's remote environment. Never skip them to save time.
|
|
133
|
+
|
|
134
|
+
If any of these fail, the page is **not ready** — say so, and do not hand it over. A page
|
|
135
|
+
handed over without step 3 is handed over with that fact written next to it.
|
|
136
|
+
|
|
137
|
+
**Tell the tester where the answers live**, in one sentence, before the link: in the artifact
|
|
138
|
+
database (saved on every tick, nothing to send), in the project through `uat serve`, or in
|
|
139
|
+
their browser — on that device only, until they save the JSON. The page says it too.
|
|
140
|
+
|
|
141
|
+
**When the recipe is amended** after a run started, tell the tester their earlier run will be
|
|
142
|
+
offered on the new page and that only unchanged lines keep their answers.
|
|
143
|
+
|
|
90
144
|
## 3. Read, triage, gate
|
|
91
145
|
|
|
92
146
|
```bash
|
|
@@ -144,7 +198,10 @@ keeps acceptance out of reach; the fix task carries the run and the triage entry
|
|
|
144
198
|
- It does not invent expectations: what the spec announces comes from the code and the
|
|
145
199
|
measurement, never from the plan alone.
|
|
146
200
|
- It does not play the recipe. An agent that "plays" it in a headless browser has written a test,
|
|
147
|
-
not a recipe.
|
|
201
|
+
not a recipe. Checking that the *page* keeps answers (the pass above) is not playing the recipe:
|
|
202
|
+
it proves the form, not the product.
|
|
203
|
+
- It does not write pages by hand. Persistence is the template's, tested in BMAD+; a project that
|
|
204
|
+
needs more changes the template, not its copy of the page.
|
|
148
205
|
|
|
149
206
|
## Pitfalls already paid for
|
|
150
207
|
|
|
@@ -156,3 +213,6 @@ keeps acceptance out of reach; the fix task carries the run and the triage entry
|
|
|
156
213
|
- One step reading two screens: totals were hunted on a page that only shows subtotals. One step, one screen.
|
|
157
214
|
- Two recipes on one environment destroying each other's witnesses through indirect writes — a save
|
|
158
215
|
that triggers a recomputation. Declare witnesses, run `uat order`, and re-measure after each pass.
|
|
216
|
+
- A page written outside `uat build`, with its own persistence: the steps showed before the run
|
|
217
|
+
existed, ticks were dropped, a reload lost everything, and "saved" was printed unverified
|
|
218
|
+
(FormaPro, 2026-09-25). Build the page; check it in a browser; say which checks ran.
|
|
@@ -20,6 +20,17 @@
|
|
|
20
20
|
"updatedAt": { "type": "string", "format": "date-time" },
|
|
21
21
|
"finishedAt": { "type": ["string", "null"], "format": "date-time" },
|
|
22
22
|
"overallNote": { "type": "string" },
|
|
23
|
+
"carriedFrom": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"description": "Present when the page continued a run that answered another revision of the recipe. The rule is fixed: an answer travelled only when its line was identical (same step, same letter, same text); every other line was asked again. The earlier run is left untouched.",
|
|
26
|
+
"required": ["runId", "kept", "toAnswer"],
|
|
27
|
+
"properties": {
|
|
28
|
+
"runId": { "type": "string", "description": "The run the answers came from." },
|
|
29
|
+
"specSha256": { "type": ["string", "null"], "description": "The revision that run answered; null when it carried no fingerprint." },
|
|
30
|
+
"kept": { "type": "integer", "description": "Answers that travelled." },
|
|
31
|
+
"toAnswer": { "type": "integer", "description": "Lines of this revision left unanswered by the carry." }
|
|
32
|
+
}
|
|
33
|
+
},
|
|
23
34
|
"summary": {
|
|
24
35
|
"type": "object",
|
|
25
36
|
"required": ["passed", "failed", "blocked", "skipped", "unanswered"],
|