bmad-plus 0.17.1 → 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 +18 -1
- package/README.md +16 -16
- package/package.json +3 -1
- package/readme-international/README.de.md +16 -17
- package/readme-international/README.es.md +16 -17
- package/readme-international/README.fr.md +16 -17
- 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/cli/commands/uat.js +50 -5
- package/tools/cli/commands/update-check.js +5 -1
- package/tools/cli/commands/update.js +9 -3
- package/tools/cli/lib/install-manifest.js +19 -1
- package/tools/cli/lib/packs.js +1 -1
- package/tools/cli/lib/uat.js +139 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,24 @@ 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
|
-
## [
|
|
8
|
+
## [0.18.0] - 2026-09-25
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **The acceptance page names what it guarantees, and the build refuses a template that lost one.** `uat build --json` lists sixteen page guarantees (`hidden-before-start`, `verified-local-write`, `honest-save-status`, `save-on-every-change`, `restore-before-capabilities`, `revision-guard`, `other-tab-notice`, `unreadable-draft-kept`, `progress-accessible`, `storage-explained`, `finished-is-not-accepted`, …); a template missing one is not built. A jsdom suite replays every scenario of the FormaPro incident of 2026-09-25 — start, tick, note without blur, immediate reload, storage refused, unreadable draft, amended recipe, two tabs, artifact database precedence, local server — and `tools/qa/uat-page-browser-check.js` walks the essential pass in Chromium, because the original defect lived in the stylesheet.
|
|
13
|
+
- The page offers a run that answered another revision of the recipe instead of pouring it in: identical lines keep their answers, changed lines are asked again, the earlier run stays untouched and exportable, and the new run records `carriedFrom`. Another run can be started while the previous one stays saved; the resume list shows the newest copy of each run first, with its progress.
|
|
14
|
+
- Finishing with unanswered lines is questioned on the page itself and confirmed by a second click, never through a dialog a host may swallow. A change after finishing is kept, dated, and said on screen. A blocked line asks "What stopped you?"; a note already written stays in view whatever the answer became.
|
|
15
|
+
- `uat serve` refuses an older copy of a run (409), any host name but its own (403), and prints the port it actually bound. A tester whose name has no Latin letter signs the run with a stable hash instead of "anonymous".
|
|
16
|
+
- The skill carries the contract: an agent builds the page with the command, never writes it by hand, plays the essential pass in a real browser before handing the page over, tells the tester where the answers live, and says in the delivery which checks ran.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **The acceptance page could say "saved" without a verified write.** A refused write to the browser (quota, private window, blocked storage) was swallowed and the status still read saved. A write now counts only once it reads back — the run and the pointer that finds it — and a failed save shows a persistent warning, questions leaving the page, and keeps the export available. A failed remote copy is reported as such, with the local copy kept.
|
|
21
|
+
- The browser's copy of a run is restored synchronously on reload, before the local-server probe and the artifact database answer or hang; an older remote copy no longer overwrites a newer local one, and a newer remote one is adopted and written back to the browser.
|
|
22
|
+
- A stored run that cannot be read is reported and exportable, never deleted in silence. Two tabs on the same run converge on the latest change, and the page says so.
|
|
23
|
+
- The progress bar exposes the share of lines answered as an accessible `progressbar` — answered, not passed — next to the seen / not seen / blocked counts, and the page explains where answers live and what can make them disappear. Finishing says it is not an acceptance. The diacritics range in run ids is written as escapes so a charset hop cannot corrupt it.
|
|
24
|
+
- `update`, `update --latest` and `update-check` run outside an installed project now say which folder they looked in and how to run them from the project folder (or with `--directory`), instead of a raw `ENOENT` error or an unexplained `invalid-installation` status. `update-check --json` keeps its JSON on stdout and writes the guidance to stderr.
|
|
25
|
+
- The release workflow's npm verification now reports the integrity npm actually served, so a registry availability delay can no longer read as a different archive.
|
|
9
26
|
|
|
10
27
|
## [0.17.1] - 2026-09-24
|
|
11
28
|
|
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.18.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.18.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.
|
|
@@ -136,7 +136,7 @@ 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. 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.
|
|
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. Before handing the page over, build it with uat build, check the guarantees it lists, play the essential pass yourself in a real browser — start, tick, type a remark, reload, everything back — and tell me which checks ran.
|
|
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.
|
|
@@ -171,20 +171,20 @@ 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.18.0
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
Acceptance pages that keep every answer
|
|
177
177
|
|
|
178
|
-
|
|
178
|
+
The acceptance page now verifies every save, restores your answers on reload before anything else, keeps runs from other revisions and other tabs apart, and names sixteen guarantees the build refuses to lose. Nothing changes in how you install or update; rebuild your recipe pages to get the new page.
|
|
179
179
|
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
180
|
+
- A write to the browser counts only once it reads back. A refused save (quota, private window, blocked storage) is named on the page, questions leaving, and the export stays available — the page never says saved on its own word.
|
|
181
|
+
- Your answers come back on reload before the local server or the artifact database answer, and the newer copy always wins: an older remote copy never overwrites what you just ticked.
|
|
182
|
+
- A run that answered another revision of the recipe is offered, not poured in: unchanged lines keep their answers, changed lines are asked again, the earlier run stays untouched and exportable, and the new run records where its answers came from.
|
|
183
|
+
- Two tabs or two devices on the same run converge on the latest change and say so. A saved run that cannot be read is reported and exportable, never deleted.
|
|
184
|
+
- The progress bar exposes the share of lines answered — answered, not passed — with the seen, not seen and blocked counts; the page says where answers live and what can make them disappear.
|
|
185
|
+
- Finishing with unanswered lines is questioned on the page itself and confirmed with a second click; a finished run says it is not an acceptance, and a change made after finishing is dated and shown.
|
|
186
|
+
- uat build lists the sixteen guarantees the page carries and refuses a template that lost one; uat serve refuses an older copy of a run and any host name but its own. A name with no Latin letters signs its run with a stable hash.
|
|
187
|
+
- The acceptance skill tells the agent to build the page with the command, never write it by hand, play the essential pass in a real browser before handing it over, and say which checks ran. The page strings gain twenty-two sentences in ten languages.
|
|
188
188
|
|
|
189
189
|
## Version History
|
|
190
190
|
|
|
@@ -192,9 +192,9 @@ These dates identify reviewed CHANGELOG notes, not npm publication dates. The we
|
|
|
192
192
|
|
|
193
193
|
| Version | Release-notes date | Reviewed summary |
|
|
194
194
|
| --- | --- | --- |
|
|
195
|
+
| 0.18.0 | 2026-09-25 | The acceptance page now verifies every save, restores your answers on reload before anything else, keeps runs from other revisions and other tabs apart, and names sixteen guarantees the build refuses to lose. Nothing changes in how you install or update; rebuild your recipe pages to get the new page. |
|
|
195
196
|
| 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
197
|
| 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. |
|
|
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. |
|
|
198
198
|
|
|
199
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)
|
|
200
200
|
|
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.18.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": [
|
|
@@ -52,6 +52,7 @@
|
|
|
52
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
53
|
"uat:spec": "node src/bmad-plus/skills/bmad-plus-uat/templates/uat-spec-present.mjs --dir recettes",
|
|
54
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",
|
|
55
|
+
"qa:uat-browser": "node tools/qa/uat-page-browser-check.js",
|
|
55
56
|
"lint": "eslint tools/ tests/",
|
|
56
57
|
"format": "prettier --write \"tools/**/*.js\" \"tests/**/*.js\"",
|
|
57
58
|
"format:check": "prettier --check \"tools/**/*.js\" \"tests/**/*.js\"",
|
|
@@ -136,6 +137,7 @@
|
|
|
136
137
|
"eslint": "^10.6.0",
|
|
137
138
|
"husky": "^9.0.0",
|
|
138
139
|
"jest": "^30.4.2",
|
|
140
|
+
"jsdom": "^26.1.0",
|
|
139
141
|
"prettier": "^3.4.0"
|
|
140
142
|
}
|
|
141
143
|
}
|
|
@@ -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.18.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.18.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.
|
|
@@ -140,7 +140,7 @@ Erwartetes Ergebnis: begrenzte Aufträge, klare Abhängigkeiten und eine gemeins
|
|
|
140
140
|
Verwenden Sie dies, wenn eine Version auf Ihrer Testumgebung ankommt und jemand sie am Bildschirm prüfen muss.
|
|
141
141
|
|
|
142
142
|
```text
|
|
143
|
-
Sentinel, schreibe das Abnahmerezept für diese Lieferung auf unserer Testumgebung. Ein Schritt je Handgriff, eine überprüfbare Tatsache je Zeile, Bildschirmtexte aus dem Code zitiert, und markiere die wirklich schreibenden Schritte. Baue die Seite und nenne mir Link, Dauer und was ich nicht überspringen darf. Verwende möglichst wegwerfbare Testdaten, benenne den Ordner und die Dateien, die jeder Befehl ändert, und halte automatisierte Nachweise von den Antworten der Person getrennt.
|
|
143
|
+
Sentinel, schreibe das Abnahmerezept für diese Lieferung auf unserer Testumgebung. Ein Schritt je Handgriff, eine überprüfbare Tatsache je Zeile, Bildschirmtexte aus dem Code zitiert, und markiere die wirklich schreibenden Schritte. Baue die Seite und nenne mir Link, Dauer und was ich nicht überspringen darf. Verwende möglichst wegwerfbare Testdaten, benenne den Ordner und die Dateien, die jeder Befehl ändert, und halte automatisierte Nachweise von den Antworten der Person getrennt. Bevor du mir die Seite übergibst, baue sie mit uat build, prüfe die aufgelisteten Garantien, spiele den wesentlichen Durchgang selbst in einem echten Browser — starten, ankreuzen, eine Bemerkung tippen, neu laden, alles ist wieder da — und sage mir, welche Prüfungen liefen.
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
Erwartetes Ergebnis: eine Seite, die auch eine nicht technische Person durchgehen kann, und ein Durchlauf, den der Agent zurückliest, um jeden Fehlschlag einzuordnen, bevor etwas korrigiert wird.
|
|
@@ -175,20 +175,20 @@ 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.18.0
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
Abnahmeseiten, die jede Antwort behalten
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
Die Abnahmeseite prüft jetzt jedes Speichern, stellt deine Antworten beim Neuladen vor allem anderen wieder her, hält Durchläufe anderer Fassungen und anderer Tabs auseinander und benennt sechzehn Garantien, die der Build nicht verlieren darf. An Installation und Update ändert sich nichts; baue deine Rezeptseiten neu, um die neue Seite zu erhalten.
|
|
183
183
|
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
-
|
|
184
|
+
- Ein Schreibvorgang im Browser zählt erst, wenn er zurückgelesen wurde. Ein abgelehntes Speichern (Kontingent, privates Fenster, gesperrter Speicher) wird auf der Seite benannt, das Verlassen wird hinterfragt, und der Export bleibt möglich — die Seite sagt nie auf eigenes Wort „gespeichert“.
|
|
185
|
+
- Deine Antworten kommen beim Neuladen zurück, bevor der lokale Server oder die Artefakt-Datenbank antworten, und die neuere Kopie gewinnt immer: Eine ältere entfernte Kopie überschreibt nie, was du gerade angekreuzt hast.
|
|
186
|
+
- Ein Durchlauf, der eine andere Fassung der Checkliste beantwortet hat, wird angeboten, nicht hineingekippt: Unveränderte Zeilen behalten ihre Antworten, geänderte werden erneut abgefragt, der frühere Durchlauf bleibt unverändert und exportierbar, und der neue vermerkt, woher seine Antworten stammen.
|
|
187
|
+
- Zwei Tabs oder zwei Geräte auf demselben Durchlauf einigen sich auf die letzte Änderung und sagen es. Ein gespeicherter, nicht lesbarer Durchlauf wird gemeldet und bleibt exportierbar, nie gelöscht.
|
|
188
|
+
- Der Fortschrittsbalken zeigt den Anteil beantworteter Zeilen — beantwortet, nicht bestanden — mit den Zählern gesehen, nicht gesehen und blockiert; die Seite sagt, wo die Antworten liegen und was sie verschwinden lassen kann.
|
|
189
|
+
- Das Abschließen mit unbeantworteten Zeilen wird auf der Seite selbst hinterfragt und mit einem zweiten Klick bestätigt; ein abgeschlossener Durchlauf sagt, dass er keine Abnahme ist, und eine Änderung nach dem Abschluss wird datiert und angezeigt.
|
|
190
|
+
- uat build listet die sechzehn Garantien der Seite auf und lehnt eine Vorlage ab, die eine verloren hat; uat serve lehnt eine ältere Kopie eines Durchlaufs und jeden fremden Hostnamen ab. Ein Name ohne lateinische Buchstaben signiert seinen Durchlauf mit einem stabilen Hash.
|
|
191
|
+
- Der Abnahme-Skill weist den Agenten an, die Seite mit dem Befehl zu bauen, nie von Hand, den wesentlichen Durchgang vor der Übergabe in einem echten Browser zu spielen und zu sagen, welche Prüfungen liefen. Die Seitentexte erhalten zweiundzwanzig Sätze in zehn Sprachen.
|
|
192
192
|
|
|
193
193
|
## Versionsverlauf
|
|
194
194
|
|
|
@@ -196,10 +196,9 @@ Diese Daten bezeichnen geprüfte CHANGELOG-Einträge, nicht die Veröffentlichun
|
|
|
196
196
|
|
|
197
197
|
| Version | Datum der Notizen | Geprüfte Zusammenfassung |
|
|
198
198
|
| --- | --- | --- |
|
|
199
|
+
| 0.18.0 | 2026-09-25 | Die Abnahmeseite prüft jetzt jedes Speichern, stellt deine Antworten beim Neuladen vor allem anderen wieder her, hält Durchläufe anderer Fassungen und anderer Tabs auseinander und benennt sechzehn Garantien, die der Build nicht verlieren darf. An Installation und Update ändert sich nichts; baue deine Rezeptseiten neu, um die neue Seite zu erhalten. |
|
|
199
200
|
| 0.17.1 | 2026-09-24 | Eine Installation über eine andere Version bricht jetzt ab und verweist auf update, eine erneute Installation behält deine Einstellungen, und Updates entfernen Dateien, die eine Version nicht mehr mitliefert, mit wiederherstellbarer Sicherung. Einige Installationsabläufe ändern sich: Prüfe deine Skripte, bevor du sie erneut ausführst. |
|
|
200
201
|
| 0.17.0 | 2026-09-22 | Abnahmeseiten verhindern jetzt unbemerkt verlorene Antworten und leere Exporte. Rezepte lassen sich anhand ihrer Kennung erzeugen, und Veröffentlichungsprüfungen verwenden unter Windows direkt Node. Die Anleitungen ergänzen Prompts für die Ergebnisprüfung und die Sicherung des Projektkontexts. |
|
|
201
|
-
| 0.16.0 | 2026-09-16 | Eine Lieferung erzeugt jetzt eine Schritt-für-Schritt-Seite, die eine Person durchgeht; ihr Durchlauf kommt als Nachweis zurück, den die Agenten lesen, einordnen und zur Prüfung machen. Diese Version bringt zusätzlich, was 0.15.0 vorbereitet, aber nie veröffentlicht hatte: dauerhafte Nexus-Ausführung, evidenzbasierte Speicherbewertung und bewertete Kontrollen für jedes Pack. |
|
|
202
|
-
| 0.14.0 | 2026-09-09 | Dev Studio erhält vollständige Anweisungen und überprüfbares Laden des Kontexts; die Dokumentation folgt dem veröffentlichten Paket. |
|
|
203
202
|
|
|
204
203
|
[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)
|
|
205
204
|
|
|
@@ -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.18.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.18.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.
|
|
@@ -140,7 +140,7 @@ Resultado esperado: tareas delimitadas, dependencias explícitas y una revisión
|
|
|
140
140
|
Úselo cuando una versión llegue a su entorno de pruebas y alguien deba comprobarla en pantalla.
|
|
141
141
|
|
|
142
142
|
```text
|
|
143
|
-
Sentinel, escribe la receta de aceptación de esta entrega en nuestro entorno de pruebas. Un paso por gesto, un hecho verificable por línea, las etiquetas citadas desde el código y marca los pasos que escriben de verdad. Construye la página y dime el enlace, cuánto dura y qué no debo saltarme. Usa datos de prueba desechables cuando sea posible, indica la carpeta y los archivos que modifica cada comando y distingue las evidencias automáticas de las respuestas de la persona.
|
|
143
|
+
Sentinel, escribe la receta de aceptación de esta entrega en nuestro entorno de pruebas. Un paso por gesto, un hecho verificable por línea, las etiquetas citadas desde el código y marca los pasos que escriben de verdad. Construye la página y dime el enlace, cuánto dura y qué no debo saltarme. Usa datos de prueba desechables cuando sea posible, indica la carpeta y los archivos que modifica cada comando y distingue las evidencias automáticas de las respuestas de la persona. Antes de entregarme la página, constrúyela con uat build, comprueba las garantías que enumera, recorre tú mismo el paso esencial en un navegador real —empezar, marcar, escribir una observación, recargar, todo vuelve— y dime qué comprobaciones se ejecutaron.
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
Resultado esperado: una página que una persona no técnica puede recorrer y una prueba que el agente relee para clasificar cada fallo antes de corregir nada.
|
|
@@ -175,20 +175,20 @@ 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.18.0
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
Páginas de aceptación que conservan cada respuesta
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
La página de aceptación ahora verifica cada guardado, restaura tus respuestas al recargar antes que nada, mantiene separadas las pruebas de otras versiones y otras pestañas, y nombra dieciséis garantías que la construcción se niega a perder. Nada cambia en la instalación ni en la actualización; reconstruye tus páginas de receta para obtener la nueva página.
|
|
183
183
|
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
-
|
|
184
|
+
- Una escritura en el navegador solo cuenta una vez releída. Un guardado rechazado (cuota, ventana privada, almacenamiento bloqueado) se indica en la página, salir se cuestiona y la exportación sigue disponible: la página nunca dice «guardado» sin comprobarlo.
|
|
185
|
+
- Tus respuestas vuelven al recargar antes de que respondan el servidor local o la base del artefacto, y la copia más reciente siempre gana: una copia remota más antigua nunca sobrescribe lo que acabas de marcar.
|
|
186
|
+
- Una prueba que respondió a otra versión de la receta se ofrece, no se vuelca: las líneas sin cambios conservan sus respuestas, las modificadas se preguntan de nuevo, la prueba anterior queda intacta y exportable, y la nueva registra de dónde vienen sus respuestas.
|
|
187
|
+
- Dos pestañas o dos dispositivos sobre la misma prueba convergen en el último cambio y lo indican. Una prueba guardada que no se puede leer se informa y se puede exportar, nunca se borra.
|
|
188
|
+
- La barra de progreso muestra la proporción de líneas respondidas —respondidas, no superadas— con los recuentos de visto, no visto y bloqueado; la página dice dónde viven las respuestas y qué puede hacerlas desaparecer.
|
|
189
|
+
- Terminar con líneas sin responder se cuestiona en la propia página y se confirma con un segundo clic; una prueba terminada indica que no es una aceptación, y un cambio hecho después de terminar queda fechado y visible.
|
|
190
|
+
- uat build enumera las dieciséis garantías que lleva la página y rechaza una plantilla que haya perdido una; uat serve rechaza una copia más antigua de una prueba y cualquier nombre de host distinto del suyo. Un nombre sin letras latinas firma su prueba con una huella estable.
|
|
191
|
+
- La habilidad de aceptación indica al agente que construya la página con el comando, nunca a mano, que recorra el paso esencial en un navegador real antes de entregarla y que diga qué comprobaciones se ejecutaron. Los textos de la página ganan veintidós frases en diez idiomas.
|
|
192
192
|
|
|
193
193
|
## Historial de versiones
|
|
194
194
|
|
|
@@ -196,10 +196,9 @@ Estas fechas identifican las notas revisadas del CHANGELOG, no las fechas de pub
|
|
|
196
196
|
|
|
197
197
|
| Versión | Fecha de las notas | Resumen revisado |
|
|
198
198
|
| --- | --- | --- |
|
|
199
|
+
| 0.18.0 | 2026-09-25 | La página de aceptación ahora verifica cada guardado, restaura tus respuestas al recargar antes que nada, mantiene separadas las pruebas de otras versiones y otras pestañas, y nombra dieciséis garantías que la construcción se niega a perder. Nada cambia en la instalación ni en la actualización; reconstruye tus páginas de receta para obtener la nueva página. |
|
|
199
200
|
| 0.17.1 | 2026-09-24 | Instalar sobre otra versión ahora se detiene y remite a update, una reinstalación conserva tus ajustes y las actualizaciones eliminan los archivos que una versión ya no incluye, con una copia restaurable. Algunos comportamientos de instalación cambian: revisa tus scripts antes de volver a ejecutarlos. |
|
|
200
201
|
| 0.17.0 | 2026-09-22 | Las páginas de aceptación evitan la pérdida silenciosa de respuestas y las exportaciones vacías. Las recetas se generan por su identificador y los controles de publicación usan Node directamente en Windows. Las guías añaden prompts para revisar resultados y conservar el contexto del proyecto. |
|
|
201
|
-
| 0.16.0 | 2026-09-16 | Una entrega produce ahora una página paso a paso que una persona recorre, y su prueba vuelve como evidencia que los agentes leen, clasifican y convierten en control. Esta versión incluye además lo que preparó la 0.15.0 sin llegar a publicarse: ejecución Nexus persistente, memoria clasificada por evidencias y controles puntuados de cada paquete. |
|
|
202
|
-
| 0.14.0 | 2026-09-09 | Dev Studio incorpora instrucciones completas y carga verificable del contexto; la documentación sigue al paquete publicado. |
|
|
203
202
|
|
|
204
203
|
[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)
|
|
205
204
|
|
|
@@ -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.18.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.18.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.
|
|
@@ -140,7 +140,7 @@ Résultat attendu : des missions délimitées, des dépendances explicites et un
|
|
|
140
140
|
À utiliser quand une version arrive sur votre environnement de test et que quelqu’un doit la vérifier à l’écran.
|
|
141
141
|
|
|
142
142
|
```text
|
|
143
|
-
Sentinel, écris la recette de cette livraison sur notre environnement de test. Une étape par geste, un fait vérifiable par ligne, les libellés cités depuis le code, et signale les étapes qui écrivent pour de vrai. Fabrique la page, puis donne-moi le lien, la durée et ce que je ne dois pas sauter. Utilise si possible des données d’essai jetables, nomme le dossier et les fichiers que chaque commande modifie, et distingue les preuves automatisées des réponses de la personne.
|
|
143
|
+
Sentinel, écris la recette de cette livraison sur notre environnement de test. Une étape par geste, un fait vérifiable par ligne, les libellés cités depuis le code, et signale les étapes qui écrivent pour de vrai. Fabrique la page, puis donne-moi le lien, la durée et ce que je ne dois pas sauter. Utilise si possible des données d’essai jetables, nomme le dossier et les fichiers que chaque commande modifie, et distingue les preuves automatisées des réponses de la personne. Avant de me remettre la page, construis-la avec uat build, vérifie les garanties qu’elle liste, joue toi-même le passage essentiel dans un vrai navigateur — démarrer, cocher, écrire une remarque, recharger, tout revient — et dis-moi quels contrôles ont tourné.
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
Résultat attendu : une page qu’une personne non technique peut jouer, et un passage que l’agent relit pour classer chaque échec avant toute correction.
|
|
@@ -175,20 +175,20 @@ 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.18.0
|
|
179
179
|
|
|
180
|
-
Des
|
|
180
|
+
Des pages de recette qui gardent chaque réponse
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
La page de recette vérifie désormais chaque enregistrement, restaure vos réponses au rechargement avant toute autre chose, distingue les passages d’autres révisions et d’autres onglets, et nomme seize garanties que la construction refuse de perdre. Rien ne change dans l’installation ou la mise à jour ; reconstruisez vos pages de recette pour obtenir la nouvelle page.
|
|
183
183
|
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
-
|
|
184
|
+
- Une écriture dans le navigateur ne compte qu’une fois relue. Un enregistrement refusé (quota, fenêtre privée, stockage bloqué) est nommé sur la page, quitter est questionné et l’export reste possible — la page ne dit jamais « enregistré » sur parole.
|
|
185
|
+
- Vos réponses reviennent au rechargement avant que le serveur local ou la base de l’artefact ne répondent, et la copie la plus récente gagne toujours : une copie distante plus ancienne n’écrase jamais ce que vous venez de cocher.
|
|
186
|
+
- Un passage qui a répondu à une autre révision de la recette est proposé, pas réinjecté : les lignes inchangées gardent leurs réponses, les lignes modifiées sont redemandées, le passage précédent reste intact et exportable, et le nouveau passage note d’où viennent ses réponses.
|
|
187
|
+
- Deux onglets ou deux appareils sur le même passage convergent vers la dernière modification et le disent. Un passage enregistré illisible est signalé et exportable, jamais supprimé.
|
|
188
|
+
- La barre de progression expose la part de lignes renseignées — renseignées, pas réussies — avec les comptes vu, pas vu et bloqué ; la page dit où vivent les réponses et ce qui peut les faire disparaître.
|
|
189
|
+
- Terminer avec des lignes non renseignées est questionné sur la page même et confirmé par un second clic ; un passage terminé dit qu’il n’est pas une validation, et une modification faite après la fin est datée et affichée.
|
|
190
|
+
- uat build liste les seize garanties que porte la page et refuse un gabarit qui en a perdu une ; uat serve refuse une copie plus ancienne d’un passage et tout nom d’hôte autre que le sien. Un nom sans lettre latine signe son passage par une empreinte stable.
|
|
191
|
+
- Le skill de recette demande à l’agent de construire la page avec la commande, jamais à la main, de jouer le passage essentiel dans un vrai navigateur avant de la remettre, et de dire quels contrôles ont tourné. Les textes de la page gagnent vingt-deux phrases en dix langues.
|
|
192
192
|
|
|
193
193
|
## Historique des versions
|
|
194
194
|
|
|
@@ -196,10 +196,9 @@ Ces dates identifient les notes relues du CHANGELOG, pas les dates de publicatio
|
|
|
196
196
|
|
|
197
197
|
| Version | Date des notes | Résumé relu |
|
|
198
198
|
| --- | --- | --- |
|
|
199
|
+
| 0.18.0 | 2026-09-25 | La page de recette vérifie désormais chaque enregistrement, restaure vos réponses au rechargement avant toute autre chose, distingue les passages d’autres révisions et d’autres onglets, et nomme seize garanties que la construction refuse de perdre. Rien ne change dans l’installation ou la mise à jour ; reconstruisez vos pages de recette pour obtenir la nouvelle page. |
|
|
199
200
|
| 0.17.1 | 2026-09-24 | Installer par-dessus une autre version s’arrête désormais et renvoie vers update, une réinstallation conserve vos réglages, et les mises à jour retirent les fichiers qu’une version ne livre plus en gardant une sauvegarde restaurable. Certains comportements d’installation changent : vérifiez vos scripts avant de les relancer. |
|
|
200
201
|
| 0.17.0 | 2026-09-22 | Les pages de recette empêchent désormais la perte silencieuse des réponses et les exports vides. Une recette se construit avec son identifiant, et les contrôles de publication utilisent directement Node sous Windows. Les guides ajoutent des prompts pour relire les résultats et conserver le contexte du projet. |
|
|
201
|
-
| 0.16.0 | 2026-09-16 | Une livraison produit désormais une page pas à pas qu’une personne joue, et son passage revient comme une preuve que les agents lisent, classent et transforment en porte. Cette version emporte aussi ce que la 0.15.0 avait préparé sans jamais être publiée : l’exécution Nexus persistante, la mémoire classée par preuves et les contrôles notés de chaque pack. |
|
|
202
|
-
| 0.14.0 | 2026-09-09 | Dev Studio reçoit des instructions complètes et un chargement vérifiable du contexte ; la documentation suit le paquet publié. |
|
|
203
202
|
|
|
204
203
|
[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)
|
|
205
204
|
|
|
@@ -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"],
|