From 2f9ffd5bbf2f18fd7e2166bc2d6b84ab07394754 Mon Sep 17 00:00:00 2001 From: Quratulain-bilal Date: Sun, 12 Jul 2026 03:19:52 +0500 Subject: [PATCH 1/2] tidy kiro-cli multi-install-safe declaration + add docs row and test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit kiro-cli is declared multi_install_safe (it uses a fully isolated .kiro/ root, .kiro/prompts command dir, a stable '.' separator, and a dedicated manifest — #3471). main ended up with the flag assigned twice in the class body; this drops the bare duplicate and keeps a single declaration with the comment explaining why it's safe. also adds the missing kiro-cli row to the multi-install-safe table in docs/reference/integrations.md, and a test asserting the flag is set (the registry contract tests already enforce the actual path isolation against every other safe integration). --- docs/reference/integrations.md | 1 + src/specify_cli/integrations/kiro_cli/__init__.py | 1 - tests/integrations/test_integration_kiro_cli.py | 10 ++++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/reference/integrations.md b/docs/reference/integrations.md index 72044ec684..50236c74f0 100644 --- a/docs/reference/integrations.md +++ b/docs/reference/integrations.md @@ -271,6 +271,7 @@ The currently declared multi-install safe integrations are: | `grok` | `.grok/skills` | | `junie` | `.junie/commands`, `.junie/AGENTS.md` | | `kilocode` | `.kilocode/workflows`, `.kilocode/rules/specify-rules.md` | +| `kiro-cli` | `.kiro/prompts` | | `qodercli` | `.qoder/commands`, `QODER.md` | | `qwen` | `.qwen/commands`, `QWEN.md` | | `shai` | `.shai/commands`, `SHAI.md` | diff --git a/src/specify_cli/integrations/kiro_cli/__init__.py b/src/specify_cli/integrations/kiro_cli/__init__.py index 37f743d5c2..868e4e64f0 100644 --- a/src/specify_cli/integrations/kiro_cli/__init__.py +++ b/src/specify_cli/integrations/kiro_cli/__init__.py @@ -13,7 +13,6 @@ class KiroCliIntegration(MarkdownIntegration): key = "kiro-cli" - multi_install_safe = True config = { "name": "Kiro CLI", "folder": ".kiro/", diff --git a/tests/integrations/test_integration_kiro_cli.py b/tests/integrations/test_integration_kiro_cli.py index a871e79a46..dc056d0c36 100644 --- a/tests/integrations/test_integration_kiro_cli.py +++ b/tests/integrations/test_integration_kiro_cli.py @@ -56,6 +56,16 @@ def test_registrar_config(self): assert i.registrar_config["format"] == "markdown" assert i.registrar_config["extension"] == ".md" + def test_declared_multi_install_safe(self): + """kiro-cli uses a fully isolated .kiro/ root, a stable "." separator, + and a dedicated manifest, so it must be declared multi-install safe — + otherwise co-installing it (e.g. alongside claude) leaves + `integration status` permanently in ERROR with no way to resolve it + (#3471). The registry contract tests enforce the actual path isolation + against every other safe integration.""" + i = get_integration(self.KEY) + assert i.multi_install_safe is True + def test_registrar_config_args_is_exact_prose_fallback(self): """Layer 1 — pin the exact fallback so wording drift requires a deliberate paired commit (production constant + test update).""" From 62faa8b8d4bf4bd0517c1818f69d52426c216586 Mon Sep 17 00:00:00 2001 From: Quratulain-bilal Date: Sat, 18 Jul 2026 02:31:38 +0500 Subject: [PATCH 2/2] address review: drop agent-file column and duplicate test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit per maintainer guidance on #3477: the Isolation table listed each integration's agent-context file (AGENTS.md, CLAUDE.md, etc.) alongside its command dir, which contradicted the safety definition (Copilot flagged kiro-cli/codex both mapping to AGENTS.md). those context files are owned by the optional agent-context extension, not by multi_install_safe — the flag governs only the command directory + manifest. - renamed the column to 'Command directory' and removed the agent-file entries, so it lists only what each integration actually manages - reworded the definition to note agent-context is a separate concern and is not multi-install safe - removed the duplicate test_declared_multi_install_safe (the existing test_declares_multi_install_safe already asserts the same thing) --- docs/reference/integrations.md | 42 +++++++++---------- .../integrations/test_integration_kiro_cli.py | 10 ----- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/docs/reference/integrations.md b/docs/reference/integrations.md index 50236c74f0..d9b0579be5 100644 --- a/docs/reference/integrations.md +++ b/docs/reference/integrations.md @@ -250,34 +250,32 @@ Spec Kit tracks one default integration in `.specify/integration.json` with `def ### Which integrations are multi-install safe? -An integration is multi-install safe when it uses a static, unique agent root and command directory, stable command invocation settings, and a separate install manifest whose managed files do not overlap another safe integration. Registry tests enforce those path and manifest invariants. Shared Spec Kit templates remain aligned to the single default integration. +An integration is multi-install safe when it uses a static, unique command directory, stable command invocation settings, and a separate install manifest whose managed files do not overlap another safe integration. Registry tests enforce those path and manifest invariants. Shared Spec Kit templates remain aligned to the single default integration. -The Isolation column below lists paths Spec Kit manages for that integration (skills/commands roots and any integration-owned rule files). It is not a full inventory of every file an agent may read. - -**Agent-context defaults are separate.** The optional agent-context extension maps each integration to a default context file in `extensions/agent-context/agent-context-defaults.json`. Those defaults are independent of multi-install safety: several agents may share a root file such as `AGENTS.md` when the extension is enabled. Multi-install safety does not require a unique context file per safe integration. +The Command directory column below lists the directory each integration installs its commands or skills into. The optional agent-context extension is a separate concern — it seeds a per-agent context file (for example `AGENTS.md` or `CLAUDE.md`) and is *not* multi-install safe, since several agents can map to the same context file; see the agent-context extension for details. The currently declared multi-install safe integrations are: -| Key | Isolation | -| --- | --------- | -| `auggie` | `.augment/commands`, `.augment/rules/specify-rules.md` | -| `claude` | `.claude/skills`, `CLAUDE.md` | -| `cline` | `.clinerules/workflows`, `.clinerules/specify-rules.md` | -| `codebuddy` | `.codebuddy/commands`, `CODEBUDDY.md` | -| `codex` | `.agents/skills`, `AGENTS.md` | -| `cursor-agent` | `.cursor/skills`, `.cursor/rules/specify-rules.mdc` | -| `firebender` | `.firebender/commands`, `.firebender/rules/specify-rules.mdc` | -| `gemini` | `.gemini/commands`, `GEMINI.md` | +| Key | Command directory | +| --- | ----------------- | +| `auggie` | `.augment/commands` | +| `claude` | `.claude/skills` | +| `cline` | `.clinerules/workflows` | +| `codebuddy` | `.codebuddy/commands` | +| `codex` | `.agents/skills` | +| `cursor-agent` | `.cursor/skills` | +| `firebender` | `.firebender/commands` | +| `gemini` | `.gemini/commands` | | `grok` | `.grok/skills` | -| `junie` | `.junie/commands`, `.junie/AGENTS.md` | -| `kilocode` | `.kilocode/workflows`, `.kilocode/rules/specify-rules.md` | +| `junie` | `.junie/commands` | +| `kilocode` | `.kilocode/workflows` | | `kiro-cli` | `.kiro/prompts` | -| `qodercli` | `.qoder/commands`, `QODER.md` | -| `qwen` | `.qwen/commands`, `QWEN.md` | -| `shai` | `.shai/commands`, `SHAI.md` | -| `tabnine` | `.tabnine/agent/commands`, `TABNINE.md` | -| `trae` | `.trae/skills`, `.trae/rules/project_rules.md` | -| `zcode` | `.zcode/skills`, `ZCODE.md` | +| `qodercli` | `.qoder/commands` | +| `qwen` | `.qwen/commands` | +| `shai` | `.shai/commands` | +| `tabnine` | `.tabnine/agent/commands` | +| `trae` | `.trae/skills` | +| `zcode` | `.zcode/skills` | Integrations that share a command directory with another integration, require dynamic install paths such as `--commands-dir`, or merge shared tool settings are not declared safe by default. They can still be installed alongside another integration with `--force`. diff --git a/tests/integrations/test_integration_kiro_cli.py b/tests/integrations/test_integration_kiro_cli.py index dc056d0c36..a871e79a46 100644 --- a/tests/integrations/test_integration_kiro_cli.py +++ b/tests/integrations/test_integration_kiro_cli.py @@ -56,16 +56,6 @@ def test_registrar_config(self): assert i.registrar_config["format"] == "markdown" assert i.registrar_config["extension"] == ".md" - def test_declared_multi_install_safe(self): - """kiro-cli uses a fully isolated .kiro/ root, a stable "." separator, - and a dedicated manifest, so it must be declared multi-install safe — - otherwise co-installing it (e.g. alongside claude) leaves - `integration status` permanently in ERROR with no way to resolve it - (#3471). The registry contract tests enforce the actual path isolation - against every other safe integration.""" - i = get_integration(self.KEY) - assert i.multi_install_safe is True - def test_registrar_config_args_is_exact_prose_fallback(self): """Layer 1 — pin the exact fallback so wording drift requires a deliberate paired commit (production constant + test update)."""