Skip to content

feat(workflows): adopt customize.toml pattern for workflow skills#23

Merged
bmadcode merged 4 commits intomainfrom
workflow-customization
Apr 21, 2026
Merged

feat(workflows): adopt customize.toml pattern for workflow skills#23
bmadcode merged 4 commits intomainfrom
workflow-customization

Conversation

@bmadcode
Copy link
Copy Markdown
Contributor

@bmadcode bmadcode commented Apr 21, 2026

Summary

  • Merge each redirect-only SKILL.md with its workflow.md into a single integrated SKILL.md across all 31 GDS workflow skills (15 steps-c//steps-v//steps-e/ external-step skills + 16 inline-step skills).
  • Add the BMM customization surface to each skill: Conventions block, On Activation section (resolve customization → prepend steps → persistent_facts → config load from _bmad/gds/config.yaml → greet → append steps).
  • Wire workflow.on_complete into each workflow's terminal step — external workflows get ## On Complete appended to the final step-NN-*.md; inline workflows get an <action> inside the final <step> block.
  • Add a customize.toml per workflow under the [workflow] namespace so overrides from _bmad/custom/*.toml and *.user.toml merge per the standard BMad structural rules.

Mirrors the customization surface shipped for the GDS agent skills in #22.

Branching-terminal handling

  • gds-sprint-status has three terminal branches (main flow step 5, data-mode step 20, validate-mode step 30) — on_complete wired at each so the hook fires regardless of which mode was invoked.
  • gds-document-project dispatches into instructions.md + deep-dive-instructions.md + full-scan-instructions.mdon_complete wired at all three terminal points.

Test plan

  • Install the module into a project and confirm each workflow activates through the new On Activation sequence (config loads from _bmad/gds/config.yaml, greet fires).
  • Add a non-empty on_complete in _bmad/custom/gds-create-gdd.user.toml and confirm it fires at the end of steps-c/step-14-complete.md.
  • Repeat the on_complete check for one inline workflow (e.g. gds-retrospective at step 12).
  • For gds-sprint-status, confirm on_complete fires in all three modes (main, data, validate).
  • Add a team-level override (persistent_facts = ["..."]) and confirm it appends rather than replacing the default.
  • Run an end-to-end GDD creation via gds-agent-game-designer to confirm the agent→workflow handoff still works after the skill restructure.

Summary by CodeRabbit

  • New Features

    • Added customization configuration support for all major workflows, enabling users to define custom activation steps and completion behaviors.
    • Introduced persistent facts mechanism allowing workflows to load static context from project files automatically.
    • Added extensible completion hooks (workflow.on_complete) for custom post-workflow actions.
  • Refactor

    • Restructured workflow definitions to consolidate specifications into skill files for improved maintainability and user clarity.

Merge redirect-only SKILL.md with workflow.md content into a single
SKILL.md per workflow skill, add Conventions + On Activation (resolve
customization, prepend/append steps, persistent_facts, config load,
greet), and wire workflow.on_complete into each workflow's terminal
step. External-style workflows (steps-c/, steps-v/, steps-e/, etc.)
get the on_complete resolver appended to the final step file; inline
workflows get an <action> inside the final <step> block.

gds-sprint-status has three terminal branches (main flow step 5, data
mode step 20, validate mode step 30) — on_complete wired at each.
gds-document-project dispatches into instructions.md +
deep-dive-instructions.md + full-scan-instructions.md; on_complete
wired at all three terminal points so the hook fires regardless of
execution path.

Applies the same customization surface shipped for the GDS agent
skills in #22.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 21, 2026

Warning

Rate limit exceeded

@bmadcode has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 40 minutes and 1 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 40 minutes and 1 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8015eb28-a3a2-4d7f-8184-3d94631ed89e

📥 Commits

Reviewing files that changed from the base of the PR and between 73b1f6a and 4964191.

📒 Files selected for processing (6)
  • .claude-plugin/marketplace.json
  • CHANGELOG.md
  • package.json
  • src/workflows/gametest/gds-e2e-scaffold/SKILL.md
  • src/workflows/gds-document-project/SKILL.md
  • src/workflows/gds-document-project/workflows/deep-dive-instructions.md

Walkthrough

Workflow definitions across 40+ skill directories have been restructured: content previously distributed across workflow.md files is consolidated into SKILL.md files with explicit activation sequences. New customize.toml files provide a standardized configuration surface (activation_steps_prepend/append, persistent_facts, on_complete). Terminal step files now include "On Complete" sections that resolve and conditionally execute custom workflow.on_complete instructions via resolve_customization.py.

Changes

Cohort / File(s) Summary
Pre-Production Workflows: Brainstorm Game
src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md, customize.toml, steps/step-04-complete.md, workflow.md
Consolidated workflow definition into SKILL.md with activation sequence and config loading. Added customize.toml with workflow customization surface. Appended on-complete hook to terminal step. Deleted workflow.md.
Pre-Production Workflows: Create Game Brief
src/workflows/1-preproduction/gds-create-game-brief/SKILL.md, customize.toml, steps/step-08-complete.md, workflow.md
Expanded SKILL.md with full workflow spec and config resolution. Added customize.toml. Updated step-08 with on-complete action. Removed workflow.md.
Pre-Production Workflows: Domain Research
src/workflows/1-preproduction/research/gds-domain-research/SKILL.md, customize.toml, domain-steps/step-06-research-synthesis.md, workflow.md
Inlined domain research workflow into SKILL.md with activation and topic discovery flow. Added customize.toml. Extended step-06 with on-complete resolver. Deleted workflow.md.
Design Workflows: GDD
src/workflows/2-design/gds-create-gdd/SKILL.md, customize.toml, steps-c/step-14-complete.md, workflow.md
Migrated workflow definition to SKILL.md with explicit activation and step-file architecture. Added customize.toml. Appended on-complete to step-14. Removed workflow.md.
Design Workflows: Narrative
src/workflows/2-design/gds-create-narrative/SKILL.md, customize.toml, steps/step-11-complete.md, workflow.md
Consolidated narrative workflow into SKILL.md with activation sequence. Added customize.toml. Extended step-11 with on-complete hook. Deleted workflow.md.
Design Workflows: PRD (Create)
src/workflows/2-design/gds-create-prd/SKILL.md, customize.toml, steps-c/step-12-complete.md, workflow.md
Inlined PRD creation workflow into SKILL.md with config resolution and initialization. Added customize.toml. Updated step-12 with on-complete resolver. Removed workflow.md.
Design Workflows: UX Design
src/workflows/2-design/gds-create-ux-design/SKILL.md, customize.toml, steps/step-14-complete.md, workflow.md
Expanded SKILL.md with micro-file architecture and activation sequence. Added customize.toml. Appended on-complete to step-14. Deleted workflow.md.
Design Workflows: Edit GDD
src/workflows/2-design/gds-edit-gdd/SKILL.md, customize.toml, steps-e/step-e-04-complete.md, workflow.md
Migrated edit workflow definition to SKILL.md with explicit control flow. Added customize.toml. Extended step-e-04 with on-complete action. Removed workflow.md.
Design Workflows: Edit PRD
src/workflows/2-design/gds-edit-prd/SKILL.md, customize.toml, steps-e/step-e-04-complete.md, workflow.md
Consolidated PRD edit workflow into SKILL.md with activation and discovery sequence. Added customize.toml. Updated step-e-04 with on-complete resolver. Deleted workflow.md.
Design Workflows: Validate (GDD & PRD)
src/workflows/2-design/gds-validate-gdd/SKILL.md, customize.toml, steps-v/step-v-13-report-complete.md, workflow.md, src/workflows/2-design/gds-validate-prd/SKILL.md, customize.toml, steps-v/step-v-13-report-complete.md, workflow.md
Inlined validation workflows into SKILL.md files with step-file architecture. Added customize.toml to both. Extended step-v-13 files with on-complete hooks. Removed both workflow.md files.
Technical Workflows: Implementation Readiness
src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md, customize.toml, steps/step-06-final-assessment.md, workflow.md
Expanded SKILL.md with activation sequence and architecture rules. Added customize.toml. Appended on-complete to step-06. Deleted workflow.md.
Technical Workflows: Epics & Stories
src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md, customize.toml, steps/step-04-final-validation.md, workflow.md
Consolidated workflow into SKILL.md with full specification. Added customize.toml. Updated step-04 with on-complete resolver. Removed workflow.md.
Technical Workflows: Game Architecture
src/workflows/3-technical/gds-game-architecture/SKILL.md, customize.toml, steps/step-09-complete.md, workflow.md
Migrated architecture workflow to SKILL.md with micro-file execution rules. Added customize.toml. Extended step-09 with on-complete action. Deleted workflow.md.
Technical Workflows: Project Context
src/workflows/3-technical/gds-generate-project-context/SKILL.md, customize.toml, steps/step-03-complete.md, workflow.md
Inlined project context workflow into SKILL.md with activation and discovery flow. Added customize.toml. Appended on-complete to step-03. Removed workflow.md.
Production Workflows: Code Review
src/workflows/4-production/gds-code-review/SKILL.md, customize.toml, steps/step-04-present.md, workflow.md
Expanded SKILL.md with explicit activation control flow and config loading. Added customize.toml. Updated step-04 with on-complete resolver. Deleted workflow.md.
Production Workflows: Correct Course
src/workflows/4-production/gds-correct-course/SKILL.md, customize.toml, workflow.md
Substantially expanded SKILL.md with multi-step change management workflow (310 lines added). Added customize.toml. Removed extensive workflow.md specification (275 lines deleted).
Production Workflows: Create Story
src/workflows/4-production/gds-create-story/SKILL.md, customize.toml, workflow.md
Inlined full story creation workflow (439 lines) into SKILL.md with multi-step artifact analysis and generation flow. Added customize.toml. Removed workflow.md (400 lines deleted).
Production Workflows: Dev Story
src/workflows/4-production/gds-dev-story/SKILL.md, customize.toml, workflow.md
Migrated dev story workflow to SKILL.md with 10-step execution sequence (500 lines added). Added customize.toml. Deleted extensive workflow.md specification (461 lines removed).
Production Workflows: Retrospective
src/workflows/4-production/gds-retrospective/SKILL.md, customize.toml, workflow.md
Massively expanded SKILL.md with epic analysis, retrospective facilitation, and completion flow (1520 lines added). Added customize.toml. Removed comprehensive workflow.md (1483 lines deleted).
Production Workflows: Sprint Planning
src/workflows/4-production/gds-sprint-planning/SKILL.md, customize.toml, workflow.md
Consolidated sprint planning workflow into SKILL.md with epic discovery and status structure generation (299 lines added). Added customize.toml. Removed workflow.md (263 lines deleted).
Production Workflows: Sprint Status
src/workflows/4-production/gds-sprint-status/SKILL.md, customize.toml, workflow.md
Inlined sprint status workflow into SKILL.md with parsing, validation, and risk detection (301 lines added). Added customize.toml. Deleted workflow.md (262 lines removed).
Gametest Workflows: E2E Scaffold
src/workflows/gametest/gds-e2e-scaffold/SKILL.md, customize.toml, workflow.md
Expanded SKILL.md with engine detection and infrastructure generation (299 lines added). Added customize.toml. Removed workflow.md (270 lines deleted).
Gametest Workflows: Performance Test
src/workflows/gametest/gds-performance-test/SKILL.md, customize.toml, workflow.md
Inlined performance testing workflow into SKILL.md with target definition and methodology generation (375 lines added). Added customize.toml. Deleted workflow.md (344 lines removed).
Gametest Workflows: Playtest Plan
src/workflows/gametest/gds-playtest-plan/SKILL.md, customize.toml, workflow.md
Migrated playtest workflow to SKILL.md with objectives and session structure (388 lines added). Added customize.toml. Removed workflow.md (353 lines deleted).
Gametest Workflows: Test Automate
src/workflows/gametest/gds-test-automate/SKILL.md, customize.toml, workflow.md
Consolidated automation workflow into SKILL.md with unit/integration/E2E/smoke test generation (384 lines added). Added customize.toml. Deleted workflow.md (353 lines removed).
Gametest Workflows: Test Design
src/workflows/gametest/gds-test-design/SKILL.md, customize.toml, workflow.md
Expanded SKILL.md with test category definition and prioritization flow (423 lines added). Added customize.toml. Removed workflow.md (388 lines deleted).
Gametest Workflows: Test Framework
src/workflows/gametest/gds-test-framework/SKILL.md, customize.toml, workflow.md
Inlined framework scaffolding workflow into SKILL.md with engine-specific initialization (437 lines added). Added customize.toml. Deleted workflow.md (404 lines removed).
Gametest Workflows: Test Review
src/workflows/gametest/gds-test-review/SKILL.md, customize.toml, workflow.md
Migrated test review workflow to SKILL.md with metrics and assessment flow (358 lines added). Added customize.toml. Removed workflow.md (324 lines deleted).
Other Workflows: Document Project
src/workflows/gds-document-project/SKILL.md, customize.toml, instructions.md, workflows/deep-dive-instructions.md, workflows/full-scan-instructions.md, workflow.md
Expanded SKILL.md with activation sequence and language requirement. Added customize.toml. Updated terminal instruction files with on-complete resolvers. Deleted workflow.md.
Other Workflows: Quick Dev
src/workflows/gds-quick-flow/gds-quick-dev/SKILL.md, customize.toml, step-05-present.md, workflow.md
Consolidated quick dev workflow into SKILL.md with scope standards and sequencing rules (118 lines added). Added customize.toml. Updated step-05 with on-complete hook. Removed workflow.md (76 lines deleted).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • refactor: replace bmad-init with direct config loading #11: Shifts workflow activation to load configuration directly from {project-root}/_bmad/gds/config.yaml and adds related activation/config resolution steps that parallel the changes in this PR.
  • Sync/upstream bmad method v6.3.0 #21: Upstream v6.3.0 sync containing the same pattern of consolidating workflow definitions into SKILL.md files, adding customize.toml configurations across all workflows, and introducing standardized on-complete resolution hooks.

Poem

🐰 Workflows dance through SKILL and TOML files so bright,
Old workflow.md files fade into the night,
Customize surfaces bloom, on_complete hooks take flight,
Forty workflows reorganized—structure feels just right!

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch workflow-customization

@augmentcode
Copy link
Copy Markdown

augmentcode Bot commented Apr 21, 2026

This pull request is abnormally large and would use a significant amount of tokens to review. If you still wish to review it, comment "augment review" and we will review it.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Note

Due to the large number of review comments, Critical severity comments were prioritized as inline comments.

🟠 Major comments (21)
src/workflows/gametest/gds-playtest-plan/SKILL.md-76-78 (1)

76-78: ⚠️ Potential issue | 🟠 Major

Replace undefined placeholders and remove duplicated initialization block.

{installed_path} and {module_config} are not defined in the Conventions section, and this block also repeats config-load/greet behavior already handled in On Activation. This can cause unresolved path variables and double-greeting behavior.

Suggested fix
-**Supporting Components**:
-- Validation: `{installed_path}/checklist.md`
-- Template: `{installed_path}/playtest-template.md`
+**Supporting Components**:
+- Validation: `{skill-root}/checklist.md`
+- Template: `{skill-root}/playtest-template.md`
 - Knowledge Base: `knowledge/playtesting.md`

@@
-Load and resolve configuration from `{module_config}`:
-
-```yaml
-output_folder: {from config}
-user_name: {from config}
-communication_language: {from config}
-document_output_language: {from config}
-game_dev_experience: {from config}
-date: {system-generated}
-```
-
 Resolve workflow variables:
 ```yaml
 playtest_type: "internal"   # internal | external | focused
 session_duration: 60        # minutes
 participant_count: 5

-Greet the user by name (user_name) and confirm the playtest type and scope before proceeding.
+Confirm the playtest type and scope before proceeding.

</details>


Also applies to: 85-94, 103-103

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @src/workflows/gametest/gds-playtest-plan/SKILL.md around lines 76 - 78, The
Validation/Template/Knowledge Base lines use undefined placeholders
{installed_path} and {module_config} and duplicate initialization
(config-load/greet) already performed in the On Activation section; remove or
replace those placeholders with resolved workflow variables (e.g., use values
derived from config such as output_folder, user_name, communication_language,
document_output_language, game_dev_experience and system-generated date) and
delete the duplicated greeting/config-load steps so only On Activation performs
initialization; update the Validation/Template/Knowledge Base entries to
reference concrete paths or the resolved variable names (e.g., playtest_type,
session_duration, participant_count) and apply the same replacements in the
other affected blocks (lines noted in the review).


</details>

</blockquote></details>
<details>
<summary>src/workflows/gametest/gds-test-review/SKILL.md-75-76 (1)</summary><blockquote>

`75-76`: _⚠️ Potential issue_ | _🟠 Major_

**Unify placeholder variables to match the established conventions in this file.**

Lines 75–76 use `{installed_path}`, and line 83 uses `{module_config}`, but the conventions block (lines 14–15) establishes `{skill-root}` and `{project-root}` as the documented placeholders for this workflow. Replace the non-standard placeholders with the file's stated conventions to ensure paths resolve correctly at runtime.

<details>
<summary>Suggested patch</summary>

```diff
-**Supporting Components**:
-- Validation: `{installed_path}/checklist.md`
-- Template: `{installed_path}/test-review-template.md`
+**Supporting Components**:
+- Validation: `{skill-root}/checklist.md`
+- Template: `{skill-root}/test-review-template.md`
@@
-Load and resolve configuration from `{module_config}`:
+Load and resolve configuration from `{project-root}/_bmad/gds/config.yaml`:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/gametest/gds-test-review/SKILL.md` around lines 75 - 76,
Replace the non-standard placeholders used in the Validation and Template lines:
change `{installed_path}` to the established `{skill-root}` placeholder (update
both occurrences in the "Validation: `{installed_path}/checklist.md`" and
"Template: `{installed_path}/test-review-template.md`" lines) and replace
`{module_config}` with the documented `{project-root}` placeholder where it
appears; ensure the literal strings "Validation:" and "Template:" remain
unchanged so the workflow uses the file's declared
`{skill-root}`/`{project-root}` conventions.
src/workflows/gametest/gds-test-design/SKILL.md-76-77 (1)

76-77: ⚠️ Potential issue | 🟠 Major

Add missing placeholder definitions to resolve inconsistency with similar workflows.

{installed_path} and {module_config} are used in this skill but are not defined in the Conventions or Paths sections. Other similar workflows (e.g., gds-test-automate, gds-performance-test) explicitly define installed_path = {skill_root}. Define these placeholders to match the pattern used elsewhere and prevent runtime resolution failures.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/gametest/gds-test-design/SKILL.md` around lines 76 - 77, Add
definitions for the placeholders used in the SKILL.md Conventions/Paths section:
declare installed_path = {skill_root} (to match other workflows like
gds-test-automate and gds-performance-test) and add a module_config placeholder
(e.g., module_config = {installed_path}/module_config or module_config =
{skill_root}/module_config.yaml) so that `{installed_path}` and
`{module_config}` used in the document (e.g., in Validation:
`{installed_path}/checklist.md` and Template:
`{installed_path}/test-design-template.md`) are explicitly defined and will
resolve at runtime.
src/workflows/4-production/gds-correct-course/SKILL.md-276-292 (1)

276-292: ⚠️ Potential issue | 🟠 Major

Move handoff confirmation outside the Major-only branch.

Confirm handoff completion and Document handoff currently run only for Major scope. Minor and Moderate routes should also confirm/log the handoff before Step 6 summarizes completion.

🐛 Proposed fix
 <check if="Major scope">
   <action>Route to: Product Manager / Solution Architect</action>
   <action>Deliverables: Complete Sprint Change Proposal + escalation notice</action>
-
-<action>Confirm handoff completion and next steps with user</action>
-<action>Document handoff in workflow execution log</action>
 </check>
+
+<action>Confirm handoff completion and next steps with user</action>
+<action>Document handoff in workflow execution log</action>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-correct-course/SKILL.md` around lines 276 -
292, Move the two actions "<action>Confirm handoff completion and next steps
with user</action>" and "<action>Document handoff in workflow execution
log</action>" out of the Major-only <check if="Major scope"> branch so they run
for all scopes; update the SKILL.md workflow by placing those two action nodes
after the three <check if="..."> blocks (or by adding identical action nodes to
the Minor and Moderate branches) so that Minor, Moderate and Major routes all
perform handoff confirmation and logging before Step 6.
src/workflows/4-production/gds-correct-course/SKILL.md-120-133 (1)

120-133: ⚠️ Potential issue | 🟠 Major

Align the halt condition with the documented required documents.

This step requires Architecture and UI/UX, but the discovery rules say only GDD and Epics are essential. As written, the workflow can halt even when optional artifacts are simply unavailable.

🐛 Proposed fix
-  <action>Verify access to required project documents:</action>
+  <action>Verify access to required project documents:</action>
     - GDD (Game Design Document)
     - Current Epics and Stories
+  <action>Check optional project documents if available:</action>
     - Architecture documentation
     - UI/UX specifications
     - Narrative Design documentation
@@
-<action if="core documents are unavailable">HALT: "Need access to project documents (GDD, Epics, Architecture, UI/UX) to assess change impact. Please ensure these documents are accessible."</action>
+<action if="GDD or Epics are unavailable">HALT: "Need access to core project documents (GDD and Epics) to assess change impact. Please ensure these documents are accessible."</action>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-correct-course/SKILL.md` around lines 120 -
133, Update the HALT action with condition action if="core documents are
unavailable" so it only enforces availability of the essential discovery
artifacts (GDD and Current Epics and Stories) rather than optional ones; change
the halt message to request the GDD and Epics specifically and convert
Architecture documentation, UI/UX specifications, and Narrative Design
documentation into non-blocking warnings or guidance rather than blockers.
Locate the "Verify access to required project documents:" block and the two HALT
actions (action if="change trigger is unclear" and action if="core documents are
unavailable") and ensure only the core-docs HALT references GDD and Current
Epics and Stories, while optional artifacts are noted as recommended but not
required.
src/workflows/gametest/gds-test-framework/SKILL.md-82-91 (1)

82-91: ⚠️ Potential issue | 🟠 Major

Undefined variable and confusing config reference.

Line 82 references {module_config}, which is not defined in the Conventions section (lines 11-16) or anywhere else in the workflow. Additionally, the config has already been loaded in the "On Activation" section (line 42) from {project-root}/_bmad/gds/config.yaml.

This section appears to be a reference/reminder of available config variables rather than an execution instruction, but the phrasing "Load and resolve configuration from {module_config}" reads as a directive and could lead implementers to load the config twice.

📝 Proposed fix to clarify this as reference documentation
-Load and resolve configuration from `{module_config}`:
+**Configuration variables available** (loaded during On Activation Step 4):

 ```yaml
 output_folder: {from config}
 user_name: {from config}
 communication_language: {from config}
 document_output_language: {from config}
 game_dev_experience: {from config}
 date: {system-generated}

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @src/workflows/gametest/gds-test-framework/SKILL.md around lines 82 - 91,
Replace the misleading directive "Load and resolve configuration from
{module_config}" with a clear note that the YAML block is a reference/example
of resolved config values (not an instruction to reload); mention that actual
config is loaded in the "On Activation" section from
{project-root}/_bmad/gds/config.yaml and retain the YAML keys as illustrative
placeholders (output_folder, user_name, communication_language,
document_output_language, game_dev_experience, date) so implementers
understand these are sample values rather than a second load operation.


</details>

</blockquote></details>
<details>
<summary>src/workflows/gds-quick-flow/gds-quick-dev/SKILL.md-108-117 (1)</summary><blockquote>

`108-117`: _⚠️ Potential issue_ | _🟠 Major_

**Replace the unresolved `{main_config}` placeholder.**

`{main_config}` is not defined in this skill, while activation already standardizes on `{project-root}/_bmad/gds/config.yaml`. As written, the initialization reload can stall or depend on an undeclared variable.



<details>
<summary>Proposed fix</summary>

```diff
-Load and read full config from `{main_config}` and resolve:
+Load and read full config from `{project-root}/_bmad/gds/config.yaml` and resolve:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/gds-quick-flow/gds-quick-dev/SKILL.md` around lines 108 - 117,
The placeholder `{main_config}` is undefined and should be replaced with the
standardized config path used by activation; update the doc/init step to
reference `{project-root}/_bmad/gds/config.yaml` (or introduce and document a
`main_config` variable that points to that path) so `project_name`,
`planning_artifacts`, `implementation_artifacts`, etc. are loaded from a
concrete source; ensure `sprint_status` and `project_context` resolution logic
continues to derive from the resolved `implementation_artifacts` and that
existence checks (for project-context.md and CLAUDE.md/memory files) remain
intact.
src/workflows/gametest/gds-test-automate/SKILL.md-82-103 (1)

82-103: ⚠️ Potential issue | 🟠 Major

Use the defined {skill-root} placeholder.

Line 84 uses {skill_root}, but the conventions define {skill-root}. This leaves {installed_path} unresolved or wrong, which breaks the checklist and knowledge fragment paths.

Proposed fix
- `installed_path` = `{skill_root}`
+ `installed_path` = `{skill-root}`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/gametest/gds-test-automate/SKILL.md` around lines 82 - 103, The
placeholder name is inconsistent: SKILL.md defines `{skill-root}` but the Paths
section uses `{skill_root}` for `installed_path`, causing unresolved paths;
update the `installed_path` and all uses (`installed_path`, `validation`,
`test_dir`, `source_dir`, `default_output_file`, and the Knowledge Fragments
entries for Unity/Unreal/Godot/E2E) to reference the correct `{skill-root}`
placeholder (replace `{skill_root}` with `{skill-root}`) so `installed_path`
resolves and checklist/knowledge fragment paths are correct.
src/workflows/4-production/gds-create-story/SKILL.md-99-253 (1)

99-253: ⚠️ Potential issue | 🟠 Major

Fix Step 1 routing before story discovery can proceed.

This step jumps to step 2a, but no step 2a exists, and the backlog discovery block is duplicated after the guarded branch. Also, the done epic check only runs for the first story in an epic, so later stories can still be created under a completed epic. Route to step 2, remove the duplicate discovery block, and validate epic status before the first-story-only update.

Proposed direction
-    <action>GOTO step 2a</action>
+    <action>GOTO step 2</action>
@@
-      <action>GOTO step 2a</action>
+      <action>GOTO step 2</action>
@@
-      <action>GOTO step 2a</action>
+      <action>GOTO step 2</action>
@@
-    <action>GOTO step 2a</action>
+    <action>GOTO step 2</action>

Then remove the second, unguarded backlog-discovery block at Lines 198-253 and perform the epic status validation once before the first-story-only status transition.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-create-story/SKILL.md` around lines 99 - 253,
Step 1 currently GOTO's "step 2a" (which doesn't exist), duplicates the
backlog-discovery block, and only checks epic 'done' status when it's the first
story; change all GOTO targets in Step 1 from "step 2a" to "step 2", remove the
duplicated unguarded backlog-discovery block (the second copy that begins at the
later Load FULL file actions), and move the epic status validation (the check
for epic status 'done' and invalid statuses) to run immediately after you
extract epic_num/story_num/story_key from the discovered backlog story (before
performing the "first story in epic" first-story-only transition); update any
references to {{story_key}}, {{epic_num}}, and {{sprint_status}} accordingly so
the validation always runs for every discovered story.
src/workflows/2-design/gds-create-prd/SKILL.md-93-107 (1)

93-107: ⚠️ Potential issue | 🟠 Major

Resolve startup placeholders before routing.

{main_config} and {nextStep} are not defined in this skill. Use the explicit config and first-step paths so activation can deterministically enter the PRD workflow.

Proposed fix
-Load and read full config from {main_config} and resolve:
+Load and read full config from `{project-root}/_bmad/gds/config.yaml` and resolve:
@@
-Read fully and follow: `{nextStep}` (steps-c/step-01-init.md)
+Read fully and follow: `steps-c/step-01-init.md`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-create-prd/SKILL.md` around lines 93 - 107, The
startup placeholders {main_config} and {nextStep} must be resolved to explicit
values so activation deterministically enters Create Mode: update the
"Configuration Loading" and "Route to Create Workflow" sections in SKILL.md to
reference the concrete config file/key (e.g., the actual main config object name
or filename used by the system) and the explicit first-step path for Create Mode
(the exact step-c/step-01-init.md path), replacing {main_config} and {nextStep};
ensure the text still documents loading
project_name/output_folder/planning_artifacts/user_name and enforcing
communication_language as the agent's speaking language.
src/workflows/gametest/gds-test-automate/SKILL.md-202-228 (1)

202-228: ⚠️ Potential issue | 🟠 Major

Remove the backslashes from the Godot _sut calls in the GDScript template.

The template will generate \_sut literally in GDScript code, which is invalid syntax. Markdown code blocks do not require escaping underscores.

Required fix
-    var result = \_sut.{method_name}({parameters})
+    var result = _sut.{method_name}({parameters})
@@
-        var result = \_sut.{method_name}(tc.input)
+        var result = _sut.{method_name}(tc.input)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/gametest/gds-test-automate/SKILL.md` around lines 202 - 228,
The GDScript template incorrectly escapes the `_sut` identifier (producing
`\_sut`) in test functions; update the template in SKILL.md so all occurrences
use the plain `_sut` identifier (e.g., in before_each/after_each initialization,
the `test_{method_name}_when_{condition}_should_{expectation}` act line `var
result = _sut.{method_name}({parameters})` and the parameterized test loop `var
result = _sut.{method_name}(tc.input)`), removing the backslashes so generated
GDScript is valid.
src/workflows/4-production/gds-code-review/SKILL.md-90-90 (1)

90-90: ⚠️ Potential issue | 🟠 Major

{main_config} placeholder is undefined and violates documented conventions.

Line 90 references {main_config}, but this placeholder is not defined anywhere in the codebase (not in Conventions, not in customize.toml, not in any config files). The file documents only three valid placeholders in its Conventions section: {skill-root}, {project-root}, and {skill-name}. This same undefined placeholder appears consistently across 11 workflow files, indicating a systematic architectural issue.

Line 43 of this same file explicitly uses {project-root}/_bmad/gds/config.yaml, which is the documented pattern. Use the same explicit path on Line 90 for consistency and reliability.

Suggested fix
-Load and read full config from `{main_config}` and resolve:
+Load and read full config from `{project-root}/_bmad/gds/config.yaml` and resolve:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-code-review/SKILL.md` at line 90, The text
uses an undefined placeholder `{main_config}` (violating the Conventions which
only define `{skill-root}`, `{project-root}`, and `{skill-name}`); replace
occurrences of `{main_config}` in SKILL.md (and the other affected workflow
files) with the explicit documented path `{project-root}/_bmad/gds/config.yaml`
so the config reference matches the pattern already used (e.g., the existing
`{project-root}/_bmad/gds/config.yaml` usage) and restore consistency across all
11 workflow files.
src/workflows/3-technical/gds-generate-project-context/SKILL.md-74-75 (1)

74-75: ⚠️ Potential issue | 🟠 Major

Placeholder mismatch likely breaks path resolution.

Conventions define {skill-root} (hyphen), but this section uses {skill_root} (underscore). That can leave installed_path unresolved and break template loading.

Proposed fix
-- `installed_path` = `{skill_root}`
+- `installed_path` = `{skill-root}`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/3-technical/gds-generate-project-context/SKILL.md` around lines
74 - 75, The installed_path/template_path placeholders use the wrong placeholder
name `{skill_root}`; update the placeholder to match the convention
`{skill-root}` so `installed_path` and `template_path` resolve correctly (look
for the lines that set `installed_path` and `template_path` in SKILL.md and
replace `{skill_root}` with `{skill-root}` so the template loader receives the
correct path).
src/workflows/2-design/gds-validate-prd/SKILL.md-95-95 (1)

95-95: ⚠️ Potential issue | 🟠 Major

Use explicit config path for consistency with Step 4 activation flow.

{main_config} is undefined throughout the codebase. Step 4 (On Activation) uses the explicit path {project-root}/_bmad/gds/config.yaml, but the INITIALIZATION SEQUENCE section uses an undefined placeholder instead. This pattern appears across all workflow files and creates ambiguity in runtime initialization.

Suggested fix
-Load and read full config from {main_config} and resolve:
+Load and read full config from `{project-root}/_bmad/gds/config.yaml` and resolve:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-validate-prd/SKILL.md` at line 95, Replace the
undefined placeholder `{main_config}` with the explicit config path
`{project-root}/_bmad/gds/config.yaml` wherever it appears (e.g., in the
INITIALIZATION SEQUENCE section of SKILL.md and other workflow files) so the
initialization flow matches Step 4 (On Activation); update the text "Load and
read full config from {main_config} and resolve:" to "Load and read full config
from {project-root}/_bmad/gds/config.yaml and resolve:" and ensure any
references or examples use that exact path for consistency.
src/workflows/2-design/gds-create-narrative/SKILL.md-98-98 (1)

98-98: ⚠️ Potential issue | 🟠 Major

Add {main_config} to the Conventions section or replace with the documented config path.

{main_config} is referenced in the INITIALIZATION SEQUENCE but is not defined in the Conventions section. However, Step 4 of "On Activation" explicitly documents the config source as {project-root}/_bmad/gds/config.yaml. Either:

  1. Add {main_config} to Conventions (lines 14–19) with value {project-root}/_bmad/gds/config.yaml, or
  2. Replace {main_config} with the explicit path to match Step 4.

This inconsistency exists across multiple SKILL.md files and creates ambiguity about variable injection at runtime.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-create-narrative/SKILL.md` at line 98, The
document references the placeholder {main_config} in the INITIALIZATION SEQUENCE
but that token is not defined in the Conventions section; either add a
Conventions entry defining {main_config} = {project-root}/_bmad/gds/config.yaml
or replace every occurrence of {main_config} in this SKILL.md (and the other
SKILL.md files with the same issue) with the explicit path
{project-root}/_bmad/gds/config.yaml so the config source is unambiguous (update
references in the "Conventions" section and the "INITIALIZATION SEQUENCE"/"On
Activation" steps accordingly).
src/workflows/2-design/gds-validate-gdd/SKILL.md-92-99 (1)

92-99: ⚠️ Potential issue | 🟠 Major

Duplicate configuration loading with undefined variable.

Similar to the domain-research workflow, configuration is loaded twice:

  1. Activation Step 4 (lines 43-48) loads minimal config from {project-root}/_bmad/gds/config.yaml
  2. Initialization Sequence (lines 95-99) attempts to load from undefined {main_config}

The {main_config} variable is never defined. Additionally, the extensive field list in the initialization sequence (project_name, output_folder, planning_artifacts, document_output_language, game_dev_experience) is not loaded during the activation phase.

🔧 Proposed fix to consolidate config loading

Expand the activation Step 4 (around line 43) to include all required fields:

 ### Step 4: Load Config
 
 Load config from `{project-root}/_bmad/gds/config.yaml` and resolve:
 
+- `project_name`
+- `output_folder`
+- `planning_artifacts`
 - `user_name`
 - `communication_language`
+- `document_output_language`
+- `game_dev_experience`
+- `date` as the system-generated current datetime

Then update the INITIALIZATION SEQUENCE section to remove the duplicate loading:

 ## INITIALIZATION SEQUENCE
 
 ### 1. Configuration Loading
 
-Load and read full config from {main_config} and resolve:
-
-- `project_name`, `output_folder`, `planning_artifacts`, `user_name`
-- `communication_language`, `document_output_language`, `game_dev_experience`
-- `date` as system-generated current datetime
+Configuration was loaded during activation (see "On Activation" section above).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-validate-gdd/SKILL.md` around lines 92 - 99,
Consolidate and fix duplicate config loading by expanding Activation Step 4 to
load the full config (ensure you read {project-root}/_bmad/gds/config.yaml into
the same config object) and populate the fields project_name, output_folder,
planning_artifacts, user_name, communication_language, document_output_language,
game_dev_experience, and date (set to current datetime); then remove the
redundant Initialization Sequence load that references the undefined
{main_config} variable and update any subsequent references to use the
activation-step config instead (refer to "Activation Step 4" and "INITIALIZATION
SEQUENCE" in SKILL.md and remove any use of {main_config}).
src/workflows/1-preproduction/research/gds-domain-research/SKILL.md-64-69 (1)

64-69: ⚠️ Potential issue | 🟠 Major

Duplicate configuration loading with undefined variable.

Configuration is loaded twice with inconsistencies:

  1. Activation Step 4 (lines 42-48) loads config from {project-root}/_bmad/gds/config.yaml
  2. CONFIGURATION section (lines 64-69) loads config from undefined {module_config}

This creates confusion about which config source to use. The {module_config} variable is never defined, and the extended field list in the CONFIGURATION section (project_name, output_folder, document_output_language, game_dev_experience) is not loaded during activation.

🔧 Proposed fix to consolidate config loading

Option 1: Extend the activation Step 4 to include all needed fields:

In the "Step 4: Load Config" section around line 42, expand to:

 ### Step 4: Load Config
 
 Load config from `{project-root}/_bmad/gds/config.yaml` and resolve:
 
+- `project_name`
+- `output_folder`
 - `user_name`
 - `communication_language`
+- `document_output_language`
+- `game_dev_experience`
 - `planning_artifacts`
 - `date` as the system-generated current datetime

Then remove the duplicate CONFIGURATION section (lines 64-69).

Option 2: Keep both sections but fix the reference and clarify intent:

 ## CONFIGURATION
 
-Load config from `{module_config}` and resolve:
+Extended config (already loaded during activation, listed here for reference):
 - `project_name`, `output_folder`, `planning_artifacts`, `user_name`
 - `communication_language`, `document_output_language`, `game_dev_experience`
 - `date` as a system-generated value
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/1-preproduction/research/gds-domain-research/SKILL.md` around
lines 64 - 69, The CONFIGURATION section references an undefined
`{module_config}` and duplicates config loading; consolidate by extending the
existing "Step 4: Load Config" (the activation step that reads
`{project-root}/_bmad/gds/config.yaml`) to load all required fields
(`project_name`, `output_folder`, `planning_artifacts`, `user_name`,
`communication_language`, `document_output_language`, `game_dev_experience`, and
`date` as a system-generated value) and then remove the duplicate CONFIGURATION
block; alternatively, if you must keep a separate CONFIGURATION section, replace
`{module_config}` with the same `{project-root}/_bmad/gds/config.yaml` reference
and ensure that the extra fields are actually loaded in the activation code that
performs the config read.
src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md-88-99 (1)

88-99: ⚠️ Potential issue | 🟠 Major

{module_config} undefined after workflow.md removal — duplicates On Activation config loading.

This section references {module_config} which is not bound anywhere in the new SKILL.md. On Activation Step 4 already loads {project-root}/_bmad/gds/config.yaml. Either drop this legacy block or rewrite it to read the remaining fields (project_name, output_folder, planning_artifacts, document_output_language) from the same concrete path.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md` around
lines 88 - 99, The SKILL.md references an undefined token `{module_config}`;
update this initialization section to either remove the legacy `{module_config}`
mention or change it to explicitly read the remaining fields (`project_name`,
`output_folder`, `planning_artifacts`, `document_output_language`) from the
concrete config used on activation (`{project-root}/_bmad/gds/config.yaml`) so
there is no duplicate/undefined loading; locate the block in SKILL.md that lists
"Module Configuration Loading" and replace `{module_config}` with the concrete
config path or remove the block if redundant with Activation Step 4.
src/workflows/1-preproduction/gds-create-game-brief/SKILL.md-93-106 (1)

93-106: ⚠️ Potential issue | 🟠 Major

{main_config} undefined — duplicates On Activation config load.

The On Activation block (Steps 4–5) already resolves user_name and communication_language from {project-root}/_bmad/gds/config.yaml. This legacy INITIALIZATION SEQUENCE then asks the agent to reload from {main_config}, which has no binding in this SKILL.md after workflow.md was removed. Either fold the extra fields (project_name, output_folder, document_output_language, game_dev_experience, date) into Step 4's resolution list against the known config path, or strip this block. Same pattern recurs across the other restructured SKILL.md files in this PR.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/1-preproduction/gds-create-game-brief/SKILL.md` around lines 93
- 106, The INITIALIZATION SEQUENCE references an undefined `{main_config}` and
redundantly reloads values already resolved in the On Activation block (Steps
4–5) from `{project-root}/_bmad/gds/config.yaml`; remove the `{main_config}`
reload or fold its required fields (`project_name`, `output_folder`,
`document_output_language`, `game_dev_experience`, `date`) into the existing On
Activation resolution so Step 4–5 explicitly resolves those keys from
`{project-root}/_bmad/gds/config.yaml`, and update the instruction that invokes
`steps/step-01-init.md` to rely on those resolved values (and delete any
leftover `{main_config}` references).
src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md-92-103 (1)

92-103: ⚠️ Potential issue | 🟠 Major

INITIALIZATION SEQUENCE duplicates the On Activation config/greet flow.

On Activation Step 4/5 already resolves user_name/communication_language from {project-root}/_bmad/gds/config.yaml and greets. This section then asks the agent to reload from {module_config} (undefined in this file after workflow.md deletion) and re-assert language. Consider reducing section 1 to just the fields this workflow additionally needs (project_name, output_folder, planning_artifacts, document_output_language), sourced from the already-known config path, or remove it entirely if On Activation is sufficient. Same concern applies to the sibling SKILL.md files.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md` around lines
92 - 103, The INITIALIZATION SEQUENCE duplicates the On Activation config/greet
flow by reloading undefined `{module_config}` and re-asserting language; update
SKILL.md to stop re-reading the full config and instead only require the
additional fields this workflow needs—`project_name`, `output_folder`,
`planning_artifacts`, `document_output_language`—and source them from the
already-resolved `{project-root}/_bmad/gds/config.yaml` (as handled in On
Activation Step 4/5), or remove the entire Initialization section if On
Activation already supplies everything; ensure references to `{module_config}`
are deleted and similar changes are applied to sibling SKILL.md files.
src/workflows/2-design/gds-edit-gdd/SKILL.md-92-110 (1)

92-110: ⚠️ Potential issue | 🟠 Major

Legacy INITIALIZATION SEQUENCE duplicates/contradicts the new On Activation block.

On Activation (Step 4) already loads config from the hardcoded {project-root}/_bmad/gds/config.yaml and greets the user. The remaining INITIALIZATION SEQUENCE then tells the agent to reload config from {main_config} (undefined in this document) and re-assert speaking language. Two issues:

  1. {main_config} is never defined here — previously it was resolved from workflow.md context that has been deleted. The agent has no binding for it.
  2. {editWorkflow} on Line 110 is also undefined; only the parenthetical hint steps-e/step-e-01-discovery.md is authoritative.
  3. Re-loading config after On Activation is at best redundant, at worst conflicting if paths differ.

Consider collapsing INITIALIZATION SEQUENCE into a minimal "Route to Edit Workflow" section that directly reads steps-e/step-e-01-discovery.md, since config is already resolved.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-edit-gdd/SKILL.md` around lines 92 - 110, The
INITIALIZATION SEQUENCE duplicates and references undefined tokens
({main_config}, {editWorkflow}) and conflicts with the On Activation config
load; remove the redundant config reload and undefined tokens, collapse the
section into a minimal "Route to Edit Workflow" that prompts for the GDD path
(default: `{planning_artifacts}/gdd.md`) and then directly loads and follows the
authoritative file `steps-e/step-e-01-discovery.md`; keep a single explicit note
that the agent must always speak in the configured `{communication_language}`
(but do not attempt to re-resolve or reload config here since On Activation
already handles it).
🟡 Minor comments (17)
src/workflows/4-production/gds-correct-course/SKILL.md-312-312 (1)

312-312: ⚠️ Potential issue | 🟡 Minor

Give on_complete the same fallback path as activation.

Activation defines a manual fallback when resolve_customization.py fails, but the terminal hook depends only on the script. If the resolver is unavailable, a configured workflow.on_complete can be skipped.

🛠️ Proposed fix
-<action>Run: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.</action>
+<action>Resolve `workflow.on_complete` from the already-resolved `{workflow}` block. If unavailable, run: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete`; if the script fails, apply the same base → team → user fallback merge from activation. If the resolved value is non-empty, follow it as the final terminal instruction before exiting.</action>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-correct-course/SKILL.md` at line 312, Ensure
the terminal hook uses the same manual fallback as activation: when invoking
resolve_customization.py for workflow.on_complete (the terminal hook) handle
both script failure and empty result by falling back to the configured manual
on_complete path (the same manual fallback used by on_activate), i.e., update
the logic that runs resolve_customization.py (resolve_customization.py --skill
{skill-root} --key workflow.on_complete) so that any exception, non-zero exit,
or empty output causes the code to use the configured workflow.on_complete
manual value (or the activation manual fallback) as the final terminal
instruction before exiting.
src/workflows/gametest/gds-performance-test/SKILL.md-69-69 (1)

69-69: ⚠️ Potential issue | 🟡 Minor

Fix the path reference to the knowledge base file.

The file knowledge/performance-testing.md exists in the repository at src/agents/gds-agent-game-dev/gametest/knowledge/performance-testing.md, but the reference path in SKILL.md appears incorrect. Update the reference to the correct relative path from the workflow file's location, or clarify the intended resolution mechanism if this uses a different path resolution strategy.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/gametest/gds-performance-test/SKILL.md` at line 69, SKILL.md
currently points to a nonexistent knowledge/performance-testing.md; update the
reference in src/workflows/gametest/gds-performance-test/SKILL.md to the correct
relative path
../../../agents/gds-agent-game-dev/gametest/knowledge/performance-testing.md so
it resolves to the actual file
src/agents/gds-agent-game-dev/gametest/knowledge/performance-testing.md,
replacing the existing `knowledge/performance-testing.md` token.
src/workflows/gametest/gds-performance-test/SKILL.md-83-83 (1)

83-83: ⚠️ Potential issue | 🟡 Minor

Use {skill-root} (hyphenated) to match the documented convention at line 17.

The Conventions section explicitly defines the placeholder as {skill-root} (with hyphen), and the resolution script at line 25 uses --skill {skill-root} with the hyphenated form. Line 83 should align with this:

-- `installed_path` = `{skill_root}`
+- `installed_path` = `{skill-root}`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/gametest/gds-performance-test/SKILL.md` at line 83, The
placeholder on the installed_path line uses `{skill_root}` (underscore) but must
follow the documented convention `{skill-root}` (hyphen) used elsewhere (see
Conventions and the resolution script `--skill {skill-root}`); update the
`installed_path` entry to use `{skill-root}` so the placeholder is consistent
with `installed_path`, the Conventions section, and the resolution script.
src/workflows/4-production/gds-create-story/SKILL.md-424-441 (1)

424-441: ⚠️ Potential issue | 🟡 Minor

Use the defined output-file variable in the completion message.

{{story_file}} is not defined in this skill; the story path is tracked as {default_output_file}. The current report can show unresolved placeholders to the user.

Proposed fix
-    - File: {{story_file}}
+    - File: {default_output_file}
@@
-    1. Review the comprehensive story in {{story_file}}
+    1. Review the comprehensive story in {default_output_file}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-create-story/SKILL.md` around lines 424 - 441,
The completion message uses an undefined placeholder {{story_file}}; replace it
with the skill's tracked output variable {default_output_file} in the output
block so the final report shows the correct story path (update the output text
that currently lists "- File: {{story_file}}" to use {default_output_file});
keep the rest of the message and the existing Run command (python3 ...
resolve_customization.py) unchanged so customization logic still runs.
src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Minor wording fix: “self-contained” (hyphenated).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md` at line 66,
Update the wording in the SKILL.md "Micro-file Design" line: replace the phrase
"self contained" with the hyphenated form "self-contained" so the sentence reads
"**Micro-file Design**: Each step is a self-contained instruction file that is a
part of an overall workflow that must be followed exactly"; edit the exact line
containing "Micro-file Design" to apply this change.
src/workflows/2-design/gds-create-narrative/SKILL.md-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Minor wording fix: use “self-contained”.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-create-narrative/SKILL.md` at line 66, Update the
wording in the "Micro-file Design" bullet where it currently reads "self
contained" to use the hyphenated form "self-contained"; locate the bullet
starting with "**Micro-file Design**" in SKILL.md and replace "self contained
instruction file" with "self-contained instruction file" so the phrasing is
correct.
src/workflows/2-design/gds-validate-prd/SKILL.md-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Fix compound adjective typo.

Use “self-contained” here for consistency/readability.

Suggested wording fix
-- **Micro-file Design**: Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly
+- **Micro-file Design**: Each step is a self-contained instruction file that is a part of an overall workflow that must be followed exactly
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-validate-prd/SKILL.md` at line 66, Update the
phrase in the "Micro-file Design" bullet in SKILL.md to use the correct compound
adjective "self-contained" instead of "self contained"; edit the line that
currently reads "**Micro-file Design**: Each step is a self contained
instruction file..." so it reads "**Micro-file Design**: Each step is a
self-contained instruction file..." to improve consistency and readability.
src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md-100-100 (1)

100-100: ⚠️ Potential issue | 🟡 Minor

Define or replace {main_config} with the explicit config path.

Line 100 references {main_config}, which is not defined in the Conventions section like other template variables ({skill-root}, {project-root}, {skill-name}). Step 4 already documents the actual config location as {project-root}/_bmad/gds/config.yaml. Line 100 should either define {main_config} in Conventions or use the explicit path for clarity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/1-preproduction/gds-brainstorm-game/SKILL.md` at line 100,
Replace the ambiguous placeholder {main_config} in SKILL.md with an explicit
path or add it to the Conventions; specifically, update the "Load and read full
config from {main_config} and resolve:" phrase to either "Load and read full
config from {project-root}/_bmad/gds/config.yaml and resolve:" or add a new
Conventions entry defining {main_config} = {project-root}/_bmad/gds/config.yaml
so references (the line using {main_config} and the existing Step 4) are
consistent and unambiguous.
src/workflows/2-design/gds-validate-gdd/SKILL.md-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Grammar: missing hyphen in compound adjective.

The phrase "self contained" should be hyphenated as "self-contained" when used as a compound adjective modifying "instruction file".

📝 Proposed fix
-- **Micro-file Design**: Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly
+- **Micro-file Design**: Each step is a self-contained instruction file that is a part of an overall workflow that must be followed exactly
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-validate-gdd/SKILL.md` at line 66, Update the
phrasing in SKILL.md where the sentence reads "Each step is a self contained
instruction file..." to use the compound adjective form "self-contained" (i.e.,
change "self contained" to "self-contained") so the line becomes "**Micro-file
Design**: Each step is a self-contained instruction file that is a part of an
overall workflow that must be followed exactly".
src/workflows/4-production/gds-sprint-planning/SKILL.md-209-214 (1)

209-214: ⚠️ Potential issue | 🟡 Minor

Inconsistent placeholder syntax in YAML template.

The placeholders in lines 209-214 use spaces around the variable names ({ date }, { project_name }), while the rest of the file consistently uses no spaces ({project-root}, {user_name}, {communication_language}). This inconsistency may confuse the agent during template substitution.

🔧 Proposed fix for consistent placeholder syntax
-generated: { date }
-last_updated: { date }
-project: { project_name }
-project_key: { project_key }
-tracking_system: { tracking_system }
-story_location: { story_location }
+generated: {date}
+last_updated: {date}
+project: {project_name}
+project_key: {project_key}
+tracking_system: {tracking_system}
+story_location: {story_location}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-sprint-planning/SKILL.md` around lines 209 -
214, The YAML placeholders in the block using generated: { date }, last_updated:
{ date }, project: { project_name }, project_key: { project_key },
tracking_system: { tracking_system }, story_location: { story_location } are
inconsistent with the rest of the file which uses no spaces inside braces (e.g.
{project-root}, {user_name}); update these placeholders to remove the spaces so
they read {date}, {project_name}, {project_key}, {tracking_system}, and
{story_location} to match the existing placeholder syntax and ensure consistent
template substitution.
src/workflows/4-production/gds-sprint-status/customize.toml-37-38 (1)

37-38: ⚠️ Potential issue | 🟡 Minor

Incomplete terminal step documentation.

The comment states on_complete executes at "Step 30 (Validate sprint-status file)", but per the PR objectives, gds-sprint-status has three terminal branches where on_complete fires: main flow step 5, data-mode step 20, and validate-mode step 30. The comment should clarify that the hook executes at all terminal points, not just Step 30.

📝 Proposed fix for complete documentation
-# Scalar: executed when the workflow reaches Step 30 (Validate sprint-status file),
-# after the final outputs are produced. Override wins.
+# Scalar: executed when the workflow reaches any terminal step
+# (Step 5 main flow, Step 20 data-mode, or Step 30 validate-mode),
+# after the final outputs are produced. Override wins.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-sprint-status/customize.toml` around lines 37
- 38, The comment for on_complete in the gds-sprint-status customize.toml is
misleading because it only mentions Step 30 (Validate sprint-status file) even
though the on_complete hook fires at all terminal branches (main flow step 5,
data-mode step 20, and validate-mode step 30); update the documentation comment
to state that on_complete runs whenever the workflow reaches any terminal step
(specifically list main flow step 5, data-mode step 20, and validate-mode step
30) and note that override wins. Ensure the comment references the on_complete
hook and the three terminal branches by name so future readers understand all
trigger points.
src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md-62-62 (1)

62-62: ⚠️ Potential issue | 🟡 Minor

Typo: "adhere too" → "adhere to".

Same nit as in the sibling gds-create-epics-and-stories/SKILL.md.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/3-technical/gds-check-implementation-readiness/SKILL.md` at
line 62, Fix the typo in the SKILL.md under the "Micro-file Design" bullet:
change "adhere too" to "adhere to" in the sentence "Each step of the overall
goal is a self contained instruction file that you will adhere too 1 file as
directed at a time" (look for the "Micro-file Design" heading and that exact
sentence in SKILL.md).
src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Typo: "adhere too" → "adhere to".

-- **Micro-file Design**: Each step of the overall goal is a self contained instruction file that you will adhere too 1 file as directed at a time
+- **Micro-file Design**: Each step of the overall goal is a self-contained instruction file that you adhere to, one file at a time as directed
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/3-technical/gds-create-epics-and-stories/SKILL.md` at line 66,
Fix the typo in the SKILL.md "Micro-file Design" line: change "adhere too" to
"adhere to" so the sentence reads "Each step of the overall goal is a self
contained instruction file that you will adhere to 1 file as directed at a
time"; update the exact text in the SKILL.md entry containing "Micro-file
Design" to replace "too" with "to".
src/workflows/3-technical/gds-game-architecture/SKILL.md-73-73 (1)

73-73: ⚠️ Potential issue | 🟡 Minor

Variable name inconsistent with Conventions: {skill_root} vs {skill-root}.

Line 73 writes installed_path = {skill_root} (underscore), but the Conventions block on Line 17 defines {skill-root} (hyphen). Downstream steps resolving {installed_path} may get an unresolved token. Use the hyphenated form for consistency:

-- `installed_path` = `{skill_root}`
+- `installed_path` = `{skill-root}`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/3-technical/gds-game-architecture/SKILL.md` at line 73, The
variable token used for installed_path is inconsistent: change the underscore
token `{skill_root}` to the hyphenated convention `{skill-root}` so
`installed_path` uses the same token as defined in the Conventions block; update
the occurrence of `installed_path = {skill_root}` to `installed_path =
{skill-root}` to ensure downstream resolvers find the correct token.
src/workflows/4-production/gds-dev-story/SKILL.md-8-8 (1)

8-8: ⚠️ Potential issue | 🟡 Minor

Minor grammar: hyphenate compound adjective.

The phrase "context filled story spec file" should use a hyphen: "context-filled story spec file".

✏️ Proposed fix
-**Goal:** Execute story implementation following a context filled story spec file.
+**Goal:** Execute story implementation following a context-filled story spec file.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/4-production/gds-dev-story/SKILL.md` at line 8, Update the
phrase "context filled story spec file" in SKILL.md to use a hyphenated compound
adjective: replace it with "context-filled story spec file" (locate the Goal
line containing "Execute story implementation following a context filled story
spec file.").
src/workflows/2-design/gds-edit-prd/SKILL.md-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Minor grammar: hyphenate compound adjective.

The phrase "self contained instruction file" should use a hyphen: "self-contained instruction file".

✏️ Proposed fix
-- **Micro-file Design**: Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly
+- **Micro-file Design**: Each step is a self-contained instruction file that is a part of an overall workflow that must be followed exactly
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-edit-prd/SKILL.md` at line 66, Minor grammar:
hyphenate the compound adjective "self contained" to "self-contained" in the
SKILL.md step description; locate the string "- **Micro-file Design**: Each step
is a self contained instruction file that is a part of an overall workflow that
must be followed exactly" and update it so the phrase reads "self-contained
instruction file" (preserve surrounding wording and Markdown formatting).
src/workflows/2-design/gds-create-gdd/SKILL.md-66-66 (1)

66-66: ⚠️ Potential issue | 🟡 Minor

Minor grammar: hyphenate compound adjective.

The phrase "self contained instruction file" should use a hyphen: "self-contained instruction file".

✏️ Proposed fix
-- **Micro-file Design**: Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly
+- **Micro-file Design**: Each step is a self-contained instruction file that is a part of an overall workflow that must be followed exactly
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/2-design/gds-create-gdd/SKILL.md` at line 66, Replace the
phrase "self contained instruction file" with the hyphenated form
"self-contained instruction file" in the SKILL.md text (the sentence starting
"**Micro-file Design**: Each step..."), ensuring the compound adjective is
hyphenated.

Comment thread src/workflows/gametest/gds-e2e-scaffold/SKILL.md Outdated
Comment on lines +206 to +219
```csharp
[UnityTest]
public IEnumerator Performance_CombatScene_MaintainsFPS()
{
using (Measure.ProfilerMarkers(new[] { "Main Thread" }))
{
SceneManager.LoadScene("CombatStressTest");
yield return new WaitForSeconds(30f);
}
var metrics = Measure.Custom(new SampleGroupDefinition("FPS"));
Assert.Greater(metrics.Median, 30, "FPS should stay above 30");
}
```
</action>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot Apr 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

Unity Performance Testing package Measure.ProfilerMarkers and Measure.Custom API documentation

💡 Result:

Unity Performance Testing package (com.unity.test-framework.performance, latest version 3.2.1 as of 2026-03-12, compatible with Unity 6) provides Measure.ProfilerMarkers and Measure.Custom APIs for performance tests. Measure.ProfilerMarkers: Records profiler markers automatically within a using scope. Names must match profiler marker labels. Sampled once per frame; multiple invocations per frame sum up. Supports string[] of marker names or SampleGroup[] for custom units. Example 1 (string[]): [Test, Performance] public void Test { string[] markers = {"Instantiate", "Instantiate.Copy", "Instantiate.Produce", "Instantiate.Awake"}; using (Measure.ProfilerMarkers(markers)) { // code } } Example 2 (SampleGroup[]): [UnityTest, Performance] public IEnumerator Test { var sampleGroups = new[] { new SampleGroup("Instantiate", SampleUnit.Second), new SampleGroup("Instantiate.Copy", SampleUnit.Nanosecond), new SampleGroup("Instantiate.Awake", SampleUnit.Microsecond) }; using (Measure.ProfilerMarkers(sampleGroups)) { // code } } Limitations: Not supported in Edit Mode tests, Deep Profiling, or Profiler.BeginSample markers (use ProfilerMarker instead). Recent update (3.2.1) uses ProfilerRecorder API. Measure.Custom(sampleGroup, value): Records custom metric values (double) outside frame/method/profiler, e.g., memory. Example: [Test, Performance] public void Test { var sampleGroup = new SampleGroup("TotalAllocatedMemory", SampleUnit.Megabyte, false); var allocatedMemory = UnityEngine.Profiling.Profiler.GetTotalAllocatedMemoryLong / 1048576f; Measure.Custom(sampleGroup, allocatedMemory); } Usage requires [Test, Performance] attribute and using Unity.PerformanceTesting;. Tests run in development player builds.

Citations:


Fix the Measure.Custom() call—it requires two parameters, not one.

The Measure.Custom() method signature is Measure.Custom(SampleGroup sampleGroup, double value). The code example calls it with only one argument and attempts to access a .Median property on the return value, which does not match the documented API. Additionally, the code uses SampleGroupDefinition instead of the documented SampleGroup class. Correct the example to provide both the sample group definition and the measured value as separate parameters.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/workflows/gametest/gds-performance-test/SKILL.md` around lines 206 - 219,
The test calls Measure.Custom incorrectly with a SampleGroupDefinition and one
argument; update Performance_CombatScene_MaintainsFPS to create and pass a
SampleGroup (not SampleGroupDefinition) and a numeric value to Measure.Custom
(Measure.Custom(SampleGroup, double)), e.g. construct a SampleGroup for "FPS"
and pass the measured FPS value as the second parameter, assign the result to
metrics, and then assert on metrics.Median; ensure you update the SampleGroup
creation and the Measure.Custom call accordingly.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — the Measure.Custom(SampleGroupDefinition, ...).Median example is incorrect per the current Unity Performance Testing API (Measure.Custom(SampleGroup, double) returns void, no .Median property). However, this bug is in the pre-existing workflow content that was merged verbatim from the legacy workflow.md into SKILL.md; it pre-dates this PR, which only adds the customization scaffolding. Tracking as a separate fix so this PR stays focused on the customize.toml pattern rollout.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bmadcode, understood — thanks for the context. Since the incorrect Measure.Custom example is pre-existing and out of scope for this PR, would you like me to open a follow-up GitHub issue to track the fix? I can file it with the specific correction needed (SampleGroup instead of SampleGroupDefinition, Measure.Custom(SampleGroup, double) with a measured value, and removing the non-existent .Median return), so it doesn't get lost.

Comment thread src/workflows/gds-document-project/workflows/deep-dive-instructions.md Outdated
- gds-e2e-scaffold, gds-document-project: fix `{skill_root}` typo
  (underscore) to `{skill-root}` (dash) in `installed_path` so
  downstream references like `{installed_path}/checklist.md` resolve
  correctly against the convention declared above.
- deep-dive-instructions.md: move the workflow.on_complete resolver
  from the end of Step 13a (area-selection confirmation loop) to
  Step 13g (Finish) so the hook only fires when the user actually
  exits the workflow, not during mid-workflow navigation.
@bmadcode bmadcode merged commit 07ef779 into main Apr 21, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant