bmad-method-test-architecture-enterprise 1.2.2 → 1.2.5

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.
Files changed (71) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +14 -12
  3. package/docs/how-to/workflows/setup-ci.md +3 -1
  4. package/docs/how-to/workflows/setup-test-framework.md +29 -6
  5. package/docs/reference/configuration.md +97 -0
  6. package/docs/reference/knowledge-base.md +15 -6
  7. package/package.json +5 -3
  8. package/release_notes.md +8 -4
  9. package/src/agents/tea.agent.yaml +2 -2
  10. package/src/module.yaml +78 -5
  11. package/src/testarch/knowledge/adr-quality-readiness-checklist.md +9 -9
  12. package/src/testarch/tea-index.csv +36 -36
  13. package/src/workflows/testarch/atdd/atdd-checklist-template.md +2 -0
  14. package/src/workflows/testarch/atdd/steps-c/step-01-preflight-and-context.md +65 -12
  15. package/src/workflows/testarch/atdd/steps-c/step-02-generation-mode.md +5 -0
  16. package/src/workflows/testarch/atdd/steps-c/step-03-test-strategy.md +10 -1
  17. package/src/workflows/testarch/atdd/steps-c/step-05-validate-and-complete.md +13 -2
  18. package/src/workflows/testarch/atdd/workflow.md +1 -1
  19. package/src/workflows/testarch/atdd/workflow.yaml +1 -4
  20. package/src/workflows/testarch/automate/steps-c/step-01-preflight-and-context.md +46 -2
  21. package/src/workflows/testarch/automate/steps-c/step-02-identify-targets.md +12 -0
  22. package/src/workflows/testarch/automate/steps-c/step-03-generate-tests.md +110 -31
  23. package/src/workflows/testarch/automate/steps-c/step-03b-subprocess-backend.md +246 -0
  24. package/src/workflows/testarch/automate/steps-c/step-03c-aggregate.md +90 -38
  25. package/src/workflows/testarch/automate/steps-c/step-04-validate-and-summarize.md +13 -2
  26. package/src/workflows/testarch/automate/workflow.md +1 -1
  27. package/src/workflows/testarch/automate/workflow.yaml +1 -4
  28. package/src/workflows/testarch/ci/azure-pipelines-template.yaml +155 -0
  29. package/src/workflows/testarch/ci/checklist.md +48 -7
  30. package/src/workflows/testarch/ci/github-actions-template.yaml +22 -10
  31. package/src/workflows/testarch/ci/gitlab-ci-template.yaml +21 -12
  32. package/src/workflows/testarch/ci/harness-pipeline-template.yaml +159 -0
  33. package/src/workflows/testarch/ci/jenkins-pipeline-template.groovy +129 -0
  34. package/src/workflows/testarch/ci/steps-c/step-01-preflight.md +58 -17
  35. package/src/workflows/testarch/ci/steps-c/step-02-generate-pipeline.md +21 -10
  36. package/src/workflows/testarch/ci/steps-c/step-03-configure-quality-gates.md +5 -0
  37. package/src/workflows/testarch/ci/workflow.md +1 -1
  38. package/src/workflows/testarch/ci/workflow.yaml +6 -7
  39. package/src/workflows/testarch/framework/checklist.md +11 -10
  40. package/src/workflows/testarch/framework/steps-c/step-01-preflight.md +34 -2
  41. package/src/workflows/testarch/framework/steps-c/step-02-select-framework.md +20 -1
  42. package/src/workflows/testarch/framework/steps-c/step-03-scaffold-framework.md +56 -5
  43. package/src/workflows/testarch/framework/steps-c/step-04-docs-and-scripts.md +16 -4
  44. package/src/workflows/testarch/framework/workflow.md +1 -1
  45. package/src/workflows/testarch/framework/workflow.yaml +1 -4
  46. package/src/workflows/testarch/nfr-assess/nfr-report-template.md +3 -1
  47. package/src/workflows/testarch/nfr-assess/steps-c/step-01-load-context.md +12 -0
  48. package/src/workflows/testarch/nfr-assess/steps-c/step-05-generate-report.md +14 -3
  49. package/src/workflows/testarch/nfr-assess/workflow.md +1 -1
  50. package/src/workflows/testarch/nfr-assess/workflow.yaml +1 -4
  51. package/src/workflows/testarch/teach-me-testing/workflow.md +1 -1
  52. package/src/workflows/testarch/test-design/checklist.md +20 -9
  53. package/src/workflows/testarch/test-design/instructions.md +3 -3
  54. package/src/workflows/testarch/test-design/steps-c/step-02-load-context.md +34 -0
  55. package/src/workflows/testarch/test-design/steps-c/step-05-generate-output.md +29 -2
  56. package/src/workflows/testarch/test-design/test-design-architecture-template.md +16 -14
  57. package/src/workflows/testarch/test-design/test-design-handoff-template.md +70 -0
  58. package/src/workflows/testarch/test-design/test-design-qa-template.md +11 -9
  59. package/src/workflows/testarch/test-design/workflow.md +1 -1
  60. package/src/workflows/testarch/test-design/workflow.yaml +9 -5
  61. package/src/workflows/testarch/test-review/steps-c/step-01-load-context.md +34 -1
  62. package/src/workflows/testarch/test-review/steps-c/step-04-generate-report.md +14 -3
  63. package/src/workflows/testarch/test-review/test-review-template.md +4 -2
  64. package/src/workflows/testarch/test-review/workflow.md +1 -1
  65. package/src/workflows/testarch/test-review/workflow.yaml +2 -3
  66. package/src/workflows/testarch/trace/trace-template.md +7 -5
  67. package/src/workflows/testarch/trace/workflow.md +1 -1
  68. package/src/workflows/testarch/trace/workflow.yaml +1 -4
  69. package/test/test-installation-components.js +1 -1
  70. package/test/test-knowledge-base.js +10 -1
  71. package/tools/validate-tea-workflow-descriptions.js +108 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Validate TEA workflow description quote style for Gemini compatibility.
3
+ *
4
+ * Rules for TEA workflow YAML files under src/workflows/testarch/<workflow>/workflow.yaml:
5
+ * - `description:` must be a single-line YAML scalar on one line
6
+ * - the raw YAML scalar must be wrapped in single quotes
7
+ * - parsed description text must not contain single-quote characters
8
+ * (use double quotes for examples, e.g. "quote here")
9
+ *
10
+ * Usage: node tools/validate-tea-workflow-descriptions.js [project_root]
11
+ * Exit codes: 0 = success, 1 = validation failures
12
+ */
13
+
14
+ const fs = require('node:fs');
15
+ const path = require('node:path');
16
+ const { glob } = require('glob');
17
+ const yaml = require('yaml');
18
+
19
+ /**
20
+ * @param {string} filePath
21
+ * @param {string} projectRoot
22
+ * @returns {string[]}
23
+ */
24
+ function validateFile(filePath, projectRoot) {
25
+ const errors = [];
26
+ const relativePath = path.relative(projectRoot, filePath).replaceAll('\\', '/');
27
+ let content;
28
+ try {
29
+ content = fs.readFileSync(filePath, 'utf8');
30
+ } catch (error) {
31
+ return [`${relativePath}: Failed to read file: ${error.message}`];
32
+ }
33
+ /** @type {string | undefined} */
34
+ let parsedDescription;
35
+
36
+ try {
37
+ const parsed = yaml.parse(content);
38
+ if (!parsed || typeof parsed.description !== 'string') {
39
+ errors.push('YAML parsed but `description` is missing or not a string');
40
+ } else {
41
+ parsedDescription = parsed.description;
42
+ }
43
+ } catch (error) {
44
+ errors.push(`YAML parse error: ${error.message}`);
45
+ return [`${relativePath}: ${errors[0]}`];
46
+ }
47
+
48
+ const descriptionMatch = content.match(/^\s*description:\s*(?:'((?:''|[^'])*)'|"((?:\\"|[^"])*)")\s*(?:#.*)?$/m);
49
+ if (descriptionMatch) {
50
+ const singleQuotedInner = descriptionMatch[1];
51
+ const doubleQuotedInner = descriptionMatch[2];
52
+ const quote = singleQuotedInner === undefined ? '"' : "'";
53
+
54
+ if (quote !== "'") {
55
+ errors.push('`description:` value must be wrapped in single quotes');
56
+ }
57
+ } else {
58
+ if (/^\s*description:\s*/m.test(content)) {
59
+ errors.push('`description:` value must be wrapped in single quotes');
60
+ } else {
61
+ errors.push('Missing single-line `description:` field');
62
+ }
63
+ }
64
+
65
+ if (typeof parsedDescription === 'string' && parsedDescription.includes("'")) {
66
+ errors.push('Parsed `description` contains a single quote character; use double quotes for examples');
67
+ }
68
+
69
+ return errors.map((error) => `${relativePath}: ${error}`);
70
+ }
71
+
72
+ async function main(customProjectRoot) {
73
+ const projectRoot = customProjectRoot || path.join(__dirname, '..');
74
+ const files = await glob('src/workflows/testarch/*/workflow.yaml', {
75
+ cwd: projectRoot,
76
+ absolute: true,
77
+ });
78
+
79
+ if (files.length === 0) {
80
+ console.error('No TEA workflow YAML files found at src/workflows/testarch/*/workflow.yaml');
81
+ process.exit(1);
82
+ }
83
+
84
+ /** @type {string[]} */
85
+ const failures = [];
86
+
87
+ for (const filePath of files.sort()) {
88
+ failures.push(...validateFile(filePath, projectRoot));
89
+ }
90
+
91
+ if (failures.length > 0) {
92
+ console.error('TEA workflow description quote validation failed:\n');
93
+ for (const failure of failures) {
94
+ console.error(`- ${failure}`);
95
+ }
96
+ console.error('\nExpected format example:');
97
+ console.error(`description: 'Generate traceability, example "quote here"'`);
98
+ process.exit(1);
99
+ }
100
+
101
+ console.log(`Validated TEA workflow description quoting in ${files.length} file(s).`);
102
+ }
103
+
104
+ const customProjectRoot = process.argv[2];
105
+ main(customProjectRoot).catch((error) => {
106
+ console.error('Fatal error:', error);
107
+ process.exit(1);
108
+ });