bmad-method-test-architecture-enterprise 1.27.2-next.1 → 1.27.2-next.2
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/.claude-plugin/marketplace.json +1 -1
- package/README.md +3 -2
- package/package.json +4 -2
- package/src/agents/bmad-tea/SKILL.md +37 -0
|
@@ -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 automation, CI/CD quality gates, and structured testing education. Part of the BMad Method ecosystem.",
|
|
34
|
-
"version": "1.27.2-next.
|
|
34
|
+
"version": "1.27.2-next.2",
|
|
35
35
|
"author": {
|
|
36
36
|
"name": "Murat K Ozcan (TEA Creator) & Brian (BMad) Madison"
|
|
37
37
|
},
|
package/README.md
CHANGED
|
@@ -182,7 +182,7 @@ flowchart TB
|
|
|
182
182
|
|
|
183
183
|
### How It Works at Runtime
|
|
184
184
|
|
|
185
|
-
**1. Activation.** `/bmad-tea` or `$bmad-tea` loads the agent skill. It resolves its customization block across base, team, and user layers, adopts the persona, loads persistent facts and `_bmad/tea/config.yaml`, greets you, and renders `{agent.menu}` as a numbered table. Naming
|
|
185
|
+
**1. Activation.** `/bmad-tea` or `$bmad-tea` loads the agent skill. It resolves its customization block across base, team, and user layers, adopts the persona, loads persistent facts and `_bmad/tea/config.yaml`, greets you, and renders `{agent.menu}` as a numbered table. Naming one clear intent in your first message ("let's design tests for this epic") skips the menu and dispatches directly. A message that supports several menu choices triggers one focused question naming the relevant choices before any workflow starts.
|
|
186
186
|
|
|
187
187
|
**2. Workflow entry.** Direct workflow commands use the installed skill name, such as `/bmad-testarch-automate` or `$bmad-testarch-automate`, depending on the host's invocation syntax. `TA` is the equivalent agent-menu code, available only once TEA is active. Either way, the workflow's `SKILL.md` resolves its own `[workflow]` customization block and asks which mode to run: Create, Resume, Validate, or Edit. Create and Resume both route into `steps-c/`; Validate into `steps-v/`; Edit into `steps-e/`. `test-review` alone supports `headless: true`, which skips the greeting and the menu and runs Create directly. That is how the CLI drives it in CI.
|
|
188
188
|
|
|
@@ -392,7 +392,7 @@ A passing fragment-selection eval means the workflow loaded the right knowledge.
|
|
|
392
392
|
|
|
393
393
|
### Deterministic Checks
|
|
394
394
|
|
|
395
|
-
`npm test` chains seventy-
|
|
395
|
+
`npm test` chains seventy-four checks. That count covers the whole chain: every entry in it is deterministic and credential-free, so the chain and its credential-free subset are the same list. `npm run test:ci-coverage` derives the count from `package.json` and prints it. Ten of the seventy-four keep the rules, guidance, hook, eval data, eval contracts, diagnostics, and documentation aligned:
|
|
396
396
|
|
|
397
397
|
- `test:criteria-fragments` fails when a registry row is neither mapped to a knowledge fragment nor declared a known gap. A rule the reviewer scores but no fragment teaches is a rule TEA punishes without ever having explained it. All 36 rows are currently mapped across 50 anchors. Because the declared-gap list is empty, the validator feeds itself a synthetic unmapped row on every run to prove that path still works.
|
|
398
398
|
- `test:doc-counts` runs `eval-quality-gates doc-counts`, which holds a hand-written count on a published page against the source that computes it: the roadmap's per-suite `eval:all` call counts, the knowledge-fragment tier breakdown, this section's own npm-test-chain length, and the fragment-selection case count. A pattern matching no sentence, or more than one, fails the same way a wrong number does, so the entry cannot go stale by drifting out from under its own pattern either.
|
|
@@ -400,6 +400,7 @@ A passing fragment-selection eval means the workflow loaded the right knowledge.
|
|
|
400
400
|
- `test:enforce-hook` fails when a new Absolute registry row appears in neither the hook's enforced list nor its deferred list. This prevents a rule from being added without an explicit write-time enforcement decision.
|
|
401
401
|
- `test:atdd-workflow-guidance` holds ATDD generation to one supplied criterion id per executable leaf, one primary scaffold per criterion, a criterion-defining first assertion, and a transition-bearing primary branch for state changes. It also checks every literal API and E2E example title against the same criterion-id format.
|
|
402
402
|
- `test:eval-data` checks that all 24 fragment-selection cases are structurally usable: their workflow context files exist, every expected fragment exists and is indexed for that workflow, and the required and forbidden sets do not overlap. The expected sets come from the workflow step files. This check does not ask an agent to select anything.
|
|
403
|
+
- `test:eval-routing-boundaries` mutates the facts, candidate codes, and missing deciding information in each source-bound routing ambiguity rule. It also rejects duplicate and orphan boundaries, plus any boundary that would turn a clear intent into a clarification.
|
|
403
404
|
- `test:eval-schemas` checks this repository's own eval suite manifest against its schema, confirms that every threshold it declares is the threshold the harness actually applies, that the runner capabilities it declares are the ones the harness grants its runner, and that the preflight argv it declares fails on a missing runner and passes on a present one, and fails when a TEA skill has neither a behavioral suite nor a deferred declaration. A suite list that omits a skill reads as coverage, so the omission has to be an error rather than a silence.
|
|
404
405
|
- `test:eval-diagnostics` checks that current result writers emit bounded case and repetition diagnostics, that quality and environment outcomes stay separate, that unstable signatures remain visible, and that the protected 1.3.0 baseline remains readable and byte-for-byte unchanged.
|
|
405
406
|
- `test:contract-oracles` evaluates every oracle in every eval contract with `eval-quality`'s own evaluator, over the stored replay outputs and over constructed selections for all 24 fragment-selection cases, and fails when an oracle faults or disagrees with the harness scorer on the same evidence. The first run found that every regex oracle in the `test-review` contract was refused by the evaluator before it matched anything.
|
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": "1.27.2-next.
|
|
4
|
+
"version": "1.27.2-next.2",
|
|
5
5
|
"description": "Master Test Architect for quality strategy, test automation, and release gates",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"bmad",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"release:minor": "gh workflow run publish.yaml -f channel=latest -f bump=minor",
|
|
84
84
|
"release:next": "gh workflow run publish.yaml -f channel=next",
|
|
85
85
|
"release:patch": "gh workflow run publish.yaml -f channel=latest -f bump=patch",
|
|
86
|
-
"test": "npm run test:conflict-markers && npm run test:schemas && npm run test:install && npm run test:knowledge && npm run test:criteria-fragments && npm run test:doc-count-sources && npm run test:doc-counts && npm run test:doc-claim-sources && npm run test:doc-claims && npm run test:doc-invocation-entry && npm run test:doc-invocations && npm run test:enforce-hook && npm run test:framework-scaffold && npm run test:atdd-isolation && npm run test:atdd-net-guard && npm run test:atdd-scoring && npm run test:atdd-workflow-guidance && npm run test:framework-scaffold-install-isolation && npm run test:transcript-harness && npm run test:suite-manifest && npm run test:teach-me-testing-scoring && npm run test:eval-data && npm run test:eval-atdd-data && npm run test:eval-ci-data && npm run test:eval-framework-scaffold-data && npm run test:eval-nfr-data && npm run test:nfr-validate-corpus && npm run test:eval-test-design-data && npm run test:eval-trace-data && npm run test:eval-routing-data && npm run test:eval-transcript-data && npm run test:eval-teach-me-testing-data && npm run test:eval-schemas && npm run test:eval-diagnostics && npm run test:eval-replay && npm run test:eval-quality-corpus && npm run test:schema-versions && npm run test:contract-sources && npm run test:contracts && npm run test:contract-oracles && npm run test:probe-sources && npm run test:probe-corpus && npm run test:compare-dominance && npm run test:compare-eval-runs && npm run test:automate-eval-fixture && npm run test:eval-automate-data && npm run test:clock-port && npm run test:probe-conformance && npm run test:corpus-conformance && npm run test:file-system-conformance && npm run test:file-system-port && npm run test:probe-targets && npm run test:port-totality && npm run test:ci-coverage && npm run test:ci-coverage-filters && npm run test:bmad-output-gated && npm run test:release-metadata && npm run test:lockfile-age && npm run test:lockfile-age-cache && npm run test:licences && npm run test:supply-chain && npm run test:boundary && npm run test:direction && npm run test:lineage && npm run test:guard-publish && npm run test:layering-boundary-lineage && npm run test:changelog && npm run test:tea-workflow-descriptions && npm run validate:schemas && npm run lint && npm run lint:md && npm run format:check",
|
|
86
|
+
"test": "npm run test:conflict-markers && npm run test:schemas && npm run test:install && npm run test:knowledge && npm run test:criteria-fragments && npm run test:doc-count-sources && npm run test:doc-counts && npm run test:doc-claim-sources && npm run test:doc-claims && npm run test:doc-invocation-entry && npm run test:doc-invocations && npm run test:enforce-hook && npm run test:framework-scaffold && npm run test:atdd-isolation && npm run test:atdd-net-guard && npm run test:atdd-scoring && npm run test:atdd-workflow-guidance && npm run test:framework-scaffold-install-isolation && npm run test:transcript-harness && npm run test:suite-manifest && npm run test:teach-me-testing-scoring && npm run test:eval-data && npm run test:eval-atdd-data && npm run test:eval-ci-data && npm run test:eval-framework-scaffold-data && npm run test:eval-nfr-data && npm run test:nfr-validate-corpus && npm run test:eval-test-design-data && npm run test:eval-trace-data && npm run test:eval-routing-data && npm run test:eval-routing-boundaries && npm run test:eval-routing-evidence && npm run test:eval-transcript-data && npm run test:eval-teach-me-testing-data && npm run test:eval-schemas && npm run test:eval-diagnostics && npm run test:eval-replay && npm run test:eval-quality-corpus && npm run test:schema-versions && npm run test:contract-sources && npm run test:contracts && npm run test:contract-oracles && npm run test:probe-sources && npm run test:probe-corpus && npm run test:compare-dominance && npm run test:compare-eval-runs && npm run test:automate-eval-fixture && npm run test:eval-automate-data && npm run test:clock-port && npm run test:probe-conformance && npm run test:corpus-conformance && npm run test:file-system-conformance && npm run test:file-system-port && npm run test:probe-targets && npm run test:port-totality && npm run test:ci-coverage && npm run test:ci-coverage-filters && npm run test:bmad-output-gated && npm run test:release-metadata && npm run test:lockfile-age && npm run test:lockfile-age-cache && npm run test:licences && npm run test:supply-chain && npm run test:boundary && npm run test:direction && npm run test:lineage && npm run test:guard-publish && npm run test:layering-boundary-lineage && npm run test:changelog && npm run test:tea-workflow-descriptions && npm run validate:schemas && npm run lint && npm run lint:md && npm run format:check",
|
|
87
87
|
"test:atdd-isolation": "node test/test-atdd-isolation.js",
|
|
88
88
|
"test:atdd-net-guard": "node test/test-atdd-net-guard.js",
|
|
89
89
|
"test:atdd-scoring": "node test/test-atdd-scoring.js",
|
|
@@ -122,7 +122,9 @@
|
|
|
122
122
|
"test:eval-nfr-data": "node test/eval-nfr.js --validate-only",
|
|
123
123
|
"test:eval-quality-corpus": "node test/test-eval-quality-corpus.js",
|
|
124
124
|
"test:eval-replay": "node test/test-eval-replay.js",
|
|
125
|
+
"test:eval-routing-boundaries": "node test/test-routing-ambiguity-boundaries.js",
|
|
125
126
|
"test:eval-routing-data": "node test/eval-bmad-tea-routing.js --validate-only",
|
|
127
|
+
"test:eval-routing-evidence": "node test/test-routing-evidence.js",
|
|
126
128
|
"test:eval-schemas": "node tools/validate-eval-schemas.js",
|
|
127
129
|
"test:eval-teach-me-testing-data": "node test/eval-teach-me-testing.js --validate-only",
|
|
128
130
|
"test:eval-test-design-data": "node test/eval-test-design.js --validate-only",
|
|
@@ -71,6 +71,43 @@ Otherwise render `{agent.menu}` as a numbered table: `Code`, `Description`, `Act
|
|
|
71
71
|
|
|
72
72
|
Dispatch on a clear match by invoking the item's `skill` or executing its `prompt`. Only pause to clarify when two or more items are genuinely close — one short question, not a confirmation ritual. When nothing on the menu fits, just continue the conversation; chat, clarifying questions, and `bmad-help` are always fair game.
|
|
73
73
|
|
|
74
|
+
### Routing Ambiguity Boundaries
|
|
75
|
+
|
|
76
|
+
Before dispatching, list the menu items directly supported by facts in the user's message. One supported item is a clear route. Two or more supported items require the missing deciding information when the user has supplied no priority, sequence, or requested deliverable that selects one.
|
|
77
|
+
|
|
78
|
+
Ask one short question that names every supported choice in user-facing language and preserves any epic, story, feature, or file-set scope the user named. Keep the menu code and workflow unset until the user answers. Do not invoke any candidate while asking.
|
|
79
|
+
|
|
80
|
+
In routing, `spec files` means written test files when the request asks which files are badly written and what to fix. That fact pattern is a clear Review Tests (`RV`) route. A request that identifies product requirements or design specifications falls outside this rule. Direct requests to judge existing tests, identify badly written tests, or recommend fixes for those tests also route to Review Tests. Fix recommendations remain part of the review. The Review Tests versus Trace Coverage boundary applies when the same request also asks which requirements or risks the tests cover, or whether that coverage supports shipping.
|
|
81
|
+
|
|
82
|
+
<!-- routing-ambiguity-boundaries:start -->
|
|
83
|
+
|
|
84
|
+
| Source case | Facts supplied by the user | Supported choices | Missing deciding information |
|
|
85
|
+
| :-------------------------------- | :--------------------------------------------------------------------------------- | :---------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------- |
|
|
86
|
+
| `good-or-covering-what-matters` | Existing tests raise both writing-quality and requirements-coverage concerns | Review Tests (`RV`), Trace Coverage (`TR`) | Whether to assess how well the tests are written or map what they cover and evaluate ship readiness |
|
|
87
|
+
| `measured-some-nfrs-planned-none` | Measured NFR evidence exists for current work and future NFR coverage is unplanned | NFR Evidence Audit (`NR`), Test Design (`TD`) | Whether to audit the existing measurements or plan validation for the future scope first |
|
|
88
|
+
| `thin-coverage-on-payments` | Coverage is described as thin with no requested activity | Test Design (`TD`), Test Automation (`TA`), Trace Coverage (`TR`) | Whether to plan coverage, generate tests, or measure current requirement coverage |
|
|
89
|
+
| `story-half-done` | One scope contains an implemented part and an unbuilt part | ATDD (`AT`), Test Automation (`TA`) | Whether to create failing acceptance tests for the unbuilt part or automate the implemented part first |
|
|
90
|
+
|
|
91
|
+
<!-- routing-ambiguity-boundaries:end -->
|
|
92
|
+
|
|
93
|
+
### Unservable Request Boundaries
|
|
94
|
+
|
|
95
|
+
When the facts support no menu item, keep the menu code and workflow unset. State the
|
|
96
|
+
capability TEA's menu lacks and continue the conversation without activating a workflow.
|
|
97
|
+
The closest-sounding menu item remains unavailable when its declared action cannot
|
|
98
|
+
produce the requested result.
|
|
99
|
+
|
|
100
|
+
<!-- routing-unservable-boundaries:start -->
|
|
101
|
+
|
|
102
|
+
| Source case | Requested result | Menu boundary | Missing capability |
|
|
103
|
+
| :------------------------- | :------------------------------------ | :-------------------------------------------------------------------- | :------------------------------------- |
|
|
104
|
+
| `run-and-fix-ci-failures` | Execute the suite and repair failures | Continuous Integration scaffolds pipelines; Review Tests judges tests | Suite execution and failure repair |
|
|
105
|
+
| `write-production-code` | Implement a production endpoint | ATDD generates failing acceptance tests | Production implementation |
|
|
106
|
+
| `penetration-test-staging` | Perform a live penetration test | NFR Evidence Audit assesses evidence already gathered | Security testing against a live target |
|
|
107
|
+
| `hire-a-qa-lead` | Produce hiring materials | The menu serves testing and quality-engineering workflows | Recruiting and interview design |
|
|
108
|
+
|
|
109
|
+
<!-- routing-unservable-boundaries:end -->
|
|
110
|
+
|
|
74
111
|
## Critical Actions
|
|
75
112
|
|
|
76
113
|
- Consult `./resources/tea-index.csv` to select knowledge fragments under `resources/knowledge/` and load only the files needed for the current task.
|