Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions docs/extensions/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -632,8 +632,6 @@ Standard events (defined by core):
- `after_clarify` - After spec clarification
- `before_constitution` - Before constitution update
- `after_constitution` - After constitution update
- `before_taskstoissues` - Before tasks-to-issues conversion
- `after_taskstoissues` - After tasks-to-issues conversion

Comment on lines 634 to 635
#### Bundled `bug` extension events (available when the extension is installed)

Expand Down
1 change: 0 additions & 1 deletion docs/extensions/developing.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,6 @@ Available hook points:
- `before_checklist` / `after_checklist`: Before/after checklist generation
- `before_clarify` / `after_clarify`: Before/after spec clarification
- `before_constitution` / `after_constitution`: Before/after constitution update
- `before_taskstoissues` / `after_taskstoissues`: Before/after tasks-to-issues conversion
- `before_bug_assess` / `after_bug_assess`: Before/after bug assessment (bundled `bug` extension)
- `before_bug_fix` / `after_bug_fix`: Before/after bug remediation (bundled `bug` extension)
- `before_bug_test` / `after_bug_test`: Before/after bug verification (bundled `bug` extension)
Expand Down
1 change: 0 additions & 1 deletion docs/extensions/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,6 @@ settings:
# before_tasks, after_tasks, before_implement, after_implement,
# before_analyze, after_analyze, before_checklist, after_checklist,
# before_clarify, after_clarify, before_constitution, after_constitution,
# before_taskstoissues, after_taskstoissues
# Bundled bug extension events (when installed):
# before_bug_assess, after_bug_assess, before_bug_fix, after_bug_fix,
# before_bug_test, after_bug_test
Expand Down
10 changes: 0 additions & 10 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,16 +155,6 @@ After initialization, you should see the following commands available in your co
- `/speckit.checklist` - Generate quality checklists
- `/speckit.constitution` - Create or update project principles
- `/speckit.converge` - Assess codebase against artifacts and append remaining tasks
- `/speckit.taskstoissues` - Convert tasks to issues (deprecated; warns on invocation; replaced by the bundled `github` extension's
`/speckit.github.taskstoissues`; install it with `specify extension add github`)

The `generic` integration also registers extension commands in its configured
`--commands-dir`. Installing `github` makes `/speckit.github.taskstoissues`
available there as a command file, or as `/speckit-github-taskstoissues` when
`--skills` is enabled. The core `/speckit.taskstoissues` (or
`/speckit-taskstoissues` with `--skills`) remains available during migration, warns on invocation,
and will be removed in a future minor release.
See the [GitHub extension's installation notes](https://github.com/github/spec-kit/blob/main/extensions/github/README.md#installation).

Scripts are installed into a variant subdirectory matching the chosen script type:

Expand Down
9 changes: 0 additions & 9 deletions docs/integrations/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -486,15 +486,6 @@ Docker Agent currently exposes structured agent/safety configuration.
Headless approval flags, model forwarding, and structured-output support are
also adapter-specific, not universal guarantees.

## GitHub Issue Creation

The deprecated `speckit.taskstoissues` command still runs with a warning but
will be removed in a future minor release. Install the opt-in GitHub extension
with `specify extension add github` and use `speckit.github.taskstoissues`
instead. See the [extension's migration guide](https://github.com/github/spec-kit/blob/main/extensions/github/README.md#migrating-from-the-core-taskstoissues-command)
for invocation syntax and migration details; the core command does not install
the extension automatically.

## FAQ

### Can I install multiple integrations in the same project?
Expand Down
29 changes: 0 additions & 29 deletions docs/reference/agentic-sdd.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ skills by default.
| `/speckit.tasks` | `speckit-tasks` | Break the plan into actionable tasks |
| `/speckit.implement` | `speckit-implement` | Execute the tasks |
| `/speckit.converge` | `speckit-converge` | Assess implementation against the artifacts and append remaining work |
| `/speckit.taskstoissues` | `speckit-taskstoissues` | **Deprecated core command**; use the `github` extension for GitHub issues |
| `/speckit.clarify` | `speckit-clarify` | Resolve ambiguity before planning (optional quality gate; formerly `/quizme`) |
| `/speckit.analyze` | `speckit-analyze` | Check artifact consistency after tasks and before implementation (optional quality gate) |
| `/speckit.checklist` | `speckit-checklist` | Generate requirements-quality checklists (optional quality gate) |
Expand Down Expand Up @@ -157,31 +156,3 @@ It first prints a severity-graded findings summary, then resolves to one of two

- **Converged** — no gaps found. `tasks.md` is left byte-for-byte unchanged and you'll see a clean result like `✅ Converged — the implementation satisfies the spec, plan, and tasks.` You're done; proceed to review or open a PR.
- **Tasks appended** — gaps found. Converge appends them as new tasks under a Convergence section in `tasks.md` and tells you how many. Run `/speckit.implement` again to complete them, then `/speckit.converge` once more. Each pass finds fewer items; repeat until it reports converged.

## `/speckit.taskstoissues` (deprecated core command)

The core command is deprecated and will be removed in a future minor release.
It warns when invoked, then continues its existing workflow without installing
or enabling the extension automatically.

The recommended extension command optionally converts an existing `tasks.md`
into actionable GitHub issues. Install the extension from your project root:

```bash
specify extension add github
```

Then invoke it in your agent after generating tasks when you want to track
execution in GitHub:

```text
/speckit.github.taskstoissues
```

This command requires a GitHub `origin` remote and access to the GitHub MCP tools
for listing and creating issues. It creates issues only in the repository
identified by that remote and checks existing task IDs to avoid duplicates.
It is not required to implement tasks or converge on a feature.

> [!NOTE]
> GitHub issue tracking uses the bundled, opt-in [`github` extension](https://github.com/github/spec-kit/blob/main/extensions/github/README.md). Its recommended command is `/speckit.github.taskstoissues` (slash-hyphen integrations: `/speckit-github-taskstoissues`; Codex, ZCode, and Command Code skills: `$speckit-github-taskstoissues`; Kimi: `/skill:speckit-github-taskstoissues`); the deprecated core `/speckit.taskstoissues` remains available during migration. The `generic` integration registers the extension under its configured command directory in commands or skills mode. See the [installation and migration notes](https://github.com/github/spec-kit/blob/main/extensions/github/README.md#installation) for all integration-specific invocation syntaxes.
2 changes: 1 addition & 1 deletion docs/reference/extensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ specify extension add <name>
| `--force` | Overwrite if the extension is already installed |
| `--priority <N>`| Resolution priority (default: 10; lower = higher precedence) |

Installs an extension from the catalog, a URL, or a local directory. Extension commands are registered with the active AI coding agent integration. For `generic`, invocations use the configured `--commands-dir`: flat command files by default, or `speckit-<name>/SKILL.md` with `--skills`. The deprecated core `speckit.taskstoissues` command remains available during migration and will be removed in a future minor release. It warns on invocation and continues its existing workflow without installing or enabling the extension automatically. For GitHub issue tracking, run `specify extension add github` and use the recommended `/speckit.github.taskstoissues` command (slash-hyphen integrations: `/speckit-github-taskstoissues`; Codex, ZCode, and Command Code skills: `$speckit-github-taskstoissues`; Kimi: `/skill:speckit-github-taskstoissues`).
Installs an extension from the catalog, a URL, or a local directory. Extension commands are registered with the active AI coding agent integration. For `generic`, invocations use the configured `--commands-dir`: flat command files by default, or `speckit-<name>/SKILL.md` with `--skills`.

If a generic integration refresh cannot produce every extension invocation (for example, because a command or skill is user-modified or its source is missing), it warns and restores that extension's prior registered artifacts. Other extensions can still refresh.

Expand Down
2 changes: 1 addition & 1 deletion extensions/catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
"github": {
"name": "GitHub Integration",
"id": "github",
"version": "1.0.4",
"version": "1.0.5",
"description": "GitHub platform integration for Spec Kit - create GitHub issues from a feature's task list",
"author": "spec-kit-core",
"repository": "https://github.com/github/spec-kit",
Expand Down
63 changes: 32 additions & 31 deletions extensions/github/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,8 @@ specify extension add github
The `generic` (bring your own agent) integration registers this command under
its configured `--commands-dir` in both commands and skills layouts. Installing
`github` creates `speckit.github.taskstoissues.md` in commands mode or
`speckit-github-taskstoissues/SKILL.md` in skills mode. The core
`speckit.taskstoissues` command is deprecated but remains available during migration.
Use this extension's recommended command instead. See
[integration-specific options](../../docs/integrations/cli.md#integration-specific-options).
`speckit-github-taskstoissues/SKILL.md` in skills mode. See
[integration-specific options](https://github.github.io/spec-kit/integrations/cli.html#integration-specific-options).

## Removal

Expand Down Expand Up @@ -74,56 +72,66 @@ The extension ships its own feature-resolution script in all three supported run
| PowerShell | `scripts/powershell/resolve-tasks.ps1` |
| Python | `scripts/python/resolve_tasks.py` |

Once installed they live under `.specify/extensions/github/scripts/`. The script is a trimmed twin of core's `check-prerequisites`: it resolves the project root and active feature directory, requires `plan.md` and `tasks.md`, and reports the design docs alongside them. It matches the invocation the core command makes (`--require-tasks --include-tasks`), so `spec.md` stays optional. By default, a `SPECIFY_FEATURE_DIRECTORY` override is persisted to `.specify/feature.json` so a later run without the variable resolves to the same feature. When `SPECIFY_FEATURE_NO_PERSIST=1` or `true`, the override still selects the feature for this run, but the script does not create or modify `feature.json`.
Once installed they live under `.specify/extensions/github/scripts/`. The script is a trimmed twin of core's `check-prerequisites`: it resolves the project root and active feature directory, requires `plan.md` and `tasks.md`, and reports the design docs alongside them. `spec.md` stays optional. By default, a `SPECIFY_FEATURE_DIRECTORY` override is persisted to `.specify/feature.json` so a later run without the variable resolves to the same feature. When `SPECIFY_FEATURE_NO_PERSIST=1` or `true`, the override still selects the feature for this run, but the script does not create or modify `feature.json`.

Prerequisite errors name the Spec Kit command without assuming an integration's invocation syntax. Use the syntax described under [Commands](#commands) for your integration.

## Migrating from the core `taskstoissues` command

Spec Kit is moving GitHub issue tracking out of core in three stages:

1. **Initial stage (completed)** — this extension shipped with the core `/speckit.taskstoissues` command still available.
2. **Next (current stage)** — the replacement has been available for at least one release, so the core command is now deprecated. It displays a migration warning and continues its existing workflow. It does not install or enable the extension automatically or run the replacement command.
3. **Later** — the core command will be removed in a future minor release.
**Breaking change:** the core command has been removed. Integration upgrades
delete old manifest-tracked `taskstoissues` command and skill files, rather than
replacing them with an updated prompt. Back up customized legacy and extension
command or skill files outside the generated directories **before** upgrading;
forcing the upgrade with `--force` also authorizes deletion of customized legacy
files. Reapply customizations only after the migration steps below, because the
upgrade can overwrite generated extension files. Installing this extension does
not restore the old invocation or provide a compatibility alias.

For existing projects, upgrading the CLI alone does not refresh the generated
core command files. After upgrading the CLI, run this from the project root:

```bash
specify integration upgrade <key>
specify integration upgrade <integration>
```

Replace `<key>` with the installed integration key, or omit it to upgrade the
default integration. This refreshes the core command with the deprecation
warning. If locally modified files block the upgrade, inspect those changes
before deciding whether to overwrite them. See [Upgrade an Integration](../../docs/integrations/cli.md#upgrade-an-integration).
Replace `<integration>` with the installed integration key, or omit it to upgrade
the default integration. Repeat for each installed integration. If locally
modified files block the upgrade, back them up before deciding whether to
delete the legacy files with `--force`. See
[Upgrade an Integration](https://github.github.io/spec-kit/integrations/cli.html#upgrade-an-integration).

To migrate, install the extension and use the namespaced command instead:
Then install the extension, **skipping this step if `github` is already
installed**, and use the namespaced command instead:

```bash
specify extension add github
```

An already-installed, enabled extension is re-registered when upgrading the
default integration only. Before using the replacement in a non-default
integration, run `specify integration use <integration>` to select it and register
the extension there. After upgrading, installing if needed, and selecting the
integration, reapply customizations from your separate backup to the namespaced
extension command.

The `generic` integration supports this migration in both commands and skills
layouts under its configured `--commands-dir`. The core command remains
available during this deprecation period until the removal stage.
layouts under its configured `--commands-dir`.

| Deprecated core command | Recommended extension command |
| Core command | Recommended extension command |
| ------------------------- | --------------------------------- |
| `/speckit.taskstoissues` | `/speckit.github.taskstoissues` |

Apart from the core command's deprecation warning, conversion behavior is unchanged: the same feature resolution, the same `plan.md` and `tasks.md` prerequisites, the same remote validation, the same deduplication across open and closed issues, the same issue titles, and the same hook contract. The extension command and deprecated core command coexist without shadowing each other while the core command still exists.
Conversion behavior is unchanged: the same feature resolution, the same `plan.md` and `tasks.md` prerequisites, the same remote validation, the same deduplication across open and closed issues, the same issue titles, and the same hook contract. This extension does **not** register `speckit.taskstoissues` as an alias.

### Presets and dependent extensions

Before the core command is removed, audit references to `speckit.taskstoissues`
Audit references to `speckit.taskstoissues`
in presets, extension prompts, workflow steps, handoffs, and project automation.
Comment on lines +128 to 129
For GitHub issue conversion, use the canonical `speckit.github.taskstoissues`
command ID and render it with the agent-specific syntax under [Commands](#commands).
Replace `__SPECKIT_COMMAND_TASKSTOISSUES__` cross-command references with
`__SPECKIT_COMMAND_GITHUB_TASKSTOISSUES__` where template rendering is supported.
Document `specify extension add github` as a setup prerequisite; the deprecation
warning does not install this dependency.
Document `specify extension add github` as a setup prerequisite.

If an extension proposal or external dependency declaration uses
`requires.commands: [speckit.taskstoissues]`, update its target to
Expand All @@ -137,11 +145,4 @@ Preset command overrides are separate from command references: an override of
command. Review and port any needed customization, then verify the installed
command in a sample project before retiring the old override. A preset that
uses another issue tracker should retain its own provider-specific workflow
rather than redirecting it to the GitHub command. Existing overrides may also
hide the core deprecation warning, so communicate the migration to their users.

Keep the `before_taskstoissues` and `after_taskstoissues` hook keys unchanged;
both commands consume them. Only update a hook's command reference if it invokes
the deprecated command. Do not invoke both core and replacement commands for
the same conversion, since that also runs their hooks twice. Publish and test
updated preset/extension versions before the later core-removal release.
rather than redirecting it to the GitHub command.
2 changes: 1 addition & 1 deletion extensions/github/extension.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ schema_version: "1.0"
extension:
id: github
name: "GitHub Integration"
version: "1.0.4"
version: "1.0.5"
description: "GitHub platform integration for Spec Kit - create GitHub issues from a feature's task list"
author: spec-kit-core
repository: https://github.com/github/spec-kit
Expand Down
1 change: 0 additions & 1 deletion src/specify_cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,6 @@ def _print_cli_warning(
"clarify": "Structured clarification workflow for underspecified requirements.",
"constitution": "Create or update project governing principles and development guidelines.",
"checklist": "Generate custom quality checklists for validating requirements completeness and clarity.",
"taskstoissues": "Deprecated: Convert tasks from tasks.md into GitHub issues.",
}


Expand Down
7 changes: 2 additions & 5 deletions src/specify_cli/extensions/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@
"plan",
"specify",
"tasks",
"taskstoissues",
}
)
EXTENSION_COMMAND_NAME_PATTERN = re.compile(r"^speckit\.([a-z0-9-]+)\.([a-z0-9-]+)$")
Expand Down Expand Up @@ -1209,10 +1208,8 @@ def _normalize_shadow_name(name: str) -> str:

Agent integrations (Cline, Forge, Junie) and the SKILL.md output-name
computation (``CommandRegistrar._compute_output_name``) all collapse
dots to hyphens and prefix a bare name with ``speckit-``, so
``speckit.taskstoissues``, ``taskstoissues``, and
``speckit-taskstoissues`` are distinct alias spellings that land on
the same on-disk command name. Normalize before comparing so all of
dots to hyphens and prefix a bare name with ``speckit-``.
Normalize before comparing so all of
them are caught, not just the exact dotted spelling.
"""
hyphenated = name.replace(".", "-")
Expand Down
1 change: 0 additions & 1 deletion src/specify_cli/integrations/alquimia/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
"clarify": "Optional areas to clarify in the spec",
"constitution": "Principles or values for the project constitution",
"checklist": "Domain or focus area for the checklist",
"taskstoissues": "Optional filter or label for GitHub issues",
}


Expand Down
1 change: 0 additions & 1 deletion src/specify_cli/integrations/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@
"checklist",
"specify",
"tasks",
"taskstoissues",
)
_CORE_COMMAND_TEMPLATE_RANK = {
command: index for index, command in enumerate(_CORE_COMMAND_TEMPLATE_ORDER)
Expand Down
1 change: 0 additions & 1 deletion src/specify_cli/integrations/claude/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
"clarify": "Optional areas to clarify in the spec",
"constitution": "Principles or values for the project constitution",
"checklist": "Domain or focus area for the checklist",
"taskstoissues": "Optional filter or label for GitHub issues",
}

# Per-command frontmatter overrides for skills that should run in a forked
Expand Down
1 change: 0 additions & 1 deletion src/specify_cli/integrations/copilot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@
"plan",
"specify",
"tasks",
"taskstoissues",
}


Expand Down
Loading
Loading