@bonesofspring/ai-rules 0.2.10 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +3 -1
  3. package/bin/cli.js +2 -0
  4. package/package.json +1 -1
  5. package/presets/_shared/core/meta/preset-no-cross-stack-leakage.md +15 -2
  6. package/presets/_shared/core/meta/preset-twin-sync.md +2 -0
  7. package/presets/claude/go/rules/tooling-and-review/preset-no-cross-stack-leakage.md +15 -2
  8. package/presets/claude/go/rules/tooling-and-review/preset-twin-sync.md +2 -0
  9. package/presets/claude/ios-swift/rules/tooling-and-review/preset-no-cross-stack-leakage.md +15 -2
  10. package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +2 -0
  11. package/presets/claude/java/rules/tooling-and-review/preset-no-cross-stack-leakage.md +15 -2
  12. package/presets/claude/java/rules/tooling-and-review/preset-twin-sync.md +2 -0
  13. package/presets/claude/mcp-ts/CLAUDE.md +13 -0
  14. package/presets/claude/mcp-ts/MCP.md +37 -0
  15. package/presets/claude/mcp-ts/README.md +11 -0
  16. package/presets/claude/mcp-ts/REPO_AGENTS.md +49 -0
  17. package/presets/claude/mcp-ts/agents/README.md +21 -0
  18. package/presets/claude/mcp-ts/agents/build-verifier.md +39 -0
  19. package/presets/claude/mcp-ts/agents/feature-developer.md +47 -0
  20. package/presets/claude/mcp-ts/agents/security-reviewer.md +21 -0
  21. package/presets/claude/mcp-ts/agents/solution-architect.md +23 -0
  22. package/presets/claude/mcp-ts/agents/task-analyst.md +25 -0
  23. package/presets/claude/mcp-ts/agents/task-router.md +73 -0
  24. package/presets/claude/mcp-ts/commands/README.md +11 -0
  25. package/presets/claude/mcp-ts/commands/feature-continue.md +19 -0
  26. package/presets/claude/mcp-ts/commands/feature-start.md +33 -0
  27. package/presets/claude/mcp-ts/commands/task-continue.md +49 -0
  28. package/presets/claude/mcp-ts/commands/task.md +49 -0
  29. package/presets/claude/mcp-ts/commands/technical-retro.md +81 -0
  30. package/presets/claude/mcp-ts/hooks/README.md +12 -0
  31. package/presets/claude/mcp-ts/hooks/chain-team-phases.sh +346 -0
  32. package/presets/claude/mcp-ts/hooks/examples/README.md +11 -0
  33. package/presets/claude/mcp-ts/hooks/examples/format-edited.example.sh +16 -0
  34. package/presets/claude/mcp-ts/hooks/examples/secret-guard.example.sh +10 -0
  35. package/presets/claude/mcp-ts/hooks/examples/test-on-save.example.sh +25 -0
  36. package/presets/claude/mcp-ts/hooks/guard-shell-command.sh +79 -0
  37. package/presets/claude/mcp-ts/mcp.json +11 -0
  38. package/presets/claude/mcp-ts/rules/README.md +52 -0
  39. package/presets/claude/mcp-ts/rules/api-and-data/README.md +3 -0
  40. package/presets/claude/mcp-ts/rules/api-and-data/mcp-auth-secrets.md +44 -0
  41. package/presets/claude/mcp-ts/rules/api-and-data/mcp-contract-testing.md +42 -0
  42. package/presets/claude/mcp-ts/rules/api-and-data/mcp-tool-design.md +37 -0
  43. package/presets/claude/mcp-ts/rules/api-and-data/mcp-transport-packaging.md +43 -0
  44. package/presets/claude/mcp-ts/rules/architecture/README.md +3 -0
  45. package/presets/claude/mcp-ts/rules/architecture/feature-delivery.md +45 -0
  46. package/presets/claude/mcp-ts/rules/architecture/mcp-server-boundaries.md +28 -0
  47. package/presets/claude/mcp-ts/rules/architecture/reference-features.md +33 -0
  48. package/presets/claude/mcp-ts/rules/stack/README.md +3 -0
  49. package/presets/claude/mcp-ts/rules/stack/mcp-ts-app-core.md +27 -0
  50. package/presets/claude/mcp-ts/rules/stack/mcp-ts-conventions.md +29 -0
  51. package/presets/claude/mcp-ts/rules/testing/README.md +3 -0
  52. package/presets/claude/mcp-ts/rules/testing/unit.md +30 -0
  53. package/presets/claude/mcp-ts/rules/tooling-and-review/README.md +3 -0
  54. package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-intake.md +23 -0
  55. package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-orchestrator.md +161 -0
  56. package/presets/claude/mcp-ts/rules/tooling-and-review/anti-sycophancy-discipline.md +34 -0
  57. package/presets/claude/mcp-ts/rules/tooling-and-review/code-quality.md +52 -0
  58. package/presets/claude/mcp-ts/rules/tooling-and-review/code-review.md +51 -0
  59. package/presets/claude/mcp-ts/rules/tooling-and-review/design-guidance.md +109 -0
  60. package/presets/claude/mcp-ts/rules/tooling-and-review/mcp-ts-tooling.md +31 -0
  61. package/presets/claude/mcp-ts/rules/tooling-and-review/post-change-test.md +30 -0
  62. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-layering.md +36 -0
  63. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-no-cross-stack-leakage.md +69 -0
  64. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +39 -0
  65. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-token-budget.md +41 -0
  66. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-twin-sync.md +46 -0
  67. package/presets/claude/mcp-ts/rules/tooling-and-review/security-mcp.md +52 -0
  68. package/presets/claude/mcp-ts/rules/tooling-and-review/technical-retro.md +20 -0
  69. package/presets/claude/mcp-ts/rules/ui-and-accessibility/README.md +3 -0
  70. package/presets/claude/mcp-ts/skills/README.md +12 -0
  71. package/presets/claude/mcp-ts/skills/code-review/SKILL.md +10 -0
  72. package/presets/claude/mcp-ts/skills/debug-investigation/SKILL.md +11 -0
  73. package/presets/claude/mcp-ts/skills/feature-delivery/SKILL.md +29 -0
  74. package/presets/claude/mcp-ts/skills/unit-testing/SKILL.md +16 -0
  75. package/presets/claude/mcp-ts/team/README.md +17 -0
  76. package/presets/claude/mcp-ts/team/conventions.md +14 -0
  77. package/presets/claude/mcp-ts/team/fixtures/bugfix-standard.json +32 -0
  78. package/presets/claude/mcp-ts/team/fixtures/feature-full.json +33 -0
  79. package/presets/claude/mcp-ts/team/fixtures/feature-light.json +34 -0
  80. package/presets/claude/next/rules/tooling-and-review/preset-no-cross-stack-leakage.md +15 -2
  81. package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +2 -0
  82. package/presets/cursor/go/rules/preset-no-cross-stack-leakage.mdc +15 -2
  83. package/presets/cursor/go/rules/preset-twin-sync.mdc +2 -0
  84. package/presets/cursor/ios-swift/rules/preset-no-cross-stack-leakage.mdc +15 -2
  85. package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +2 -0
  86. package/presets/cursor/java/rules/preset-no-cross-stack-leakage.mdc +15 -2
  87. package/presets/cursor/java/rules/preset-twin-sync.mdc +2 -0
  88. package/presets/cursor/mcp-ts/AGENTS.md +25 -0
  89. package/presets/cursor/mcp-ts/BUGBOT.md +9 -0
  90. package/presets/cursor/mcp-ts/MCP.md +37 -0
  91. package/presets/cursor/mcp-ts/README.md +19 -0
  92. package/presets/cursor/mcp-ts/REPO_AGENTS.md +49 -0
  93. package/presets/cursor/mcp-ts/agents/README.md +21 -0
  94. package/presets/cursor/mcp-ts/agents/build-verifier.md +39 -0
  95. package/presets/cursor/mcp-ts/agents/feature-developer.md +47 -0
  96. package/presets/cursor/mcp-ts/agents/security-reviewer.md +21 -0
  97. package/presets/cursor/mcp-ts/agents/solution-architect.md +23 -0
  98. package/presets/cursor/mcp-ts/agents/task-analyst.md +25 -0
  99. package/presets/cursor/mcp-ts/agents/task-router.md +73 -0
  100. package/presets/cursor/mcp-ts/commands/README.md +11 -0
  101. package/presets/cursor/mcp-ts/commands/feature-continue.md +19 -0
  102. package/presets/cursor/mcp-ts/commands/feature-start.md +33 -0
  103. package/presets/cursor/mcp-ts/commands/task-continue.md +49 -0
  104. package/presets/cursor/mcp-ts/commands/task.md +49 -0
  105. package/presets/cursor/mcp-ts/commands/technical-retro.md +81 -0
  106. package/presets/cursor/mcp-ts/hooks/README.md +12 -0
  107. package/presets/cursor/mcp-ts/hooks/chain-team-phases.sh +346 -0
  108. package/presets/cursor/mcp-ts/hooks/examples/README.md +11 -0
  109. package/presets/cursor/mcp-ts/hooks/examples/format-edited.example.sh +16 -0
  110. package/presets/cursor/mcp-ts/hooks/examples/secret-guard.example.sh +10 -0
  111. package/presets/cursor/mcp-ts/hooks/examples/test-on-save.example.sh +25 -0
  112. package/presets/cursor/mcp-ts/hooks/guard-shell-command.sh +79 -0
  113. package/presets/cursor/mcp-ts/hooks.json +17 -0
  114. package/presets/cursor/mcp-ts/mcp.json +11 -0
  115. package/presets/cursor/mcp-ts/rules/README.md +52 -0
  116. package/presets/cursor/mcp-ts/rules/agent-team-intake.mdc +21 -0
  117. package/presets/cursor/mcp-ts/rules/agent-team-orchestrator.mdc +159 -0
  118. package/presets/cursor/mcp-ts/rules/anti-sycophancy-discipline.mdc +35 -0
  119. package/presets/cursor/mcp-ts/rules/code-quality-and-refactoring.mdc +53 -0
  120. package/presets/cursor/mcp-ts/rules/code-review-mr.mdc +50 -0
  121. package/presets/cursor/mcp-ts/rules/design-guidance.mdc +108 -0
  122. package/presets/cursor/mcp-ts/rules/feature-delivery-workflow.mdc +43 -0
  123. package/presets/cursor/mcp-ts/rules/mcp-auth-secrets.mdc +45 -0
  124. package/presets/cursor/mcp-ts/rules/mcp-contract-testing.mdc +43 -0
  125. package/presets/cursor/mcp-ts/rules/mcp-server-boundaries.mdc +29 -0
  126. package/presets/cursor/mcp-ts/rules/mcp-tool-design.mdc +38 -0
  127. package/presets/cursor/mcp-ts/rules/mcp-transport-packaging.mdc +44 -0
  128. package/presets/cursor/mcp-ts/rules/mcp-ts-app-core.mdc +28 -0
  129. package/presets/cursor/mcp-ts/rules/mcp-ts-conventions.mdc +30 -0
  130. package/presets/cursor/mcp-ts/rules/mcp-ts-tooling.mdc +32 -0
  131. package/presets/cursor/mcp-ts/rules/post-change-test.mdc +26 -0
  132. package/presets/cursor/mcp-ts/rules/preset-layering.mdc +36 -0
  133. package/presets/cursor/mcp-ts/rules/preset-no-cross-stack-leakage.mdc +69 -0
  134. package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +39 -0
  135. package/presets/cursor/mcp-ts/rules/preset-token-budget.mdc +41 -0
  136. package/presets/cursor/mcp-ts/rules/preset-twin-sync.mdc +46 -0
  137. package/presets/cursor/mcp-ts/rules/reference-features.mdc +34 -0
  138. package/presets/cursor/mcp-ts/rules/security-mcp.mdc +53 -0
  139. package/presets/cursor/mcp-ts/rules/technical-retro.mdc +18 -0
  140. package/presets/cursor/mcp-ts/rules/tests-unit.mdc +31 -0
  141. package/presets/cursor/mcp-ts/skills/README.md +12 -0
  142. package/presets/cursor/mcp-ts/skills/code-review/SKILL.md +10 -0
  143. package/presets/cursor/mcp-ts/skills/debug-investigation/SKILL.md +11 -0
  144. package/presets/cursor/mcp-ts/skills/feature-delivery/SKILL.md +29 -0
  145. package/presets/cursor/mcp-ts/skills/unit-testing/SKILL.md +16 -0
  146. package/presets/cursor/mcp-ts/team/README.md +17 -0
  147. package/presets/cursor/mcp-ts/team/conventions.md +14 -0
  148. package/presets/cursor/mcp-ts/team/fixtures/bugfix-standard.json +32 -0
  149. package/presets/cursor/mcp-ts/team/fixtures/feature-full.json +33 -0
  150. package/presets/cursor/mcp-ts/team/fixtures/feature-light.json +34 -0
  151. package/presets/cursor/next/rules/preset-no-cross-stack-leakage.mdc +15 -2
  152. package/presets/cursor/next/rules/preset-twin-sync.mdc +2 -0
@@ -0,0 +1,44 @@
1
+ ---
2
+ description: MCP stdio lifecycle, optional remote transport, bin/npx packaging
3
+ globs:
4
+ - src/index.ts
5
+ - package.json
6
+ - **/Dockerfile
7
+ - **/docker-compose*.yml
8
+ alwaysApply: false
9
+ ---
10
+
11
+ # MCP transport and packaging
12
+
13
+ ## Default: stdio
14
+
15
+ - Local Cursor/Claude use → **stdio** transport from the server entry (`src/index.ts` or equivalent).
16
+ - Entry owns connect/listen lifecycle and graceful shutdown; tools must not open competing transports.
17
+ - Fail closed on missing required startup configuration.
18
+
19
+ ## Packaging
20
+
21
+ - Expose a `bin` / `npx`-friendly entry in `package.json` that runs the compiled or `tsx` entry as appropriate for the repo.
22
+ - Keep `files` / publish contents minimal; do not ship secrets, `.env`, or local credentials.
23
+ - Document install and run commands in the consumer README — not by registering a half-built server into shipped client MCP JSON.
24
+
25
+ ## Optional remote transport
26
+
27
+ - Streamable HTTP / SSE / remote hosting is **opt-in** — load this rule + `mcp-auth-secrets` + `security-mcp`.
28
+ - Require explicit AC for auth mode, network exposure, and rate limits.
29
+ - Before exposing remotely: implement **per-request** token validation (issuer/audience/expiry/scopes) and trusted request context per `mcp-auth-secrets`; treat retrieved content as untrusted per `security-mcp`.
30
+ - Do not mandate Docker/OAuth/Inspector for every stdio-only server.
31
+
32
+ ## Threat model by transport
33
+
34
+ | Mode | Trust boundary | Who can invoke tools | Required controls |
35
+ |------|----------------|----------------------|-------------------|
36
+ | **stdio** (default) | Same machine / IDE process | Host user + IDE agent session | Least-privilege tools; no network AuthN assumed; secrets via env; fail closed on missing config |
37
+ | **HTTP / SSE** (opt-in) | Network-reachable process | Any client that can reach bind address | **TLS required** for non-localhost (or trusted TLS-terminating proxy with documented boundary); localhost-only bind OK without TLS; auth fail-closed; per-request issuer/audience/expiry/scopes; rate limits; safe errors (no token echo) |
38
+
39
+ - Prefer bind `127.0.0.1` for local remote-dev; treat `0.0.0.0` as production exposure needing AC + TLS (or documented TLS-terminating proxy). Never expose bearer/OAuth over plaintext off-localhost.
40
+ - Stdio inherits host privileges — do not compensate by adding “execute anything” tools.
41
+
42
+ ## VERIFY
43
+
44
+ - Transport constructor and `Server` / `McpServer` APIs drift across SDK versions — verify against the installed package before inventing calls.
@@ -0,0 +1,28 @@
1
+ ---
2
+ description: TypeScript MCP stack, layout, stdio-first entry (mcp-ts preset)
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Стек и окружение
7
+
8
+ Версии Node, TypeScript и `@modelcontextprotocol/sdk` — **из `package.json` / lockfile целевого репозитория**. Рамка preset:
9
+
10
+ - **Язык / платформа:** TypeScript (Node); package manager — discover from lockfile / `packageManager`.
11
+ - **SDK:** official `@modelcontextprotocol/sdk` — verify APIs before use (`VERIFY:` markers when unsure).
12
+ - **Транспорт по умолчанию:** **stdio-first**; remote HTTP/auth — requestable rules only.
13
+ - **Точка входа:** `src/index.ts` (or repo equivalent) owns transport + lifecycle — not individual tools.
14
+ - **Тесты:** repository runner (Vitest/Jest/node:test); contract fixtures for schemas — see `mcp-contract-testing`.
15
+ - **Наблюдаемость:** only if already in repo — never log secrets or full tool payloads with credentials.
16
+
17
+ # Структура (suggested)
18
+
19
+ ```text
20
+ src/index.ts # transport + server lifecycle
21
+ src/tools/ # tool registration + handlers
22
+ src/resources/ # resource registration (if used)
23
+ src/prompts/ # prompt registration (if used)
24
+ src/**/schemas.ts # Zod authoring schemas
25
+ package.json # bin / main for stdio packaging
26
+ ```
27
+
28
+ Границы — **`mcp-server-boundaries`**. Tooling — requestable **`mcp-ts-tooling`**. После правок TS — **`post-change-test`**.
@@ -0,0 +1,30 @@
1
+ ---
2
+ description: Strict TypeScript, Zod validation, safe errors, SDK verification for MCP
3
+ globs:
4
+ - src/**/*.ts
5
+ - src/**/*.tsx
6
+ alwaysApply: false
7
+ ---
8
+
9
+ # TypeScript conventions (MCP servers)
10
+
11
+ - Prefer **strict** TypeScript (`strict` true when adding a new tsconfig; do not weaken existing strictness without AC).
12
+ - Validate tool inputs with Zod (or repo schema lib) **before** side effects.
13
+ - Export narrow types for handler inputs inferred from schemas (`z.infer<typeof schema>`).
14
+ - Errors returned to clients: safe messages; log details server-side with redaction.
15
+ - Avoid `any`; prefer `unknown` + narrowing at boundaries.
16
+ - SDK calls: confirm symbols against installed `@modelcontextprotocol/sdk` — use `// VERIFY: @modelcontextprotocol/sdk @ <version>` when unsure.
17
+ - Do not invent hexagonal `internal/domain|application|adapters` layouts unless the target repo already uses them.
18
+
19
+ ## Registration flow
20
+
21
+ 1. Define Zod (or equivalent) input schema next to the tool.
22
+ 2. Map schema → JSON Schema / SDK registration shape the repo uses.
23
+ 3. Implement a pure handler that accepts validated args + narrow capability ports (FS/net/secrets).
24
+ 4. Register the tool once from the server entry (`src/index.ts` or a dedicated register module) — handlers must not open a second transport.
25
+ 5. Cover invalid inputs and happy path in colocated `*.spec.ts` / `*.test.ts` before packaging.
26
+
27
+ ## Errors and types
28
+
29
+ - Prefer typed result/error unions over throwing across the MCP boundary when the SDK pattern allows.
30
+ - Never put stack traces, env dumps, or tokens in tool results.
@@ -0,0 +1,32 @@
1
+ ---
2
+ description: Discover package manager; typecheck/test/Inspector commands for MCP TS
3
+ globs:
4
+ - package.json
5
+ - tsconfig*.json
6
+ - **/vitest.config.*
7
+ - **/jest.config.*
8
+ - **/eslint.config.*
9
+ alwaysApply: false
10
+ ---
11
+
12
+ # Tooling (mcp-ts)
13
+
14
+ Discover package manager **before** running scripts:
15
+
16
+ 1. `packageManager` in `package.json`
17
+ 2. Lockfile: `yarn.lock` → yarn; `pnpm-lock.yaml` → pnpm; `package-lock.json` → npm; `bun.lock(b)` → bun
18
+ 3. Use **only** that manager for install/run
19
+
20
+ ## Typical gates (adapt to repo scripts)
21
+
22
+ | Gate | Discovery |
23
+ |------|-----------|
24
+ | Typecheck | `tsc --noEmit` or script `typecheck` / `build` that typechecks |
25
+ | Test | script `test` / `test:unit` / Vitest / Jest / `node:test` |
26
+ | Lint | project ESLint if configured — never invent Next `lint:js`/`lint:css` as required |
27
+ | Inspector | optional smoke — not required for every change |
28
+
29
+ ## Agent requirement
30
+
31
+ - Do not hard-code `yarn` if the repo uses pnpm/npm/bun.
32
+ - Never require Go tools (`go test` / `go vet`), `xcodebuild`, or Playwright as this stack's gate.
@@ -0,0 +1,26 @@
1
+ ---
2
+ description: Mandatory typecheck + tests after TypeScript MCP edits
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Post-change test (requestable, mandatory after TS MCP edits)
7
+
8
+ After changing TypeScript / package manifests in a consumer MCP server repo:
9
+
10
+ 1. Discover package manager (`mcp-ts-tooling`).
11
+ 2. Run **typecheck** (project script or `tsc --noEmit`).
12
+ 3. Run **tests** scoped to touched packages/files when possible; full suite before claiming done.
13
+ 4. Optional: MCP Inspector smoke for registration changes — not a hard gate.
14
+
15
+ ## Scope hints
16
+
17
+ - Schema-only changes: include contract/schema fixture tests.
18
+ - Handler changes: unit tests for valid/invalid inputs and error mapping.
19
+ - Packaging/`bin` changes: verify entry still starts under stdio (manual or smoke).
20
+
21
+ ## Agent requirement
22
+
23
+ - Do not claim completion without running the applicable gate (or noting why CI-only).
24
+ - Pipeline `build-verifier` enforces the same checklist.
25
+ - Skip only when the change is docs/config with no `*.ts` / package impact — state that explicitly.
26
+ - Never require Playwright, XCUITest, Next lint recipes, or Go toolchains.
@@ -0,0 +1,36 @@
1
+ ---
2
+ description: Preset authoring meta-rule (preset-layering)
3
+ globs:
4
+ - packages/ai-rules/presets/**/*
5
+ - .cursor/rules/**/*
6
+ - .cursor/team/tasks/**/*
7
+ alwaysApply: false
8
+ ---
9
+
10
+ <!-- shared-core: meta/preset-layering.md -->
11
+
12
+ # Preset layering
13
+
14
+ Правила для **авторов пресетов** (`packages/ai-rules/presets/**`). Не always-on в consumer apps.
15
+
16
+ ## Слои
17
+
18
+ | Слой | Где | Что класть |
19
+ |------|-----|------------|
20
+ | **Core** | `presets/_shared/core/**` | Stack-agnostic prose + checklists; без frontmatter; без путей `app/**`, `Features/**`, Playwright, xcodebuild |
21
+ | **Stack** | `presets/{cursor\|claude}/<stack>/` | Domain/tooling, always-on trio стека, stack examples в **Stack notes** |
22
+ | **Platform** | Cursor `.mdc` / Claude `.md` | Frontmatter (`alwaysApply`/`globs` vs `paths:`), platform-only (`BUGBOT.md`, `CLAUDE.md`) |
23
+
24
+ ## Куда класть новое правило
25
+
26
+ 1. Общие принципы для всех стеков → **core** + адаптеры с `<!-- shared-core: … -->`.
27
+ 2. Только один из installable стеков (`next` / `ios-swift` / `go` / `java`) → **stack-specific** (не в `_shared`).
28
+ 3. Только Cursor или только Claude packaging → platform artifact / frontmatter, не дублировать семантику.
29
+
30
+ ## SoT
31
+
32
+ - Packages path — SoT; root `.cursor/` — dogfood sync.
33
+ - Per stack: **Cursor** `presets/cursor/<stack>/` → Claude twin same PR.
34
+ - `_shared` **не** `--preset` и не копируется CLI `init`.
35
+
36
+ См. также: `preset-twin-sync`, `preset-token-budget`, `preset-pr-checklist`, `preset-no-cross-stack-leakage`.
@@ -0,0 +1,69 @@
1
+ ---
2
+ description: Preset authoring meta-rule (preset-no-cross-stack-leakage)
3
+ globs:
4
+ - packages/ai-rules/presets/**/*
5
+ - .cursor/rules/**/*
6
+ - .cursor/team/tasks/**/*
7
+ alwaysApply: false
8
+ ---
9
+
10
+ <!-- shared-core: meta/preset-no-cross-stack-leakage.md -->
11
+
12
+ # Preset no cross-stack leakage
13
+
14
+ Запрет протекания stack-specific имён, путей и handoff stems между пресетами.
15
+
16
+ ## Principles
17
+
18
+ - `next` must not require iOS-only agents/tooling (`xcuitest-*`, `xcodebuild` as required handoff, Keychain-only rules).
19
+ - `ios-swift` must not ship Playwright handoffs or Next lint recipes as required commands.
20
+ - `go` / `java` / `mcp-ts` must not ship Playwright, XCUITest, Next lint recipes, or `xcodebuild`/`SwiftLint` as required handoffs.
21
+ - `mcp-ts` must not ship Go tool commands (`go test`, `go vet`, `golangci-lint`) or `integration-test-*` agents as required delivery gates.
22
+ - Shared core must not embed stack paths (`app/src/**`, `Features/**`, `playwright`, `xcodebuild`).
23
+
24
+ ## Forbidden in ios-swift hooks/agents (FAIL)
25
+
26
+ In ios-swift `chain-team-phases.sh` / agent handoffs (Cursor + Claude):
27
+
28
+ - `playwright-test-`, `playwright-agents`, `playwright-e2e`, `user-playwright`
29
+ - `app/__tests__/e2e` as a required path
30
+ - Positive yarn recipes `lint:js` / `lint:css` as commands to run (negation prose alone is weak — prefer zero occurrences)
31
+
32
+ Required instead: `xcuitest-test-*` stems; build-verifier mentions `xcodebuild` or `post-change-build` / `xcode-tooling`.
33
+
34
+ ## Forbidden in next hooks/agents (FAIL when present as required)
35
+
36
+ - `xcuitest-test-` as handoff stems
37
+ - Requiring `xcodebuild` / SwiftLint as the default post-change gate for Next app work
38
+
39
+ ## Forbidden in go / java hooks/agents (FAIL)
40
+
41
+ Shared backend-stack bans (both `go` and `java`):
42
+
43
+ - `playwright-test-`, `playwright-e2e`, `user-playwright`, `app/__tests__/e2e`
44
+ - Positive yarn recipes `lint:js` / `lint:css`
45
+ - `xcuitest-test-`, `xcodebuild`, `SwiftLint` as required handoffs
46
+ - Agent file `accessibility-reviewer` (no UI surface)
47
+
48
+ Required instead: `integration-test-*`; build-verifier / `post-change-test` plus stack tooling — `go-tooling` (`go test`, `go vet`) or `java-tooling` (`mvn test` / `./gradlew test`).
49
+
50
+ ## Forbidden in mcp-ts hooks/agents (FAIL)
51
+
52
+ Same UI/mobile bans as backend stacks, plus:
53
+
54
+ - `playwright-test-`, `playwright-agents`, `playwright-e2e`, `user-playwright`, `app/__tests__/e2e`
55
+ - Positive yarn recipes `lint:js` / `lint:css` as required gates
56
+ - `xcuitest-test-`, `xcodebuild`, `SwiftLint` as required handoffs
57
+ - Go tool commands as required MCP delivery gates: `go test`, `go vet`, `golangci-lint`
58
+ - Agent files: `playwright-test-*`, `xcuitest-test-*`, `integration-test-*`, `accessibility-reviewer`
59
+
60
+ Required instead: package-manager–discovered typecheck/test (`mcp-ts-tooling`, `post-change-test`); Phase 1 gates `build-verifier` + `security-reviewer`.
61
+
62
+ ## Soft / document
63
+
64
+ - Mentioning the other stack in **docs** comparing presets is OK.
65
+ - `build-verifier` may reference other stacks when validating **preset packaging** (`scope: preset-structure-validation`).
66
+
67
+ ## Chain fork
68
+
69
+ `hooks/chain-team-phases.sh` must differ **byte-wise** pairwise among `next`, `ios-swift`, `go`, `java`, and `mcp-ts` (per platform).
@@ -0,0 +1,39 @@
1
+ ---
2
+ description: Preset authoring meta-rule (preset-pr-checklist)
3
+ globs:
4
+ - packages/ai-rules/presets/**/*
5
+ - .cursor/rules/**/*
6
+ - .cursor/team/tasks/**/*
7
+ alwaysApply: false
8
+ ---
9
+
10
+ <!-- shared-core: meta/preset-pr-checklist.md -->
11
+
12
+ # Preset PR checklist
13
+
14
+ Чеклист для PR, затрагивающих `packages/ai-rules/presets/**` (и dogfood `.cursor/` sync).
15
+
16
+ ## Before merge
17
+
18
+ - [ ] **SoT:** правки в `packages/…` (не только root `.cursor/`)
19
+ - [ ] **Core:** если менялся `_shared/core/**` — обновлены все `<!-- shared-core: … -->` consumers (или documented intentional fork)
20
+ - [ ] **Twin:** Cursor change → Claude twin **same PR** (**FAIL** if missing on next, ios-swift, go, and java — см. `preset-twin-sync`)
21
+ - [ ] **Mapping:** `claude/<stack>/rules/README.md` mapping table актуален
22
+ - [ ] **Token budget:** alwaysApply / session-start ≤ 3; meta rules not always-on
23
+ - [ ] **Leakage:** нет чужих stack agent stems / handoff strings (`preset-no-cross-stack-leakage`)
24
+ - [ ] **Twin depth:** domain ≥15 lines; thin aliases documented
25
+ - [ ] **README:** stack `rules/README.md` core→stack mapping / catalog updated if stems added
26
+ - [ ] **CHANGELOG / package README:** note when public preset paths or install surface change
27
+ - [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh` (or document intentional skip) when maintaining this monorepo
28
+ - [ ] **shared-core drift:** for embed-mode stems, run `packages/ai-rules/scripts/check-shared-core-drift.sh` (or document intentional fork)
29
+
30
+ ## Pointers
31
+
32
+ - Layering: `preset-layering`
33
+ - Sync: `preset-twin-sync`
34
+ - Budget: `preset-token-budget`
35
+ - Leakage: `preset-no-cross-stack-leakage`
36
+ - Validation: stack `agents/build-verifier.md` → preset-structure section
37
+ - Dogfood script: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`
38
+ - Drift script: `packages/ai-rules/scripts/check-shared-core-drift.sh`
39
+ - Orchestrator: when editing presets, load this checklist + twin-sync
@@ -0,0 +1,41 @@
1
+ ---
2
+ description: Preset authoring meta-rule (preset-token-budget)
3
+ globs:
4
+ - packages/ai-rules/presets/**/*
5
+ - .cursor/rules/**/*
6
+ - .cursor/team/tasks/**/*
7
+ alwaysApply: false
8
+ ---
9
+
10
+ <!-- shared-core: meta/preset-token-budget.md -->
11
+
12
+ # Preset token budget
13
+
14
+ Инварианты загрузки правил в **установленном** пресете (consumer app).
15
+
16
+ ## Hard caps
17
+
18
+ | Platform | Always-on | Cap |
19
+ |----------|-----------|-----|
20
+ | Cursor | `alwaysApply: true` | **≤ 3** |
21
+ | Claude | rules **without** `paths:` | **ровно 3** |
22
+
23
+ **Claude Option A (README exclusion):** when counting Claude rules without `paths:` / session-start, **exclude `**/README.md`** (topic indexes are not session-start rules). The intended session-start trio remains **exactly 3**; body budget sums **only those 3** rules.
24
+
25
+ Session-start body budget (где задокументировано): ≤140 строк суммарно (stretch ≤120).
26
+
27
+ ## Meta / author rules
28
+
29
+ Rules for preset authors (`preset-layering`, `preset-twin-sync`, …):
30
+
31
+ - **Never** `alwaysApply: true` on consumer installs.
32
+ - Cursor: `globs` limited to `packages/ai-rules/presets/**` (and dogfood `.cursor/**` where useful).
33
+ - Claude: `paths:` limited to `packages/ai-rules/presets/**` (and `.claude/**` dogfood if present).
34
+
35
+ ## Heavy workflows
36
+
37
+ Orchestrator, feature-delivery, code-review, post-change gates, domain globs — **requestable / paths**, not always-on.
38
+
39
+ ## Verifier
40
+
41
+ build-verifier **FAIL** if alwaysApply / session-start count exceeds 3 (Claude count **excludes `**/README.md`**), or if a `preset-*` meta rule is marked always-on.
@@ -0,0 +1,46 @@
1
+ ---
2
+ description: Preset authoring meta-rule (preset-twin-sync)
3
+ globs:
4
+ - packages/ai-rules/presets/**/*
5
+ - .cursor/rules/**/*
6
+ - .cursor/team/tasks/**/*
7
+ alwaysApply: false
8
+ ---
9
+
10
+ <!-- shared-core: meta/preset-twin-sync.md -->
11
+
12
+ # Preset twin sync
13
+
14
+ Cursor `.mdc` — **SoT per stack**. Claude topic `.md` — derived twin.
15
+
16
+ ## Matrix
17
+
18
+ | Stack | Cursor SoT | Claude derive | Mapping table |
19
+ |-------|------------|---------------|---------------|
20
+ | `next` | `presets/cursor/next/rules/*.mdc` | `presets/claude/next/rules/<topic>/` | **Required** in `claude/next/rules/README.md` |
21
+ | `ios-swift` | `presets/cursor/ios-swift/rules/*.mdc` | `presets/claude/ios-swift/rules/<topic>/` | Keep in `claude/ios-swift/rules/README.md` |
22
+ | `go` | `presets/cursor/go/rules/*.mdc` | `presets/claude/go/rules/<topic>/` | Keep in `claude/go/rules/README.md` |
23
+ | `java` | `presets/cursor/java/rules/*.mdc` | `presets/claude/java/rules/<topic>/` | Keep in `claude/java/rules/README.md` |
24
+ | `mcp-ts` | `presets/cursor/mcp-ts/rules/*.mdc` | `presets/claude/mcp-ts/rules/<topic>/` | Keep in `claude/mcp-ts/rules/README.md` |
25
+
26
+ ## Same-PR checklist
27
+
28
+ 1. Edit Cursor rule first (body + frontmatter).
29
+ 2. Update Claude twin: body + `paths:` (from Cursor `globs:` / requestable triggers); drop `alwaysApply`.
30
+ 3. Update mapping table row if stem/path changed.
31
+ 4. If body embeds core (`<!-- shared-core: … -->`), sync core consumers across stacks when core changed.
32
+
33
+ ## Twin depth
34
+
35
+ - **Domain** rules: ≥15 body lines (FAIL if thin without documented alias reason).
36
+ - **Thin aliases** (`agent-team-intake`, `technical-retro`): may be shorter (soft) if they only point to a command/skill.
37
+
38
+ ## Severity (build-verifier)
39
+
40
+ - **next:** missing Claude twin for a changed Cursor rule → **FAIL** (mapping table required).
41
+ - **ios-swift:** missing Claude twin for a changed Cursor rule → **FAIL**.
42
+ - **go:** missing Claude twin for a changed Cursor rule → **FAIL** (same as next / ios-swift; mapping table required).
43
+ - **java:** missing Claude twin for a changed Cursor rule → **FAIL** (same as next / ios-swift / go; mapping table required).
44
+ - **mcp-ts:** missing Claude twin for a changed Cursor rule → **FAIL** (same as next / ios-swift / go / java; mapping table required).
45
+
46
+ Dogfood: sync packages → root `.cursor/` after Cursor SoT changes (not the reverse). Use `packages/ai-rules/scripts/sync-dogfood-cursor.sh`.
@@ -0,0 +1,34 @@
1
+ ---
2
+ description: Reference paths for MCP server layout (dogfood-aligned Phase 1)
3
+ globs:
4
+ - src/**/*
5
+ alwaysApply: false
6
+ ---
7
+
8
+ <!-- shared-core: architecture/reference-features.template.md -->
9
+
10
+ # Reference features (mcp-ts) — Phase 1
11
+
12
+ Canonical layout matches `dogfood/mcp-ts-sample/` (consumer repos may rename; prefer the same shapes).
13
+
14
+ | Area | Example path | Glob hint |
15
+ |------|--------------|-----------|
16
+ | Entry / transport | `src/index.ts` | `src/index.ts` |
17
+ | Tools | `src/tools/echo.ts` | `src/tools/**` |
18
+ | Tool tests | `src/tools/echo.spec.ts` | `src/tools/**/*.{test,spec}.ts` |
19
+ | Resources | `src/resources/` (optional) | `src/resources/**` |
20
+ | Prompts | `src/prompts/` (optional) | `src/prompts/**` |
21
+ | Schemas | colocated next to tool (or `schemas.ts`) | `**/schemas.ts`, `src/tools/**` |
22
+ | Build output | `dist/index.js` | `dist/**` |
23
+
24
+ ## Living conventions
25
+
26
+ Post-init gotchas / patterns / decisions: **`.cursor/team/conventions.md`** (and Claude twin path if both tools installed).
27
+
28
+ ## Dogfood scenarios (Phase 1)
29
+
30
+ 1. `/task` add tool — contract → schema → handler → register → tests → package (`dogfood/mcp-ts-sample`).
31
+ 2. Schema validation bug — unit + contract fixtures on `src/tools/*.spec.ts`.
32
+ 3. Capability / secrets review — security-reviewer + `security-mcp` (e.g. FS allowlist tool when added).
33
+
34
+ Init (maintainer): `node packages/ai-rules/bin/cli.js init cursor --preset mcp-ts --cwd dogfood/mcp-ts-sample` — do not commit generated `.cursor/` into the sample unless the team decides otherwise.
@@ -0,0 +1,53 @@
1
+ ---
2
+ description: MCP security: injection boundaries, capability minimization, SSRF/secrets
3
+ globs:
4
+ - src/tools/**/*
5
+ - src/resources/**/*
6
+ - "**/auth/**/*"
7
+ - "**/config/**/*"
8
+ alwaysApply: false
9
+ ---
10
+
11
+ # Security (MCP servers)
12
+
13
+ - Treat tool **arguments** as **untrusted**. Validate with schemas; canonicalize paths/URLs.
14
+ - Minimize capabilities: no default "read any file" / "fetch any URL" without AC and allowlists.
15
+ - Secrets: env/secret manager only; redact in logs and tool results (`mcp-auth-secrets`).
16
+ - Least privilege: each tool gets the smallest capability adapter it needs — no ambient `process.env` dumps.
17
+
18
+ ## Path traversal (FAIL patterns)
19
+
20
+ - Resolve with `path.resolve` (or equivalent) then require the result stays under an approved root (`path.relative` must not start with `..`).
21
+ - Deny `../`, encoded variants (`%2e%2e`), and null-byte tricks before FS access.
22
+ - Follow symlinks only if the **final** realpath is still inside the root — otherwise reject.
23
+ - Unit shapes: `tool.rejectsPathTraversal`, `tool.rejectsSymlinkEscape`, `tool.acceptsInRoot`.
24
+
25
+ ## SSRF / outbound URL (FAIL patterns)
26
+
27
+ When tools fetch URLs:
28
+
29
+ - Allowlist hosts (or deny by default); block metadata IP `169.254.169.254`, link-local (`169.254.0.0/16`), loopback when not explicitly local-dev, and private ranges unless AC says otherwise.
30
+ - Do not follow redirects to a host outside the allowlist; re-validate after each hop.
31
+ - Prefer literal IPs from a resolved allowlist over trusting DNS alone when policy requires it.
32
+ - Unit shapes: `tool.deniesMetadataIp`, `tool.deniesBlockedHost`, `tool.allowsAllowlistedHost`.
33
+
34
+ ## Prompt injection and untrusted content
35
+
36
+ - Tool **descriptions** and **results** must not instruct the model to ignore safety; handlers must not execute model-supplied shell without an explicit, reviewed design.
37
+ - Treat **retrieved** tool/resource/prompt content (and any fetched remote payload) as **untrusted data**, not as authority:
38
+ - It must **not** expand tool capabilities, change auth/scopes, or trigger shell/network/FS side effects merely because the content contains instructions.
39
+ - Handlers decide actions from validated args + trusted request context only — never from natural-language directives inside resource bodies or prior tool output.
40
+ - Do not echo secrets found in untrusted content into logs or subsequent tool results.
41
+
42
+ ## Forbidden
43
+
44
+ - Shipping live credentials in examples or fixtures.
45
+ - Echoing `process.env` or Authorization headers into tool output.
46
+ - Fail-open auth when remote transport is enabled.
47
+ - Broad "run arbitrary command" tools without explicit AC and sandboxing.
48
+ - Letting tool/resource text escalate privileges or bypass schema/auth checks.
49
+
50
+ ## Agents
51
+
52
+ - `security-reviewer` on tool/auth/config/capability changes; then `post-change-test`.
53
+ - Phase 1: feature-developer must not skip schema validation to "move faster".
@@ -0,0 +1,18 @@
1
+ ---
2
+ description: Technical retrospective facilitator (on-demand /technical-retro)
3
+ alwaysApply: false
4
+ ---
5
+
6
+ <!-- shared-core: review/technical-retro.md -->
7
+
8
+ # Техническое ретро — rule alias
9
+
10
+ Полный сценарий (включая блок **«Работа агентов»** для slug из team tasks) — в slash-команде:
11
+
12
+ **`commands/technical-retro.md`** → `/technical-retro`
13
+
14
+ Используй rule только если command недоступен. Не дублируй содержимое command в ответе — следуй command-файлу и skill `technical-retro`.
15
+
16
+ ## Stack notes
17
+
18
+ - **Phase 1:** skill `technical-retro` is not shipped — follow `commands/technical-retro.md` only; do not fail if the skill is absent (Phase 2 may add the skill).
@@ -0,0 +1,31 @@
1
+ ---
2
+ description: Unit testing conventions for MCP handlers and schemas
3
+ globs:
4
+ - **/*.{test,spec}.{ts,tsx,js}
5
+ - **/__tests__/**/*
6
+ alwaysApply: false
7
+ ---
8
+
9
+ # Unit tests (MCP)
10
+
11
+ - Table-driven tests for schema parse failures and handler outcomes.
12
+ - Test **pure** handler logic with fakes for FS/network capabilities — no live MCP client required.
13
+ - Cover invalid inputs that schemas should reject **before** side effects.
14
+ - Prefer repository runner (Vitest/Jest/node:test) discovered via tooling rules.
15
+
16
+ ## Required shapes (when capability applies)
17
+
18
+ - `schema.parse` / Zod: valid input; missing field; wrong type; empty string where non-empty required.
19
+ - Path tools: reject `../` escape and symlink-outside-root (fake FS); accept in-root relative paths.
20
+ - URL/fetch tools: deny blocked hosts (metadata IP, link-local) when allowlist is in play.
21
+ - Auth-sensitive handlers: assert secrets never appear in returned content or thrown messages.
22
+
23
+ ## Forbidden smells
24
+
25
+ - Hitting real external APIs in unit tests without an explicit integration harness and AC.
26
+ - Asserting on unstable SDK private fields.
27
+ - Browser e2e frameworks (Playwright) as the unit gate.
28
+
29
+ ## Naming
30
+
31
+ - `toolName.validInput`, `toolName.rejectsPathTraversal`, `schema.parse.*` — follow repo style.
@@ -0,0 +1,12 @@
1
+ # Skills (mcp-ts Phase 1)
2
+
3
+ | Skill | Use |
4
+ |-------|-----|
5
+ | `feature-delivery` | End-to-end MCP feature flow |
6
+ | `unit-testing` | Schema/handler unit tests |
7
+ | `code-review` | Diff review checklist |
8
+ | `debug-investigation` | Bug investigation |
9
+
10
+ Phase 2 may add `ci-investigation`, `technical-retro`, `write-adr`, `mcp-contract-testing` skills.
11
+
12
+ Until then: `/technical-retro` uses `commands/technical-retro.md` (no skill required); review-only uses skill `code-review` on the parent (no `code-reviewer` agent).
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: code-review
3
+ description: Reviews MCP TypeScript diffs for boundaries, schema contracts, capability scope, and secrets. Use for MR review or when code-review workflow is requested.
4
+ ---
5
+
6
+ # Code review (mcp-ts)
7
+
8
+ 1. Follow `code-review-mr.mdc`, `mcp-server-boundaries.mdc`, `mcp-tool-design.mdc`, `security-mcp.mdc`.
9
+ 2. Flag monolithic entry files, schema/protocol mismatches, unscopeed capabilities, secret leakage.
10
+ 3. Phase 1: security-reviewer covers threat model; no separate `code-reviewer` agent yet — parent may apply this skill directly.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: debug-investigation
3
+ description: Investigates MCP server bugs with runtime evidence — schema failures, handler errors, transport startup. Use for failing tests or incorrect tool behavior.
4
+ ---
5
+
6
+ # Debug investigation (mcp-ts)
7
+
8
+ 1. Reproduce with unit/contract fixtures before changing code.
9
+ 2. Check schema validation vs handler logic vs registration wiring.
10
+ 3. Prefer repository tests over ad-hoc Inspector-only claims.
11
+ 4. Load `anti-sycophancy-discipline` — report what was verified.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: feature-delivery
3
+ description: Delivers TypeScript MCP server features end-to-end across contracts, schemas, handlers, registration, tests, and package validation. Use when implementing or extending a feature, especially through /task or feature-developer.
4
+ ---
5
+
6
+ # Feature Delivery (mcp-ts)
7
+
8
+ 1. Read brief, AC, and decomposition.
9
+ 2. Follow `feature-delivery-workflow.mdc` + `reference-features.mdc`: contract → schema → handler → register → unit/contract tests → package validation.
10
+ 3. Keep transport/lifecycle in the entry module; tools stay in registration modules.
11
+ 4. After TS edits: **invoke** `post-change-test.mdc` (+ `mcp-ts-tooling.mdc`).
12
+
13
+ ## Do / Don't
14
+
15
+ - **Do** Zod-first authoring with JSON Schema-compatible protocol contracts.
16
+ - **Don't** invent SDK APIs; use VERIFY markers / Context7.
17
+ - **Don't** use Playwright, XCUITest, Next lint, or Go tools as this stack's gate.
18
+
19
+ ## Scope discipline
20
+
21
+ Implement only the current AC / decomposition task. See `feature-developer` → **Zero improvisation**.
22
+
23
+ ## Handoff
24
+
25
+ Summarize by layer + validation. Update `.cursor/team/tasks/<slug>/status.json`.
26
+
27
+ ## Design guidance
28
+
29
+ - Load `design-guidance` (rule stem) when assessing structure, smells, or pattern fit.
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: unit-testing
3
+ description: Plans and writes unit tests for MCP schemas and handlers using the repository test runner. Use for schema/handler coverage and fixing failing unit tests.
4
+ ---
5
+
6
+ # Unit testing (mcp-ts)
7
+
8
+ 1. Prefer table-driven tests for schema reject/accept and handler outcomes.
9
+ 2. Fake FS/network capabilities — no live MCP client required for unit scope.
10
+ 3. Follow `tests-unit.mdc` and `mcp-contract-testing.mdc`.
11
+ 4. Discover runner via `mcp-ts-tooling` (Vitest/Jest/node:test).
12
+
13
+ ## Out of scope (Phase 1)
14
+
15
+ - Dedicated `contract-test-*` agents (Phase 2).
16
+ - Browser e2e (Playwright) — forbidden.
@@ -0,0 +1,17 @@
1
+ # Team artifacts (mcp-ts)
2
+
3
+ | Path | Purpose |
4
+ |------|---------|
5
+ | `tasks/<slug>/` | Pipeline artifacts (`brief.md`, `status.json`, …) |
6
+ | `fixtures/` | Example pipelines for dogfood |
7
+ | `conventions.md` | Living gotchas (consumer-owned) |
8
+
9
+ Phase 1 agents: see `agents/README.md`.
10
+
11
+ ## Fixture policy (Phase 1)
12
+
13
+ `team/fixtures/*.json` may list in `skipped[]` **only** agents that exist in the Phase 1 roster:
14
+
15
+ `task-router`, `task-analyst`, `solution-architect`, `feature-developer`, `build-verifier`, `security-reviewer`.
16
+
17
+ Do **not** name Phase 2 agents (`contract-test-*`, `debugger`, Playwright stems, etc.) in fixture JSON — even as skips. Defer those until the agents ship.