You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: resolve command references per integration type (dot vs hyphen)
Replace hardcoded /speckit.<cmd> references in templates with
__SPECKIT_COMMAND_<NAME>__ placeholders that are resolved at
setup time based on the integration type:
- Markdown/TOML/YAML agents: separator='.' → /speckit.plan
- Skills agents: separator='-' → /speckit-plan
Changes:
- Add resolve_command_refs() static method to IntegrationBase
- Add invoke_separator class attribute (. for base, - for skills)
- Wire into process_template() as step 8
- Update _install_shared_infra() to process page templates
- Replace /speckit.* in 5 command templates and 3 page templates
- Add unit tests for resolve_command_refs (positive + negative)
- Add integration tests verifying on-disk content for all agents
- Add end-to-end CLI tests for Claude (skills) and Copilot (markdown)
Fixes#2347
Copy file name to clipboardExpand all lines: templates/commands/analyze.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,13 +49,13 @@ You **MUST** consider the user input before proceeding (if not empty).
49
49
50
50
## Goal
51
51
52
-
Identify inconsistencies, duplications, ambiguities, and underspecified items across the three core artifacts (`spec.md`, `plan.md`, `tasks.md`) before implementation. This command MUST run only after `/speckit.tasks` has successfully produced a complete `tasks.md`.
52
+
Identify inconsistencies, duplications, ambiguities, and underspecified items across the three core artifacts (`spec.md`, `plan.md`, `tasks.md`) before implementation. This command MUST run only after `__SPECKIT_COMMAND_TASKS__` has successfully produced a complete `tasks.md`.
53
53
54
54
## Operating Constraints
55
55
56
56
**STRICTLY READ-ONLY**: Do **not** modify any files. Output a structured analysis report. Offer an optional remediation plan (user must explicitly approve before any follow-up editing commands would be invoked manually).
57
57
58
-
**Constitution Authority**: The project constitution (`/memory/constitution.md`) is **non-negotiable** within this analysis scope. Constitution conflicts are automatically CRITICAL and require adjustment of the spec, plan, or tasks—not dilution, reinterpretation, or silent ignoring of the principle. If a principle itself needs to change, that must occur in a separate, explicit constitution update outside `/speckit.analyze`.
58
+
**Constitution Authority**: The project constitution (`/memory/constitution.md`) is **non-negotiable** within this analysis scope. Constitution conflicts are automatically CRITICAL and require adjustment of the spec, plan, or tasks—not dilution, reinterpretation, or silent ignoring of the principle. If a principle itself needs to change, that must occur in a separate, explicit constitution update outside `__SPECKIT_COMMAND_ANALYZE__`.
59
59
60
60
## Execution Steps
61
61
@@ -191,9 +191,9 @@ Output a Markdown report (no file writes) with the following structure:
191
191
192
192
At end of report, output a concise Next Actions block:
193
193
194
-
- If CRITICAL issues exist: Recommend resolving before `/speckit.implement`
194
+
- If CRITICAL issues exist: Recommend resolving before `__SPECKIT_COMMAND_IMPLEMENT__`
195
195
- If only LOW/MEDIUM: User may proceed, but provide improvement suggestions
196
-
- Provide explicit command suggestions: e.g., "Run /speckit.specify with refinement", "Run /speckit.plan to adjust architecture", "Manually edit tasks.md to add coverage for 'performance-metrics'"
196
+
- Provide explicit command suggestions: e.g., "Run __SPECKIT_COMMAND_SPECIFY__ with refinement", "Run __SPECKIT_COMMAND_PLAN__ to adjust architecture", "Manually edit tasks.md to add coverage for 'performance-metrics'"
Copy file name to clipboardExpand all lines: templates/commands/checklist.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -249,7 +249,7 @@ You **MUST** consider the user input before proceeding (if not empty).
249
249
- Actor/timing
250
250
- Any explicit user-specified must-have items incorporated
251
251
252
-
**Important**: Each `/speckit.checklist` command invocation uses a short, descriptive checklist filename and either creates a new file or appends to an existing one. This allows:
252
+
**Important**: Each `__SPECKIT_COMMAND_CHECKLIST__` command invocation uses a short, descriptive checklist filename and either creates a new file or appends to an existing one. This allows:
253
253
254
254
- Multiple checklists of different types (e.g., `ux.md`, `test.md`, `security.md`)
255
255
- Simple, memorable filenames that indicate checklist purpose
Copy file name to clipboardExpand all lines: templates/commands/clarify.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -55,15 +55,15 @@ You **MUST** consider the user input before proceeding (if not empty).
55
55
56
56
Goal: Detect and reduce ambiguity or missing decision points in the active feature specification and record the clarifications directly in the spec file.
57
57
58
-
Note: This clarification workflow is expected to run (and be completed) BEFORE invoking `/speckit.plan`. If the user explicitly states they are skipping clarification (e.g., exploratory spike), you may proceed, but must warn that downstream rework risk increases.
58
+
Note: This clarification workflow is expected to run (and be completed) BEFORE invoking `__SPECKIT_COMMAND_PLAN__`. If the user explicitly states they are skipping clarification (e.g., exploratory spike), you may proceed, but must warn that downstream rework risk increases.
59
59
60
60
Execution steps:
61
61
62
62
1. Run `{SCRIPT}` from repo root **once** (combined `--json --paths-only` mode / `-Json -PathsOnly`). Parse minimal JSON payload fields:
63
63
- `FEATURE_DIR`
64
64
- `FEATURE_SPEC`
65
65
- (Optionally capture `IMPL_PLAN`, `TASKS` for future chained flows.)
66
-
- If JSON parsing fails, abort and instruct user to re-run `/speckit.specify` or verify feature branch environment.
66
+
- If JSON parsing fails, abort and instruct user to re-run `__SPECKIT_COMMAND_SPECIFY__` or verify feature branch environment.
67
67
- For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'\''m Groot' (or double-quote if possible: "I'm Groot").
68
68
69
69
2. Load the current spec file. Perform a structured ambiguity & coverage scan using this taxonomy. For each category, mark status: Clear / Partial / Missing. Produce an internal coverage map used for prioritization (do not output raw map unless no questions will be asked).
@@ -202,13 +202,13 @@ Execution steps:
202
202
- Path to updated spec.
203
203
- Sections touched (list names).
204
204
- Coverage summary table listing each taxonomy category with Status: Resolved (was Partial/Missing and addressed), Deferred (exceeds question quota or better suited for planning), Clear (already sufficient), Outstanding (still Partial/Missing but low impact).
205
-
- If any Outstanding or Deferred remain, recommend whether to proceed to `/speckit.plan` or run `/speckit.clarify` again later post-plan.
205
+
- If any Outstanding or Deferred remain, recommend whether to proceed to `__SPECKIT_COMMAND_PLAN__` or run `__SPECKIT_COMMAND_CLARIFY__` again later post-plan.
206
206
- Suggested next command.
207
207
208
208
Behavior rules:
209
209
210
210
- If no meaningful ambiguities found (or all potential questions would be low-impact), respond: "No critical ambiguities detected worth formal clarification." and suggest proceeding.
211
-
- If spec file missing, instruct user to run `/speckit.specify` first (do not create a new spec here).
211
+
- If spec file missing, instruct user to run `__SPECKIT_COMMAND_SPECIFY__` first (do not create a new spec here).
212
212
- Never exceed 5 total asked questions (clarification retries for a single question do not count as new questions).
Copy file name to clipboardExpand all lines: templates/commands/implement.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -169,7 +169,7 @@ You **MUST** consider the user input before proceeding (if not empty).
169
169
- Confirm the implementation follows the technical plan
170
170
- Report final status with summary of completed work
171
171
172
-
Note: This command assumes a complete task breakdown exists in tasks.md. If tasks are incomplete or missing, suggest running `/speckit.tasks` first to regenerate the task list.
172
+
Note: This command assumes a complete task breakdown exists in tasks.md. If tasks are incomplete or missing, suggest running `__SPECKIT_COMMAND_TASKS__` first to regenerate the task list.
173
173
174
174
10. **Check for extension hooks**: After completion validation, check if `.specify/extensions.yml` exists in the project root.
175
175
- If it exists, read it and look for entries under the `hooks.after_implement` key
Copy file name to clipboardExpand all lines: templates/commands/specify.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -54,7 +54,7 @@ You **MUST** consider the user input before proceeding (if not empty).
54
54
55
55
## Outline
56
56
57
-
The text the user typed after `/speckit.specify` in the triggering message **is** the feature description. Assume you always have it available in this conversation even if `{ARGS}` appears literally below. Do not ask the user to repeat it unless they provided an empty command.
57
+
The text the user typed after `__SPECKIT_COMMAND_SPECIFY__` in the triggering message **is** the feature description. Assume you always have it available in this conversation even if `{ARGS}` appears literally below. Do not ask the user to repeat it unless they provided an empty command.
58
58
59
59
Given that feature description, do this:
60
60
@@ -100,10 +100,10 @@ Given that feature description, do this:
100
100
}
101
101
```
102
102
Write the actual resolved directory path value (for example, `specs/003-user-auth`), not the literal string `SPECIFY_FEATURE_DIRECTORY`.
103
-
This allows downstream commands (`/speckit.plan`, `/speckit.tasks`, etc.) to locate the feature directory without relying on git branch name conventions.
103
+
This allows downstream commands (`__SPECKIT_COMMAND_PLAN__`, `__SPECKIT_COMMAND_TASKS__`, etc.) to locate the feature directory without relying on git branch name conventions.
104
104
105
105
**IMPORTANT**:
106
-
- You must only create one feature per `/speckit.specify` invocation
106
+
- You must only create one feature per `__SPECKIT_COMMAND_SPECIFY__` invocation
107
107
- The spec directory name and the git branch name are independent — they may be the same but that is the user's choice
108
108
- The spec directory and file are always created by this command, never by the hook
109
109
@@ -174,7 +174,7 @@ Given that feature description, do this:
174
174
175
175
## Notes
176
176
177
-
- Items marked incomplete require spec updates before `/speckit.clarify` or `/speckit.plan`
177
+
- Items marked incomplete require spec updates before `__SPECKIT_COMMAND_CLARIFY__` or `__SPECKIT_COMMAND_PLAN__`
178
178
```
179
179
180
180
b. **Run Validation Check**: Review the spec against each checklist item:
@@ -232,7 +232,7 @@ Given that feature description, do this:
232
232
- `SPECIFY_FEATURE_DIRECTORY` — the feature directory path
233
233
- `SPEC_FILE` — the spec file path
234
234
- Checklist results summary
235
-
- Readiness for the next phase (`/speckit.clarify` or `/speckit.plan`)
235
+
- Readiness for the next phase (`__SPECKIT_COMMAND_CLARIFY__` or `__SPECKIT_COMMAND_PLAN__`)
236
236
237
237
9. **Check for extension hooks**: After reporting completion, check if `.specify/extensions.yml` exists in the project root.
238
238
- If it exists, read it and look for entries under the `hooks.after_specify` key
0 commit comments