fix: harden resolve script type hint + improve inject prompt wording

- Add type: ignore[arg-type] to merge_menu call (Pylance narrowing limitation)
- Reword inject.before in workflows: "prepend to active instructions and follow it"
- Reword inject.after in workflows: "append to active instructions and follow it"
- Make additional_resources lazy: note list but don't eagerly load
This commit is contained in:
Brian Madison 2026-04-14 16:10:33 -05:00
parent da9ab6e119
commit 34b87bbd42
76 changed files with 144 additions and 144 deletions

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-document-project --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-document-project --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-prfaq --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Working Backwards: The PRFAQ Challenge
@ -113,4 +113,4 @@ When the user gets stuck, offer concrete suggestions based on what they've share
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-prfaq --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-domain-research --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-domain-research --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-market-research --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-market-research --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-technical-research --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-technical-research --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-prd --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-prd --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-ux-design --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-ux-design --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-edit-prd --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-edit-prd --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-validate-prd --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-validate-prd --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-check-implementation-readiness --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-check-implementation-readiness --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-architecture --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-architecture --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-epics-and-stories --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-epics-and-stories --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-generate-project-context --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-generate-project-context --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-checkpoint-preview --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Checkpoint Review Workflow
@ -46,4 +46,4 @@ Read fully and follow `./step-01-orientation.md` to begin.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-checkpoint-preview --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-code-review --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-code-review --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-correct-course --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-correct-course --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-story --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-create-story --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-dev-story --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-dev-story --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-qa-generate-e2e-tests --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-qa-generate-e2e-tests --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-quick-dev --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-quick-dev --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-retrospective --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-retrospective --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-sprint-planning --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-sprint-planning --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-sprint-status --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-sprint-status --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-advanced-elicitation --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Advanced Elicitation
@ -153,4 +153,4 @@ x. Proceed / No Further Actions
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-advanced-elicitation --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-brainstorming --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
Follow the instructions in ./workflow.md.
@ -23,4 +23,4 @@ Follow the instructions in ./workflow.md.
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-brainstorming --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-distillator --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Distillator: A Document Distillation Engine
@ -194,4 +194,4 @@ This stage proves the distillate is lossless by reconstructing source documents
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-distillator --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-editorial-review-prose --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Editorial Review - Prose
@ -100,4 +100,4 @@ If `additional_resources` is not empty, read each listed file and incorporate as
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-editorial-review-prose --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-editorial-review-structure --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Editorial Review - Structure
@ -196,4 +196,4 @@ Use the following output format:
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-editorial-review-structure --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-help --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# BMad Help
@ -92,4 +92,4 @@ For each recommended item, present:
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-help --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-index-docs --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Index Docs
@ -79,4 +79,4 @@ If `additional_resources` is not empty, read each listed file and incorporate as
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-index-docs --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-party-mode --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Party Mode
@ -142,4 +142,4 @@ When the user says they're done (any natural phrasing — "thanks", "that's all"
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-party-mode --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-review-adversarial-general --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Adversarial Review (General)
@ -52,4 +52,4 @@ Output findings as a Markdown list (descriptions only).
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-review-adversarial-general --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-review-edge-case-hunter --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Edge Case Hunter Review
@ -81,4 +81,4 @@ No extra text, no explanations, no markdown wrapping. An empty array `[]` is val
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-review-edge-case-hunter --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val

View File

@ -13,8 +13,8 @@ Resolve `inject` and `additional_resources` from customization:
Run: `python3 scripts/resolve-customization.py bmad-shard-doc --key inject --key additional_resources`
Use the JSON output as resolved values.
If `inject.before` is not empty, incorporate its content as high-priority context.
If `additional_resources` is not empty, read each listed file and incorporate as reference context.
1. **Inject before** -- If `inject.before` resolved to a non-empty value, prepend it to your active instructions and follow it.
2. **Available resources** -- Note the `additional_resources` list. Do not read these files now; they are available for the injected prompt or workflow steps to reference when needed.
# Shard Document
@ -122,4 +122,4 @@ Present user with options for the original document:
After the workflow completes, resolve `inject.after` from customization:
Run: `python3 scripts/resolve-customization.py bmad-shard-doc --key inject.after`
If resolved `inject.after` is not empty, incorporate its content as a final checklist or validation gate.
If resolved `inject.after` is not empty, append it to your active instructions and follow it.

View File

@ -91,7 +91,7 @@ def deep_merge(base: dict[str, Any], override: dict[str, Any]) -> dict[str, Any]
if isinstance(over_val, dict) and isinstance(base_val, dict):
merged[key] = deep_merge(base_val, over_val)
elif _is_menu_array(over_val) and _is_menu_array(base_val):
merged[key] = merge_menu(base_val, over_val)
merged[key] = merge_menu(base_val, over_val) # type: ignore[arg-type]
else:
merged[key] = over_val