fix(skills): use resolve_config.py instead of reading config.yaml directly

Skills were reading _bmad/bmm|core/config.yaml directly, bypassing the
TOML merge mechanism. Now they call resolve_config.py first, with a
fallback to read the merge logic and apply it manually.
This commit is contained in:
Jerome Revillard 2026-04-27 18:16:19 +02:00
parent 63fe2af4cd
commit c0647908e0
30 changed files with 42 additions and 30 deletions

View File

@ -46,7 +46,7 @@ Treat every entry in `{agent.persistent_facts}` as foundational context you carr
### Step 5: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -46,7 +46,7 @@ Treat every entry in `{agent.persistent_facts}` as foundational context you carr
### Step 5: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -40,7 +40,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -11,7 +11,7 @@
### Configuration Loading
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `project_knowledge`
- `user_name`

View File

@ -10,7 +10,7 @@
### Configuration Loading
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `project_knowledge`
- `user_name`

View File

@ -50,7 +50,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -59,7 +59,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -44,7 +44,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -44,7 +44,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -44,7 +44,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -46,7 +46,7 @@ Treat every entry in `{agent.persistent_facts}` as foundational context you carr
### Step 5: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -46,7 +46,7 @@ Treat every entry in `{agent.persistent_facts}` as foundational context you carr
### Step 5: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -73,7 +73,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -47,7 +47,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -73,7 +73,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -73,7 +73,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -46,7 +46,7 @@ Treat every entry in `{agent.persistent_facts}` as foundational context you carr
### Step 5: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -69,7 +69,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -50,7 +50,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -71,7 +71,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -50,7 +50,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -46,7 +46,7 @@ Treat every entry in `{agent.persistent_facts}` as foundational context you carr
### Step 5: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents

View File

@ -40,7 +40,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `implementation_artifacts`
- `planning_artifacts`
@ -63,6 +63,18 @@ Activation is complete. Begin the workflow below.
- **Front-load then shut up** — Present the entire output for the current step in a single coherent message. Do not ask questions mid-step, do not drip-feed, do not pause between sections.
- **Language** — Speak in `{communication_language}`. Write any file output in `{document_output_language}`.
<<<<<<< HEAD
=======
## INITIALIZATION
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `implementation_artifacts`
- `planning_artifacts`
- `communication_language`
- `document_output_language`
>>>>>>> 3846e184 (fix(skills): use resolve_config.py instead of reading config.yaml directly)
## FIRST STEP
Read fully and follow `./step-01-orientation.md` to begin.

View File

@ -40,7 +40,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `project_name`, `user_name`
- `communication_language`, `document_output_language`

View File

@ -47,7 +47,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `project_name`, `user_name`
- `communication_language`, `document_output_language`

View File

@ -40,7 +40,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `project_name`, `user_name`
- `communication_language`, `document_output_language`

View File

@ -56,7 +56,7 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
### Step 4: Load Config
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `project_name`, `user_name`
- `communication_language`, `document_output_language`

View File

@ -32,7 +32,7 @@ This uses **micro-file architecture** for disciplined execution:
### Configuration Loading
Load config from `{project-root}/_bmad/core/config.yaml` and resolve:
Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- `project_name`, `output_folder`, `user_name`
- `communication_language`, `document_output_language`, `user_skill_level`

View File

@ -23,7 +23,7 @@ When this skill completes, the user should:
## Data Sources
- **Catalog**: `{project-root}/_bmad/_config/bmad-help.csv` — assembled manifest of all installed module skills
- **Config**: `config.yaml` and `user-config.yaml` files in `{project-root}/_bmad/` and its subfolders — resolve `output-location` variables, provide `communication_language` and `project_knowledge`
- **Config**: Run `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` to get merged config. If that fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself — resolve `output-location` variables, provide `communication_language` and `project_knowledge`
- **Artifacts**: Files matching `outputs` patterns at resolved `output-location` paths reveal which steps are possibly completed; their content may also provide grounding context for recommendations
- **Project knowledge**: If `project_knowledge` resolves to an existing path, read it for grounding context. Never fabricate project-specific details.
- **Module docs**: Rows with `_meta` in the `skill` column carry a URL or path in `output-location` pointing to the module's documentation (e.g., llms.txt). Fetch and use these to answer general questions about that module.

View File

@ -22,7 +22,7 @@ Party mode accepts optional arguments when invoked:
1. **Parse arguments** — check for `--model` and `--solo` flags from the user's invocation.
2. Load config from `{project-root}/_bmad/core/config.yaml` and resolve:
2. Load config by running `python3 {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (requires Python 3.11+). If the command fails, read the merge logic in `{project-root}/_bmad/scripts/resolve_config.py` and apply it yourself to resolve the config variables. Resolve:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications