bmad-plus 0.21.0 → 0.22.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 +20 -0
- package/README.md +13 -13
- package/SECURITY.md +62 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/_http.py +68 -24
- package/package.json +1 -1
- package/readme-international/README.de.md +13 -13
- package/readme-international/README.es.md +13 -13
- package/readme-international/README.fr.md +13 -13
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review.md +3 -1
- package/src/bmad-plus/packs/pack-seo/SKILL.md +3 -1
- package/src/bmad-plus/packs/pack-seo/ref/cwv-thresholds.md +2 -2
- package/src/bmad-plus/packs/pack-seo/requirements.txt +1 -1
- package/src/bmad-plus/packs/pack-seo/scripts/seo_apis.py +72 -30
- package/src/bmad-plus/packs/pack-seo/scripts/seo_report.py +5 -6
- package/src/bmad-plus/packs/pack-seo/scripts/seo_screenshot.py +176 -14
- package/src/bmad-plus/packs/pack-shield/README.md +12 -0
- package/src/bmad-plus/packs/pack-shield/SKILL.md +7 -1
- package/src/bmad-plus/packs/pack-shield/review-rules/access-control.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/ai-integrations.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/change-and-supply-chain.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/cryptography.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/index.yaml +134 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/logging.md +10 -0
- package/src/bmad-plus/packs/pack-shield/review-rules/personal-data.md +10 -0
- package/src/bmad-plus/packs/pack-shield/shared/ai-processing-register-template.yaml +53 -0
- package/src/bmad-plus/packs/pack-shield/shared/ai-processing-register.md +32 -0
- package/src/bmad-plus/packs/pack-shield/shared/assurance-case-template.yaml +87 -0
- package/src/bmad-plus/packs/pack-shield/shared/assurance-case.md +50 -0
- package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +24 -1
- package/src/bmad-plus/skills/bmad-plus-uat/SKILL.md +1 -0
- package/src/bmad-plus/skills/bmad-plus-uat/template/page.html +5 -4
- package/tools/build/generate-adapters.js +7 -0
- package/tools/build/generate.js +14 -0
- package/tools/cli/bmad-plus-cli.js +2 -0
- package/tools/cli/commands/ai-register.js +63 -0
- package/tools/cli/commands/assurance.js +162 -0
- package/tools/cli/commands/review.js +10 -3
- package/tools/cli/lib/ai-register.js +393 -0
- package/tools/cli/lib/assurance.js +822 -0
- package/tools/cli/lib/control-refs.js +132 -0
- package/tools/cli/lib/installation-health.js +17 -0
- package/tools/cli/lib/packs.js +60 -2
- package/tools/cli/lib/page-origins.js +582 -0
- package/tools/cli/lib/review-rules.js +92 -24
- package/tools/cli/lib/review.js +28 -1
- package/tools/cli/lib/uat.js +22 -5
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,26 @@ All notable changes to BMAD+ will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.22.0] - 2026-09-29
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Shield security assurance case** (`bmad-plus assurance init|run|verify <case>`). A case states claims, an argument for each, and evidence that can only be a check that ran. `run` executes each declared command without a shell and with a minimal environment, and appends a hash-chained ledger record (exit code, output digest, redacted excerpt, digests of the artifacts it wrote, commit, working-tree state). `verify` finds a claim unsupported when its evidence is missing, failed or stale, and can emit a CI check. `verify --ledger-head` catches removed runs; with `BMAD_PLUS_ASSURANCE_KEY` every record carries an HMAC that no check can read.
|
|
13
|
+
- **Shield AI processing register** (`bmad-plus ai-register init|check`). `_bmad/ai-processing-register.yaml` records each AI tool with its provider, purpose, data categories, legal basis, retention, transfers and processing agreement. `check` compares it with the AI integrations found in the project (BMAD+ adapters, tool folders, MCP server declarations) and warns about any tool not registered; `bmad-plus doctor` reports it when Shield is installed.
|
|
14
|
+
- **Compliance review rules.** A review rule can name the controls it examines (`FRAMEWORK:ID`, validated). An installed Shield adds six path-scoped rules in a `compliance` group (access control, personal data, cryptography, logging, AI integrations, change and supply chain); the checklist opens with the controls a change touches, and a finding may list the controls it breaks.
|
|
15
|
+
|
|
16
|
+
### Security
|
|
17
|
+
|
|
18
|
+
- **Data-handling doctrine and egress gate.** `registry.yaml` declares what BMAD+ sends, to whom, when and under which consent basis. `tools/build/verify-egress.js` fails CI when a network, listener or process site of the package or of the maintainer services is undeclared, miscounted or stale, or when a module load cannot be resolved. `SECURITY.md` has a generated "Data handling" section and the generated adapters state the flows of the installed packs. BMAD+ has no telemetry; `update-check` is opt-out.
|
|
19
|
+
- **The UAT recipe page loads nothing from another origin.** Google Fonts is gone; the page uses installed fonts. The build refuses a template that would load or send anything elsewhere (`no-third-party-requests`), reading it as the HTML tokenizer does, with references, escapes and `data:` documents decoded. The jsdom and Chromium checks record every request and socket of a run.
|
|
20
|
+
- **The SEO HTML report opens without asking any server**, and `GOOGLE_API_KEY` is sent in the `x-goog-api-key` header, never in a URL, and redacted from errors.
|
|
21
|
+
- **OSINT provider calls are HTTPS-only**: other schemes, URL credentials and redirects that leave https or the host are refused before connecting.
|
|
22
|
+
- **SEO screenshots are pinned** to the address `seo_fetch.py` validated: Chromium resolves nothing else, other hosts and redirect hops are blocked and reported.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- **MCP server:** SSE client disconnects and graceful shutdowns no longer log `Exception in ASGI application`; an open SSE stream ends cleanly on SIGTERM. The middlewares are pure ASGI. An `MCP_TOKEN_CREATED_AT` with a UTC offset no longer makes every authenticated request answer 500, and non-ASCII secrets are refused with 401 instead of raising.
|
|
27
|
+
|
|
8
28
|
## [0.21.0] - 2026-09-28
|
|
9
29
|
|
|
10
30
|
### Added
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# BMAD+
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
4
4
|
|
|
5
|
-
**Version 0.
|
|
5
|
+
**Version 0.22.0** · 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.
|
|
38
|
+
npx bmad-plus@0.22.0 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.
|
|
@@ -171,18 +171,18 @@ Read AGENTS.md and the available project memory. Summarize the last verified sta
|
|
|
171
171
|
|
|
172
172
|
Expected result: a short, evidence-based restart. Project notes are useful context and still need to be checked against the current work.
|
|
173
173
|
|
|
174
|
-
## What’s new in 0.
|
|
174
|
+
## What’s new in 0.22.0
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
What leaves your machine, declared and checked
|
|
177
177
|
|
|
178
|
-
|
|
178
|
+
BMAD+ now declares every way it sends data or starts a process, and its CI refuses anything undeclared. The recipe page and the SEO report load nothing from other sites, OSINT calls are HTTPS-only, and Shield gains an evidence-bound assurance case and an AI processing register. Nothing changes in how you install or update.
|
|
179
179
|
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
- The
|
|
180
|
+
- The registry states what BMAD+ sends, to whom, when and with which consent; SECURITY.md shows it and the installed agent instructions summarise it. A build check fails when a network call or a started process is not declared. BMAD+ has no telemetry, and the update check can be turned off.
|
|
181
|
+
- The acceptance page no longer loads Google Fonts or anything from another site, so opening it tells no one you did. The build refuses a page that would, and a real browser checks every request of a run. The SEO HTML report opens offline too.
|
|
182
|
+
- The Google API key of the SEO pack travels in a request header, never in a URL, and is hidden from error messages. OSINT provider calls refuse anything but HTTPS and never follow a redirect to another host.
|
|
183
|
+
- SEO screenshots reach only the address that was checked: Chromium resolves nothing else, and redirects or resources pointing elsewhere are blocked and listed.
|
|
184
|
+
- Shield: bmad-plus assurance builds a security case whose evidence can only be a check that actually ran, recorded in a tamper-evident ledger; bmad-plus ai-register keeps a register of the AI tools a project uses and warns about any it has not recorded; six review rules name the compliance controls a change touches.
|
|
185
|
+
- The MCP server closes SSE streams cleanly when a client leaves or the server stops, and accepts token dates with a time-zone offset.
|
|
186
186
|
|
|
187
187
|
## Version History
|
|
188
188
|
|
|
@@ -190,9 +190,9 @@ These dates identify reviewed CHANGELOG notes, not npm publication dates. The we
|
|
|
190
190
|
|
|
191
191
|
| Version | Release-notes date | Reviewed summary |
|
|
192
192
|
| --- | --- | --- |
|
|
193
|
+
| 0.22.0 | 2026-09-29 | BMAD+ now declares every way it sends data or starts a process, and its CI refuses anything undeclared. The recipe page and the SEO report load nothing from other sites, OSINT calls are HTTPS-only, and Shield gains an evidence-bound assurance case and an AI processing register. Nothing changes in how you install or update. |
|
|
193
194
|
| 0.21.0 | 2026-09-28 | A review now records why it stopped and what it used, writes a check a CI step can read, and resumes on the scope it sealed. The SEO fetcher connects only to addresses it has validated, and the MCP server moves to the official SDK on Python 3.12. Nothing changes in how you install or update. |
|
|
194
195
|
| 0.20.0 | 2026-09-28 | bmad-plus review now hands the reviewer the rules that apply to the changed files, fixes the depth of a review before it starts, compares a review with an earlier one without calling an unchecked finding fixed, and masks credentials in what it writes. Nothing changes in how you install or update. |
|
|
195
|
-
| 0.19.0 | 2026-09-27 | bmad-plus review seals what a review must cover, locates every finding by the code it quotes, and derives the verdict from coverage instead of the number of findings. Review triage now keeps a finding unless a quoted ground refutes it. Nothing changes in how you install or update. |
|
|
196
196
|
|
|
197
197
|
[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)
|
|
198
198
|
|
package/SECURITY.md
CHANGED
|
@@ -75,5 +75,67 @@ Security researchers who report valid vulnerabilities will be credited in the CH
|
|
|
75
75
|
- Each release retains its CycloneDX production SBOM, archive and integrity manifest as workflow artifacts; registry integrity must match the checked archive before the landing is deployed
|
|
76
76
|
- Publication uses npm OIDC authentication. npm provenance is not enabled: the private build repository and distribution repository differ. An inventory or hash is not a provenance attestation
|
|
77
77
|
|
|
78
|
+
## Data handling
|
|
79
|
+
|
|
80
|
+
BMAD+ has no telemetry and no silent self-update. The first table lists every flow of the
|
|
81
|
+
npm package that can send data off the machine; the second covers the maintainer services
|
|
82
|
+
deployed from this repository (the Audit 360° MCP server and the upstream monitor), which
|
|
83
|
+
users do not install. Both are generated from the `data_handling` doctrine in
|
|
84
|
+
`registry.yaml`. Before each release, CI scans every shipped and service source file and
|
|
85
|
+
fails when a network, listener or process site is missing from the doctrine, or when a
|
|
86
|
+
declared one no longer exists. "Through a started program" means BMAD+ starts a tool (npm,
|
|
87
|
+
uv or pip, git, Codex CLI, Chromium, a command you declared) and that tool does the sending.
|
|
88
|
+
|
|
89
|
+
<!-- data-handling:begin — generated from registry.yaml by tools/build/verify-egress.js --write -->
|
|
90
|
+
|
|
91
|
+
| Flow | Component | Leaves the machine | What | To whom | When | Consent |
|
|
92
|
+
|---|---|---|---|---|---|---|
|
|
93
|
+
| `update-check` | cli | through a started program | The package name and channel (`npm view bmad-plus@latest`) with npm's request metadata: IP address, user agent (npm, Node.js and OS versions) and npm session headers. | registry.npmjs.org (the policy accepts no other registry) | `bmad-plus update-check`, which the generated adapters ask the agent to run once per session; the answer is cached in `.bmad/update-check.json`. | **opt-out**: `bmad-plus update-policy --mode off` stops every lookup. |
|
|
94
|
+
| `update-apply` | cli | through a started program | The exact release requested, with npm's request metadata, to download that version's package. | registry.npmjs.org | `bmad-plus update --latest --yes`, or `--auto` when the project policy allows it. | **opt-in**: Each run needs `--yes`, or policy mode `auto` with an explicit range (`bmad-plus update-policy --mode auto --range <range>`). |
|
|
95
|
+
| `python-provision` | cli | through a started program | The names and versions in the pack's requirements.txt, with the installer's request metadata; uv may also download a Python build. | pypi.org and files.pythonhosted.org, or the index configured for pip or uv on the machine, github.com (python-build-standalone releases) when uv downloads Python | `bmad-plus install --provision-python` for a selected Python pack. | **opt-in**: Only with `--provision-python`; without it no environment is created. |
|
|
96
|
+
| `nexus-worker` | cli | through a started program | With `codex-exec`, the task's instruction and input files (at most 1 MiB) go to Codex CLI, which sends them to the model provider of the user's own Codex login. With `command`, whatever that command sends. | the model provider configured in the user's Codex CLI, whoever a declared command contacts | `bmad-plus nexus launch` on a plan with an explicit execution contract. | **invocation**: Nothing starts without a plan the user wrote and an explicit launch; shell, environment and arbitrary Codex flags are refused. |
|
|
97
|
+
| `nexus-verifier` | cli | through a started program | Whatever the declared command sends; it runs with a minimal allow-listed environment. | whoever the declared command contacts | `bmad-plus nexus verify` on a task of a plan the user wrote. | **invocation**: The command and its hash are fixed in the plan; a changed executable is refused. |
|
|
98
|
+
| `uat-page-results` | core | directly | The run: tester name, step verdicts and notes. | the origin serving the page: `bmad-plus uat serve` on 127.0.0.1, or the claude.ai artifact store when the page is published as an artifact | Each recorded verdict, when the page is served; a page opened from a file keeps results in the browser. | **invocation**: The tester chooses how the page is opened; a page opened from a file sends nothing. |
|
|
99
|
+
| `osint-providers` | osint | directly | The investigation query (names, handles, keywords and URLs about the subject) and that provider's API key, over verified HTTPS: the shared helper refuses any other scheme and any redirect off the provider's host. | api.apify.com, api.exa.ai, r.jina.ai, s.jina.ai, deepsearch.jina.ai, api.parallel.ai, api.perplexity.ai, api.tavily.com, the Bright Data MCP URL the user configures | When the Shadow agent, or `volley.py` fanning out to the others, runs a provider script during an investigation. | **credential**: A provider is contacted only once its key (or Bright Data MCP URL) is set; the skill's Phase −1 lawful-basis gate precedes profiling a named person. |
|
|
100
|
+
| `seo-site-fetch` | seo | directly | HTTP requests for the audited site's pages, robots.txt and sitemap, with the user agent the audit selects, from the user's IP address. | the site the user asks to audit (public addresses only) | `seo_fetch.py` and `seo_crawl.py`, run by the SEO agents during an audit. | **invocation**: Only the URL the user gives and its internal links are fetched; private, loopback and link-local addresses are refused. |
|
|
101
|
+
| `seo-google-apis` | seo | directly | The audited URL or origin, and the user's GOOGLE_API_KEY in the x-goog-api-key header, never in the request URL; redirects are not followed. | www.googleapis.com, chromeuxreport.googleapis.com, searchconsole.googleapis.com | `seo_apis.py`, run during an audit's performance phase. | **credential**: Only when GOOGLE_API_KEY is set; without it the script returns an error and sends nothing. |
|
|
102
|
+
| `seo-screenshot` | seo | through a started program | Chromium's requests for the audited page and the resources its own host serves, with a browser user agent, from the user's IP address. Third-party resources are blocked, not fetched. | the site the user asks to audit (public addresses only) | `seo_screenshot.py`, when an audit asks for screenshots. | **invocation**: Only the URL the user gives, with the Playwright and Chromium the user installed; non-public addresses, other hosts and redirects off the host are refused. |
|
|
103
|
+
| `assurance-checks` | cli | through a started program | Whatever a declared check command sends; the CLI itself sends nothing. | whoever a declared check command contacts | `bmad-plus assurance run` on a case the user wrote. | **invocation**: Only the commands listed in the user's own case file run, and only on an explicit `assurance run`; the signing key is never passed to a check. |
|
|
104
|
+
|
|
105
|
+
Stays on the machine:
|
|
106
|
+
|
|
107
|
+
- `npx-launcher` (cli): Starts the CLI in the same Node.js executable. When: Every `npx bmad-plus` run.
|
|
108
|
+
- `python-health` (cli): Runs a pack environment's own Python, isolated (-I), to confirm its modules import. When: `bmad-plus doctor` on a project with a provisioned Python pack.
|
|
109
|
+
- `review-git` (cli): Reads the local repository with git (rev-parse, merge-base, diff, ls-files, show) to build a review scope. When: `bmad-plus review` commands.
|
|
110
|
+
- `nexus-git` (cli): Reads the repository root and HEAD commit with `git rev-parse`. When: `bmad-plus nexus` plan and run commands.
|
|
111
|
+
- `uat-serve` (cli): Serves a recipe page and stores its verdicts, listening on 127.0.0.1 only and refusing any other Host header. When: `bmad-plus uat serve`.
|
|
112
|
+
- `uat-release-gate` (core): Runs the project's own bmad-plus CLI with the current Node.js to grade recorded acceptance runs. When: The release-gate script a project copies from the UAT skill, when the project runs it.
|
|
113
|
+
- `osint-install` (osint): Copies the OSINT agent and skills into a BMAD project, then runs the pack's local diagnostic script with the system Python. When: When the user runs the package's install.sh or install.ps1.
|
|
114
|
+
|
|
115
|
+
Maintainer services, deployed from this repository and not part of the npm package:
|
|
116
|
+
|
|
117
|
+
- `mcp-server` (`mcp-server/`): The Audit 360° MCP server the maintainer runs on a VPS: git, GitHub, Gamma, CI, RAG and memory tools for the maintainer's agents, behind a bearer token and a password-protected dashboard.
|
|
118
|
+
- `monitor` (`monitor/`): The upstream monitor the maintainer schedules on a VPS: it watches the BMAD-METHOD repository and notifies the maintainer of new changes.
|
|
119
|
+
|
|
120
|
+
| Flow | Service | Leaves the machine | What | To whom | When | Consent |
|
|
121
|
+
|---|---|---|---|---|---|---|
|
|
122
|
+
| `mcp-listener` | mcp-server | directly | Tool results (repository contents and diffs, command output, audit reports, knowledge-base passages, memory entries) and the dashboard's audit data. | MCP clients presenting the bearer token, dashboard users logged in with the dashboard password | While the service runs: HTTPS on 0.0.0.0:443 when SSL_CERT_FILE and SSL_KEY_FILE are set, plain HTTP on 127.0.0.1:8000 with BMAD_DEV=1, otherwise it refuses to start. | **credential**: Every MCP request needs MCP_AUDIT360_TOKEN and every dashboard request the dashboard password; 30 requests per minute per address. |
|
|
123
|
+
| `mcp-dashboard-cdn` | mcp-server | directly | The dashboard user's IP address, user agent and the dashboard origin as referrer. | cdn.jsdelivr.net | Each time the dashboard page is opened. | **invocation**: Opening the dashboard loads it. |
|
|
124
|
+
| `mcp-knowledge-ingest` | mcp-server | through a started program | Git clone and pull requests for the sources in knowledge/sources.json, and the model download request (model name, library version) on first use. | the Git hosts of the configured knowledge sources, huggingface.co (the embedding model named by RAG_EMBEDDING_MODEL or the default) | At server start when the knowledge base is empty, and on the admin_refresh_knowledge tool. | **invocation**: The maintainer lists the sources; chromadb runs with anonymized_telemetry=False. |
|
|
125
|
+
| `mcp-git-tools` | mcp-server | through a started program | Clone, pull and push traffic for the repositories a client names, with the credentials git holds on the server; pushes carry the commits made through git_commit. | the Git hosts of the repositories the client names (URLs validated before cloning) | git_* tools, audit_scan_repo and orchestrate_full_audit, when an authenticated client calls them. | **credential**: Only through an authenticated MCP call; paths are confined to the server's repository root. |
|
|
126
|
+
| `mcp-github-api` | mcp-server | directly | GITHUB_TOKEN with the repository names, file contents, pull-request texts and collaborator names the client passes; orchestrate_full_audit creates a private delivery repository. | api.github.com | github_* tools and orchestrate_full_audit, when an authenticated client calls them. | **credential**: Only with GITHUB_TOKEN set on the server and an authenticated MCP call. |
|
|
127
|
+
| `mcp-gamma` | mcp-server | directly | The report content (Markdown, title, infographic URLs, instructions) and GAMMA_API_KEY; export downloads carry no content. | public-api.gamma.app, the export host named in Gamma's answer | gamma_* tools, when an authenticated client calls them. | **credential**: Only with GAMMA_API_KEY set on the server and an authenticated MCP call. |
|
|
128
|
+
| `mcp-ci-tools` | mcp-server | through a started program | Whatever those programs send: dependency downloads of npm, pip, cargo or go, Semgrep's registry requests for --config=auto, Trivy's vulnerability-database download, and whatever a repository's deploy script sends. | the package registries of the repository's toolchain, semgrep.dev, Trivy's database mirrors, whoever a repository's deploy script contacts | ci_* tools, when an authenticated client calls them. | **credential**: Only through an authenticated MCP call; commands must equal an allow-listed argv, deploy scripts must lie inside the repository. |
|
|
129
|
+
| `monitor-upstream-git` | monitor | through a started program | Git fetch requests for the configured upstream ref, with the host's IP address. | github.com (bmad-code-org/BMAD-METHOD, or the HTTPS repository the configuration names) | Each scheduled run of weekly-check.py. | **invocation**: The maintainer installs the schedule and chooses the repository and ref. |
|
|
130
|
+
| `monitor-ai-analysis` | monitor | directly | Bounded excerpts of the upstream commit messages, diff statistics and diff, the previous observed version, and the configured API key. | generativelanguage.googleapis.com (Google Gemini API) | weekly-check.py --ai, when a change is observed. | **opt-in**: Only with --ai and an API key and model list in the configuration; --dry-run never calls it. |
|
|
131
|
+
| `monitor-notify` | monitor | directly | The observation report: upstream version and commit summaries, with the advisory analysis when one was requested. | the Evolution API instance the configuration names (loopback unless HTTPS), which relays it to the configured WhatsApp number, the SMTP server of the fallback email configuration (STARTTLS) | weekly-check.py --notify, once per newly observed upstream state. | **opt-in**: Only with --notify and a configured channel; --dry-run never notifies. |
|
|
132
|
+
| `monitor-mcp-bridge` | monitor | directly | Tool names and arguments (repository URLs and paths, pull-request texts) with the MCP bearer token. | the maintainer's MCP server (VPS_HOST or the configured mcp_url) | When code constructs an MCPBridge; weekly-check.py does not. | **credential**: Only with an MCP token and server address supplied by the maintainer. |
|
|
133
|
+
|
|
134
|
+
Stays on the service host:
|
|
135
|
+
|
|
136
|
+
- `mcp-memory` (mcp-server): Runs the bmad-plus CLI's `mem` command with the server's Node.js for the memory tools. When: memory_* tools, when an authenticated client calls them.
|
|
137
|
+
|
|
138
|
+
<!-- data-handling:end -->
|
|
139
|
+
|
|
78
140
|
BMAD+ is an independent derivative of BMAD-METHOD. It is not an official release
|
|
79
141
|
of BMad Code, LLC and does not imply its endorsement.
|
|
@@ -1,43 +1,87 @@
|
|
|
1
|
-
"""Shared HTTP utilities for OSINT scripts — stdlib only, zero dependencies.
|
|
1
|
+
"""Shared HTTP utilities for OSINT scripts — stdlib only, zero dependencies.
|
|
2
|
+
|
|
3
|
+
Every request goes over verified HTTPS: the providers receive API keys and
|
|
4
|
+
investigation queries, so a plain-text or unverified hop is never acceptable.
|
|
5
|
+
"""
|
|
2
6
|
|
|
3
7
|
import http.client
|
|
4
8
|
import json
|
|
5
9
|
import os
|
|
6
10
|
import ssl
|
|
7
11
|
import sys
|
|
8
|
-
from urllib.parse import
|
|
12
|
+
from urllib.parse import urljoin, urlparse
|
|
9
13
|
|
|
14
|
+
MAX_REDIRECTS = 5
|
|
15
|
+
_REDIRECT_STATUSES = frozenset({301, 302, 303, 307, 308})
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
|
|
18
|
+
class InsecureURLError(ValueError):
|
|
19
|
+
"""A URL the helper refuses to contact (not HTTPS, credentials, no host)."""
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _check_https_url(url):
|
|
23
|
+
"""Return ``(host, port, target)`` for an acceptable URL, or raise InsecureURLError.
|
|
24
|
+
|
|
25
|
+
Only ``https://`` with a host is accepted: no plain HTTP, no other scheme
|
|
26
|
+
and no implicit one. Credentials in the URL are refused, since they would
|
|
27
|
+
travel outside the headers the caller controls.
|
|
15
28
|
"""
|
|
16
29
|
parsed = urlparse(url)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
if parsed.scheme.lower() != "https":
|
|
31
|
+
raise InsecureURLError(f"only https:// URLs are allowed, got {parsed.scheme or '(none)'}://")
|
|
32
|
+
if parsed.username is not None or parsed.password is not None:
|
|
33
|
+
raise InsecureURLError("credentials in URL are not allowed")
|
|
34
|
+
if not parsed.hostname:
|
|
35
|
+
raise InsecureURLError("URL has no host")
|
|
36
|
+
try:
|
|
37
|
+
port = parsed.port or 443
|
|
38
|
+
except ValueError:
|
|
39
|
+
raise InsecureURLError("URL has an invalid port") from None
|
|
40
|
+
target = parsed.path or "/"
|
|
21
41
|
if parsed.query:
|
|
22
|
-
|
|
42
|
+
target += "?" + parsed.query
|
|
43
|
+
return parsed.hostname, port, target
|
|
23
44
|
|
|
24
|
-
if scheme == "https":
|
|
25
|
-
ctx = ssl.create_default_context()
|
|
26
|
-
conn = http.client.HTTPSConnection(host, port, timeout=timeout, context=ctx)
|
|
27
|
-
else:
|
|
28
|
-
conn = http.client.HTTPConnection(host, port, timeout=timeout)
|
|
29
45
|
|
|
46
|
+
def https_request(method, url, headers=None, body=None, timeout=120):
|
|
47
|
+
"""Make a verified HTTPS request and return (status, headers, body_str).
|
|
48
|
+
|
|
49
|
+
Refuses anything but ``https://`` with InsecureURLError, verifies the
|
|
50
|
+
certificate and host name against the system trust store (TLS 1.2 or
|
|
51
|
+
later), and follows at most MAX_REDIRECTS redirects that stay on the same
|
|
52
|
+
host and port: a redirect to plain HTTP, another scheme or another host is
|
|
53
|
+
refused rather than handing the API key and query to a recipient the
|
|
54
|
+
caller did not name.
|
|
55
|
+
"""
|
|
30
56
|
hdrs = {"User-Agent": "osint-skill/3.2-python"}
|
|
31
57
|
if headers:
|
|
32
58
|
hdrs.update(headers)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
59
|
+
context = ssl.create_default_context()
|
|
60
|
+
context.minimum_version = ssl.TLSVersion.TLSv1_2
|
|
61
|
+
|
|
62
|
+
host, port, target = _check_https_url(url)
|
|
63
|
+
for _ in range(MAX_REDIRECTS + 1):
|
|
64
|
+
conn = http.client.HTTPSConnection(host, port, timeout=timeout, context=context)
|
|
65
|
+
try:
|
|
66
|
+
conn.request(method, target, body=body, headers=hdrs)
|
|
67
|
+
resp = conn.getresponse()
|
|
68
|
+
data = resp.read().decode("utf-8", errors="replace")
|
|
69
|
+
finally:
|
|
70
|
+
conn.close()
|
|
71
|
+
|
|
72
|
+
location = resp.getheader("Location")
|
|
73
|
+
if resp.status not in _REDIRECT_STATUSES or not location:
|
|
74
|
+
return resp.status, dict(resp.getheaders()), data
|
|
75
|
+
url = urljoin(url, location)
|
|
76
|
+
next_host, next_port, target = _check_https_url(url)
|
|
77
|
+
if (next_host.lower(), next_port) != (host.lower(), port):
|
|
78
|
+
raise InsecureURLError(f"redirect leaves {host}:{port} for {next_host}:{next_port}")
|
|
79
|
+
# As browsers do: 301, 302 and 303 continue a POST as a bodiless GET;
|
|
80
|
+
# 307 and 308 repeat the request unchanged.
|
|
81
|
+
if resp.status in (301, 302, 303) and method not in ("GET", "HEAD"):
|
|
82
|
+
method, body = "GET", None
|
|
83
|
+
hdrs = {k: v for k, v in hdrs.items() if k.lower() != "content-type"}
|
|
84
|
+
raise InsecureURLError(f"too many redirects (max {MAX_REDIRECTS})")
|
|
41
85
|
|
|
42
86
|
|
|
43
87
|
def api_post(url, payload, headers=None, timeout=120):
|
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.
|
|
4
|
+
"version": "0.22.0",
|
|
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": [
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<a href="../README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.es.md">Español</a> | 🌐 <b>Deutsch</b>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
8
8
|
|
|
9
|
-
**Version 0.
|
|
9
|
+
**Version 0.22.0** · Node.js `>=20.0.0` · MIT
|
|
10
10
|
|
|
11
11
|
Projektlokale KI-Entwicklungsworkflows mit klaren Rollen, gemeinsamem Kontext, sicheren Updates und Adaptern für Coding-Tools.
|
|
12
12
|
|
|
@@ -39,7 +39,7 @@ Starte das Installationsprogramm. Wähle die Adapter deiner KI-Werkzeuge und die
|
|
|
39
39
|
**Im Terminal deines Projekts:**
|
|
40
40
|
|
|
41
41
|
```sh
|
|
42
|
-
npx bmad-plus@0.
|
|
42
|
+
npx bmad-plus@0.22.0 install
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
Die Installation erstellt Agentenanweisungen, die gemeinsame Projektbasis und die gewählten Adapter. Optionale Packs können weitere Laufzeitumgebungen oder API-Zugänge benötigen.
|
|
@@ -175,18 +175,18 @@ Lies AGENTS.md und die verfügbare Projekterinnerung. Fasse den letzten geprüft
|
|
|
175
175
|
|
|
176
176
|
Erwartetes Ergebnis: ein kurzer, belegter Wiedereinstieg. Projektnotizen liefern Kontext und müssen mit dem aktuellen Stand abgeglichen werden.
|
|
177
177
|
|
|
178
|
-
## Neu in 0.
|
|
178
|
+
## Neu in 0.22.0
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
Was deinen Rechner verlässt, erklärt und geprüft
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
BMAD+ erklärt jetzt jede Datenübertragung und jeden Prozess, den es startet, und seine CI lehnt alles Unerklärte ab. Die Abnahmeseite und der SEO-Bericht laden nichts mehr von anderen Websites, OSINT-Aufrufe laufen nur über HTTPS, und Shield erhält einen Sicherheitsnachweis aus ausgeführten Prüfungen und ein Verzeichnis der KI-Verarbeitungen. An Installation und Update ändert sich nichts.
|
|
183
183
|
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
184
|
+
- Die Registry gibt an, was BMAD+ sendet, an wen, wann und mit welcher Einwilligung; SECURITY.md zeigt es, und die installierten Agentenanweisungen fassen es zusammen. Eine Build-Prüfung schlägt fehl, wenn ein Netzwerkaufruf oder ein gestarteter Prozess nicht erklärt ist. BMAD+ hat keine Telemetrie, und die Update-Prüfung lässt sich abschalten.
|
|
185
|
+
- Die Abnahmeseite lädt weder Google Fonts noch sonst etwas von einer anderen Website: Wer sie öffnet, verrät das niemandem. Der Build lehnt eine Seite ab, die es täte, und ein echter Browser prüft jede Anfrage eines Durchlaufs. Auch der HTML-SEO-Bericht öffnet sich offline.
|
|
186
|
+
- Der Google-API-Schlüssel des SEO-Packs wird in einem Anfrage-Header übertragen, nie in einer URL, und erscheint in keiner Fehlermeldung. OSINT-Anbieteraufrufe lehnen alles außer HTTPS ab und folgen nie einer Weiterleitung zu einem anderen Host.
|
|
187
|
+
- SEO-Screenshots erreichen nur die geprüfte Adresse: Chromium löst nichts anderes auf, und Weiterleitungen oder Ressourcen, die woanders hinzeigen, werden blockiert und aufgelistet.
|
|
188
|
+
- Shield: bmad-plus assurance erstellt einen Sicherheitsnachweis, dessen Belege nur tatsächlich ausgeführte Prüfungen sein können, festgehalten in einem manipulationssicheren Protokoll; bmad-plus ai-register führt das Verzeichnis der KI-Werkzeuge eines Projekts und warnt vor nicht erfassten; sechs Review-Regeln nennen die Compliance-Kontrollen, die eine Änderung berührt.
|
|
189
|
+
- Der MCP-Server schließt SSE-Streams sauber, wenn ein Client geht oder der Server stoppt, und akzeptiert Token-Daten mit Zeitzonenversatz.
|
|
190
190
|
|
|
191
191
|
## Versionsverlauf
|
|
192
192
|
|
|
@@ -194,9 +194,9 @@ Diese Daten bezeichnen geprüfte CHANGELOG-Einträge, nicht die Veröffentlichun
|
|
|
194
194
|
|
|
195
195
|
| Version | Datum der Notizen | Geprüfte Zusammenfassung |
|
|
196
196
|
| --- | --- | --- |
|
|
197
|
+
| 0.22.0 | 2026-09-29 | BMAD+ erklärt jetzt jede Datenübertragung und jeden Prozess, den es startet, und seine CI lehnt alles Unerklärte ab. Die Abnahmeseite und der SEO-Bericht laden nichts mehr von anderen Websites, OSINT-Aufrufe laufen nur über HTTPS, und Shield erhält einen Sicherheitsnachweis aus ausgeführten Prüfungen und ein Verzeichnis der KI-Verarbeitungen. An Installation und Update ändert sich nichts. |
|
|
197
198
|
| 0.21.0 | 2026-09-28 | Ein Review hält jetzt fest, warum es angehalten hat und was es verbraucht hat, schreibt eine Prüfung, die ein CI-Schritt lesen kann, und wird auf dem versiegelten Umfang fortgesetzt. Der SEO-Abruf verbindet sich nur mit Adressen, die er geprüft hat, und der MCP-Server wechselt zum offiziellen SDK unter Python 3.12. An Installation und Update ändert sich nichts. |
|
|
198
199
|
| 0.20.0 | 2026-09-28 | bmad-plus review gibt der prüfenden Person jetzt die Regeln, die für die geänderten Dateien gelten, legt die Tiefe eines Reviews vor Beginn fest, vergleicht ein Review mit einem früheren, ohne einen ungeprüften Befund für behoben zu erklären, und schwärzt Zugangsdaten in dem, was es schreibt. An Installation und Update ändert sich nichts. |
|
|
199
|
-
| 0.19.0 | 2026-09-27 | bmad-plus review versiegelt, was ein Review abdecken muss, findet jeden Befund über den Code, den er zitiert, und leitet das Urteil aus der Abdeckung ab statt aus der Zahl der Befunde. Die Review-Sichtung behält einen Befund jetzt, solange kein zitierter Grund ihn widerlegt. An Installation und Update ändert sich nichts. |
|
|
200
200
|
|
|
201
201
|
[Versionsverlauf und Update-Anleitung](https://bmad-plus.rochetta.fr/de/docs/#changelog) · [Alle veröffentlichten Versionen auf npm](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
|
|
202
202
|
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<a href="../README.md">English</a> | <a href="README.fr.md">Français</a> | 🌐 <b>Español</b> | <a href="README.de.md">Deutsch</a>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
8
8
|
|
|
9
|
-
**Versión 0.
|
|
9
|
+
**Versión 0.22.0** · Node.js `>=20.0.0` · MIT
|
|
10
10
|
|
|
11
11
|
Flujos de desarrollo con IA propios de cada proyecto, con roles claros, contexto compartido, actualizaciones seguras y adaptadores para herramientas de programación.
|
|
12
12
|
|
|
@@ -39,7 +39,7 @@ Ejecuta el instalador. Selecciona los adaptadores de tus herramientas de IA y lo
|
|
|
39
39
|
**En la terminal del proyecto:**
|
|
40
40
|
|
|
41
41
|
```sh
|
|
42
|
-
npx bmad-plus@0.
|
|
42
|
+
npx bmad-plus@0.22.0 install
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
El instalador crea las instrucciones de los agentes, la base compartida y los adaptadores seleccionados. Algunos packs opcionales necesitan otros entornos o acceso a API.
|
|
@@ -175,18 +175,18 @@ Lee AGENTS.md y la memoria de proyecto disponible. Resume el último estado veri
|
|
|
175
175
|
|
|
176
176
|
Resultado esperado: una reanudación breve y fundamentada. Las notas aportan contexto que debe contrastarse con el trabajo actual.
|
|
177
177
|
|
|
178
|
-
## Novedades de la 0.
|
|
178
|
+
## Novedades de la 0.22.0
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
Lo que sale de tu máquina, declarado y comprobado
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
BMAD+ declara ahora cada envío de datos y cada proceso que inicia, y su CI rechaza todo lo que no esté declarado. La página de aceptación y el informe SEO ya no cargan nada de otros sitios, las llamadas OSINT van solo por HTTPS, y Shield incorpora un caso de seguridad basado en pruebas ejecutadas y un registro de tratamientos de IA. Nada cambia en la instalación ni en la actualización.
|
|
183
183
|
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
- Las
|
|
188
|
-
-
|
|
189
|
-
- El
|
|
184
|
+
- El registro indica qué envía BMAD+, a quién, cuándo y con qué consentimiento; SECURITY.md lo muestra y las instrucciones instaladas para los agentes lo resumen. Una comprobación de build falla cuando una llamada de red o un proceso iniciado no está declarado. BMAD+ no tiene telemetría, y la comprobación de actualizaciones se puede desactivar.
|
|
185
|
+
- La página de aceptación ya no carga Google Fonts ni nada de otro sitio: abrirla no se lo comunica a nadie. El build rechaza una página que lo hiciera, y un navegador real controla cada petición de una ejecución. El informe HTML de SEO también se abre sin conexión.
|
|
186
|
+
- La clave de API de Google del pack SEO viaja en una cabecera de la petición, nunca en una URL, y no aparece en los mensajes de error. Las llamadas a proveedores OSINT rechazan todo lo que no sea HTTPS y nunca siguen una redirección a otro host.
|
|
187
|
+
- Las capturas de pantalla SEO solo alcanzan la dirección comprobada: Chromium no resuelve nada más, y las redirecciones o recursos que apuntan a otro lugar se bloquean y se enumeran.
|
|
188
|
+
- Shield: bmad-plus assurance construye un caso de seguridad cuyas pruebas solo pueden ser comprobaciones realmente ejecutadas, anotadas en un registro a prueba de manipulaciones; bmad-plus ai-register mantiene el registro de herramientas de IA de un proyecto y avisa de las que no figuran; seis reglas de revisión nombran los controles de cumplimiento que toca un cambio.
|
|
189
|
+
- El servidor MCP cierra limpiamente los flujos SSE cuando un cliente se va o el servidor se detiene, y acepta fechas de token con desfase horario.
|
|
190
190
|
|
|
191
191
|
## Historial de versiones
|
|
192
192
|
|
|
@@ -194,9 +194,9 @@ Estas fechas identifican las notas revisadas del CHANGELOG, no las fechas de pub
|
|
|
194
194
|
|
|
195
195
|
| Versión | Fecha de las notas | Resumen revisado |
|
|
196
196
|
| --- | --- | --- |
|
|
197
|
+
| 0.22.0 | 2026-09-29 | BMAD+ declara ahora cada envío de datos y cada proceso que inicia, y su CI rechaza todo lo que no esté declarado. La página de aceptación y el informe SEO ya no cargan nada de otros sitios, las llamadas OSINT van solo por HTTPS, y Shield incorpora un caso de seguridad basado en pruebas ejecutadas y un registro de tratamientos de IA. Nada cambia en la instalación ni en la actualización. |
|
|
197
198
|
| 0.21.0 | 2026-09-28 | Una revisión registra ahora por qué se detuvo y qué consumió, escribe un control que un paso de CI puede leer y se reanuda sobre el alcance que selló. El descargador SEO solo se conecta a direcciones que ha validado, y el servidor MCP pasa al SDK oficial con Python 3.12. Nada cambia en la instalación ni en la actualización. |
|
|
198
199
|
| 0.20.0 | 2026-09-28 | bmad-plus review ahora entrega a quien revisa las reglas que se aplican a los archivos modificados, fija la profundidad de una revisión antes de empezar, compara una revisión con otra anterior sin dar por corregido un hallazgo no comprobado y oculta las credenciales en lo que escribe. Nada cambia en la instalación ni en la actualización. |
|
|
199
|
-
| 0.19.0 | 2026-09-27 | bmad-plus review sella lo que una revisión debe cubrir, localiza cada hallazgo por el código que cita y deduce el veredicto de la cobertura en lugar del número de hallazgos. La clasificación de las revisiones conserva ahora un hallazgo mientras ningún motivo citado lo refute. Nada cambia en la instalación ni en la actualización. |
|
|
200
200
|
|
|
201
201
|
[Historial de versiones y guía de actualización](https://bmad-plus.rochetta.fr/es/docs/#changelog) · [Todas las versiones publicadas en npm](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
|
|
202
202
|
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<a href="../README.md">English</a> | 🌐 <b>Français</b> | <a href="README.es.md">Español</a> | <a href="README.de.md">Deutsch</a>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
8
8
|
|
|
9
|
-
**Version 0.
|
|
9
|
+
**Version 0.22.0** · Node.js `>=20.0.0` · MIT
|
|
10
10
|
|
|
11
11
|
Des workflows de développement IA propres à chaque projet, avec des rôles clairs, un contexte partagé, des mises à jour sûres et des adaptateurs pour vos outils de code.
|
|
12
12
|
|
|
@@ -39,7 +39,7 @@ Lancez l’installateur. Sélectionnez les adaptateurs de vos outils IA et les p
|
|
|
39
39
|
**Dans le terminal du projet :**
|
|
40
40
|
|
|
41
41
|
```sh
|
|
42
|
-
npx bmad-plus@0.
|
|
42
|
+
npx bmad-plus@0.22.0 install
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
L’installateur crée les instructions des agents, le socle partagé et les adaptateurs sélectionnés. Certains packs facultatifs nécessitent d’autres environnements ou des accès API.
|
|
@@ -175,18 +175,18 @@ Lis AGENTS.md et la mémoire de projet disponible. Résume le dernier état vér
|
|
|
175
175
|
|
|
176
176
|
Résultat attendu : une reprise courte et fondée sur des éléments vérifiés. Les notes apportent du contexte, à confronter au travail actuel.
|
|
177
177
|
|
|
178
|
-
## Nouveautés de la 0.
|
|
178
|
+
## Nouveautés de la 0.22.0
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
Ce qui sort de votre machine, déclaré et vérifié
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
BMAD+ déclare désormais chaque envoi de données et chaque processus qu’il lance, et sa CI refuse tout ce qui n’est pas déclaré. La page de recette et le rapport SEO ne chargent plus rien depuis d’autres sites, les appels OSINT passent uniquement en HTTPS, et Shield gagne un dossier de sécurité fondé sur des preuves exécutées et un registre des traitements IA. Rien ne change dans l’installation ou la mise à jour.
|
|
183
183
|
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
- Les
|
|
188
|
-
-
|
|
189
|
-
- Le
|
|
184
|
+
- Le registre indique ce que BMAD+ envoie, à qui, quand et avec quel consentement ; SECURITY.md l’affiche et les instructions installées pour les agents le résument. Une vérification de build échoue quand un appel réseau ou un processus lancé n’est pas déclaré. BMAD+ n’a aucune télémétrie, et la vérification de mise à jour peut être désactivée.
|
|
185
|
+
- La page de recette ne charge plus Google Fonts ni rien d’un autre site : l’ouvrir ne le signale à personne. Le build refuse une page qui le ferait, et un vrai navigateur contrôle chaque requête d’un passage. Le rapport HTML SEO s’ouvre aussi hors ligne.
|
|
186
|
+
- La clé d’API Google du pack SEO voyage dans un en-tête de requête, jamais dans une URL, et n’apparaît pas dans les messages d’erreur. Les appels aux fournisseurs OSINT refusent tout sauf HTTPS et ne suivent jamais une redirection vers un autre hôte.
|
|
187
|
+
- Les captures d’écran SEO n’atteignent que l’adresse vérifiée : Chromium ne résout rien d’autre, et les redirections ou ressources qui pointent ailleurs sont bloquées et listées.
|
|
188
|
+
- Shield : bmad-plus assurance construit un dossier de sécurité dont chaque preuve est une vérification réellement exécutée, consignée dans un journal infalsifiable ; bmad-plus ai-register tient le registre des outils IA d’un projet et signale ceux qui n’y figurent pas ; six règles de revue nomment les contrôles de conformité qu’un changement touche.
|
|
189
|
+
- Le serveur MCP ferme proprement les flux SSE quand un client part ou que le serveur s’arrête, et accepte les dates de jeton avec un décalage horaire.
|
|
190
190
|
|
|
191
191
|
## Historique des versions
|
|
192
192
|
|
|
@@ -194,9 +194,9 @@ Ces dates identifient les notes relues du CHANGELOG, pas les dates de publicatio
|
|
|
194
194
|
|
|
195
195
|
| Version | Date des notes | Résumé relu |
|
|
196
196
|
| --- | --- | --- |
|
|
197
|
+
| 0.22.0 | 2026-09-29 | BMAD+ déclare désormais chaque envoi de données et chaque processus qu’il lance, et sa CI refuse tout ce qui n’est pas déclaré. La page de recette et le rapport SEO ne chargent plus rien depuis d’autres sites, les appels OSINT passent uniquement en HTTPS, et Shield gagne un dossier de sécurité fondé sur des preuves exécutées et un registre des traitements IA. Rien ne change dans l’installation ou la mise à jour. |
|
|
197
198
|
| 0.21.0 | 2026-09-28 | Une revue enregistre désormais pourquoi elle s’est arrêtée et ce qu’elle a consommé, écrit un contrôle lisible par une étape de CI, et reprend sur le périmètre qu’elle a scellé. Le récupérateur SEO ne se connecte qu’aux adresses qu’il a validées, et le serveur MCP passe au SDK officiel sous Python 3.12. Rien ne change dans l’installation ou la mise à jour. |
|
|
198
199
|
| 0.20.0 | 2026-09-28 | bmad-plus review donne désormais au relecteur les règles qui s’appliquent aux fichiers modifiés, fixe la profondeur d’une revue avant qu’elle commence, compare une revue avec une précédente sans déclarer corrigée une remarque non vérifiée, et masque les identifiants dans ce qu’il écrit. Rien ne change dans l’installation ou la mise à jour. |
|
|
199
|
-
| 0.19.0 | 2026-09-27 | bmad-plus review scelle ce qu’une revue doit couvrir, retrouve chaque remarque par le code qu’elle cite, et déduit le verdict de la couverture plutôt que du nombre de remarques. Le tri des revues garde désormais une remarque tant qu’un motif cité ne la réfute pas. Rien ne change dans l’installation ou la mise à jour. |
|
|
200
200
|
|
|
201
201
|
[Historique des versions et guide de mise à jour](https://bmad-plus.rochetta.fr/fr/docs/#changelog) · [Toutes les versions publiées sur npm](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
|
|
202
202
|
|
|
@@ -75,7 +75,9 @@ arbitrary branch. Read the intended behavior and applicable project constraints.
|
|
|
75
75
|
when a selected file is unaccounted for or a finding is not anchored, `findings`
|
|
76
76
|
or `clean` otherwise. `clean` covers the reviewed scope only. A finding that
|
|
77
77
|
applies a checklist rule names it in `rule`; the CLI refuses a rule that does
|
|
78
|
-
not apply to that path.
|
|
78
|
+
not apply to that path. A finding that breaks a compliance control lists it in
|
|
79
|
+
`controls`, chosen among the controls `scope.json` records for that file; the
|
|
80
|
+
CLI refuses any other and carries them into the check result. The anchored record replaces credential-like values
|
|
79
81
|
quoted in a finding with `[REDACTED]` and counts them. Record the session in
|
|
80
82
|
`coverage.json` under `run`: `stop` (`completed`, `budget`, `time-limit`,
|
|
81
83
|
`failure-streak` or `interrupted`, with a `detail` unless completed), the
|
|
@@ -100,7 +100,9 @@ Run Scout and Judge **simultaneously** on each discovered page:
|
|
|
100
100
|
**Optional**: Run `scripts/seo_apis.py --all <url>` for live PageSpeed + CrUX data.
|
|
101
101
|
|
|
102
102
|
Use `scripts/seo_parse.py <file> --url <url> --json` on fetched HTML.
|
|
103
|
-
Use `scripts/seo_screenshot.py <url> --viewport mobile` for visual audit.
|
|
103
|
+
Use `scripts/seo_screenshot.py <url> --viewport mobile` for visual audit. The browser only
|
|
104
|
+
reaches the audited host: third-party resources are blocked and listed in `blocked_requests`,
|
|
105
|
+
so judge a missing CDN image or font as an effect of the capture, not of the site.
|
|
104
106
|
|
|
105
107
|
### Phase 3 — AI Readiness & GEO
|
|
106
108
|
**Agent**: Judge (GEO Analyst role)
|
|
@@ -73,8 +73,8 @@
|
|
|
73
73
|
|
|
74
74
|
## API Tools
|
|
75
75
|
```bash
|
|
76
|
-
# PageSpeed Insights API
|
|
77
|
-
curl "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=URL
|
|
76
|
+
# PageSpeed Insights API: the key goes in a header, never in the URL (or use scripts/seo_apis.py)
|
|
77
|
+
curl -H "x-goog-api-key: $GOOGLE_API_KEY" "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=URL"
|
|
78
78
|
|
|
79
79
|
# Lighthouse CLI
|
|
80
80
|
npx lighthouse URL --output json --output-path report.json
|