bmad-method-test-architecture-enterprise 1.0.0 → 1.0.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.
@@ -359,7 +359,7 @@ Production-ready fixtures and utilities that enhance TEA workflows.
359
359
 
360
360
  **Setup:**
361
361
 
362
- - CLI: `npm install -g @playwright/cli@latest` then `playwright-cli install --skills`
362
+ - CLI: `npm install -g @playwright/cli@latest` (global, one-time) then `playwright-cli install --skills` (from project root)
363
363
  - MCP: Configure MCP servers in your IDE (see [Configure Browser Automation](/docs/how-to/customization/configure-browser-automation.md))
364
364
 
365
365
  **Which workflows benefit:**
@@ -33,7 +33,7 @@ npm install -g @playwright/cli@latest # Install globally (Node.js 18+)
33
33
  playwright-cli install --skills # Register as an agent skill
34
34
  ```
35
35
 
36
- This is a one-time global setup. TEA documents it during installation but does not run it for you.
36
+ The global npm install is one-time. The skills install (`playwright-cli install --skills`) should be run from your project root — it registers skills in your project's `.claude/skills/` directory (Claude Code, GitHub Copilot, and other coding agents that support the skills convention). Agents without skills support can still use the CLI directly via `playwright-cli --help`.
37
37
 
38
38
  ### For MCP (`mcp` or `auto` mode)
39
39
 
package/eslint.config.mjs CHANGED
@@ -114,17 +114,6 @@ export default [
114
114
  },
115
115
  },
116
116
 
117
- // Module installer scripts use CommonJS for compatibility
118
- {
119
- files: ['**/_module-installer/**/*.js'],
120
- rules: {
121
- // Allow CommonJS patterns for installer scripts
122
- 'unicorn/prefer-module': 'off',
123
- 'n/no-missing-require': 'off',
124
- 'n/no-unpublished-require': 'off',
125
- },
126
- },
127
-
128
117
  // ESLint config file should not be checked for publish-related Node rules
129
118
  {
130
119
  files: ['eslint.config.mjs'],
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.0.0",
4
+ "version": "1.0.1",
5
5
  "description": "Master Test Architect for quality strategy, test automation, and release gates",
6
6
  "keywords": [
7
7
  "bmad",
@@ -73,11 +73,9 @@
73
73
  "dependencies": {
74
74
  "@clack/prompts": "^0.11.0",
75
75
  "boxen": "^5.1.2",
76
- "chalk": "^4.1.2",
77
76
  "cli-table3": "^0.6.5",
78
77
  "commander": "^14.0.0",
79
78
  "csv-parse": "^6.1.0",
80
- "fs-extra": "^11.3.0",
81
79
  "glob": "^11.0.3",
82
80
  "ignore": "^7.0.5",
83
81
  "js-yaml": "^4.1.0",
package/release_notes.md CHANGED
@@ -1,4 +1,13 @@
1
- ## 🚀 What's New in v1.0.0
1
+ ## 🚀 What's New in v1.0.1
2
+
3
+ ### 🐛 Bug Fixes
4
+ - fix: playwright cli docs alignment
5
+ - fix: CI failures
6
+
7
+ ### 📦 Other Changes
8
+ - Remove _module-installer pattern for declarative directory creation
9
+ - re-run checks
10
+ - Merge pull request #24 from bmad-code-org/fix/playwright-cli-docs-alignment
2
11
 
3
12
 
4
13
  ## 📦 Installation
@@ -8,4 +17,4 @@ npx bmad-method install
8
17
  # Select "Test Architect" from module menu
9
18
  ```
10
19
 
11
- **Full Changelog**: https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise/compare/v0.1.1-beta.5...v1.0.0
20
+ **Full Changelog**: https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise/compare/v1.0.0...v1.0.1
package/src/module.yaml CHANGED
@@ -94,3 +94,7 @@ trace_output:
94
94
  prompt: "Where should traceability reports be stored?"
95
95
  default: "traceability"
96
96
  result: "{test_artifacts}/{value}"
97
+
98
+ # Directories to create during installation (declarative, no code execution)
99
+ directories:
100
+ - "{test_artifacts}"
@@ -24,7 +24,7 @@ npm install -g @playwright/cli@latest # Install globally (Node.js 18+)
24
24
  playwright-cli install --skills # Register as an agent skill
25
25
  ```
26
26
 
27
- This is a one-time setup, like configuring MCP servers. TEA documents it during installation but does not run it for you.
27
+ The global npm install is one-time. Run `playwright-cli install --skills` from your project root to register skills in `.claude/skills/` (works with Claude Code, GitHub Copilot, and other coding agents). Agents without skills support can use the CLI directly via `playwright-cli --help`. TEA documents this during installation but does not run it for you.
28
28
 
29
29
  ## How It Works
30
30
 
@@ -11,9 +11,18 @@
11
11
  */
12
12
 
13
13
  const path = require('node:path');
14
- const fs = require('fs-extra');
14
+ const fs = require('node:fs/promises');
15
15
  const yaml = require('js-yaml');
16
16
 
17
+ async function pathExists(filePath) {
18
+ try {
19
+ await fs.access(filePath);
20
+ return true;
21
+ } catch {
22
+ return false;
23
+ }
24
+ }
25
+
17
26
  // ANSI colors
18
27
  const colors = {
19
28
  reset: '\u001B[0m',
@@ -80,7 +89,7 @@ async function runTests() {
80
89
  try {
81
90
  const teaAgentPath = path.join(projectRoot, 'src/agents/tea.agent.yaml');
82
91
 
83
- if (await fs.pathExists(teaAgentPath)) {
92
+ if (await pathExists(teaAgentPath)) {
84
93
  const teaAgent = yaml.load(await fs.readFile(teaAgentPath, 'utf8'));
85
94
 
86
95
  assert(teaAgent.agent !== undefined, 'tea.agent.yaml has agent root key');
@@ -113,7 +122,7 @@ async function runTests() {
113
122
  try {
114
123
  const teaIndexPath = path.join(projectRoot, 'src/testarch/tea-index.csv');
115
124
 
116
- if (await fs.pathExists(teaIndexPath)) {
125
+ if (await pathExists(teaIndexPath)) {
117
126
  const csvContent = await fs.readFile(teaIndexPath, 'utf8');
118
127
  const lines = csvContent.trim().split('\n');
119
128
 
@@ -138,7 +147,7 @@ async function runTests() {
138
147
 
139
148
  const teachMeWorkflowPath = path.join(projectRoot, 'src/workflows/testarch/teach-me-testing/workflow.md');
140
149
  try {
141
- if (await fs.pathExists(teachMeWorkflowPath)) {
150
+ if (await pathExists(teachMeWorkflowPath)) {
142
151
  const teachMeContent = await fs.readFile(teachMeWorkflowPath, 'utf8');
143
152
  assert(teachMeContent.length > 0, 'teach-me-testing/workflow.md exists');
144
153
  assert(!teachMeContent.includes('_bmad/bmm/'), 'teach-me-testing has no _bmad/bmm/ references');
@@ -154,7 +163,7 @@ async function runTests() {
154
163
  for (const workflowName of workflowNames) {
155
164
  const workflowYamlPath = path.join(projectRoot, `src/workflows/testarch/${workflowName}/workflow.yaml`);
156
165
 
157
- if (await fs.pathExists(workflowYamlPath)) {
166
+ if (await pathExists(workflowYamlPath)) {
158
167
  try {
159
168
  const workflowYaml = yaml.load(await fs.readFile(workflowYamlPath, 'utf8'));
160
169
  assert(workflowYaml !== undefined, `${workflowName}/workflow.yaml is valid YAML`);
@@ -334,7 +334,7 @@ async function generatePromptsBundle(downloadsDir) {
334
334
  if (!fs.existsSync(srcDir)) return;
335
335
 
336
336
  const zipPath = path.join(downloadsDir, 'tea-prompts.zip');
337
- await createZipArchive(srcDir, zipPath, ['docs', '.DS_Store', '__pycache__', 'node_modules', '_module-installer']);
337
+ await createZipArchive(srcDir, zipPath, ['docs', '.DS_Store', '__pycache__', 'node_modules']);
338
338
 
339
339
  const size = Math.floor(fs.statSync(zipPath).size / 1024);
340
340
  console.log(` tea-prompts.zip (${size}K)`);
@@ -1,92 +0,0 @@
1
- const fs = require('fs-extra');
2
- const path = require('node:path');
3
- const chalk = require('chalk');
4
-
5
- /**
6
- * CIS Module Installer
7
- * Standard module installer function that executes after IDE installations
8
- *
9
- * @param {Object} options - Installation options
10
- * @param {string} options.projectRoot - The root directory of the target project
11
- * @param {Object} options.config - Module configuration from module.yaml
12
- * @param {Array<string>} options.installedIDEs - Array of IDE codes that were installed
13
- * @param {Object} options.logger - Logger instance for output
14
- * @returns {Promise<boolean>} - Success status
15
- */
16
- async function install(options) {
17
- const { projectRoot, config, installedIDEs, logger } = options;
18
-
19
- try {
20
- logger.log(chalk.blue('🎨 Installing CIS Module...'));
21
-
22
- // Create output directory if configured
23
- if (config['output_folder']) {
24
- // Strip {project-root}/ prefix if present
25
- const outputConfig = config['output_folder'].replace('{project-root}/', '');
26
- const outputPath = path.join(projectRoot, outputConfig);
27
- if (!(await fs.pathExists(outputPath))) {
28
- logger.log(chalk.yellow(`Creating CIS output directory: ${outputConfig}`));
29
- await fs.ensureDir(outputPath);
30
-
31
- // Add any default CIS templates or assets here
32
- const templatesSource = path.join(__dirname, 'assets');
33
- const templateFiles = await fs.readdir(templatesSource).catch(() => []);
34
-
35
- for (const file of templateFiles) {
36
- const source = path.join(templatesSource, file);
37
- const dest = path.join(outputPath, file);
38
-
39
- if (!(await fs.pathExists(dest))) {
40
- await fs.copy(source, dest);
41
- logger.log(chalk.green(`✓ Added ${file}`));
42
- }
43
- }
44
- }
45
- }
46
-
47
- // Handle IDE-specific configurations if needed
48
- if (installedIDEs && installedIDEs.length > 0) {
49
- logger.log(chalk.cyan(`Configuring CIS for IDEs: ${installedIDEs.join(', ')}`));
50
-
51
- // Add any IDE-specific CIS configurations here
52
- for (const ide of installedIDEs) {
53
- await configureForIDE(ide, projectRoot, config, logger);
54
- }
55
- }
56
-
57
- logger.log(chalk.green('✓ CIS Module installation complete'));
58
- return true;
59
- } catch (error) {
60
- logger.error(chalk.red(`Error installing CIS module: ${error.message}`));
61
- return false;
62
- }
63
- }
64
-
65
- /**
66
- * Configure CIS module for specific IDE
67
- * @private
68
- */
69
- async function configureForIDE(ide) {
70
- // Add IDE-specific configurations here
71
- switch (ide) {
72
- case 'claude-code': {
73
- // Claude Code specific CIS configurations
74
- break;
75
- }
76
- case 'cursor': {
77
- // Cursor specific CIS configurations
78
- break;
79
- }
80
- case 'windsurf': {
81
- // Windsurf specific CIS configurations
82
- break;
83
- }
84
- // Add more IDEs as needed
85
- default: {
86
- // No specific configuration needed
87
- break;
88
- }
89
- }
90
- }
91
-
92
- module.exports = { install };