diff --git a/openspec/changes/add-antigravity-support/specs/cli-init/spec.md b/openspec/changes/add-antigravity-support/specs/cli-init/spec.md deleted file mode 100644 index 5b61bafc..00000000 --- a/openspec/changes/add-antigravity-support/specs/cli-init/spec.md +++ /dev/null @@ -1,9 +0,0 @@ -## MODIFIED Requirements -### Requirement: Slash Command Configuration -The init command SHALL generate slash command files for supported editors using shared templates. - -#### Scenario: Generating slash commands for Antigravity -- **WHEN** the user selects Antigravity during initialization -- **THEN** create `.agent/workflows/openspec-proposal.md`, `.agent/workflows/openspec-apply.md`, and `.agent/workflows/openspec-archive.md` -- **AND** ensure each file begins with YAML frontmatter that contains only a `description: ` field followed by the shared OpenSpec workflow instructions wrapped in managed markers -- **AND** populate the workflow body with the same proposal/apply/archive guidance used for other tools so Antigravity behaves like Windsurf while pointing to the `.agent/workflows/` directory diff --git a/openspec/changes/add-antigravity-support/specs/cli-update/spec.md b/openspec/changes/add-antigravity-support/specs/cli-update/spec.md deleted file mode 100644 index 8a2eebe4..00000000 --- a/openspec/changes/add-antigravity-support/specs/cli-update/spec.md +++ /dev/null @@ -1,8 +0,0 @@ -## MODIFIED Requirements -### Requirement: Slash Command Updates -The update command SHALL refresh existing slash command files for configured tools without creating new ones, and ensure the OpenCode archive command accepts change ID arguments. - -#### Scenario: Updating slash commands for Antigravity -- **WHEN** `.agent/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` -- **THEN** refresh the OpenSpec-managed portion of each file so the workflow copy matches other tools while preserving the existing single-field `description` frontmatter -- **AND** skip creating any missing workflow files during update, mirroring the behavior for Windsurf and other IDEs diff --git a/openspec/changes/add-antigravity-support/proposal.md b/openspec/changes/archive/2025-12-30-add-antigravity-support/proposal.md similarity index 100% rename from openspec/changes/add-antigravity-support/proposal.md rename to openspec/changes/archive/2025-12-30-add-antigravity-support/proposal.md diff --git a/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-init/spec.md b/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-init/spec.md new file mode 100644 index 00000000..5994b8f1 --- /dev/null +++ b/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-init/spec.md @@ -0,0 +1,105 @@ +# Delta for CLI Init + +## MODIFIED Requirements +### Requirement: Slash Command Configuration +The init command SHALL generate slash command files for supported editors using shared templates. + +#### Scenario: Generating slash commands for Antigravity +- **WHEN** the user selects Antigravity during initialization +- **THEN** create `.agent/workflows/openspec-proposal.md`, `.agent/workflows/openspec-apply.md`, and `.agent/workflows/openspec-archive.md` +- **AND** ensure each file begins with YAML frontmatter that contains only a `description: ` field followed by the shared OpenSpec workflow instructions wrapped in managed markers +- **AND** populate the workflow body with the same proposal/apply/archive guidance used for other tools so Antigravity behaves like Windsurf while pointing to the `.agent/workflows/` directory + +#### Scenario: Generating slash commands for Claude Code +- **WHEN** the user selects Claude Code during initialization +- **THEN** create `.claude/commands/openspec/proposal.md`, `.claude/commands/openspec/apply.md`, and `.claude/commands/openspec/archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for CodeBuddy Code +- **WHEN** the user selects CodeBuddy Code during initialization +- **THEN** create `.codebuddy/commands/openspec/proposal.md`, `.codebuddy/commands/openspec/apply.md`, and `.codebuddy/commands/openspec/archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Cline +- **WHEN** the user selects Cline during initialization +- **THEN** create `.clinerules/openspec-proposal.md`, `.clinerules/openspec-apply.md`, and `.clinerules/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** include Cline-specific Markdown heading frontmatter +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Crush +- **WHEN** the user selects Crush during initialization +- **THEN** create `.crush/commands/openspec/proposal.md`, `.crush/commands/openspec/apply.md`, and `.crush/commands/openspec/archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** include Crush-specific frontmatter with OpenSpec category and tags +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Cursor +- **WHEN** the user selects Cursor during initialization +- **THEN** create `.cursor/commands/openspec-proposal.md`, `.cursor/commands/openspec-apply.md`, and `.cursor/commands/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Factory Droid +- **WHEN** the user selects Factory Droid during initialization +- **THEN** create `.factory/commands/openspec-proposal.md`, `.factory/commands/openspec-apply.md`, and `.factory/commands/openspec-archive.md` +- **AND** populate each file from shared templates that include Factory-compatible YAML frontmatter for the `description` and `argument-hint` fields +- **AND** include the `$ARGUMENTS` placeholder in the template body so droid receives any user-supplied input +- **AND** wrap the generated content in OpenSpec managed markers so `openspec update` can safely refresh the commands + +#### Scenario: Generating slash commands for OpenCode +- **WHEN** the user selects OpenCode during initialization +- **THEN** create `.opencode/commands/openspec-proposal.md`, `.opencode/commands/openspec-apply.md`, and `.opencode/commands/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Windsurf +- **WHEN** the user selects Windsurf during initialization +- **THEN** create `.windsurf/workflows/openspec-proposal.md`, `.windsurf/workflows/openspec-apply.md`, and `.windsurf/workflows/openspec-archive.md` +- **AND** populate each file from shared templates (wrapped in OpenSpec markers) so workflow text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Kilo Code +- **WHEN** the user selects Kilo Code during initialization +- **THEN** create `.kilocode/workflows/openspec-proposal.md`, `.kilocode/workflows/openspec-apply.md`, and `.kilocode/workflows/openspec-archive.md` +- **AND** populate each file from shared templates (wrapped in OpenSpec markers) so workflow text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Codex +- **WHEN** the user selects Codex during initialization +- **THEN** create global prompt files at `~/.codex/prompts/openspec-proposal.md`, `~/.codex/prompts/openspec-apply.md`, and `~/.codex/prompts/openspec-archive.md` (or under `$CODEX_HOME/prompts` if set) +- **AND** populate each file from shared templates that map the first numbered placeholder (`$1`) to the primary user input (e.g., change identifier or question text) +- **AND** wrap the generated content in OpenSpec markers so `openspec update` can refresh the prompts without touching surrounding custom notes + +#### Scenario: Generating slash commands for GitHub Copilot +- **WHEN** the user selects GitHub Copilot during initialization +- **THEN** create `.github/prompts/openspec-proposal.prompt.md`, `.github/prompts/openspec-apply.prompt.md`, and `.github/prompts/openspec-archive.prompt.md` +- **AND** populate each file with YAML frontmatter containing a `description` field that summarizes the workflow stage +- **AND** include `$ARGUMENTS` placeholder to capture user input +- **AND** wrap the shared template body with OpenSpec markers so `openspec update` can refresh the content +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Gemini CLI +- **WHEN** the user selects Gemini CLI during initialization +- **THEN** create `.gemini/commands/openspec/proposal.toml`, `.gemini/commands/openspec/apply.toml`, and `.gemini/commands/openspec/archive.toml` +- **AND** populate each file as TOML that sets a stage-specific `description = ""` and a multi-line `prompt = """` block with the shared OpenSpec template +- **AND** wrap the OpenSpec managed markers (`` / ``) inside the `prompt` value so `openspec update` can safely refresh the body between markers without touching the TOML framing +- **AND** ensure the slash-command copy matches the existing proposal/apply/archive templates used by other tools + +#### Scenario: Generating slash commands for iFlow CLI +- **WHEN** the user selects iFlow CLI during initialization +- **THEN** create `.iflow/commands/openspec-proposal.md`, `.iflow/commands/openspec-apply.md`, and `.iflow/commands/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** include YAML frontmatter with `name`, `id`, `category`, and `description` fields for each command +- **AND** wrap the generated content in OpenSpec managed markers so `openspec update` can safely refresh the commands +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for RooCode +- **WHEN** the user selects RooCode during initialization +- **THEN** create `.roo/commands/openspec-proposal.md`, `.roo/commands/openspec-apply.md`, and `.roo/commands/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** include simple Markdown headings (e.g., `# OpenSpec: Proposal`) without YAML frontmatter +- **AND** wrap the generated content in OpenSpec managed markers where applicable so `openspec update` can safely refresh the commands +- **AND** each template includes instructions for the relevant OpenSpec workflow stage diff --git a/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-update/spec.md b/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-update/spec.md new file mode 100644 index 00000000..641688ec --- /dev/null +++ b/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-update/spec.md @@ -0,0 +1,92 @@ +# Delta for CLI Update + +## MODIFIED Requirements +### Requirement: Slash Command Updates +The update command SHALL refresh existing slash command files for configured tools without creating new ones, and ensure the OpenCode archive command accepts change ID arguments. + +#### Scenario: Updating slash commands for Antigravity +- **WHEN** `.agent/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh the OpenSpec-managed portion of each file so the workflow copy matches other tools while preserving the existing single-field `description` frontmatter +- **AND** skip creating any missing workflow files during update, mirroring the behavior for Windsurf and other IDEs + +#### Scenario: Updating slash commands for Claude Code +- **WHEN** `.claude/commands/openspec/` contains `proposal.md`, `apply.md`, and `archive.md` +- **THEN** refresh each file using shared templates +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for CodeBuddy Code +- **WHEN** `.codebuddy/commands/openspec/` contains `proposal.md`, `apply.md`, and `archive.md` +- **THEN** refresh each file using shared templates +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Cline +- **WHEN** `.clinerules/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates +- **AND** include Cline-specific Markdown heading frontmatter +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Crush +- **WHEN** `.crush/commands/` contains `openspec/proposal.md`, `openspec/apply.md`, and `openspec/archive.md` +- **THEN** refresh each file using shared templates +- **AND** include Crush-specific frontmatter with OpenSpec category and tags +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Cursor +- **WHEN** `.cursor/commands/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Factory Droid +- **WHEN** `.factory/commands/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using the shared Factory templates that include YAML frontmatter for the `description` and `argument-hint` fields +- **AND** ensure the template body retains the `$ARGUMENTS` placeholder so user input keeps flowing into droid +- **AND** update only the content inside the OpenSpec managed markers, leaving any unmanaged notes untouched +- **AND** skip creating missing files during update + +#### Scenario: Updating slash commands for OpenCode +- **WHEN** `.opencode/command/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates +- **AND** ensure templates include instructions for the relevant workflow stage +- **AND** ensure the archive command includes `$ARGUMENTS` placeholder in frontmatter for accepting change ID arguments + +#### Scenario: Updating slash commands for Windsurf +- **WHEN** `.windsurf/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates wrapped in OpenSpec markers +- **AND** ensure templates include instructions for the relevant workflow stage +- **AND** skip creating missing files (the update command only refreshes what already exists) + +#### Scenario: Updating slash commands for Kilo Code +- **WHEN** `.kilocode/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates wrapped in OpenSpec markers +- **AND** ensure templates include instructions for the relevant workflow stage +- **AND** skip creating missing files (the update command only refreshes what already exists) + +#### Scenario: Updating slash commands for Codex +- **GIVEN** the global Codex prompt directory contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **WHEN** a user runs `openspec update` +- **THEN** refresh each file using the shared slash-command templates (including placeholder guidance) +- **AND** preserve any unmanaged content outside the OpenSpec marker block +- **AND** skip creation when a Codex prompt file is missing + +#### Scenario: Updating slash commands for GitHub Copilot +- **WHEN** `.github/prompts/` contains `openspec-proposal.prompt.md`, `openspec-apply.prompt.md`, and `openspec-archive.prompt.md` +- **THEN** refresh each file using shared templates while preserving the YAML frontmatter +- **AND** update only the OpenSpec-managed block between markers +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Gemini CLI +- **WHEN** `.gemini/commands/openspec/` contains `proposal.toml`, `apply.toml`, and `archive.toml` +- **THEN** refresh the body of each file using the shared proposal/apply/archive templates +- **AND** replace only the content between `` and `` markers inside the `prompt = """` block so the TOML framing (`description`, `prompt`) stays intact +- **AND** skip creating any missing `.toml` files during update; only pre-existing Gemini commands are refreshed + +#### Scenario: Updating slash commands for iFlow CLI +- **WHEN** `.iflow/commands/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates +- **AND** preserve the YAML frontmatter with `name`, `id`, `category`, and `description` fields +- **AND** update only the OpenSpec-managed block between markers +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Missing slash command file +- **WHEN** a tool lacks a slash command file +- **THEN** do not create a new file during update diff --git a/openspec/changes/add-antigravity-support/tasks.md b/openspec/changes/archive/2025-12-30-add-antigravity-support/tasks.md similarity index 100% rename from openspec/changes/add-antigravity-support/tasks.md rename to openspec/changes/archive/2025-12-30-add-antigravity-support/tasks.md diff --git a/openspec/changes/fix-cline-workflows-implementation/proposal.md b/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/proposal.md similarity index 92% rename from openspec/changes/fix-cline-workflows-implementation/proposal.md rename to openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/proposal.md index 3737254e..1d26b191 100644 --- a/openspec/changes/fix-cline-workflows-implementation/proposal.md +++ b/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/proposal.md @@ -8,6 +8,6 @@ The Cline implementation was architecturally incorrect. According to Cline's off - **BREAKING**: Existing Cline users will need to re-run `openspec init` to get the corrected workflow files ## Impact -- Affected specs: cli-init (corrected Cline workflow paths) +- Affected specs: cli-init, cli-update (corrected Cline workflow paths) - Affected code: `src/core/configurators/slash/cline.ts`, test files, README.md - Modified files: `.clinerules/workflows/openspec-*.md` (moved from `.clinerules/openspec-*.md`) diff --git a/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-init/spec.md b/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-init/spec.md new file mode 100644 index 00000000..06951acb --- /dev/null +++ b/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-init/spec.md @@ -0,0 +1,105 @@ +# Delta for CLI Init + +## MODIFIED Requirements +### Requirement: Slash Command Configuration +The init command SHALL generate slash command files for supported editors using shared templates. + +#### Scenario: Generating slash commands for Antigravity +- **WHEN** the user selects Antigravity during initialization +- **THEN** create `.agent/workflows/openspec-proposal.md`, `.agent/workflows/openspec-apply.md`, and `.agent/workflows/openspec-archive.md` +- **AND** ensure each file begins with YAML frontmatter that contains only a `description: ` field followed by the shared OpenSpec workflow instructions wrapped in managed markers +- **AND** populate the workflow body with the same proposal/apply/archive guidance used for other tools so Antigravity behaves like Windsurf while pointing to the `.agent/workflows/` directory + +#### Scenario: Generating slash commands for Claude Code +- **WHEN** the user selects Claude Code during initialization +- **THEN** create `.claude/commands/openspec/proposal.md`, `.claude/commands/openspec/apply.md`, and `.claude/commands/openspec/archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for CodeBuddy Code +- **WHEN** the user selects CodeBuddy Code during initialization +- **THEN** create `.codebuddy/commands/openspec/proposal.md`, `.codebuddy/commands/openspec/apply.md`, and `.codebuddy/commands/openspec/archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Cline +- **WHEN** the user selects Cline during initialization +- **THEN** create `.clinerules/workflows/openspec-proposal.md`, `.clinerules/workflows/openspec-apply.md`, and `.clinerules/workflows/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** include Cline-specific Markdown heading frontmatter +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Crush +- **WHEN** the user selects Crush during initialization +- **THEN** create `.crush/commands/openspec/proposal.md`, `.crush/commands/openspec/apply.md`, and `.crush/commands/openspec/archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** include Crush-specific frontmatter with OpenSpec category and tags +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Cursor +- **WHEN** the user selects Cursor during initialization +- **THEN** create `.cursor/commands/openspec-proposal.md`, `.cursor/commands/openspec-apply.md`, and `.cursor/commands/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Factory Droid +- **WHEN** the user selects Factory Droid during initialization +- **THEN** create `.factory/commands/openspec-proposal.md`, `.factory/commands/openspec-apply.md`, and `.factory/commands/openspec-archive.md` +- **AND** populate each file from shared templates that include Factory-compatible YAML frontmatter for the `description` and `argument-hint` fields +- **AND** include the `$ARGUMENTS` placeholder in the template body so droid receives any user-supplied input +- **AND** wrap the generated content in OpenSpec managed markers so `openspec update` can safely refresh the commands + +#### Scenario: Generating slash commands for OpenCode +- **WHEN** the user selects OpenCode during initialization +- **THEN** create `.opencode/commands/openspec-proposal.md`, `.opencode/commands/openspec-apply.md`, and `.opencode/commands/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Windsurf +- **WHEN** the user selects Windsurf during initialization +- **THEN** create `.windsurf/workflows/openspec-proposal.md`, `.windsurf/workflows/openspec-apply.md`, and `.windsurf/workflows/openspec-archive.md` +- **AND** populate each file from shared templates (wrapped in OpenSpec markers) so workflow text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Kilo Code +- **WHEN** the user selects Kilo Code during initialization +- **THEN** create `.kilocode/workflows/openspec-proposal.md`, `.kilocode/workflows/openspec-apply.md`, and `.kilocode/workflows/openspec-archive.md` +- **AND** populate each file from shared templates (wrapped in OpenSpec markers) so workflow text matches other tools +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Codex +- **WHEN** the user selects Codex during initialization +- **THEN** create global prompt files at `~/.codex/prompts/openspec-proposal.md`, `~/.codex/prompts/openspec-apply.md`, and `~/.codex/prompts/openspec-archive.md` (or under `$CODEX_HOME/prompts` if set) +- **AND** populate each file from shared templates that map the first numbered placeholder (`$1`) to the primary user input (e.g., change identifier or question text) +- **AND** wrap the generated content in OpenSpec markers so `openspec update` can refresh the prompts without touching surrounding custom notes + +#### Scenario: Generating slash commands for GitHub Copilot +- **WHEN** the user selects GitHub Copilot during initialization +- **THEN** create `.github/prompts/openspec-proposal.prompt.md`, `.github/prompts/openspec-apply.prompt.md`, and `.github/prompts/openspec-archive.prompt.md` +- **AND** populate each file with YAML frontmatter containing a `description` field that summarizes the workflow stage +- **AND** include `$ARGUMENTS` placeholder to capture user input +- **AND** wrap the shared template body with OpenSpec markers so `openspec update` can refresh the content +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for Gemini CLI +- **WHEN** the user selects Gemini CLI during initialization +- **THEN** create `.gemini/commands/openspec/proposal.toml`, `.gemini/commands/openspec/apply.toml`, and `.gemini/commands/openspec/archive.toml` +- **AND** populate each file as TOML that sets a stage-specific `description = ""` and a multi-line `prompt = """` block with the shared OpenSpec template +- **AND** wrap the OpenSpec managed markers (`` / ``) inside the `prompt` value so `openspec update` can safely refresh the body between markers without touching the TOML framing +- **AND** ensure the slash-command copy matches the existing proposal/apply/archive templates used by other tools + +#### Scenario: Generating slash commands for iFlow CLI +- **WHEN** the user selects iFlow CLI during initialization +- **THEN** create `.iflow/commands/openspec-proposal.md`, `.iflow/commands/openspec-apply.md`, and `.iflow/commands/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** include YAML frontmatter with `name`, `id`, `category`, and `description` fields for each command +- **AND** wrap the generated content in OpenSpec managed markers so `openspec update` can safely refresh the commands +- **AND** each template includes instructions for the relevant OpenSpec workflow stage + +#### Scenario: Generating slash commands for RooCode +- **WHEN** the user selects RooCode during initialization +- **THEN** create `.roo/commands/openspec-proposal.md`, `.roo/commands/openspec-apply.md`, and `.roo/commands/openspec-archive.md` +- **AND** populate each file from shared templates so command text matches other tools +- **AND** include simple Markdown headings (e.g., `# OpenSpec: Proposal`) without YAML frontmatter +- **AND** wrap the generated content in OpenSpec managed markers where applicable so `openspec update` can safely refresh the commands +- **AND** each template includes instructions for the relevant OpenSpec workflow stage diff --git a/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-update/spec.md b/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-update/spec.md new file mode 100644 index 00000000..2a49df16 --- /dev/null +++ b/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-update/spec.md @@ -0,0 +1,92 @@ +# Delta for CLI Update + +## MODIFIED Requirements +### Requirement: Slash Command Updates +The update command SHALL refresh existing slash command files for configured tools without creating new ones, and ensure the OpenCode archive command accepts change ID arguments. + +#### Scenario: Updating slash commands for Antigravity +- **WHEN** `.agent/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh the OpenSpec-managed portion of each file so the workflow copy matches other tools while preserving the existing single-field `description` frontmatter +- **AND** skip creating any missing workflow files during update, mirroring the behavior for Windsurf and other IDEs + +#### Scenario: Updating slash commands for Claude Code +- **WHEN** `.claude/commands/openspec/` contains `proposal.md`, `apply.md`, and `archive.md` +- **THEN** refresh each file using shared templates +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for CodeBuddy Code +- **WHEN** `.codebuddy/commands/openspec/` contains `proposal.md`, `apply.md`, and `archive.md` +- **THEN** refresh each file using shared templates +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Cline +- **WHEN** `.clinerules/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates +- **AND** include Cline-specific Markdown heading frontmatter +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Crush +- **WHEN** `.crush/commands/` contains `openspec/proposal.md`, `openspec/apply.md`, and `openspec/archive.md` +- **THEN** refresh each file using shared templates +- **AND** include Crush-specific frontmatter with OpenSpec category and tags +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Cursor +- **WHEN** `.cursor/commands/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Factory Droid +- **WHEN** `.factory/commands/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using the shared Factory templates that include YAML frontmatter for the `description` and `argument-hint` fields +- **AND** ensure the template body retains the `$ARGUMENTS` placeholder so user input keeps flowing into droid +- **AND** update only the content inside the OpenSpec managed markers, leaving any unmanaged notes untouched +- **AND** skip creating missing files during update + +#### Scenario: Updating slash commands for OpenCode +- **WHEN** `.opencode/command/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates +- **AND** ensure templates include instructions for the relevant workflow stage +- **AND** ensure the archive command includes `$ARGUMENTS` placeholder in frontmatter for accepting change ID arguments + +#### Scenario: Updating slash commands for Windsurf +- **WHEN** `.windsurf/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates wrapped in OpenSpec markers +- **AND** ensure templates include instructions for the relevant workflow stage +- **AND** skip creating missing files (the update command only refreshes what already exists) + +#### Scenario: Updating slash commands for Kilo Code +- **WHEN** `.kilocode/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates wrapped in OpenSpec markers +- **AND** ensure templates include instructions for the relevant workflow stage +- **AND** skip creating missing files (the update command only refreshes what already exists) + +#### Scenario: Updating slash commands for Codex +- **GIVEN** the global Codex prompt directory contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **WHEN** a user runs `openspec update` +- **THEN** refresh each file using the shared slash-command templates (including placeholder guidance) +- **AND** preserve any unmanaged content outside the OpenSpec marker block +- **AND** skip creation when a Codex prompt file is missing + +#### Scenario: Updating slash commands for GitHub Copilot +- **WHEN** `.github/prompts/` contains `openspec-proposal.prompt.md`, `openspec-apply.prompt.md`, and `openspec-archive.prompt.md` +- **THEN** refresh each file using shared templates while preserving the YAML frontmatter +- **AND** update only the OpenSpec-managed block between markers +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Updating slash commands for Gemini CLI +- **WHEN** `.gemini/commands/openspec/` contains `proposal.toml`, `apply.toml`, and `archive.toml` +- **THEN** refresh the body of each file using the shared proposal/apply/archive templates +- **AND** replace only the content between `` and `` markers inside the `prompt = """` block so the TOML framing (`description`, `prompt`) stays intact +- **AND** skip creating any missing `.toml` files during update; only pre-existing Gemini commands are refreshed + +#### Scenario: Updating slash commands for iFlow CLI +- **WHEN** `.iflow/commands/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh each file using shared templates +- **AND** preserve the YAML frontmatter with `name`, `id`, `category`, and `description` fields +- **AND** update only the OpenSpec-managed block between markers +- **AND** ensure templates include instructions for the relevant workflow stage + +#### Scenario: Missing slash command file +- **WHEN** a tool lacks a slash command file +- **THEN** do not create a new file during update diff --git a/openspec/changes/fix-cline-workflows-implementation/tasks.md b/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/tasks.md similarity index 100% rename from openspec/changes/fix-cline-workflows-implementation/tasks.md rename to openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/tasks.md diff --git a/openspec/changes/fix-cline-workflows-implementation/specs/cli-init/spec.md b/openspec/changes/fix-cline-workflows-implementation/specs/cli-init/spec.md deleted file mode 100644 index 2459a486..00000000 --- a/openspec/changes/fix-cline-workflows-implementation/specs/cli-init/spec.md +++ /dev/null @@ -1,11 +0,0 @@ -# Delta for CLI Init - -## MODIFIED Requirements -### Requirement: Slash Command Configuration - -#### Scenario: Generating slash commands for Cline -- **WHEN** the user selects Cline during initialization -- **THEN** create `.clinerules/workflows/openspec-proposal.md`, `.clinerules/workflows/openspec-apply.md`, and `.clinerules/workflows/openspec-archive.md` -- **AND** populate each file from shared templates so command text matches other tools -- **AND** include Cline-specific Markdown heading frontmatter -- **AND** each template includes instructions for the relevant OpenSpec workflow stage diff --git a/openspec/specs/cli-init/spec.md b/openspec/specs/cli-init/spec.md index 10866f39..e4f85009 100644 --- a/openspec/specs/cli-init/spec.md +++ b/openspec/specs/cli-init/spec.md @@ -172,6 +172,12 @@ The command SHALL use consistent exit codes to indicate different failure modes. ### Requirement: Slash Command Configuration The init command SHALL generate slash command files for supported editors using shared templates. +#### Scenario: Generating slash commands for Antigravity +- **WHEN** the user selects Antigravity during initialization +- **THEN** create `.agent/workflows/openspec-proposal.md`, `.agent/workflows/openspec-apply.md`, and `.agent/workflows/openspec-archive.md` +- **AND** ensure each file begins with YAML frontmatter that contains only a `description: ` field followed by the shared OpenSpec workflow instructions wrapped in managed markers +- **AND** populate the workflow body with the same proposal/apply/archive guidance used for other tools so Antigravity behaves like Windsurf while pointing to the `.agent/workflows/` directory + #### Scenario: Generating slash commands for Claude Code - **WHEN** the user selects Claude Code during initialization - **THEN** create `.claude/commands/openspec/proposal.md`, `.claude/commands/openspec/apply.md`, and `.claude/commands/openspec/archive.md` @@ -186,7 +192,7 @@ The init command SHALL generate slash command files for supported editors using #### Scenario: Generating slash commands for Cline - **WHEN** the user selects Cline during initialization -- **THEN** create `.clinerules/openspec-proposal.md`, `.clinerules/openspec-apply.md`, and `.clinerules/openspec-archive.md` +- **THEN** create `.clinerules/workflows/openspec-proposal.md`, `.clinerules/workflows/openspec-apply.md`, and `.clinerules/workflows/openspec-archive.md` - **AND** populate each file from shared templates so command text matches other tools - **AND** include Cline-specific Markdown heading frontmatter - **AND** each template includes instructions for the relevant OpenSpec workflow stage diff --git a/openspec/specs/cli-update/spec.md b/openspec/specs/cli-update/spec.md index d181d7d0..bd104b87 100644 --- a/openspec/specs/cli-update/spec.md +++ b/openspec/specs/cli-update/spec.md @@ -52,6 +52,11 @@ The update command SHALL always update the core OpenSpec files and display an AS ### Requirement: Slash Command Updates The update command SHALL refresh existing slash command files for configured tools without creating new ones, and ensure the OpenCode archive command accepts change ID arguments. +#### Scenario: Updating slash commands for Antigravity +- **WHEN** `.agent/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **THEN** refresh the OpenSpec-managed portion of each file so the workflow copy matches other tools while preserving the existing single-field `description` frontmatter +- **AND** skip creating any missing workflow files during update, mirroring the behavior for Windsurf and other IDEs + #### Scenario: Updating slash commands for Claude Code - **WHEN** `.claude/commands/openspec/` contains `proposal.md`, `apply.md`, and `archive.md` - **THEN** refresh each file using shared templates @@ -63,7 +68,7 @@ The update command SHALL refresh existing slash command files for configured too - **AND** ensure templates include instructions for the relevant workflow stage #### Scenario: Updating slash commands for Cline -- **WHEN** `.clinerules/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` +- **WHEN** `.clinerules/workflows/` contains `openspec-proposal.md`, `openspec-apply.md`, and `openspec-archive.md` - **THEN** refresh each file using shared templates - **AND** include Cline-specific Markdown heading frontmatter - **AND** ensure templates include instructions for the relevant workflow stage