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
1 change: 1 addition & 0 deletions docs/reference/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,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` |
Expand Down
6 changes: 6 additions & 0 deletions src/specify_cli/integrations/kiro_cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
10 changes: 10 additions & 0 deletions tests/integrations/test_integration_kiro_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)."""
Expand Down