bmad-method-test-architecture-enterprise 3.3.0 → 3.4.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.
@@ -31,7 +31,7 @@
31
31
  "name": "bmad-method-test-architecture-enterprise",
32
32
  "source": "./",
33
33
  "description": "Master Test Architect module for quality strategy, test generation in red and expand modes with automatic run-and-heal, combined framework and CI setup, CI/CD quality gates, and structured testing education. Existing CI and ATDD customizations can be migrated to the new skill names. Part of the BMad Method ecosystem.",
34
- "version": "3.3.0",
34
+ "version": "3.4.0",
35
35
  "author": {
36
36
  "name": "Murat K Ozcan (TEA Creator) & Brian (BMad) Madison"
37
37
  },
@@ -101,8 +101,9 @@ function scoreRun(set, design, categories) {
101
101
  // Every row is checked, and a row under a heading that declares no range is a
102
102
  // band failure. Counting only the rows that sat under a declared range let a
103
103
  // single rangeless heading exempt them: `### Medium/Low-Priority Risks`, the
104
- // literal heading test-design-qa-template.md ships, took the denominator to
105
- // zero and a score-9 risk filed beneath it scored a clean 100%. `banded` is
104
+ // heading test-design-qa-template.md shipped before it declared `(Score 1-5)`,
105
+ // took the denominator to zero and a score-9 risk filed beneath it scored a
106
+ // clean 100%. `banded` is
106
107
  // therefore `rows` and the question is how many of them were placed correctly.
107
108
  shape.banded += 1;
108
109
  const placed = bandFor(risk.headings);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-method-test-architecture-enterprise",
4
- "version": "3.3.0",
4
+ "version": "3.4.0",
5
5
  "description": "Master Test Architect for quality strategy, test automation, and release gates",
6
6
  "keywords": [
7
7
  "bmad",
@@ -156,7 +156,7 @@
156
156
  "test:eval-routing-evidence": "node test/test-routing-evidence.js",
157
157
  "test:eval-schemas": "node tools/validate-eval-schemas.js",
158
158
  "test:eval-teach-me-testing-data": "node test/eval-teach-me-testing.js --validate-only",
159
- "test:eval-test-design-data": "node test/eval-test-design.js --validate-only && node test/test-test-design-grounding.js",
159
+ "test:eval-test-design-data": "node test/eval-test-design.js --validate-only && node test/test-test-design-grounding.js && node test/test-test-design-editorial.js",
160
160
  "test:eval-trace-data": "node test/eval-trace.js --validate-only",
161
161
  "test:eval-transcript-data": "node test/eval-transcript.js --validate-only",
162
162
  "test:evaluate-agents": "node test/test-evaluate-evaluators.js --group=agents",
@@ -55,7 +55,7 @@ inputDocuments: []
55
55
  - **Checklist Path:** `{test_artifacts}/atdd/atdd-checklist-{story_key}.md`
56
56
  - **Generated Test Files:** `{e2e_test_file_path}`, `{api_test_file_path}`, `{component_test_file_path}`
57
57
 
58
- If this story came from BMM `create-story`, mirror these artifact paths into the story's `Dev Notes` so `dev-story` can discover and activate the red-phase scaffolds.
58
+ If this story is implemented with BMM `bmad-build`, list these artifact paths in its spec (Code Map and the tasks that turn them green) so the implementation agent discovers and activates the red-phase scaffolds. On BMAD releases before 6.12, mirror them into the `create-story` story's `Dev Notes` for `dev-story` instead.
59
59
 
60
60
  ---
61
61
 
@@ -63,7 +63,7 @@ Shoppers currently must create an account before they can pay, and cart abandonm
63
63
  - **Checklist Path:** `docs/test-artifacts/atdd/atdd-checklist-2-4-guest-checkout.md`
64
64
  - **Generated Test Files:** `tests/e2e/guest-checkout.spec.ts`, `tests/api/guest-checkout.spec.ts`
65
65
 
66
- If this story came from BMM `create-story`, mirror these artifact paths into the story's `Dev Notes` so `dev-story` can discover and activate the red-phase scaffolds.
66
+ If this story is implemented with BMM `bmad-build`, list these artifact paths in its spec (Code Map and the tasks that turn them green) so the implementation agent discovers and activates the red-phase scaffolds. On BMAD releases before 6.12, mirror them into the `create-story` story's `Dev Notes` for `dev-story` instead.
67
67
 
68
68
  ---
69
69
 
@@ -86,7 +86,7 @@ If any are missing: **HALT** and notify the user.
86
86
  - With neither, use a slug of the story title: lowercase; replace every run of characters outside `a-z` and `0-9` with a single `-`; trim leading and trailing `-`; truncate to 64 characters
87
87
  - Use that `story_key` for the `{outputFile}` basename so all checklist and handoff paths stay consistent
88
88
  - If `story_id` is still unavailable after metadata/H1/filename parsing, set it to the final `story_key` so `story_id` is never empty
89
- - Preserve `{story_file}` as a tracked artifact path for later handoff into BMM `dev-story`
89
+ - Preserve `{story_file}` as a tracked artifact path for later handoff into BMM `bmad-build` (`dev-story` before BMAD 6.12)
90
90
  - If a test design covers this story, read it for P0-P3 priorities and risks. Look in `{test_artifacts}/test-design/` first (`test-design-epic-{epic_num}.md` for the story's epic, then the system-level `test-design-qa.md` and `test-design-architecture.md`), then the legacy root `{test_artifacts}/` for the same names. Record the path you loaded in `inputDocuments`, or state that no test design was found in either location.
91
91
 
92
92
  ---
@@ -89,7 +89,7 @@ Report:
89
89
  - Checklist output path
90
90
  - Story key / story file handoff path
91
91
  - Key risks or assumptions
92
- - Next recommended workflow (usually `dev-story`; `automate` comes after implementation)
92
+ - Next recommended workflow (usually BMM `bmad-build`, or `dev-story` before BMAD 6.12; `automate` comes after implementation)
93
93
 
94
94
  ---
95
95
 
@@ -56,7 +56,7 @@
56
56
  - [ ] Test levels selected (E2E/API/Component/Unit)
57
57
  - [ ] No duplicate coverage across levels
58
58
  - [ ] Priority levels assigned (P0/P1/P2/P3)
59
- - [ ] P0 scenarios meet strict criteria (blocks core + high risk + no workaround)
59
+ - [ ] P0 scenarios meet strict criteria (critical business, security, data-integrity, or compliance consequence + no safe workaround)
60
60
  - [ ] NFR-derived risks mapped to planned validation scenarios
61
61
  - [ ] Planned NFR evidence artifacts documented without final PASS/CONCERNS/FAIL decisions
62
62
  - [ ] Data prerequisites identified
@@ -233,6 +233,39 @@
233
233
  - [ ] Regression scope defined per impacted service
234
234
  - [ ] Cross-team coordination noted where needed
235
235
 
236
+ ## Document Quality (All Outputs)
237
+
238
+ **Applies to every output: the epic document in epic-level mode, and both documents plus the handoff in system-level mode.** These items check the Editorial Contract in `steps-c/step-05-generate-output.md`.
239
+
240
+ ### Clear Instructions
241
+
242
+ - [ ] Each instruction names the actor, action, condition, and expected result wherever the sources provide them
243
+ - [ ] Prerequisites, conditions, and warnings appear before the action they govern
244
+ - [ ] Instructions that combine several actions or conditions are split into separate steps, and no condition was lost in the split
245
+ - [ ] One name per concept; repository names and domain terms match the sources exactly
246
+ - [ ] No filler sentences, promotional claims, or vague attribution; citations are kept
247
+ - [ ] Emojis appear only where the template uses them as markers, such as the Quick Guide tiers
248
+ - [ ] No banned-word list was applied: exact technical terms such as test harness and test vector remain
249
+
250
+ ### Evidence and Uncertainty
251
+
252
+ - [ ] Missing details remain visible as `UNKNOWN`, open assumptions, or clarification items; none was invented to complete a sentence
253
+ - [ ] Observed facts, planned checks, assumptions, and unknowns read as what they are
254
+ - [ ] Planned tests read as planned; no planned test is described as run, verified, or passing
255
+ - [ ] Confidence statements and unverified behavior from the sources are still stated
256
+
257
+ ### Protected Content
258
+
259
+ - [ ] Requirement, risk, and test IDs, requirement-to-test mappings, source links, evidence references, and exclusions match the decisions of steps 3 and 4
260
+ - [ ] Risk categories, probabilities, impacts, scores, owners, mitigations, and timelines match the decisions of steps 3 and 4
261
+ - [ ] Test levels, priorities, preconditions, test data, sequences, assertions, negative cases, cleanup, and dependencies are intact
262
+ - [ ] Thresholds, units, comparison operators, timeouts, retry counts, quantifiers, and negations are exact
263
+ - [ ] Literal commands, paths, code, regular expressions, payloads, Unicode test data, and expected strings are exact
264
+ - [ ] Priority headings open with `P0`, `P1`, `P2`, or `P3`, and every risk-band heading states its score range
265
+ - [ ] No scored risk table or coverage table sits under a heading that opens or ends with Example or Illustration, a heading that ends with Reference, or a paragraph opening `Example:`, `Worked example:`, or `Illustration:`
266
+ - [ ] No scored risk table or coverage table sits inside a blockquote or callout
267
+ - [ ] Validation ran on the saved files after the last edit, and every check affected by a later fix was rerun
268
+
236
269
  ## System-Level Mode: Two-Document Validation
237
270
 
238
271
  **When in system-level mode (PRD + ADR input), validate BOTH documents:**
@@ -349,9 +382,9 @@
349
382
  - [ ] Dates and authors match across documents
350
383
  - [ ] ADR and PRD references consistent
351
384
 
352
- ### Document Quality (Anti-Bloat Check)
385
+ ### System-Level Anti-Bloat Check
353
386
 
354
- **CRITICAL: Check for bloat and repetition across BOTH documents.**
387
+ **CRITICAL: Check for bloat and repetition across BOTH documents.** Document Quality (All Outputs) covers wording and tone.
355
388
 
356
389
  - [ ] **No repeated notes 10+ times** (e.g., "Timing is pessimistic until R-005 fixed" on every section)
357
390
  - [ ] **Repeated information consolidated** (write once at top, reference briefly if needed)
@@ -360,10 +393,6 @@
360
393
  - [ ] **Architecture doc**: Concerns-focused, NOT implementation-focused
361
394
  - [ ] **QA doc**: Implementation-focused, NOT theory-focused
362
395
  - [ ] **Clear separation**: Architecture = WHAT and WHY, QA = HOW
363
- - [ ] **Professional tone**: No AI slop markers
364
- - [ ] Avoid excessive ✅/❌ emojis (use sparingly, only when adding clarity)
365
- - [ ] Avoid "absolutely", "excellent", "fantastic", overly enthusiastic language
366
- - [ ] Write professionally and directly
367
396
  - [ ] **Architecture doc length**: Target ~150-200 lines max (focus on actionable concerns only)
368
397
  - [ ] **QA doc length**: Keep concise, remove bloat sections
369
398
 
@@ -406,6 +435,8 @@
406
435
  - [ ] **System-level mode:** Both documents validated (if applicable)
407
436
  - [ ] **System-level mode:** Handoff document validated (if applicable)
408
437
  - [ ] **Epic-level mode:** Single document validated (if applicable)
438
+ - [ ] Document Quality (All Outputs) passed for every output
439
+ - [ ] Final validation ran after the last edit to every output
409
440
  - [ ] Team review scheduled (if required)
410
441
 
411
442
  ## Post-Workflow Actions
@@ -441,7 +472,7 @@ If workflow fails:
441
472
 
442
473
  **Issue**: Too many P0 tests
443
474
 
444
- - **Solution**: Apply strict P0 criteria - must block core AND high risk AND no workaround
475
+ - **Solution**: Apply strict P0 criteria - must have a critical business, security, data-integrity, or compliance consequence AND no safe workaround
445
476
 
446
477
  **Issue**: Risk scores all high
447
478
 
@@ -72,7 +72,7 @@ Using `risk-governance.md` and `probability-impact.md` (if loaded):
72
72
  - Preserve the risk table columns `Risk ID`, `Category`, `Description`, `Probability`, `Impact`, and `Score`. Add a separate source-evidence column when useful. State the failure consequence in `Description` and cite the supporting input.
73
73
  - Open each `Description` with the source statement's own key words for the gap, such as the verbs and nouns the epic uses for the missing control, the unsafe behavior, or the unmet target, then state the consequence. A reader searching the epic for those words finds the row.
74
74
  - Give every risk table the header its band has in the template. The delimiter row and every body row carry exactly as many cells as that header. Put owner and timeline text inside the `Mitigation` or `Action` cell when the band's header has no column for them.
75
- - Assign unique canonical IDs `R-001`, `R-002`, and so on. Preserve those IDs in coverage, mitigations, summaries, and handoffs. Keep epic or story identity in the document run key.
75
+ - Assign unique canonical IDs `R-001`, `R-002`, and so on, numbered in the order the risks' gap statements first appear in the supplied sources. Read the sources in the order step 2 lists them for the mode, and each source from top to bottom. A merged risk takes the position of its earliest statement. Residual risks, registered when no gap statement exists, are numbered in story order. Within each band table, list rows in ID order. Preserve those IDs in coverage, mitigations, summaries, and handoffs. Keep epic or story identity in the document run key.
76
76
  - Preserve explicit score ranges in risk-band headings: high score 6 or greater, medium score 3 to 4, and low score 1 to 2. For a band with no identified risk, state that absence outside the table and leave its table body empty.
77
77
  - Classify by category: TECH / SEC / PERF / DATA / BUS / OPS
78
78
  - Score Probability (1–3) and Impact (1–3)
@@ -47,19 +47,26 @@ For each requirement or risk-driven scenario:
47
47
  - Map NFR-derived risks to planned validation scenarios and evidence sources
48
48
  - Use the exact `Risk ID` assigned in the risk register in every `Risk Link` cell. A prose description alone is not a traceable mapping.
49
49
  - Each `Test Level` cell contains exactly one canonical value: E2E, API, Component, Integration, or Unit. Put performance, operational, device, and other qualifiers in scenario descriptions or notes.
50
- - Give every scored risk exactly one risk-linked coverage row, and give it the single test level where the failure first becomes observable. The failure crosses no boundary: Unit. It lives in one rendered interface unit: Component. It crosses one owned store, queue, file, or event boundary: Integration. It crosses the HTTP or contract boundary of one service: API. It spans two or more deployables, a user journey, or a deadline measured on real devices: E2E. Name the risk's mechanism, the boundary it crosses, and the resulting level in the row notes. Record the individual scenarios in the row's `Notes` and their number in `Test Count`; do not add a second row for the same risk. Rows that cover no scored risk use `-` in `Risk Link`.
50
+ - Give every scored risk exactly one risk-linked coverage row, and give it the single test level where the failure first becomes observable. The failure crosses no boundary: Unit. It lives in one rendered interface unit: Component. It crosses one owned store, queue, file, or event boundary: Integration. It crosses the HTTP or contract boundary of one service: API. It spans two or more deployables, a user journey, or a deadline measured on real devices: E2E. When the mechanism fits more than one description, settle the level with these rules:
51
+ - Use the boundary of the component that lacks the control or behaves unsafely. The system whose response triggers the failure does not set the level.
52
+ - Classify the failure as the sources describe it today, with the components they name. A mitigation component the sources do not name, such as a new configuration value or a policy extracted for testing, does not set the level.
53
+ - For an absent control, take the level of the behavior that control would govern, as the sources describe that behavior. Absence of a control does not by itself make a risk Unit.
54
+ - A missing release, rollout, or disable control for a build that users install, such as a mobile or desktop app, spans the shipped build and the system that would switch it: E2E. A switch read inside one service takes that service's boundary.
55
+
56
+ Name the risk's mechanism, the boundary it crosses, and the resulting level in the row notes. Record the individual scenarios in the row's `Notes` and their number in `Test Count`; do not add a second row for the same risk. Rows that cover no scored risk use `-` in `Risk Link`.
57
+
51
58
  - Place a risk's row under the one priority heading that matches its consequence. A risk never appears under two priority headings.
52
59
 
53
60
  **Priority rules:** decide each priority on business impact, user reach, and workaround
54
61
  availability. Risk score is supporting evidence and is not a required condition for any priority.
55
- Walk the Priority Decision Tree in `test-priorities-matrix.md` for each scenario.
62
+ Walk the Priority Decision Tree in `test-priorities-matrix.md` for each scenario. Wherever that fragment assigns P0, in its criteria, checklist, decision tree, or example function, the P0 holds only when both P0 conditions below hold; otherwise assign P1 or lower.
56
63
 
57
64
  - P0: Critical business, security, data-integrity, or compliance impact with no safe workaround
58
65
  - P1: Core, frequent, or complex behavior with material user reach and a limited workaround
59
66
  - P2: Secondary behavior with narrower user reach and an acceptable workaround
60
67
  - P3: Rare, cosmetic, or experimental behavior with minimal impact and an easy workaround
61
68
 
62
- Record the failure consequence and the source-supported workaround in the primary coverage row's notes. Preserve these four priority criteria in the published plan. Evaluate a performance budget or an operational control through its documented business consequence before assigning its test priority. Assess a workaround against the original failure consequence, before proposed mitigations. A valid workaround preserves essential business operation and resolves the affected state. Pausing the application, leaving a core user action unresolved, or suppressing a symptom needs a source-backed recovery path before it can justify a lower priority. Record the evidence for recoverability; mark it unresolved when the source provides none. Separate an acceptance threshold from the consequence of missing it. For a latency or throughput target, state whether the source establishes a critical business deadline, permanent loss, blocked essential operation, or bounded degradation while work remains recoverable. Record an unstated business consequence as a clarification. Assign P0 when the documented consequence meets the critical-impact criterion. A release acceptance target can still have P1 coverage when the documented consequence is material degradation. An empty priority band is valid; explain why the planned scenarios belong to the assigned bands. When every primary risk has the same priority, justify how each consequence meets that criterion.
69
+ Record the failure consequence and the source-supported workaround in the primary coverage row's notes. Preserve these four priority criteria in the published plan. Evaluate a performance budget or an operational control through its documented business consequence before assigning its test priority. Assess a workaround against the original failure consequence, before proposed mitigations. A valid workaround preserves essential business operation and resolves the affected state. Pausing the application, leaving a core user action unresolved, or suppressing a symptom needs a source-backed recovery path before it can justify a lower priority. Record the evidence for recoverability; mark it unresolved when the source provides none. Separate an acceptance threshold from the consequence of missing it. For a latency or throughput target, state whether the source establishes a critical business deadline, permanent loss, blocked essential operation, or bounded degradation while work remains recoverable. Record an unstated business consequence as a clarification. Assign P0 only when both conditions hold: the documented consequence is a critical business, security, data-integrity, or compliance impact, and no safe workaround exists. A missing workaround alone leaves a risk at P1 or lower. Judge each risk on its own documented consequence. A risk whose consequence is that another registered risk's harm lasts longer or reaches more users takes P1 or lower, and the risk that causes the harm carries the P0 scenarios. This does not apply when the sources mandate the missing control itself, or when no registered risk carries the harm the control would limit; judge those on the critical-impact criterion. A release acceptance target can still have P1 coverage when the documented consequence is material degradation. An empty priority band is valid; explain why the planned scenarios belong to the assigned bands. When every primary risk has the same priority, justify how each consequence meets that criterion.
63
70
 
64
71
  ---
65
72
 
@@ -9,7 +9,7 @@ progressFile: '{test_artifacts}/test-design/test-design-progress-{run_key}.md'
9
9
 
10
10
  ## STEP GOAL
11
11
 
12
- Write the final test-design document(s) using the correct template(s), then validate against the checklist.
12
+ Write the final test-design document(s) using the correct template(s), polish them under the Editorial Contract, then validate the saved outputs against the checklist.
13
13
 
14
14
  ## MANDATORY EXECUTION RULES
15
15
 
@@ -135,8 +135,53 @@ Epic-level mode remains single-worker by default (one output artifact).
135
135
 
136
136
  ---
137
137
 
138
+ ## Editorial Contract
139
+
140
+ This contract governs the wording of every Create-mode output: the epic document, both system-level documents, and the handoff. Apply it while populating templates in section 2, and again as the final cleanup in section 4. It needs no separate prompt or extra pass from the user.
141
+
142
+ It edits prose only. Scope, risk scores, priorities, coverage, risk acceptance, and release criteria keep the values steps 3 and 4 decided. When editing exposes a substantive defect, such as a missing scenario, a wrong score, or an unmapped risk, return to the step that owns that decision, fix it there, and carry the fix forward. Never repair it as a wording change.
143
+
144
+ When rules conflict, resolve them in this order: technical correctness and evidence, then the template and parser contracts, then reviewer comprehension, then style.
145
+
146
+ ### Writing Rules
147
+
148
+ - Replace filler with a concrete statement, or delete it when no information is lost.
149
+ - State the actor, action, condition, and expected result whenever the sources provide them. When a needed detail is missing, keep the gap visible as `UNKNOWN`, an open assumption, or a clarification item, and leave it unfilled.
150
+ - Use one name per concept. Keep the exact repository names and domain terms the sources use.
151
+ - Put prerequisites, conditions, and warnings before the action they govern.
152
+ - Split an instruction that combines several actions or conditions into separate steps. Keep complete sentences and the context a reader needs; a shorter sentence that loses a condition is a defect.
153
+ - Keep rationale, scenario references, and execution instructions in the template sections that already hold them.
154
+ - Remove promotional claims and vague attribution such as "industry best practice says". Keep citations, and make clear which statements are observed facts, planned checks, assumptions, or unknowns.
155
+ - Write planned verification as planned. A test that has not run never reads as run, verified, or passing.
156
+
157
+ ### Protected Content
158
+
159
+ Keep these exact, in meaning and in text, through every edit:
160
+
161
+ - Requirement, risk, and test IDs; requirement-to-test mappings; source links and evidence references; explicit exclusions.
162
+ - Risk category, probability, impact, score, owner, mitigation, and timeline decisions.
163
+ - Test levels and priorities; preconditions, test data, sequence, assertions, negative cases, cleanup, and dependencies.
164
+ - Thresholds, units, comparison operators, timeouts, retry counts, quantifiers, and negations.
165
+ - Assumptions, unknowns, confidence statements, unverified behavior, unresolved owners, and missing acceptance criteria.
166
+ - Literal commands, paths, symbols, code, regular expressions, payloads, Unicode test data, and expected strings.
167
+ - Required filenames, headings, table headers, status values, and handoff keys.
168
+
169
+ Downstream scoring reads the documents by structure, so structure is protected too:
170
+
171
+ - Priority section headings open with `P0`, `P1`, `P2`, or `P3`. Keep that opening when rewording a heading.
172
+ - Risk-band headings state their score range, for example `(Score ≥6)`. Keep the range.
173
+ - A heading that opens or ends with Example or Illustration, a heading that ends with Reference, and a paragraph that opens `Example:`, `Worked example:`, or `Illustration:` mark the tables after them as reference material, and scoring skips them. Never place a scored risk table or coverage table under such a label, and never add such a label above one.
174
+ - Scoring also skips every table inside a blockquote. Keep scored risk and coverage tables out of blockquotes and callouts.
175
+ - Keep the canonical risk and coverage column names from the templates.
176
+
177
+ This contract sets no banned-word or punctuation list. Terms such as test harness and test vector can be exact technical language. A reusable safety requirement stays even when it also applies to other projects. Keep uncertainty wherever the sources are uncertain. Keep every required document; the system-level pair stays two documents.
178
+
179
+ ---
180
+
138
181
  ## 2. Populate Templates
139
182
 
183
+ Write each output with the Editorial Contract applied from the start.
184
+
140
185
  Ensure the outputs include:
141
186
 
142
187
  - Risk assessment matrix
@@ -150,19 +195,7 @@ Ensure the outputs include:
150
195
 
151
196
  ---
152
197
 
153
- ## 3. Validation
154
-
155
- Validate the output(s) against:
156
-
157
- - `checklist.md` in this workflow folder
158
- - [ ] CLI sessions cleaned up (no orphaned browsers)
159
- - [ ] Temp artifacts stored under `{test_artifacts}/test-design/`
160
-
161
- If any checklist criteria are missing, fix before completion.
162
-
163
- ---
164
-
165
- ## 4. Generate BMAD Handoff Document (System-Level Mode Only)
198
+ ## 3. Generate BMAD Handoff Document (System-Level Mode Only)
166
199
 
167
200
  **If this is a system-level test design** (not component/feature level):
168
201
 
@@ -178,15 +211,30 @@ If any checklist criteria are missing, fix before completion.
178
211
 
179
212
  ---
180
213
 
181
- ## 5. Polish Output
214
+ ## 4. Polish Output
215
+
216
+ Review every output saved so far, including the handoff in system-level mode, and finish all edits before section 5:
217
+
218
+ 1. **Apply the Editorial Contract**: Make the final wording pass. Compare each edited passage with its draft and confirm the Protected Content is unchanged.
219
+ 2. **Remove duplication**: Progressive-append workflow may have created repeated sections — consolidate
220
+ 3. **Verify consistency**: Ensure terminology, risk scores, and references are consistent throughout, and that the handoff carries the same risk IDs, scores, and priorities as the test design
221
+ 4. **Check completeness**: All template sections should be populated or explicitly marked N/A
222
+ 5. **Table schema**: Preserve the canonical risk and coverage column names from the templates. Verify every scored risk has one unique `R-<three digits>` ID, every coverage link preserves that exact ID, and every risk-band heading states its score range. Probability, Impact, and Score cells contain only bare integers; explain each judgment in prose and verify Score equals Probability × Impact. Empty bands contain no risk rows; describe the absence in prose outside the table. Keep each risk description readable and traceable to its source.
223
+ 6. **Format cleanup**: Ensure markdown formatting is clean (tables aligned, headers consistent, no orphaned references)
224
+
225
+ ---
226
+
227
+ ## 5. Validate Final Outputs
182
228
 
183
- Before finalizing, review the complete output document for quality:
229
+ Validate after the last edit to every output. Read the saved files from disk: the epic document in epic-level mode, or both system-level documents and the handoff in system-level mode.
230
+
231
+ Validate the output(s) against:
232
+
233
+ - `checklist.md` in this workflow folder
234
+ - [ ] CLI sessions cleaned up (no orphaned browsers)
235
+ - [ ] Temp artifacts stored under `{test_artifacts}/test-design/`
184
236
 
185
- 1. **Remove duplication**: Progressive-append workflow may have created repeated sections — consolidate
186
- 2. **Verify consistency**: Ensure terminology, risk scores, and references are consistent throughout
187
- 3. **Check completeness**: All template sections should be populated or explicitly marked N/A
188
- 4. **Table schema**: Preserve the canonical risk and coverage column names from the templates. Verify every scored risk has one unique `R-<three digits>` ID, every coverage link preserves that exact ID, and every risk-band heading states its score range. Probability, Impact, and Score cells contain only bare integers; explain each judgment in prose and verify Score equals Probability × Impact. Empty bands contain no risk rows; describe the absence in prose outside the table. Keep each risk description readable and traceable to its source.
189
- 5. **Format cleanup**: Ensure markdown formatting is clean (tables aligned, headers consistent, no orphaned references)
237
+ If any checklist criteria are missing, fix before completion. A fix that changes a saved output reopens validation for the content it touched: rerun the risk, coverage, and cross-document checks after a risk or coverage change, the handoff checks after a handoff change, and the Document Quality checks after any wording change. Completion waits until the last rerun passes with no further edits.
190
238
 
191
239
  ---
192
240
 
@@ -23,6 +23,9 @@ Apply the requested edits to the selected output and confirm changes.
23
23
  ### Step-Specific Rules:
24
24
 
25
25
  - 🎯 Only apply edits explicitly requested by the user
26
+ - 🚫 Leave text the user did not ask to change exactly as it is; the Create-mode editorial polish does not run here
27
+ - ✅ Write new or changed text under the Writing Rules of the Editorial Contract in `{skill-root}/steps-c/step-05-generate-output.md`
28
+ - ✅ Change a protected value (an ID, score, priority, threshold, or heading) when the user asks for that change, and update every value and reference that depends on it: Score = Probability × Impact, the risk's score band, its coverage links, and its rows in the other system-level document and the handoff. Keep the canonical columns and the parser-sensitive heading rules intact, and leave protected content outside the requested change exactly as it is
26
29
 
27
30
  ## EXECUTION PROTOCOLS:
28
31
 
@@ -27,6 +27,7 @@ Validate outputs using the workflow checklist and record findings.
27
27
  - 🎯 Validate against `{validationChecklist}`
28
28
  - 🚫 Do not skip checks
29
29
  - 🚫 Never overwrite an existing validation report
30
+ - 🚫 Report Document Quality findings without rewriting any validated output
30
31
 
31
32
  ## EXECUTION PROTOCOLS:
32
33
 
@@ -115,7 +115,7 @@ test('example test @p0', async ({ apiRequest }) => {
115
115
  | ---------- | -------- | ------------------- | ----------- | ---------------------------- |
116
116
  | **{R-ID}** | {CAT} | {Brief description} | **{Score}** | {How QA validates this risk} |
117
117
 
118
- ### Medium/Low-Priority Risks
118
+ ### Medium/Low-Priority Risks (Score 1-5)
119
119
 
120
120
  | Risk ID | Category | Description | Score | QA Test Coverage |
121
121
  | ------- | -------- | ------------------- | ------- | ---------------------------- |
@@ -2,7 +2,7 @@
2
2
 
3
3
  [bmod]
4
4
  code = "tea"
5
- version = "3.3.0"
5
+ version = "3.4.0"
6
6
  update_source = "github:bmad-code-org/bmad-method-test-architecture-enterprise/skills"
7
7
  skills = [
8
8
  "bmad-tea",