bmad-method-test-architecture-enterprise 1.27.2 → 1.27.3-next.1

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 automation, CI/CD quality gates, and structured testing education. Part of the BMad Method ecosystem.",
34
- "version": "1.27.2",
34
+ "version": "1.27.3-next.1",
35
35
  "author": {
36
36
  "name": "Murat K Ozcan (TEA Creator) & Brian (BMad) Madison"
37
37
  },
@@ -40,6 +40,7 @@
40
40
  "./src/workflows/testarch/bmad-testarch-atdd",
41
41
  "./src/workflows/testarch/bmad-testarch-automate",
42
42
  "./src/workflows/testarch/bmad-testarch-ci",
43
+ "./src/workflows/testarch/bmad-testarch-evaluate",
43
44
  "./src/workflows/testarch/bmad-testarch-framework",
44
45
  "./src/workflows/testarch/bmad-testarch-nfr",
45
46
  "./src/workflows/testarch/bmad-testarch-test-design",
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  TEA is a standalone BMAD module that delivers risk-based test strategy, test automation guidance, and release gate decisions. It ships:
9
9
 
10
10
  - one expert agent, Murat, Master Test Architect and Quality Advisor
11
- - nine workflows spanning Teach Me Testing (TEA Academy), test design, framework setup, CI guidance, ATDD, automation, test review, NFR Evidence Audit, and traceability
11
+ - ten workflows spanning Teach Me Testing (TEA Academy), test design, framework setup, CI guidance, ATDD, automation, test review, NFR Evidence Audit, traceability, and Evaluate
12
12
  - a 36-row criteria registry that fixes the severity of every reviewable violation, so a score is a lookup rather than a judgment call
13
13
  - `tea-test-review`, a headless CLI that runs the review workflow as a CI gate with real exit codes
14
14
  - a write-time enforcement hook that blocks the mechanically decidable violations before they reach disk
@@ -50,7 +50,7 @@ TEA's answer is not a better prompt. It is to make the work repeatable at three
50
50
 
51
51
  ### The order you run things
52
52
 
53
- The nine workflows are a directed graph, not a menu. `src/module-help.csv` encodes it.
53
+ The ten workflows are a directed graph, not a menu. `src/module-help.csv` encodes it.
54
54
 
55
55
  ```text
56
56
  Phase 3, solutioning, once per project
@@ -62,6 +62,7 @@ Phase 4, implementation, per story
62
62
  Epic or release gate
63
63
  TA automate → RV test-review
64
64
  TA automate → NR nfr
65
+ TA automate → EV evaluate → CI ci
65
66
  RV test-review → TR trace (Phase 2 gate decision)
66
67
  ```
67
68
 
@@ -313,9 +314,10 @@ A copy-paste workflow lives at `cli/examples/pr-test-review.yml`, and the full f
313
314
 
314
315
  ## Configuration
315
316
 
316
- TEA variables are defined in `src/module.yaml` and prompted during install. Ten are wired into workflows today; the last four are placeholders that nothing reads yet.
317
+ TEA variables are defined in `src/module.yaml` and prompted during install. Eleven are wired into workflows today; the last four are placeholders that nothing reads yet.
317
318
 
318
319
  - `test_artifacts` — base output folder for test artifacts
320
+ - `tea_evaluations_folder` — base folder for Evaluate's own evaluation folders (string, default `evals`), resolved as `{project-root}/{value}`
319
321
  - `tea_use_playwright_utils` — enable Playwright Utils integration (boolean, default true). When true **and the package is installed**, `@seontechnologies/playwright-utils` becomes the default implementation for everything it covers: generated Playwright tests use `interceptNetworkCall`, `apiRequest`, `recurse`, and `log` without being asked, and `test-review` flags a vanilla equivalent that carries no stated reason. See [Integrate Playwright Utils](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/how-to/customization/integrate-playwright-utils/)
320
322
  - `tea_use_pactjs_utils` — enable Pact.js Utils integration for contract testing (boolean, default true). It decides how Pact suites are written, not whether a project gets one: TEA still requires a real consumer-provider boundary before scaffolding a contract test. When on **and the package is installed**, generated Pact code uses `createProviderState`, `buildVerifierOptions`, and `createRequestFilter` rather than raw Pact boilerplate. A flag with no install generates the raw path and reports one recommendation rather than flagging every file
321
323
  - `tea_pact_mcp` — SmartBear MCP for PactFlow/Broker interaction: mcp, none (string, default mcp). Safe without a broker: every broker-dependent step degrades to provider source or an OpenAPI spec and reports that the broker was unreachable
@@ -347,11 +349,12 @@ src/ # the shipped module
347
349
  ├── module.yaml # install-time variables and post-install notes
348
350
  ├── module-help.csv # workflow catalog: menu codes, phases, ordering
349
351
  ├── agents/bmad-tea/ # SKILL.md, customize.toml, resources/{tea-index.csv, knowledge/}
350
- └── workflows/testarch/ # nine self-contained workflow skills
352
+ └── workflows/testarch/ # ten self-contained workflow skills
351
353
  ├── bmad-teach-me-testing/
352
354
  ├── bmad-testarch-atdd/
353
355
  ├── bmad-testarch-automate/
354
356
  ├── bmad-testarch-ci/
357
+ ├── bmad-testarch-evaluate/
355
358
  ├── bmad-testarch-framework/ # resources/hooks/tea-enforce.cjs lives here
356
359
  ├── bmad-testarch-nfr/
357
360
  ├── bmad-testarch-test-design/
@@ -367,32 +370,33 @@ test/ # quality gate suites and the six eval harnesses
367
370
 
368
371
  ## How TEA Keeps Itself Honest
369
372
 
370
- TEA has deterministic checks and live evals. These cover specific risks. They are not end-to-end evals of every skill.
373
+ TEA has deterministic checks and live evals. Ten of TEA's eleven skills have behavioral coverage registered in the suite manifest; `bmad-testarch-evaluate` is deferred there until Story 1.16 authors its own suite.
371
374
 
372
375
  ### Current Eval Coverage
373
376
 
374
377
  The eight suites under `test/evals/` measure one decision inside each knowledge-bearing workflow: whether the agent selects the required knowledge fragments and avoids fragments the workflow excludes. They do not execute the complete workflow or grade its final artifact.
375
378
 
376
- The `atdd`, `automate`, `ci`, `nfr`, `test-design`, `test-review`, and `trace` suites add behavioral evals, and so does `bmad-tea`'s own routing suite. `atdd` generates red-phase scaffolds against an unimplemented fixture, activates them, executes them under NFR9's isolation, and scores whether each one fails for the reason its criterion states. `automate` runs four hand-authored spec sets, standing in for generated coverage, against a fixed voucher-redemption service and against a scratch copy carrying its seeded minimum-spend regression, and scores whether the one spec set that tests the boundary catches the regression and whether the other three are correctly reported as missing it, vacuous, or duplicated rather than as clean passes; it spends no vendor call, since there is no live-agent mode to build one for. `ci` scaffolds a pipeline for a project whose team wrote down what it needs, then parses the generated workflow, lints it with `actionlint`, and scores every requested trigger, permission, command, gate, and artifact against a minimal-request control. `nfr` audits one evidence bundle with known gaps and one clean bundle. `test-design` analyzes one seeded epic and one clean control epic. `test-review` runs the complete review against files containing nine planted defects plus one clean file, then scores recall, the non-false-positive rate, score variance, and verdict stability. `trace` runs the complete traceability workflow against a ten-criterion seeded set whose declared gate is FAIL and a five-criterion clean set whose declared gate is PASS, then scores criterion status, the gate decision and the criteria behind it, the coverage arithmetic, evidence citation, and case stability. `bmad-tea` routes eighteen intents to the right menu item, or declines the ones nothing on the menu serves.
379
+ The `atdd`, `automate`, `ci`, `framework`, `nfr`, `teach-me-testing`, `test-design`, `test-review`, and `trace` suites add behavioral evals, and so does `bmad-tea`'s own routing suite. `atdd` generates red-phase scaffolds against an unimplemented fixture, activates them, executes them under NFR9's isolation, and scores whether each one fails for the reason its criterion states. `automate` runs four hand-authored spec sets, standing in for generated coverage, against a fixed voucher-redemption service and against a scratch copy carrying its seeded minimum-spend regression, and scores whether the one spec set that tests the boundary catches the regression and whether the other three are correctly reported as missing it, vacuous, or duplicated rather than as clean passes; it spends no vendor call, since there is no live-agent mode to build one for. `ci` scaffolds a pipeline for a project whose team wrote down what it needs, then parses the generated workflow, lints it with `actionlint`, and scores every requested trigger, permission, command, gate, and artifact against a minimal-request control. `framework` installs and smoke-tests a scaffolded framework in a network-isolated sandbox, proving it runs rather than merely reading as valid. `nfr` audits one evidence bundle with known gaps and one clean bundle. `teach-me-testing` tests multi-turn teaching sessions, seeded quiz corrections, and persistent learner progress through `tea-transcript-runner`. `test-design` analyzes one seeded epic and one clean control epic. `test-review` runs the complete review against files containing nine planted defects plus one clean file, then scores recall, the non-false-positive rate, score variance, and verdict stability. `trace` runs the complete traceability workflow against a ten-criterion seeded set whose declared gate is FAIL and a five-criterion clean set whose declared gate is PASS, then scores criterion status, the gate decision and the criteria behind it, the coverage arithmetic, evidence citation, and case stability. `bmad-tea` routes nineteen intents to the right menu item, or declines the ones nothing on the menu serves.
377
380
 
378
381
  | Skill | Fragment-selection cases | Full behavioral eval |
379
382
  | --------------------------- | ------------------------ | ----------------------------------------------------------------------------------- |
380
- | `bmad-tea` | N/A | Yes; eighteen intents, ten with a right answer and eight controls |
381
- | `bmad-teach-me-testing` | N/A | None; this skill has no workflow knowledge index |
383
+ | `bmad-tea` | N/A | Yes; nineteen intents, eleven with a right answer and eight controls |
384
+ | `bmad-teach-me-testing` | N/A | Yes; multi-turn session with seeded wrong quiz answer, review loop, and progress |
382
385
  | `bmad-testarch-atdd` | 3 | Yes; one unimplemented fixture and five acceptance criteria |
383
386
  | `bmad-testarch-automate` | 5 | Yes; four hand-authored spec sets against a fixed service and its seeded regression |
384
387
  | `bmad-testarch-ci` | 2 | Yes; one full request and one minimal request |
385
- | `bmad-testarch-framework` | 3 | None |
388
+ | `bmad-testarch-evaluate` | N/A | No; deferred until Story 1.16 authors its own suite |
389
+ | `bmad-testarch-framework` | 3 | Yes; install and smoke-test generated scaffold in network-isolated sandbox |
386
390
  | `bmad-testarch-nfr` | 2 | Yes; one evidence bundle with known gaps and one clean bundle |
387
391
  | `bmad-testarch-test-design` | 5 | Yes; one seeded epic and one clean control epic |
388
392
  | `bmad-testarch-test-review` | 2 | Yes; three files, nine planted defects, and one clean file |
389
393
  | `bmad-testarch-trace` | 2 | Yes; a ten-criterion seeded set and a five-criterion clean set |
390
394
 
391
- A passing fragment-selection eval means the workflow loaded the right knowledge. It makes no claim about the quality of the workflow's final output. A full behavioral eval for the remaining skill, `bmad-testarch-framework`, is a coverage gap. The source-controlled [Eval Quality and Behavioral Coverage Roadmap](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/eval-quality-roadmap/) records the per-skill contracts, runner work, CI plan, and intended boundary with the upcoming standalone `eval-quality` project. [The eval-quality Command Adapter](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/eval-quality-command-adapter/) records how TEA runs the commands those evals measure, and [Adopting eval-quality, One Skill at a Time](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/eval-quality-adoption-guide/) is the guide for taking one skill in another BMAD module from asserted quality to measured quality.
395
+ A passing fragment-selection eval means the workflow loaded the right knowledge. Ten of TEA's eleven skills have behavioral coverage registered in the suite manifest; `bmad-testarch-evaluate` is named in the manifest's deferred array with its owner, missing evidence, and exit condition until Story 1.16 lands its own suite. [How TEA Is Tested](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/how-tea-is-tested/) explains the testing hierarchy, exit classes, and evidence model in plain language. The source-controlled [Eval Quality and Behavioral Coverage Roadmap](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/eval-quality-roadmap/) records the per-skill contracts, runner work, CI plan, and intended boundary with the upcoming standalone `eval-quality` project. [The eval-quality Command Adapter](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/eval-quality-command-adapter/) records how TEA runs the commands those evals measure, and [Adopting eval-quality, One Skill at a Time](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/eval-quality-adoption-guide/) is the guide for taking one skill in another BMAD module from asserted quality to measured quality.
392
396
 
393
397
  ### Deterministic Checks
394
398
 
395
- `npm test` chains seventy-five 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. Eleven of the seventy-five keep the rules, guidance, hook, eval data, eval contracts, diagnostics, and documentation aligned:
399
+ `npm test` chains seventy-seven 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. Twelve of the seventy-seven keep the rules, guidance, hook, eval data, eval contracts, diagnostics, and documentation aligned:
396
400
 
397
401
  - `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
402
  - `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.
@@ -405,6 +409,7 @@ A passing fragment-selection eval means the workflow loaded the right knowledge.
405
409
  - `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.
406
410
  - `test:nfr-evidence-guidance` holds every NFR worker and the publication audit to the supplied-evidence ledger, exercises supported, missing, and mismatched evidence, rejects contaminating examples, and binds the protected baseline and focused remediation records by digest.
407
411
  - `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.
412
+ - `test:evaluate-guidance` parses the Evaluate skill's `SKILL.md` stage list and fails when a stage entry is missing, out of order, or points at a `references/` guide that does not exist.
408
413
 
409
414
  These checks produce the same answer from the same repository state. They need no agent credential, network call, or model budget. `test:eval-data` runs through `npm test`, the local pre-commit hook, pull-request quality checks, and the publish workflow.
410
415
 
@@ -428,7 +433,7 @@ npm run eval:all -- --agent agy
428
433
  npm run eval:all -- --agent agy --agent claude --agent codex
429
434
  ```
430
435
 
431
- `eval:all` uses two repetitions per fragment-selection case and per routing intent, three repetitions for `test-review`, and two repetitions per `nfr` evidence bundle, per `ci` project, per `test-design` epic, per `trace` fixture set, and per `atdd` story. One runner makes 105 agent calls: 48 fragment selections, 36 routing intents, 3 reviews, 4 audits, 4 pipelines, 4 test designs, 4 traces, and 2 ATDD generations. All three built-in runners make 315 calls.
436
+ `eval:all` uses two repetitions per fragment-selection case and per routing intent, three repetitions for `test-review`, and two repetitions per `nfr` evidence bundle, per `ci` project, per `test-design` epic, per `trace` fixture set, and per `atdd` story. One runner makes 107 agent calls: 48 fragment selections, 38 routing intents, 3 reviews, 4 audits, 4 pipelines, 4 test designs, 4 traces, and 2 ATDD generations. All three built-in runners make 321 calls.
432
437
 
433
438
  Check the data, executable, login, fixtures, and expected results without making a model call:
434
439
 
@@ -550,15 +555,15 @@ npm run eval:fragment-selection -- \
550
555
 
551
556
  ### What Has to Pass
552
557
 
553
- Every row below is a declared gate. The three suites that existed then were measured live for the first time on 2026-09-08 against `claude`/`sonnet`, and the [Eval Quality and Behavioral Coverage Roadmap](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/eval-quality-roadmap/) records what each one returned; `bmad-tea-routing`, `nfr`, `test-design`, `ci` and `atdd` have been added since and have never been run live, so their rows are declared targets and nothing more; no result artifact is committed, so quote that section rather than a number from memory. The live thresholds are the ones this repository's own eval suite manifest declares, and `npm run test:eval-schemas` fails when a harness constant and the manifest disagree.
558
+ Every row below is a declared gate. Ten of TEA's eleven skills have behavioral suites registered in the suite manifest; `bmad-testarch-evaluate` is deferred until Story 1.16. Recorded live baselines preserve timestamped history, and [How TEA Is Tested](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/explanation/how-tea-is-tested/) describes the evidence model. The live thresholds are the ones this repository's own eval suite manifest declares, and `npm run test:eval-schemas` fails when a harness constant and the manifest disagree.
554
559
 
555
560
  | Eval | Declared threshold | Declared volume |
556
561
  | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
557
- | `npm run eval:all -- --agent ...` | All eight live suites below meet their thresholds for the selected runner | 48 selections, 36 routing calls, 3 reviews, 4 audits, 4 pipelines, 4 test designs, 4 traces, 2 generations |
562
+ | `npm run eval:all -- --agent ...` | All eight live suites below meet their thresholds for the selected runner | 48 selections, 38 routing calls, 3 reviews, 4 audits, 4 pipelines, 4 test designs, 4 traces, 2 generations |
558
563
  | Fragment selection | At least 90% required-fragment recall, at most 10% forbidden-fragment selection, and stable choices across repeated cases | 24 cases twice: 48 calls |
559
564
  | Test review | At least 70% overall recall, 100% CRITICAL recall, an 80% non-false-positive rate, score standard deviation no higher than 3, and a stable verdict | Three complete reviews |
560
565
  | Trace | At least 90% criterion-status accuracy and 90% evidence-citation precision; 100% on both discriminating criteria, the gate decision, the gate criteria, the coverage arithmetic, the oracle resolution, the rejected evidence, the waiver validity, and the live evidence; no clean-set false positive, no unstable case, and no fixture mutation | Two fixture sets twice: 4 calls |
561
- | bmad-tea routing | At least 90% route accuracy, 80% reason-token recall, 87.5% scope fidelity, and 75% on both clarification and decline recall; zero confident routes on an intent nothing on the menu serves, zero on one whose menu items are genuinely close, zero clear intents left unrouted, and at most two intents whose answer changes between repetitions | 18 intents twice: 36 calls |
566
+ | bmad-tea routing | At least 90% route accuracy, 80% reason-token recall, 87.5% scope fidelity, and 75% on both clarification and decline recall; zero confident routes on an intent nothing on the menu serves, zero on one whose menu items are genuinely close, zero clear intents left unrouted, and at most two intents whose answer changes between repetitions | 19 intents twice: 38 calls |
562
567
  | NFR | At least 87.5% domain-status accuracy and 90% threshold fidelity; 100% on undecidable domains, the overall status, and domain coverage; no unsupported PASS, no fabricated evidence, no clean-bundle false positive, no duplicate domain section, no disagreement between the gate artifact and the assessment it summarizes, no unstable case, and no fixture mutation | Two evidence bundles twice: 4 calls |
563
568
  | CI | Zero parse failures and zero `actionlint` findings; at least 90% requested-element recall and 100% trigger accuracy; zero unrequested elements, zero workflow rule violations, no unstable case, and no fixture mutation | Two projects twice: 4 calls |
564
569
  | Test design | At least 80% grounded-risk recall, 80% risk precision, and 80% coverage mapping; 100% on the scale compliance, the score arithmetic, the category validity, the band placement, the risk-id shape, the risk-link resolution, and the priority ordering; no unscored risk table, no ungrounded risk, no missed top-severity risk, no risk-ceiling excess, no unstable case, and no fixture mutation | Two epics twice: 4 calls |
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",
4
+ "version": "1.27.3-next.1",
5
5
  "description": "Master Test Architect for quality strategy, test automation, and release gates",
6
6
  "keywords": [
7
7
  "bmad",
@@ -47,7 +47,9 @@
47
47
  "cli",
48
48
  ".claude-plugin",
49
49
  "README.md",
50
- "LICENSE"
50
+ "LICENSE",
51
+ "!src/workflows/testarch/*/.memlog.md",
52
+ "!src/workflows/testarch/*/.analysis/**"
51
53
  ],
52
54
  "scripts": {
53
55
  "docs:build": "node tools/build-docs.js",
@@ -83,7 +85,7 @@
83
85
  "release:minor": "gh workflow run publish.yaml -f channel=latest -f bump=minor",
84
86
  "release:next": "gh workflow run publish.yaml -f channel=next",
85
87
  "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:nfr-evidence-guidance && 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",
88
+ "test": "npm run test:conflict-markers && npm run test:schemas && npm run test:install && npm run test:evaluate-guidance && 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:nfr-evidence-guidance && 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:trial-set-scoring && 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
89
  "test:atdd-isolation": "node test/test-atdd-isolation.js",
88
90
  "test:atdd-net-guard": "node test/test-atdd-net-guard.js",
89
91
  "test:atdd-scoring": "node test/test-atdd-scoring.js",
@@ -130,6 +132,7 @@
130
132
  "test:eval-test-design-data": "node test/eval-test-design.js --validate-only && node test/test-test-design-grounding.js",
131
133
  "test:eval-trace-data": "node test/eval-trace.js --validate-only",
132
134
  "test:eval-transcript-data": "node test/eval-transcript.js --validate-only",
135
+ "test:evaluate-guidance": "node test/test-evaluate-guidance.js",
133
136
  "test:file-system-conformance": "node test/test-file-system-conformance.js",
134
137
  "test:file-system-port": "node test/test-file-system-port.js",
135
138
  "test:framework-scaffold": "node test/test-framework-scaffold.js",
@@ -154,9 +157,10 @@
154
157
  "test:schemas": "node test/test-agent-schema.js",
155
158
  "test:suite-manifest": "node test/test-suite-manifest.js",
156
159
  "test:supply-chain": "node test/test-supply-chain.js",
157
- "test:tea-workflow-descriptions": "node tools/validate-tea-workflow-descriptions.js",
160
+ "test:tea-workflow-descriptions": "node test/test-tea-workflow-descriptions.js",
158
161
  "test:teach-me-testing-scoring": "node test/test-teach-me-testing-scoring.js",
159
162
  "test:transcript-harness": "node test/test-transcript-harness.js",
163
+ "test:trial-set-scoring": "node test/test-trial-set-scoring.js",
160
164
  "validate:schemas": "node tools/validate-agent-schema.js"
161
165
  },
162
166
  "lint-staged": {
@@ -228,7 +232,7 @@
228
232
  "eslint-plugin-n": "^17.21.3",
229
233
  "eslint-plugin-unicorn": "^60.0.0",
230
234
  "eslint-plugin-yml": "^1.18.0",
231
- "eval-quality": "3.4.0",
235
+ "eval-quality": "4.0.0",
232
236
  "husky": "^9.1.7",
233
237
  "jest": "^30.0.4",
234
238
  "lint-staged": "^16.1.1",
@@ -87,6 +87,11 @@ code = "TA"
87
87
  description = "Test Automation — generate prioritized API/E2E tests, fixtures, and DoD summary for a story or feature"
88
88
  skill = "bmad-testarch-automate"
89
89
 
90
+ [[agent.menu]]
91
+ code = "EV"
92
+ description = "Evaluate — build and run a scored, evidence-backed evaluation of an agent, skill, workflow, or tool-use system, with seeded-defect proof and CI enforcement"
93
+ skill = "bmad-testarch-evaluate"
94
+
90
95
  [[agent.menu]]
91
96
  code = "GATE"
92
97
  description = "Release Gate — route final audit, NFR evidence audit, and trace gate decision"
@@ -6,6 +6,7 @@ Test Architecture Enterprise,bmad-testarch-framework,Test Framework,TF,Initializ
6
6
  Test Architecture Enterprise,bmad-testarch-ci,CI Setup,CI,Configure CI/CD quality pipeline.,,,3-solutioning,bmad-testarch-framework,,false,test_artifacts,ci config
7
7
  Test Architecture Enterprise,bmad-testarch-atdd,ATDD,AT,Generate red-phase acceptance test scaffolds before implementation.,,,4-implementation,bmad-create-story:create,bmad-dev-story,false,test_artifacts,atdd-checklist|red-phase acceptance tests
8
8
  Test Architecture Enterprise,bmad-testarch-automate,Test Automation,TA,Expand test coverage.,,,4-implementation,bmad-testarch-atdd,,false,test_artifacts,test suite
9
+ Test Architecture Enterprise,bmad-testarch-evaluate,Evaluate,EV,"Build and run a scored, evidence-backed evaluation of a target.",,,4-implementation,bmad-testarch-automate,bmad-testarch-ci,false,tea_evaluations_folder,evaluation folder|scored contract
9
10
  Test Architecture Enterprise,bmad-testarch-test-review,Test Review,RV,Quality audit (0-100 scoring).,,,4-implementation,bmad-testarch-automate,,false,test_artifacts,review report
10
11
  Test Architecture Enterprise,bmad-testarch-nfr,NFR Evidence Audit,NR,Audit non-functional requirement evidence.,,,4-implementation,bmad-testarch-automate,,false,test_artifacts,nfr report
11
12
  Test Architecture Enterprise,bmad-testarch-trace,Traceability,TR,Coverage traceability and gate.,,,4-implementation,bmad-testarch-test-review,,false,test_artifacts,traceability matrix|gate decision
package/src/module.yaml CHANGED
@@ -24,7 +24,7 @@ agents:
24
24
  # TEA-specific configuration variables
25
25
  # IMPORTANT: tea_use_playwright_utils, tea_use_pactjs_utils, tea_pact_mcp, tea_browser_automation,
26
26
  # tea_execution_mode, tea_capability_probe, test_stack_type, ci_platform,
27
- # and test_framework are ACTIVELY USED in workflows
27
+ # test_framework, and tea_evaluations_folder are ACTIVELY USED in workflows
28
28
  # Other variables are FUTURE placeholders for Phase 10 enhancements
29
29
 
30
30
  test_artifacts:
@@ -32,6 +32,13 @@ test_artifacts:
32
32
  default: "{output_folder}/test-artifacts"
33
33
  result: "{project-root}/{value}"
34
34
 
35
+ # ✅ ACTIVELY USED - Evaluate (bmad-testarch-evaluate) reads this on activation and
36
+ # scaffolds every evaluation folder under it.
37
+ tea_evaluations_folder:
38
+ prompt: "Where should Evaluate store evaluation folders?"
39
+ default: "evals"
40
+ result: "{project-root}/{value}"
41
+
35
42
  # ✅ ACTIVELY USED - Playwright Utils integration (referenced in 6 workflows: automate, atdd, framework, test-design, test-review, ci)
36
43
  # CRITICAL: Must be boolean (true/false) not string - workflows check "if config.tea_use_playwright_utils: true"
37
44
  # When true, playwright-utils-mandate.md binds generation and review: the package is the default
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: bmad-testarch-evaluate
3
+ description: 'Build and run a scored, evidence-backed evaluation of a target. Use when the user says "evaluate this agent" or "I want proof this behaves correctly"'
4
+ ---
5
+
6
+ # Evaluate
7
+
8
+ **Goal:** Take an adopter from a described target to a compiling, sealed, preflighted, scored Behavioral Evaluation Contract whose clean arm passes and whose mutated arm catches every seeded defect, then wire the proof into CI.
9
+
10
+ **Role:** You are the Master Test Architect.
11
+
12
+ You will continue to operate with your given name, identity, and communication_style, merged with the details of this role description.
13
+
14
+ ## Conventions
15
+
16
+ - Bare paths (e.g. `references/inspection.md`) resolve from the skill root.
17
+ - `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives).
18
+ - `{project-root}`-prefixed paths resolve from the project working directory.
19
+ - `{skill-name}` resolves to the skill directory's basename.
20
+ - Resolve sibling files such as `references/...` and `assets/...` from `{skill-root}`.
21
+
22
+ ## On Activation
23
+
24
+ ### Step 1: Resolve the Workflow Block
25
+
26
+ Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`
27
+
28
+ **If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
29
+
30
+ 1. `{skill-root}/customize.toml` — defaults
31
+ 2. `{project-root}/_bmad/custom/{skill-name}.toml` — team overrides
32
+ 3. `{project-root}/_bmad/custom/{skill-name}.user.toml` — personal overrides
33
+
34
+ Any missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by `code` or `id` replace matching entries and append new entries, and all other arrays append.
35
+
36
+ ### Step 2: Execute Prepend Steps
37
+
38
+ Execute each entry in `{workflow.activation_steps_prepend}` in order before proceeding.
39
+
40
+ ### Step 3: Load Persistent Facts
41
+
42
+ Treat every entry in `{workflow.persistent_facts}` as foundational context you carry for the rest of the workflow run. Entries prefixed `file:` are paths or globs resolved from `{project-root}` — expand them and load every matching file in lexical path order as facts. All other entries are facts verbatim.
43
+
44
+ ### Step 4: Load Config
45
+
46
+ Load config from `{project-root}/_bmad/tea/config.yaml` and resolve:
47
+
48
+ - `user_name`
49
+ - `communication_language`
50
+ - `tea_evaluations_folder`
51
+
52
+ ### Step 5: Greet the User
53
+
54
+ Greet `{user_name}`, speaking in `{communication_language}`.
55
+
56
+ ### Step 6: Execute Append Steps
57
+
58
+ Execute each entry in `{workflow.activation_steps_append}` in order.
59
+
60
+ Activation is complete. Begin the workflow below.
61
+
62
+ ## Workflow
63
+
64
+ Evaluate is one continuous loop over twelve stages, run inline rather than as separate step files: each stage's craft lives in its own `references/` guide, loaded when that stage is reached. Ask the adopter which stage to start from when resuming earlier work; otherwise start at Stage 1. Work under `{tea_evaluations_folder}` unless the adopter names another location.
65
+
66
+ If the loaded `references/<stage>.md` guide is a placeholder (it says "Placeholder." and names the story that fills it), tell the adopter that stage is not yet available and stop there. Never improvise the stage's craft yourself, and never compute a verdict, score, or pass/fail decision outside `eval-quality`'s own CLI (AD-6): a placeholder stage has no craft to improvise from, and a verdict this skill computed itself would not be one `eval-quality` sealed.
67
+
68
+ ### Stage 1: Inspection
69
+
70
+ Inspect the target and identify its kind. Load `references/inspection.md`.
71
+
72
+ ### Stage 2: Intake
73
+
74
+ Capture behavioral requirements and constraints the adopter confirms. Load `references/intake.md`.
75
+
76
+ ### Stage 3: Corpus
77
+
78
+ Design the probe corpus. Load `references/corpus.md`.
79
+
80
+ ### Stage 4: Contract
81
+
82
+ Author the Behavioral Evaluation Contract. Load `references/contract.md`.
83
+
84
+ ### Stage 5: Oracles
85
+
86
+ Design oracles and rubrics. Load `references/oracles.md`.
87
+
88
+ ### Stage 6: Adapters
89
+
90
+ Scaffold the execution-target registry and adapters. Load `references/adapters.md`.
91
+
92
+ ### Stage 7: Evaluator
93
+
94
+ Choose or build the evaluation layer. Load `references/evaluator.md`.
95
+
96
+ ### Stage 8: Mutation
97
+
98
+ Apply and roll back controlled mutations. Load `references/mutation.md`.
99
+
100
+ ### Stage 9: Harness
101
+
102
+ Scaffold the runner and scoring policy. Load `references/harness.md`.
103
+
104
+ ### Stage 10: Run
105
+
106
+ Run the clean and mutated arms and score them. Load `references/run.md`.
107
+
108
+ ### Stage 11: Gaps
109
+
110
+ Interpret a weak result and close the gap. Load `references/gaps.md`.
111
+
112
+ ### Stage 12: CI
113
+
114
+ Wire continuous proof into the adopter's CI. Load `references/ci.md`.
115
+
116
+ ## On Complete
117
+
118
+ Run: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete`
119
+
120
+ If the resolver succeeds and returns a non-empty `workflow.on_complete`, execute that value as the final terminal instruction before exiting.
121
+
122
+ If the resolver fails, returns no output, or resolves an empty value, skip the hook and exit normally.
@@ -0,0 +1,6 @@
1
+ # Evaluate assets
2
+
3
+ Templates an authored evaluation validates against: scoring policy, evaluator
4
+ configuration, and isolation manifest templates, and the `evaluation.json`
5
+ folder scaffold. Starting with Story 1.8, each template ships with no
6
+ threshold or identity values filled in, so a filled copy is the adopter's own.
@@ -0,0 +1,38 @@
1
+ # DO NOT EDIT -- overwritten on every update.
2
+ #
3
+ # Workflow customization surface for bmad-testarch-evaluate. Mirrors the
4
+ # agent customization shape under the [workflow] namespace.
5
+
6
+ [workflow]
7
+
8
+ # --- Configurable below. Overrides merge per BMad structural rules: ---
9
+ # scalars: override wins • arrays (persistent_facts, activation_steps_*): append
10
+
11
+ # Steps to run before the standard activation (config load, greet).
12
+ # Overrides append. Use for pre-flight loads, compliance checks, etc.
13
+
14
+ activation_steps_prepend = []
15
+
16
+ # Steps to run after greet but before the workflow begins.
17
+ # Overrides append. Use for context-heavy setup that should happen
18
+ # once the user has been acknowledged.
19
+
20
+ activation_steps_append = []
21
+
22
+ # Persistent facts the workflow keeps in mind for the whole run
23
+ # (target conventions, evaluation policy, prior findings). Distinct
24
+ # from a run's own evidence -- these are static context loaded on
25
+ # activation. Overrides append.
26
+ #
27
+ # Each entry is either:
28
+ # - a literal sentence, e.g. "Every probe corpus needs one clean control."
29
+ # - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/eval-standards.md"
30
+ # (glob patterns are supported; matching files load in lexical path order as facts).
31
+
32
+ persistent_facts = []
33
+
34
+ # Scalar: executed when the workflow reaches its terminal stage,
35
+ # after the final outputs are produced. Override wins. Leave empty
36
+ # for no custom post-completion behavior.
37
+
38
+ on_complete = ""
@@ -0,0 +1,6 @@
1
+ # Adapters
2
+
3
+ Placeholder. This guide will teach how to scaffold the runner command, MCP
4
+ wiring, or HTTP port and register it in the execution-target registry, so
5
+ preflight reduces a real observation with no authorization denial (FR6).
6
+ Filled by Story 1.13.
@@ -0,0 +1,5 @@
1
+ # CI
2
+
3
+ Placeholder. This guide will teach how to wire continuous proof into the
4
+ adopter's CI, with tiers placed from an inspection of the adopter's
5
+ repository and a per-check enforcement class (FR11). Filled by Story 2.4.
@@ -0,0 +1,6 @@
1
+ # Contract
2
+
3
+ Placeholder. This guide will teach how to author the Behavioral Evaluation
4
+ Contract under eval-quality's authoring discipline, so it compiles, seals, and
5
+ carries a non-null observable success criterion on every behavior (FR4).
6
+ Filled by Story 1.13.
@@ -0,0 +1,6 @@
1
+ # Corpus
2
+
3
+ Placeholder. This guide will teach how to design the probe corpus per target
4
+ kind: representative, negative and malformed inputs, held-out probes, clean
5
+ controls, seeded-defect probes, zero-action defect probes, and gameability
6
+ probes, plus the corpus layout and digest (FR3, AD-9). Filled by Story 1.12.
@@ -0,0 +1,6 @@
1
+ # Evaluator
2
+
3
+ Placeholder. This guide will teach how to choose or build the evaluation
4
+ layer (the deterministic evaluator, a sealed-brief agent, an adopter harness,
5
+ a skill-specific evaluator, custom code, or an external framework) behind the
6
+ one framework-neutral import contract (FR13, AD-21). Filled by Story 1.23.
@@ -0,0 +1,6 @@
1
+ # Gaps
2
+
3
+ Placeholder. This guide will teach how to interpret a CONCERNS, FAIL, or
4
+ Invalid result: name the unsatisfied rule or missing evidence, propose and
5
+ author the probe, control, or oracle that closes the gap, then rerun and
6
+ rescore (FR10). Filled by Story 2.4.
@@ -0,0 +1,5 @@
1
+ # Harness
2
+
3
+ Placeholder. This guide will teach how to generate the scoring policy,
4
+ evaluator configuration, and isolation manifest, with every threshold set by
5
+ the adopter (FR8). Filled by Story 1.14.
@@ -0,0 +1,7 @@
1
+ # Inspection
2
+
3
+ Placeholder. This guide will teach how to inspect a target (entry points,
4
+ behaviors, surfaces, existing tests, failure history), identify its target
5
+ kind, and map it to an interface kind and adapter shape, redirecting a request
6
+ to evaluate a vendor model itself to the adopter's own use of it (FR1, AD-4).
7
+ Filled by Story 1.12.
@@ -0,0 +1,5 @@
1
+ # Intake
2
+
3
+ Placeholder. This guide will teach how to capture the behavioral requirements
4
+ and constraints inspection cannot infer, as a written statement the adopter
5
+ confirms before corpus design (FR2). Filled by Story 1.12.
@@ -0,0 +1,5 @@
1
+ # Mutation
2
+
3
+ Placeholder. This guide will teach how to apply and roll back each controlled
4
+ mutation in a disposable copy, with baseline-pass and mutated-fail evidence
5
+ and a measured `rollbackVerified` (FR7, AD-8). Filled by Story 1.14.
@@ -0,0 +1,5 @@
1
+ # Oracles
2
+
3
+ Placeholder. This guide will teach how to design one oracle per discharged
4
+ behavior and an anchored rubric wherever judgment needs a scale, judged by a
5
+ calibrated judge (FR5). Filled by Story 1.13.
@@ -0,0 +1,6 @@
1
+ # Run
2
+
3
+ Placeholder. This guide will teach how to run the clean and mutated arms
4
+ through the chosen evaluation layer and drive compile, seal, preflight, and
5
+ score end to end, so the clean arm resolves `passed-clean-control` and the
6
+ seeded probe resolves `caught` (FR9). Filled by Story 1.14.