From 52f68890890a86c303c338f7646207fec99ea315 Mon Sep 17 00:00:00 2001 From: lihangmissu Date: Sat, 20 Sep 2025 07:08:31 +0800 Subject: [PATCH 1/6] fix: BMAD Brownfield Document Naming Inconsistency Bug (#627) --- bmad-core/checklists/po-master-checklist.md | 6 +++--- bmad-core/templates/brownfield-architecture-tmpl.yaml | 2 +- dist/agents/architect.txt | 2 +- dist/agents/bmad-master.txt | 8 ++++---- dist/agents/po.txt | 6 +++--- dist/teams/team-all.txt | 8 ++++---- dist/teams/team-fullstack.txt | 8 ++++---- dist/teams/team-ide-minimal.txt | 6 +++--- dist/teams/team-no-ui.txt | 8 ++++---- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/bmad-core/checklists/po-master-checklist.md b/bmad-core/checklists/po-master-checklist.md index d0c7aeca..277b7c05 100644 --- a/bmad-core/checklists/po-master-checklist.md +++ b/bmad-core/checklists/po-master-checklist.md @@ -15,7 +15,7 @@ First, determine the project type by checking: 2. Is this a BROWNFIELD project (enhancing existing system)? - Look for: References to existing codebase, enhancement/modification language - - Check for: brownfield-prd.md, brownfield-architecture.md, existing system analysis + - Check for: prd.md, architecture.md, existing system analysis 3. Does the project include UI/UX components? - Check for: frontend-architecture.md, UI/UX specifications, design files @@ -33,8 +33,8 @@ For GREENFIELD projects: For BROWNFIELD projects: -- brownfield-prd.md - The brownfield enhancement requirements -- brownfield-architecture.md - The enhancement architecture +- prd.md - The brownfield enhancement requirements +- architecture.md - The enhancement architecture - Existing project codebase access (CRITICAL - cannot proceed without this) - Current deployment configuration and infrastructure details - Database schemas, API documentation, monitoring setup diff --git a/bmad-core/templates/brownfield-architecture-tmpl.yaml b/bmad-core/templates/brownfield-architecture-tmpl.yaml index c24f89ab..3f634371 100644 --- a/bmad-core/templates/brownfield-architecture-tmpl.yaml +++ b/bmad-core/templates/brownfield-architecture-tmpl.yaml @@ -23,7 +23,7 @@ sections: 1. **Verify Complexity**: Confirm this enhancement requires architectural planning. For simple additions, recommend: "For simpler changes that don't require architectural planning, consider using the brownfield-create-epic or brownfield-create-story task with the Product Owner instead." 2. **REQUIRED INPUTS**: - - Completed brownfield-prd.md + - Completed prd.md - Existing project technical documentation (from docs folder or user-provided) - Access to existing project structure (IDE or uploaded files) diff --git a/dist/agents/architect.txt b/dist/agents/architect.txt index 992cbfbe..778054fa 100644 --- a/dist/agents/architect.txt +++ b/dist/agents/architect.txt @@ -1608,7 +1608,7 @@ sections: 1. **Verify Complexity**: Confirm this enhancement requires architectural planning. For simple additions, recommend: "For simpler changes that don't require architectural planning, consider using the brownfield-create-epic or brownfield-create-story task with the Product Owner instead." 2. **REQUIRED INPUTS**: - - Completed brownfield-prd.md + - Completed prd.md - Existing project technical documentation (from docs folder or user-provided) - Access to existing project structure (IDE or uploaded files) diff --git a/dist/agents/bmad-master.txt b/dist/agents/bmad-master.txt index a0ffd1f4..36c8b854 100644 --- a/dist/agents/bmad-master.txt +++ b/dist/agents/bmad-master.txt @@ -2817,7 +2817,7 @@ sections: 1. **Verify Complexity**: Confirm this enhancement requires architectural planning. For simple additions, recommend: "For simpler changes that don't require architectural planning, consider using the brownfield-create-epic or brownfield-create-story task with the Product Owner instead." 2. **REQUIRED INPUTS**: - - Completed brownfield-prd.md + - Completed prd.md - Existing project technical documentation (from docs folder or user-provided) - Access to existing project structure (IDE or uploaded files) @@ -7114,7 +7114,7 @@ First, determine the project type by checking: 2. Is this a BROWNFIELD project (enhancing existing system)? - Look for: References to existing codebase, enhancement/modification language - - Check for: brownfield-prd.md, brownfield-architecture.md, existing system analysis + - Check for: prd.md, architecture.md, existing system analysis 3. Does the project include UI/UX components? - Check for: frontend-architecture.md, UI/UX specifications, design files @@ -7132,8 +7132,8 @@ For GREENFIELD projects: For BROWNFIELD projects: -- brownfield-prd.md - The brownfield enhancement requirements -- brownfield-architecture.md - The enhancement architecture +- prd.md - The brownfield enhancement requirements +- architecture.md - The enhancement architecture - Existing project codebase access (CRITICAL - cannot proceed without this) - Current deployment configuration and infrastructure details - Database schemas, API documentation, monitoring setup diff --git a/dist/agents/po.txt b/dist/agents/po.txt index 2ab445d5..69371456 100644 --- a/dist/agents/po.txt +++ b/dist/agents/po.txt @@ -933,7 +933,7 @@ First, determine the project type by checking: 2. Is this a BROWNFIELD project (enhancing existing system)? - Look for: References to existing codebase, enhancement/modification language - - Check for: brownfield-prd.md, brownfield-architecture.md, existing system analysis + - Check for: prd.md, architecture.md, existing system analysis 3. Does the project include UI/UX components? - Check for: frontend-architecture.md, UI/UX specifications, design files @@ -951,8 +951,8 @@ For GREENFIELD projects: For BROWNFIELD projects: -- brownfield-prd.md - The brownfield enhancement requirements -- brownfield-architecture.md - The enhancement architecture +- prd.md - The brownfield enhancement requirements +- architecture.md - The enhancement architecture - Existing project codebase access (CRITICAL - cannot proceed without this) - Current deployment configuration and infrastructure details - Database schemas, API documentation, monitoring setup diff --git a/dist/teams/team-all.txt b/dist/teams/team-all.txt index 22cf3855..5ef07145 100644 --- a/dist/teams/team-all.txt +++ b/dist/teams/team-all.txt @@ -4528,7 +4528,7 @@ sections: 1. **Verify Complexity**: Confirm this enhancement requires architectural planning. For simple additions, recommend: "For simpler changes that don't require architectural planning, consider using the brownfield-create-epic or brownfield-create-story task with the Product Owner instead." 2. **REQUIRED INPUTS**: - - Completed brownfield-prd.md + - Completed prd.md - Existing project technical documentation (from docs folder or user-provided) - Access to existing project structure (IDE or uploaded files) @@ -8654,7 +8654,7 @@ First, determine the project type by checking: 2. Is this a BROWNFIELD project (enhancing existing system)? - Look for: References to existing codebase, enhancement/modification language - - Check for: brownfield-prd.md, brownfield-architecture.md, existing system analysis + - Check for: prd.md, architecture.md, existing system analysis 3. Does the project include UI/UX components? - Check for: frontend-architecture.md, UI/UX specifications, design files @@ -8672,8 +8672,8 @@ For GREENFIELD projects: For BROWNFIELD projects: -- brownfield-prd.md - The brownfield enhancement requirements -- brownfield-architecture.md - The enhancement architecture +- prd.md - The brownfield enhancement requirements +- architecture.md - The enhancement architecture - Existing project codebase access (CRITICAL - cannot proceed without this) - Current deployment configuration and infrastructure details - Database schemas, API documentation, monitoring setup diff --git a/dist/teams/team-fullstack.txt b/dist/teams/team-fullstack.txt index f85754de..dc7bbebb 100644 --- a/dist/teams/team-fullstack.txt +++ b/dist/teams/team-fullstack.txt @@ -6407,7 +6407,7 @@ sections: 1. **Verify Complexity**: Confirm this enhancement requires architectural planning. For simple additions, recommend: "For simpler changes that don't require architectural planning, consider using the brownfield-create-epic or brownfield-create-story task with the Product Owner instead." 2. **REQUIRED INPUTS**: - - Completed brownfield-prd.md + - Completed prd.md - Existing project technical documentation (from docs folder or user-provided) - Access to existing project structure (IDE or uploaded files) @@ -8648,7 +8648,7 @@ First, determine the project type by checking: 2. Is this a BROWNFIELD project (enhancing existing system)? - Look for: References to existing codebase, enhancement/modification language - - Check for: brownfield-prd.md, brownfield-architecture.md, existing system analysis + - Check for: prd.md, architecture.md, existing system analysis 3. Does the project include UI/UX components? - Check for: frontend-architecture.md, UI/UX specifications, design files @@ -8666,8 +8666,8 @@ For GREENFIELD projects: For BROWNFIELD projects: -- brownfield-prd.md - The brownfield enhancement requirements -- brownfield-architecture.md - The enhancement architecture +- prd.md - The brownfield enhancement requirements +- architecture.md - The enhancement architecture - Existing project codebase access (CRITICAL - cannot proceed without this) - Current deployment configuration and infrastructure details - Database schemas, API documentation, monitoring setup diff --git a/dist/teams/team-ide-minimal.txt b/dist/teams/team-ide-minimal.txt index bc7e5fb7..29a98b03 100644 --- a/dist/teams/team-ide-minimal.txt +++ b/dist/teams/team-ide-minimal.txt @@ -2588,7 +2588,7 @@ First, determine the project type by checking: 2. Is this a BROWNFIELD project (enhancing existing system)? - Look for: References to existing codebase, enhancement/modification language - - Check for: brownfield-prd.md, brownfield-architecture.md, existing system analysis + - Check for: prd.md, architecture.md, existing system analysis 3. Does the project include UI/UX components? - Check for: frontend-architecture.md, UI/UX specifications, design files @@ -2606,8 +2606,8 @@ For GREENFIELD projects: For BROWNFIELD projects: -- brownfield-prd.md - The brownfield enhancement requirements -- brownfield-architecture.md - The enhancement architecture +- prd.md - The brownfield enhancement requirements +- architecture.md - The enhancement architecture - Existing project codebase access (CRITICAL - cannot proceed without this) - Current deployment configuration and infrastructure details - Database schemas, API documentation, monitoring setup diff --git a/dist/teams/team-no-ui.txt b/dist/teams/team-no-ui.txt index 57d9a790..40c0a89c 100644 --- a/dist/teams/team-no-ui.txt +++ b/dist/teams/team-no-ui.txt @@ -5945,7 +5945,7 @@ sections: 1. **Verify Complexity**: Confirm this enhancement requires architectural planning. For simple additions, recommend: "For simpler changes that don't require architectural planning, consider using the brownfield-create-epic or brownfield-create-story task with the Product Owner instead." 2. **REQUIRED INPUTS**: - - Completed brownfield-prd.md + - Completed prd.md - Existing project technical documentation (from docs folder or user-provided) - Access to existing project structure (IDE or uploaded files) @@ -8186,7 +8186,7 @@ First, determine the project type by checking: 2. Is this a BROWNFIELD project (enhancing existing system)? - Look for: References to existing codebase, enhancement/modification language - - Check for: brownfield-prd.md, brownfield-architecture.md, existing system analysis + - Check for: prd.md, architecture.md, existing system analysis 3. Does the project include UI/UX components? - Check for: frontend-architecture.md, UI/UX specifications, design files @@ -8204,8 +8204,8 @@ For GREENFIELD projects: For BROWNFIELD projects: -- brownfield-prd.md - The brownfield enhancement requirements -- brownfield-architecture.md - The enhancement architecture +- prd.md - The brownfield enhancement requirements +- architecture.md - The enhancement architecture - Existing project codebase access (CRITICAL - cannot proceed without this) - Current deployment configuration and infrastructure details - Database schemas, API documentation, monitoring setup From 37e5fd50dd064185eefaedd217aa41a901d3382d Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Mon, 29 Sep 2025 17:09:18 -0500 Subject: [PATCH 2/6] version up --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a530e209..0dd228f1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "bmad-method", - "version": "4.43.0", + "version": "4.44.0", "description": "Breakthrough Method of Agile AI-driven Development", "keywords": [ "agile", From 458704f82bc388a8767c5629e60901729e1cc0b6 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Mon, 29 Sep 2025 17:24:46 -0500 Subject: [PATCH 3/6] workflow manual release update --- .github/workflows/manual-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/manual-release.yaml b/.github/workflows/manual-release.yaml index fc03a100..2d92a986 100644 --- a/.github/workflows/manual-release.yaml +++ b/.github/workflows/manual-release.yaml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - token: ${{ secrets.GITHUB_TOKEN }} + token: ${{ secrets.GH_PAT }} - name: Setup Node.js uses: actions/setup-node@v4 From 91c8e12777af798d33593ec0716a5011173df951 Mon Sep 17 00:00:00 2001 From: Yoav Gal <45267791+yoav0gal@users.noreply.github.com> Date: Thu, 2 Oct 2025 00:33:17 +0300 Subject: [PATCH 4/6] qwen cli - custom commands (#551) * qwen cli - custom commands * moved prompt to the inside of the command --------- Co-authored-by: Davor Racic Co-authored-by: Brian --- tools/installer/config/install.config.yaml | 14 +- tools/installer/lib/ide-setup.js | 152 ++++++++++----------- 2 files changed, 79 insertions(+), 87 deletions(-) diff --git a/tools/installer/config/install.config.yaml b/tools/installer/config/install.config.yaml index 45a103a2..3aa7464c 100644 --- a/tools/installer/config/install.config.yaml +++ b/tools/installer/config/install.config.yaml @@ -121,15 +121,15 @@ ide-configurations: qwen-code: name: Qwen Code - rule-dir: .qwen/bmad-method/ - format: single-file - command-suffix: .md + rule-dir: .qwen/commands/BMad/ + format: multi-file + command-suffix: .toml instructions: | # To use BMad agents with Qwen Code: - # 1. The installer creates a .qwen/bmad-method/ directory in your project. - # 2. It concatenates all agent files into a single QWEN.md file. - # 3. Simply mention the agent in your prompt (e.g., "As *dev, ..."). - # 4. The Qwen Code CLI will automatically have the context for that agent. + # 1. The installer creates a `BMad` folder in `.qwen/commands`. + # 2. This adds custom commands for each agent and task. + # 3. Type /BMad:agents: (e.g., "/BMad:agents:dev", "/BMad:agents:pm") or /BMad:tasks: (e.g., "/BMad:tasks:create-doc"). + # 4. The agent will adopt that persona for the conversation or perform the task. auggie-cli: name: Auggie CLI (Augment Code) diff --git a/tools/installer/lib/ide-setup.js b/tools/installer/lib/ide-setup.js index 8973c82f..a3882333 100644 --- a/tools/installer/lib/ide-setup.js +++ b/tools/installer/lib/ide-setup.js @@ -2056,94 +2056,86 @@ CRITICAL: You are to execute the BMad Task defined below. } async setupQwenCode(installDir, selectedAgent) { - const qwenDir = path.join(installDir, '.qwen'); - const bmadMethodDir = path.join(qwenDir, 'bmad-method'); - await fileManager.ensureDirectory(bmadMethodDir); + const ideConfig = await configLoader.getIdeConfiguration('qwen-code'); + const bmadCommandsDir = path.join(installDir, ideConfig['rule-dir']); - // Update logic for existing settings.json - const settingsPath = path.join(qwenDir, 'settings.json'); - if (await fileManager.pathExists(settingsPath)) { - try { - const settingsContent = await fileManager.readFile(settingsPath); - const settings = JSON.parse(settingsContent); - let updated = false; + const agentCommandsDir = path.join(bmadCommandsDir, 'agents'); + const taskCommandsDir = path.join(bmadCommandsDir, 'tasks'); + await fileManager.ensureDirectory(agentCommandsDir); + await fileManager.ensureDirectory(taskCommandsDir); - // Handle contextFileName property - if (settings.contextFileName && Array.isArray(settings.contextFileName)) { - const originalLength = settings.contextFileName.length; - settings.contextFileName = settings.contextFileName.filter( - (fileName) => !fileName.startsWith('agents/'), - ); - if (settings.contextFileName.length !== originalLength) { - updated = true; - } - } - - if (updated) { - await fileManager.writeFile(settingsPath, JSON.stringify(settings, null, 2)); - console.log(chalk.green('✓ Updated .qwen/settings.json - removed agent file references')); - } - } catch (error) { - console.warn(chalk.yellow('Could not update .qwen/settings.json'), error); - } - } - - // Remove old agents directory - const agentsDir = path.join(qwenDir, 'agents'); - if (await fileManager.pathExists(agentsDir)) { - await fileManager.removeDirectory(agentsDir); - console.log(chalk.green('✓ Removed old .qwen/agents directory')); - } - - // Get all available agents + // Process Agents const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir); - let concatenatedContent = ''; - for (const agentId of agents) { - // Find the source agent file const agentPath = await this.findAgentPath(agentId, installDir); - - if (agentPath) { - const agentContent = await fileManager.readFile(agentPath); - - // Create properly formatted agent rule content (similar to gemini) - let agentRuleContent = `# ${agentId.toUpperCase()} Agent Rule\n\n`; - agentRuleContent += `This rule is triggered when the user types \`*${agentId}\` and activates the ${await this.getAgentTitle( - agentId, - installDir, - )} agent persona.\n\n`; - agentRuleContent += '## Agent Activation\n\n'; - agentRuleContent += - 'CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n'; - agentRuleContent += '```yaml\n'; - // Extract just the YAML content from the agent file - const yamlContent = extractYamlFromAgent(agentContent); - if (yamlContent) { - agentRuleContent += yamlContent; - } else { - // If no YAML found, include the whole content minus the header - agentRuleContent += agentContent.replace(/^#.*$/m, '').trim(); - } - agentRuleContent += '\n```\n\n'; - agentRuleContent += '## File Reference\n\n'; - const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/'); - agentRuleContent += `The complete agent definition is available in [${relativePath}](${relativePath}).\n\n`; - agentRuleContent += '## Usage\n\n'; - agentRuleContent += `When the user types \`*${agentId}\`, activate this ${await this.getAgentTitle( - agentId, - installDir, - )} persona and follow all instructions defined in the YAML configuration above.\n`; - - // Add to concatenated content with separator - concatenatedContent += agentRuleContent + '\n\n---\n\n'; - console.log(chalk.green(`✓ Added context for *${agentId}`)); + if (!agentPath) { + console.log(chalk.yellow(`✗ Agent file not found for ${agentId}, skipping.`)); + continue; } + + const agentTitle = await this.getAgentTitle(agentId, installDir); + const commandPath = path.join(agentCommandsDir, `${agentId}.toml`); + + // Get relative path from installDir to agent file for @{file} reference + const relativeAgentPath = path.relative(installDir, agentPath).replaceAll('\\', '/'); + + // Read the agent content + const agentContent = await fileManager.readFile(agentPath); + + const tomlContent = `description = " Activates the ${agentTitle} agent from the BMad Method." +prompt = """ +CRITICAL: You are now the BMad '${agentTitle}' agent. Adopt its persona, follow its instructions, and use its capabilities. + +READ THIS BEFORE ANSWERING AS THE PERSONA! + +${agentContent} +"""`; + + await fileManager.writeFile(commandPath, tomlContent); + console.log(chalk.green(`✓ Created agent command: /bmad:agents:${agentId}`)); } - // Write the concatenated content to QWEN.md - const qwenMdPath = path.join(bmadMethodDir, 'QWEN.md'); - await fileManager.writeFile(qwenMdPath, concatenatedContent); - console.log(chalk.green(`\n✓ Created QWEN.md in ${bmadMethodDir}`)); + // Process Tasks + const tasks = await this.getAllTaskIds(installDir); + for (const taskId of tasks) { + const taskPath = await this.findTaskPath(taskId, installDir); + if (!taskPath) { + console.log(chalk.yellow(`✗ Task file not found for ${taskId}, skipping.`)); + continue; + } + + const taskTitle = taskId + .split('-') + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(' '); + const commandPath = path.join(taskCommandsDir, `${taskId}.toml`); + + // Get relative path from installDir to task file for @{file} reference + const relativeTaskPath = path.relative(installDir, taskPath).replaceAll('\\', '/'); + + // Read the task content + const taskContent = await fileManager.readFile(taskPath); + + const tomlContent = `description = " Executes the BMad Task: ${taskTitle}" +prompt = """ +CRITICAL: You are to execute the BMad Task defined below. + +READ THIS BEFORE EXECUTING THE TASK AS THE INSTRUCTIONS SPECIFIED! + +${taskContent} +"""`; + + await fileManager.writeFile(commandPath, tomlContent); + console.log(chalk.green(`✓ Created task command: /bmad:tasks:${taskId}`)); + } + + console.log( + chalk.green(` +✓ Created Qwen Code extension in ${bmadCommandsDir}`), + ); + console.log( + chalk.dim('You can now use commands like /bmad:agents:dev or /bmad:tasks:create-doc.'), + ); return true; } From 415026b0ebfc59a3a891352a8b7985db54db0f9c Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Sat, 4 Oct 2025 08:36:13 -0500 Subject: [PATCH 5/6] v4 readme updated with v6 info --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/README.md b/README.md index d51694b9..e8b38ab4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,36 @@ # BMAD-METHOD™: Universal AI Agent Framework +> ## 🚨 **IMPORTANT VERSION ANNOUNCEMENT** 🚨 +> +> ### Current Stable: v4.x | Next Major: v6 Alpha +> +> - **v4.x** - The current stable release version available via npm +> - **v5** - Skipped (replaced by v6) +> - **[v6-alpha](https://github.com/bmad-code-org/BMAD-METHOD/tree/v6-alpha)** - **NOW AVAILABLE FOR EARLY TESTING!** +> +> ### 🧪 Try v6 Alpha (Early Adopters Only) +> +> The next major version of BMAD-METHOD is now available for early experimentation and testing. This is a complete rewrite with significant architectural changes. +> +> **⚠️ WARNING: v6-alpha is for early adopters who are comfortable with:** +> +> - Potential breaking changes +> - Daily updates and instability +> - Incomplete features +> - Experimental functionality +> +> **📅 Timeline:** Official beta version will be merged mid-October 2025 +> +> **To try v6-alpha:** +> +> ```bash +> git clone https://github.com/bmad-code-org/BMAD-METHOD.git +> cd BMAD-METHOD +> git checkout v6-alpha +> ``` +> +> --- + [![Version](https://img.shields.io/npm/v/bmad-method?color=blue&label=version)](https://www.npmjs.com/package/bmad-method) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Node.js Version](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen)](https://nodejs.org) From 3b6a507ab8fde47459a5f981dbfdc4677107e4a6 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Thu, 9 Oct 2025 18:51:59 -0500 Subject: [PATCH 6/6] require issue tempalte --- .github/ISSUE_TEMPLATE/config.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..4c0f247e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Discord Community Support + url: https://discord.gg/gk8jAdXWmj + about: Please join our Discord server for general questions and community discussion before opening an issue.