Skip to content

chore: upgrade Spec Kit#1109

Merged
dgarros merged 1 commit into
stablefrom
dga/chore-upgrade-speckit-te5on
Jun 28, 2026
Merged

chore: upgrade Spec Kit#1109
dgarros merged 1 commit into
stablefrom
dga/chore-upgrade-speckit-te5on

Conversation

@dgarros

@dgarros dgarros commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Upgrades Spec Kit tooling in .specify/ and .agents/.

  • Updates Spec Kit scripts, templates, and integration manifests
  • Adds the new agent-context extension and its update script
  • Adds Spec Kit skill definitions under .agents/skills/

🤖 Generated with Claude Code


Summary by cubic

Upgraded Spec Kit to v0.11.9 and added a new agent-context extension 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

    • Added agent-context extension with configurable markers and multi-file support; wired into after_specify and after_plan hooks.
    • Introduced speckit.agent-context.update command (bash and PowerShell) plus .agents/commands and skill metadata.
    • Added .agents/skills for core flows (speckit-specify, speckit-plan, speckit-tasks, speckit-implement, speckit-clarify, speckit-analyze, speckit-converge, speckit-constitution, speckit-taskstoissues) and a new setup-tasks.sh.
  • Dependencies

    • Bumped integrations to 0.11.9 and refreshed manifests/config (.specify/integration.json, claude.manifest.json, speckit.manifest.json, init-options.json).
    • Simplified scripts and naming: removed strict branch checks, improved project root resolution, and switched branch_numbering to feature_numbering.
    • Minor template polish for spec.md, plan.md, and tasks.md for clearer formatting.

Written for commit 6a348cb. Summary will update on new commits.

Review in cubic

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying infrahub-sdk-python with  Cloudflare Pages  Cloudflare Pages

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

View logs

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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>
Suggested change
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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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>

@dgarros dgarros merged commit 578b54d into stable Jun 28, 2026
15 checks passed
@dgarros dgarros deleted the dga/chore-upgrade-speckit-te5on branch June 28, 2026 10:22
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