chore: upgrade Spec Kit#1109
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploying infrahub-sdk-python with
|
| Latest commit: |
6a348cb
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://4022b6fd.infrahub-sdk-python.pages.dev |
| Branch Preview URL: | https://dga-chore-upgrade-speckit-te.infrahub-sdk-python.pages.dev |
There was a problem hiding this comment.
9 issues found across 32 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name=".agents/skills/speckit-taskstoissues/SKILL.md">
<violation number="1" location=".agents/skills/speckit-taskstoissues/SKILL.md:72">
P2: Dedup regex `\bT\d{3}\b` in step 5 matches any task ID pattern anywhere in an issue title, not just the primary ID. If issue title mentions a different task ID (e.g. `T002: Add tests for T001 functionality`), both T002 and T001 get marked as "already has issue", causing the skill to skip creating the T001 issue even though no dedicated issue for T001 exists.</violation>
</file>
<file name=".specify/extensions/agent-context/commands/speckit.agent-context.update.md">
<violation number="1" location=".specify/extensions/agent-context/commands/speckit.agent-context.update.md:27">
P3: Doc says the script 'auto-detects the most recently modified specs/*/plan.md' when plan_path is omitted, but the scripts actually prefer .specify/feature.json (feature_directory) first and fall back to the mtime heuristic only when feature.json is absent or its plan doesn't exist.</violation>
</file>
<file name=".agents/skills/speckit-tasks/SKILL.md">
<violation number="1" location=".agents/skills/speckit-tasks/SKILL.md:79">
P2: Fallback for empty TASKS_TEMPLATE is unreachable — setup-tasks.sh errors out if the template can't be resolved, so the JSON never contains an empty TASKS_TEMPLATE</violation>
</file>
<file name=".agents/skills/speckit-plan/SKILL.md">
<violation number="1" location=".agents/skills/speckit-plan/SKILL.md:110">
P3: Completion Report references "Phase 2 planning" but only Phase 0 (Outline & Research) and Phase 1 (Design & Contracts) are defined anywhere in the document. This is a terminology inconsistency that could confuse an agent trying to determine whether there is a missing Phase 2.</violation>
</file>
<file name=".specify/extensions/agent-context/scripts/bash/update-agent-context.sh">
<violation number="1" location=".specify/extensions/agent-context/scripts/bash/update-agent-context.sh:24">
P2: The Bash updater does not honor the disabled extension state, so a manual command can still create or modify context files after opt-out. Check the extension/hook enabled state before parsing and writing files.</violation>
</file>
<file name=".specify/extensions/agent-context/README.md">
<violation number="1" location=".specify/extensions/agent-context/README.md:56">
P3: `speckit-python` binary does not exist — the script checks `$SPECKIT_PYTHON` env var, not a binary. Replace with accurate guidance referencing the env var or `python3`.</violation>
<violation number="2" location=".specify/extensions/agent-context/README.md:66">
P2: `upsert_context_section()` and `remove_context_section()` do not exist in this codebase — the disable mechanism uses extension `enabled` flags and `installed` list in extensions.yml. Remove the reference to these nonexistent functions.</violation>
</file>
<file name=".agents/skills/speckit-specify/SKILL.md">
<violation number="1" location=".agents/skills/speckit-specify/SKILL.md:142">
P1: Premature `Return: SUCCESS` at execution flow sub-step 8 — the spec hasn't been written to file or validated yet. An AI agent could interpret this as command completion and exit before executing the write and validation steps that follow.</violation>
</file>
<file name=".specify/extensions/agent-context/scripts/powershell/update-agent-context.ps1">
<violation number="1" location=".specify/extensions/agent-context/scripts/powershell/update-agent-context.ps1:123">
P2: Honor the agent-context disabled state before reading stale config and writing context files. Direct command execution or stale hooks can still modify CLAUDE.md/AGENTS.md after `specify extension disable agent-context`.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| Include both quantitative metrics (time, performance, volume) and qualitative measures (user satisfaction, task completion) | ||
| Each criterion must be verifiable without implementation details | ||
| 7. Identify Key Entities (if data involved) | ||
| 8. Return: SUCCESS (spec ready for planning) |
There was a problem hiding this comment.
P1: Premature Return: SUCCESS at execution flow sub-step 8 — the spec hasn't been written to file or validated yet. An AI agent could interpret this as command completion and exit before executing the write and validation steps that follow.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/speckit-specify/SKILL.md, line 142:
<comment>Premature `Return: SUCCESS` at execution flow sub-step 8 — the spec hasn't been written to file or validated yet. An AI agent could interpret this as command completion and exit before executing the write and validation steps that follow.</comment>
<file context>
@@ -0,0 +1,348 @@
+ Include both quantitative metrics (time, performance, volume) and qualitative measures (user satisfaction, task completion)
+ Each criterion must be verifiable without implementation details
+ 7. Identify Key Entities (if data involved)
+ 8. Return: SUCCESS (spec ready for planning)
+
+6. Write the specification to SPEC_FILE using the template structure, replacing placeholders with concrete details derived from the feature description (arguments) while preserving section order and headings.
</file context>
| > [!CAUTION] | ||
| > ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL | ||
|
|
||
| 1. **Fetch existing issues for deduplication**: Before creating anything, build the set of task IDs you are about to process from `tasks.md` (each is a `T` followed by three digits, e.g. `T001`). Then use the GitHub MCP server's `list_issues` tool to look for issues that already cover those IDs. Do not pass a `state` value, since omitting it makes the tool return both open and closed issues. Request `perPage: 100` to keep the number of calls down, and since the tool uses cursor-based pagination, request pages with the `after` parameter (using the `endCursor` from the previous response). For each issue title, match it against the task ID pattern `\bT\d{3}\b` (word boundaries so tokens like `ST001` or `T0010` are not matched by mistake; this also recognises titles written as `T001 ...`, `T001: ...` or `[T001] ...`) and, when it matches one of your task IDs, mark that ID as already having an issue. Stop paginating as soon as every task ID has been matched, or when there are no more pages, so you do not keep fetching the whole repository's issue history once all task IDs are accounted for. This bounds the number of calls on repos with large issue histories and still prevents duplicates when the command is re-run after `tasks.md` is regenerated or the skill is re-invoked. |
There was a problem hiding this comment.
P2: Dedup regex \bT\d{3}\b in step 5 matches any task ID pattern anywhere in an issue title, not just the primary ID. If issue title mentions a different task ID (e.g. T002: Add tests for T001 functionality), both T002 and T001 get marked as "already has issue", causing the skill to skip creating the T001 issue even though no dedicated issue for T001 exists.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/speckit-taskstoissues/SKILL.md, line 72:
<comment>Dedup regex `\bT\d{3}\b` in step 5 matches any task ID pattern anywhere in an issue title, not just the primary ID. If issue title mentions a different task ID (e.g. `T002: Add tests for T001 functionality`), both T002 and T001 get marked as "already has issue", causing the skill to skip creating the T001 issue even though no dedicated issue for T001 exists.</comment>
<file context>
@@ -0,0 +1,112 @@
+> [!CAUTION]
+> ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL
+
+1. **Fetch existing issues for deduplication**: Before creating anything, build the set of task IDs you are about to process from `tasks.md` (each is a `T` followed by three digits, e.g. `T001`). Then use the GitHub MCP server's `list_issues` tool to look for issues that already cover those IDs. Do not pass a `state` value, since omitting it makes the tool return both open and closed issues. Request `perPage: 100` to keep the number of calls down, and since the tool uses cursor-based pagination, request pages with the `after` parameter (using the `endCursor` from the previous response). For each issue title, match it against the task ID pattern `\bT\d{3}\b` (word boundaries so tokens like `ST001` or `T0010` are not matched by mistake; this also recognises titles written as `T001 ...`, `T001: ...` or `[T001] ...`) and, when it matches one of your task IDs, mark that ID as already having an issue. Stop paginating as soon as every task ID has been matched, or when there are no more pages, so you do not keep fetching the whole repository's issue history once all task IDs are accounted for. This bounds the number of calls on repos with large issue histories and still prevents duplicates when the command is re-run after `tasks.md` is regenerated or the skill is re-invoked.
+1. For each task in the list, use the GitHub MCP server to create a new issue in the repository that is representative of the Git remote. Task lines in `tasks.md` start with a markdown checkbox, so first strip the leading `- [ ]` (and any `[P]` / `[US#]` markers) to recover the task ID and its description. Create the issue with a single canonical title of the form `T001: <description>`, with the ID written once followed by the task description (for example, the line `- [ ] T001 Create project structure` becomes the title `T001: Create project structure`).
+ - **Skip** any task whose ID is already present in the set of existing issues from the previous step, and report it (for example, `T001 already has an issue, skipping`).
</file context>
| - Create parallel execution examples per user story | ||
| - Validate task completeness (each user story has all needed tasks, independently testable) | ||
|
|
||
| 4. **Generate tasks.md**: Read the tasks template from TASKS_TEMPLATE (from the JSON output above) and use it as structure. If TASKS_TEMPLATE is empty, fall back to `.specify/templates/tasks-template.md`. Fill with: |
There was a problem hiding this comment.
P2: Fallback for empty TASKS_TEMPLATE is unreachable — setup-tasks.sh errors out if the template can't be resolved, so the JSON never contains an empty TASKS_TEMPLATE
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/speckit-tasks/SKILL.md, line 79:
<comment>Fallback for empty TASKS_TEMPLATE is unreachable — setup-tasks.sh errors out if the template can't be resolved, so the JSON never contains an empty TASKS_TEMPLATE</comment>
<file context>
@@ -0,0 +1,217 @@
+ - Create parallel execution examples per user story
+ - Validate task completeness (each user story has all needed tasks, independently testable)
+
+4. **Generate tasks.md**: Read the tasks template from TASKS_TEMPLATE (from the JSON output above) and use it as structure. If TASKS_TEMPLATE is empty, fall back to `.specify/templates/tasks-template.md`. Fill with:
+ - Correct feature name from plan.md
+ - Phase 1: Setup tasks (project initialization)
</file context>
| DEFAULT_START="<!-- SPECKIT START -->" | ||
| DEFAULT_END="<!-- SPECKIT END -->" | ||
|
|
||
| if [[ ! -f "$EXT_CONFIG" ]]; then |
There was a problem hiding this comment.
P2: The Bash updater does not honor the disabled extension state, so a manual command can still create or modify context files after opt-out. Check the extension/hook enabled state before parsing and writing files.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/agent-context/scripts/bash/update-agent-context.sh, line 24:
<comment>The Bash updater does not honor the disabled extension state, so a manual command can still create or modify context files after opt-out. Check the extension/hook enabled state before parsing and writing files.</comment>
<file context>
@@ -0,0 +1,337 @@
+DEFAULT_START="<!-- SPECKIT START -->"
+DEFAULT_END="<!-- SPECKIT END -->"
+
+if [[ ! -f "$EXT_CONFIG" ]]; then
+ echo "agent-context: $EXT_CONFIG not found; nothing to do." >&2
+ exit 0
</file context>
| ``` | ||
|
|
||
| When disabled, Spec Kit skips context file creation, updates, and removal (the gates are inside `upsert_context_section()` and `remove_context_section()`). | ||
| Disabled projects also ignore stale `context_files` values during command rendering so disabling the extension remains a complete opt-out. |
There was a problem hiding this comment.
P2: upsert_context_section() and remove_context_section() do not exist in this codebase — the disable mechanism uses extension enabled flags and installed list in extensions.yml. Remove the reference to these nonexistent functions.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/agent-context/README.md, line 66:
<comment>`upsert_context_section()` and `remove_context_section()` do not exist in this codebase — the disable mechanism uses extension `enabled` flags and `installed` list in extensions.yml. Remove the reference to these nonexistent functions.</comment>
<file context>
@@ -0,0 +1,66 @@
+```
+
+When disabled, Spec Kit skips context file creation, updates, and removal (the gates are inside `upsert_context_section()` and `remove_context_section()`).
+Disabled projects also ignore stale `context_files` values during command rendering so disabling the extension remains a complete opt-out.
</file context>
| $DefaultStart = '<!-- SPECKIT START -->' | ||
| $DefaultEnd = '<!-- SPECKIT END -->' | ||
| $ProjectRoot = (Get-Location).Path | ||
| $ExtConfig = Join-Path $ProjectRoot '.specify/extensions/agent-context/agent-context-config.yml' |
There was a problem hiding this comment.
P2: Honor the agent-context disabled state before reading stale config and writing context files. Direct command execution or stale hooks can still modify CLAUDE.md/AGENTS.md after specify extension disable agent-context.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/agent-context/scripts/powershell/update-agent-context.ps1, line 123:
<comment>Honor the agent-context disabled state before reading stale config and writing context files. Direct command execution or stale hooks can still modify CLAUDE.md/AGENTS.md after `specify extension disable agent-context`.</comment>
<file context>
@@ -0,0 +1,417 @@
+$DefaultStart = '<!-- SPECKIT START -->'
+$DefaultEnd = '<!-- SPECKIT END -->'
+$ProjectRoot = (Get-Location).Path
+$ExtConfig = Join-Path $ProjectRoot '.specify/extensions/agent-context/agent-context-config.yml'
+
+if (-not (Test-Path -LiteralPath $ExtConfig)) {
</file context>
| - **Bash**: `.specify/extensions/agent-context/scripts/bash/update-agent-context.sh [plan_path]` | ||
| - **PowerShell**: `.specify/extensions/agent-context/scripts/powershell/update-agent-context.ps1 [plan_path]` | ||
|
|
||
| When `plan_path` is omitted, the script auto-detects the most recently modified `specs/*/plan.md`. |
There was a problem hiding this comment.
P3: Doc says the script 'auto-detects the most recently modified specs/*/plan.md' when plan_path is omitted, but the scripts actually prefer .specify/feature.json (feature_directory) first and fall back to the mtime heuristic only when feature.json is absent or its plan doesn't exist.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/agent-context/commands/speckit.agent-context.update.md, line 27:
<comment>Doc says the script 'auto-detects the most recently modified specs/*/plan.md' when plan_path is omitted, but the scripts actually prefer .specify/feature.json (feature_directory) first and fall back to the mtime heuristic only when feature.json is absent or its plan doesn't exist.</comment>
<file context>
@@ -0,0 +1,27 @@
+- **Bash**: `.specify/extensions/agent-context/scripts/bash/update-agent-context.sh [plan_path]`
+- **PowerShell**: `.specify/extensions/agent-context/scripts/powershell/update-agent-context.ps1 [plan_path]`
+
+When `plan_path` is omitted, the script auto-detects the most recently modified `specs/*/plan.md`.
</file context>
| When `plan_path` is omitted, the script auto-detects the most recently modified `specs/*/plan.md`. | |
| When `plan_path` is omitted, the script derives it from the `feature_directory` field in `.specify/feature.json` (written by /speckit-specify), falling back to the most recently modified `specs/*/plan.md` only when the JSON is absent or its plan does not exist yet. |
| ## Completion Report | ||
| Command ends after Phase 2 planning. Report branch, IMPL_PLAN path, and generated artifacts. |
There was a problem hiding this comment.
P3: Completion Report references "Phase 2 planning" but only Phase 0 (Outline & Research) and Phase 1 (Design & Contracts) are defined anywhere in the document. This is a terminology inconsistency that could confuse an agent trying to determine whether there is a missing Phase 2.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .agents/skills/speckit-plan/SKILL.md, line 110:
<comment>Completion Report references "Phase 2 planning" but only Phase 0 (Outline & Research) and Phase 1 (Design & Contracts) are defined anywhere in the document. This is a terminology inconsistency that could confuse an agent trying to determine whether there is a missing Phase 2.</comment>
<file context>
@@ -0,0 +1,173 @@
+
+## Completion Report
+
+Command ends after Phase 2 planning. Report branch, IMPL_PLAN path, and generated artifacts.
+
+## Phases
</file context>
| ```bash | ||
| pip install pyyaml | ||
| # or target the specific interpreter Spec Kit uses: | ||
| /path/to/speckit-python -m pip install pyyaml |
There was a problem hiding this comment.
P3: speckit-python binary does not exist — the script checks $SPECKIT_PYTHON env var, not a binary. Replace with accurate guidance referencing the env var or python3.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .specify/extensions/agent-context/README.md, line 56:
<comment>`speckit-python` binary does not exist — the script checks `$SPECKIT_PYTHON` env var, not a binary. Replace with accurate guidance referencing the env var or `python3`.</comment>
<file context>
@@ -0,0 +1,66 @@
+```bash
+pip install pyyaml
+# or target the specific interpreter Spec Kit uses:
+/path/to/speckit-python -m pip install pyyaml
+```
+
</file context>
Summary
Upgrades Spec Kit tooling in
.specify/and.agents/.agent-contextextension and its update script.agents/skills/🤖 Generated with Claude Code
Summary by cubic
Upgraded Spec Kit to v0.11.9 and added a new
agent-contextextension to auto-refresh coding agent instruction files after specification and planning. This also adds core Spec Kit skills, updates integration manifests, and streamlines project scripts and templates.New Features
agent-contextextension with configurable markers and multi-file support; wired intoafter_specifyandafter_planhooks.speckit.agent-context.updatecommand (bash and PowerShell) plus.agents/commandsand skill metadata..agents/skillsfor core flows (speckit-specify,speckit-plan,speckit-tasks,speckit-implement,speckit-clarify,speckit-analyze,speckit-converge,speckit-constitution,speckit-taskstoissues) and a newsetup-tasks.sh.Dependencies
0.11.9and refreshed manifests/config (.specify/integration.json,claude.manifest.json,speckit.manifest.json,init-options.json).branch_numberingtofeature_numbering.spec.md,plan.md, andtasks.mdfor clearer formatting.Written for commit 6a348cb. Summary will update on new commits.