diff --git a/docs/reference/integrations.md b/docs/reference/integrations.md index f538fac86f..496aaccb12 100644 --- a/docs/reference/integrations.md +++ b/docs/reference/integrations.md @@ -248,7 +248,9 @@ 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 isolated agent directories, a dedicated context file that does not collide with another safe integration, stable command invocation settings, and a separate install manifest. Shared Spec Kit templates remain aligned to the single default integration. +An integration is multi-install safe when it uses isolated agent directories, stable command invocation settings, and a separate install manifest. Shared Spec Kit templates remain aligned to the single default integration. + +The `Isolation` column below lists each safe integration's install footprint (agent command directory, and its own rules/context file when it writes one). A few integrations map to the same top-level `AGENTS.md` as their coding-agent context file — for example `codex` and `kiro-cli`. That mapping is owned by the optional `agent-context` extension, which self-seeds the context file for the *single default* integration recorded in `.specify/init-options.json` only, never for every installed integration at once, so it does not cause two safe integrations to write the same file. The `multi_install_safe` flag itself governs only the install footprint (directories and manifest), which the registry contract tests verify is disjoint across every safe integration. The currently declared multi-install safe integrations are: @@ -264,6 +266,7 @@ The currently declared multi-install safe integrations are: | `gemini` | `.gemini/commands`, `GEMINI.md` | | `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 4c176e5127..fb56b6b10f 100644 --- a/src/specify_cli/integrations/kiro_cli/__init__.py +++ b/src/specify_cli/integrations/kiro_cli/__init__.py @@ -26,3 +26,9 @@ class KiroCliIntegration(MarkdownIntegration): "args": _KIRO_ARG_FALLBACK, "extension": ".md", } + # Isolated agent root (.kiro/) and command dir (.kiro/prompts) that do not + # collide with any other integration, a stable "." separator with no + # dynamic paths, and a dedicated install manifest — so kiro-cli meets every + # documented multi-install-safe criterion. The registry contract tests + # enforce this isolation against every other safe integration (#3471). + multi_install_safe = True diff --git a/tests/integrations/test_integration_kiro_cli.py b/tests/integrations/test_integration_kiro_cli.py index 29adb0a4a6..96c5aedd9d 100644 --- a/tests/integrations/test_integration_kiro_cli.py +++ b/tests/integrations/test_integration_kiro_cli.py @@ -53,6 +53,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)."""