@mmerterden/multi-agent-pipeline 13.5.1 → 14.0.0

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 (118) hide show
  1. package/CHANGELOG.md +232 -0
  2. package/README.md +3 -3
  3. package/docs/features.md +1 -1
  4. package/install/_common.mjs +73 -0
  5. package/install/_mcp-register.mjs +70 -31
  6. package/install/_plugin-skills.mjs +73 -14
  7. package/install/claude.mjs +28 -4
  8. package/install/codex.mjs +33 -2
  9. package/install/copilot.mjs +145 -9
  10. package/install/index.mjs +10 -6
  11. package/install/templates/copilot-instructions.md +1 -1
  12. package/package.json +1 -1
  13. package/pipeline/agents/code-reviewer.md +58 -1
  14. package/pipeline/commands/multi-agent/SKILL.md +7 -5
  15. package/pipeline/commands/multi-agent/analysis/SKILL.md +7 -7
  16. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
  17. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +7 -7
  18. package/pipeline/commands/multi-agent/channels/SKILL.md +5 -5
  19. package/pipeline/commands/multi-agent/dev/SKILL.md +23 -18
  20. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +19 -13
  21. package/pipeline/commands/multi-agent/dev-local/SKILL.md +14 -12
  22. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +17 -12
  23. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  24. package/pipeline/commands/multi-agent/help/SKILL.md +4 -4
  25. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +2 -2
  26. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +4 -4
  27. package/pipeline/commands/multi-agent/resume/SKILL.md +1 -1
  28. package/pipeline/commands/multi-agent/review/SKILL.md +5 -5
  29. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
  30. package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
  31. package/pipeline/commands/multi-agent/setup/SKILL.md +6 -6
  32. package/pipeline/commands/multi-agent/{finish → ship}/SKILL.md +12 -12
  33. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/update/SKILL.md +5 -2
  35. package/pipeline/commands/sim-test.md +2 -2
  36. package/pipeline/lib/credential-store-resolver.sh +16 -0
  37. package/pipeline/lib/credential-store.sh +47 -4
  38. package/pipeline/lib/fetch-figma-annotations.sh +26 -28
  39. package/pipeline/lib/figma-screenshot.sh +28 -39
  40. package/pipeline/lib/figma-token.sh +63 -0
  41. package/pipeline/multi-agent-refs/analysis-template.md +1 -1
  42. package/pipeline/multi-agent-refs/android-guide.md +1 -1
  43. package/pipeline/multi-agent-refs/channels/issue-comment.md +1 -1
  44. package/pipeline/multi-agent-refs/component-dispatch.md +2 -2
  45. package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
  46. package/pipeline/multi-agent-refs/features/dev-critic.md +2 -2
  47. package/pipeline/multi-agent-refs/features/model-fallback.md +35 -2
  48. package/pipeline/multi-agent-refs/features/plan-todos.md +1 -1
  49. package/pipeline/multi-agent-refs/features/repo-map.md +1 -1
  50. package/pipeline/multi-agent-refs/features/review-multi-repo.md +3 -3
  51. package/pipeline/multi-agent-refs/features/shadow-git.md +1 -1
  52. package/pipeline/multi-agent-refs/features/skill-conformance.md +116 -0
  53. package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
  54. package/pipeline/multi-agent-refs/generate-issue.md +1 -1
  55. package/pipeline/multi-agent-refs/multi-repo-integration-build.md +1 -1
  56. package/pipeline/multi-agent-refs/phases/log-format.md +4 -4
  57. package/pipeline/multi-agent-refs/phases/modes.md +7 -7
  58. package/pipeline/multi-agent-refs/phases/phase-0-init.md +13 -11
  59. package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +17 -15
  60. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +7 -7
  61. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +28 -13
  62. package/pipeline/multi-agent-refs/phases/phase-4-review.md +90 -58
  63. package/pipeline/multi-agent-refs/phases/phase-5-test.md +7 -7
  64. package/pipeline/multi-agent-refs/phases/phase-6-commit.md +8 -8
  65. package/pipeline/multi-agent-refs/phases/phase-7-report.md +8 -8
  66. package/pipeline/multi-agent-refs/phases.md +13 -13
  67. package/pipeline/multi-agent-refs/progress-contract.md +2 -2
  68. package/pipeline/multi-agent-refs/rules.md +7 -5
  69. package/pipeline/multi-agent-refs/swiftui-guide.md +1 -1
  70. package/pipeline/multi-agent-refs/tracker-contract.md +16 -15
  71. package/pipeline/preferences-template.json +7 -1
  72. package/pipeline/rules/figma-pipeline.md +2 -2
  73. package/pipeline/schemas/agent-state.schema.json +333 -79
  74. package/pipeline/schemas/criteria-manifest.schema.json +228 -0
  75. package/pipeline/schemas/migrations/prefs-2.4.0-to-2.5.0.mjs +64 -0
  76. package/pipeline/schemas/prefs.schema.json +118 -262
  77. package/pipeline/schemas/reviewer-output.schema.json +48 -3
  78. package/pipeline/schemas/token-budget.json +34 -10
  79. package/pipeline/schemas/triage-output.schema.json +112 -27
  80. package/pipeline/scripts/cost-table.json +7 -4
  81. package/pipeline/scripts/gc-worktrees.sh +1 -1
  82. package/pipeline/scripts/gen-mode-dispatch.mjs +6 -6
  83. package/pipeline/scripts/match-skills.mjs +37 -4
  84. package/pipeline/scripts/migrate-prefs.mjs +88 -17
  85. package/pipeline/scripts/phase-tracker.sh +14 -3
  86. package/pipeline/scripts/pre-commit-check.sh +49 -2
  87. package/pipeline/scripts/skill-conformance.mjs +960 -0
  88. package/pipeline/scripts/smoke-schema-validation.sh +17 -4
  89. package/pipeline/scripts/uninstall.mjs +35 -9
  90. package/pipeline/scripts/validate-reviewer.mjs +108 -1
  91. package/pipeline/skills/.skill-manifest.json +1 -1
  92. package/pipeline/skills/.skills-index.json +36 -9
  93. package/pipeline/skills/shared/README.md +15 -12
  94. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +1 -0
  95. package/pipeline/skills/shared/core/apple-archive-compliance/references/rules.yml +167 -0
  96. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -0
  97. package/pipeline/skills/shared/core/google-play-compliance/references/rules.yml +184 -0
  98. package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -10
  99. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +4 -4
  100. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  101. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -2
  102. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
  103. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +6 -5
  104. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +7 -6
  105. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +4 -3
  106. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +2 -1
  107. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -2
  108. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +1 -1
  109. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +4 -4
  110. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +5 -5
  111. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
  112. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
  113. package/pipeline/skills/shared/core/{multi-agent-finish → multi-agent-ship}/SKILL.md +8 -8
  114. package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +44 -5
  115. package/pipeline/skills/shared/external/ios-coding-standard/modules/_TEMPLATE.yml +82 -0
  116. package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +169 -10
  117. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +335 -16
  118. package/pipeline/skills/skills-index.md +11 -8
@@ -177,7 +177,7 @@ vercel deploy --token=vcp_...
177
177
  vercel deploy --token "$VERCEL_TOKEN"
178
178
  ```
179
179
 
180
- The wrapper at `pipeline/lib/vercel-deploy.sh` (installed to `~/.claude/lib/`, `~/.copilot/lib/` and `~/.codex/lib/` with the rest of the shell libraries) refuses any `--token=` argv input, runs the CLI with `VERCEL_TOKEN` env, and pipes every stdout/stderr line through a redact filter that scrubs `vcp_...`, `Bearer ...`, and JSON-body token shapes. Regression gate: `smoke-vercel-deploy-redact.sh` (12 assertions).
180
+ The wrapper at `$HOME/.claude/lib/vercel-deploy.sh` (installed to `~/.claude/lib/`, `~/.copilot/lib/` and `~/.codex/lib/` with the rest of the shell libraries) refuses any `--token=` argv input, runs the CLI with `VERCEL_TOKEN` env, and pipes every stdout/stderr line through a redact filter that scrubs `vcp_...`, `Bearer ...`, and JSON-body token shapes. Regression gate: `smoke-vercel-deploy-redact.sh` (12 assertions).
181
181
 
182
182
  Same rule applies to any future provider wrapper (e.g. `cloudflare-deploy.sh`, `npm-publish.sh`) - never pass tokens via argv when the underlying CLI may echo argv on failure.
183
183
 
@@ -196,19 +196,21 @@ When any task references a Figma frame (URL, node ID, or free-text "from the des
196
196
 
197
197
  | Tier | Source | When chosen | Code Connect available |
198
198
  |---|---|---|---|
199
- | 1 | Figma MCP server (`mcp__claude_ai_Figma__get_design_context`, `get_screenshot`, `get_metadata`); MCP token resolves through `prefs.global.keychainMapping.figma_mcp` (for MCP server config bootstrap) | MCP auth succeeds (after one re-auth retry; on continued failure the user is asked: recreate the MCP token or continue with the PAT - never a silent fallthrough) | yes (`CodeConnectSnippet` blocks) |
200
- | 2 | Figma REST API (`GET /v1/files/{fileKey}/nodes`, `GET /v1/images/{fileKey}`) with Personal Access Token resolved via `~/.claude/lib/credential-store.sh get <logical-key>` where `<logical-key>` = `prefs.global.keychainMapping.figma_pat` | Tier 1 unreachable AND PAT is mapped; on a 401/403 the user is asked the Expired-token decision (regenerate / different token / skip) before moving to Tier 3 | no, fall back to repo `*.figma.swift` / `*.figma.kt` mappings keyed by `fileKey` + `nodeId` |
199
+ | 1 | Figma MCP server (`mcp__claude_ai_Figma__get_design_context`, `get_screenshot`, `get_metadata`); MCP token resolves through `prefs.global.keychainMapping.figma_mcp` (for MCP server config bootstrap) | The host serves the `mcp__claude_ai_Figma__*` tools AND MCP auth succeeds (after one re-auth retry; on continued auth failure the user is asked: recreate the MCP token or continue with the PAT - never a silent fallthrough) | yes (`CodeConnectSnippet` blocks) |
200
+ | 2 | Figma REST API (`GET /v1/files/{fileKey}/nodes`, `GET /v1/images/{fileKey}`) with Personal Access Token resolved via `~/.claude/lib/credential-store.sh get <logical-key>` where `<logical-key>` = `prefs.global.keychainMapping.figma` | Tier 1 unreachable AND PAT is mapped; on a 401/403 the user is asked the Expired-token decision (regenerate / different token / skip) before moving to Tier 3 | no, fall back to repo `*.figma.swift` / `*.figma.kt` mappings keyed by `fileKey` + `nodeId` |
201
201
  | 3 | User-attached screenshot in chat or task attachment | Tiers 1 + 2 both unreachable AND user has provided a screenshot | no - record an Open Question, pick the closest existing primitive WITH user confirmation, set Phase 4 reviewer flag to `review_blocking` |
202
202
 
203
+ **Tier 1 availability is per host, and "unavailable" is not "auth failed".** Tools absent (the normal case on Copilot CLI and Codex CLI, where the installer registers only `dev-toolkit`) means Tier 2 is the expected entry point: record `figmaAccess.tier1Unavailable = "host"`, skip the re-auth retry, and never raise the MCP-token question. Tools present but failing auth is `"auth"`, where the retry does apply. Probe mechanics: `phases/phase-0-init.md`.
204
+
203
205
  **Halt condition.** If all three tiers fail, halt the run and ask the user how to proceed. Never substitute primitives, never guess from Confluence prose, never derive layout from a text description.
204
206
 
205
- **Synced-file rule.** The literal Keychain service name for the Figma PAT is NEVER embedded in any synced file under `~/.claude/commands/` or `~/.copilot/skills/`. The mapping resolves at runtime through `prefs.global.keychainMapping.figma_pat`. See the Synced Command Hygiene rule below.
207
+ **Synced-file rule.** The literal Keychain service name for the Figma PAT is NEVER embedded in any synced file under `~/.claude/commands/` or `~/.copilot/skills/`. The mapping resolves at runtime through `prefs.global.keychainMapping.figma`. See the Synced Command Hygiene rule below.
206
208
 
207
209
  Full chain definition, REST endpoints, URL parsing, Code Connect snippet rules, and the pre-UI checklist live in `rules/figma-pipeline.md` "MUST: Figma access - 3-tier fallback chain (BLOCKING, pipeline-wide)". Do not duplicate that text here; the canonical copy is the rule file.
208
210
 
209
211
  ### Figma Access by Phase (pipeline-wide BLOCKING, v9.0.0)
210
212
 
211
- Per Locked decision 30 of `/multi-agent:analysis` and the parallel rule in `pipeline/rules/figma-pipeline.md`, Figma MCP / REST is allowed only in the analysis phase. Phase 2 through Phase 7 in every orchestrator mode (including `--dev`, `--local`, `--autopilot` combinations) consume the analysis document + repo Code Connect mappings.
213
+ Per Locked decision 30 of `/multi-agent:analysis` and the parallel rule in `$HOME/.claude/rules/figma-pipeline.md`, Figma MCP / REST is allowed only in the analysis phase. Phase 2 through Phase 7 in every orchestrator mode (including `--dev`, `--local`, `--autopilot` combinations) consume the analysis document + repo Code Connect mappings.
212
214
 
213
215
  | Phase | MCP | REST | Sole design source |
214
216
  |---|---|---|---|
@@ -1,6 +1,6 @@
1
1
  ## SwiftUI Component Generation Guide (Generic)
2
2
 
3
- > **MUST: Figma MCP-first (BLOCKING).** If the task references any Figma frame (URL, node ID, or "from the design"), the Dev phase MUST call `mcp__claude_ai_Figma__get_design_context` for every frame BEFORE writing a single UI line. Use the `CodeConnectSnippet` component name verbatim - no sound-alike substitutions. Authentication failure is not a skip path. Full rule, trigger conditions, and gate failure modes: `pipeline/rules/figma-pipeline.md` "MUST: Figma MCP-first (BLOCKING)". Phase wiring: `$HOME/.claude/multi-agent-refs/phases/phase-3-dev.md` "MUST: Figma MCP-first (BLOCKING pre-step)".
3
+ > **MUST: Figma MCP-first (BLOCKING).** If the task references any Figma frame (URL, node ID, or "from the design"), the Dev phase MUST call `mcp__claude_ai_Figma__get_design_context` for every frame BEFORE writing a single UI line. Use the `CodeConnectSnippet` component name verbatim - no sound-alike substitutions. Authentication failure is not a skip path. Full rule, trigger conditions, and gate failure modes: `$HOME/.claude/rules/figma-pipeline.md` "MUST: Figma MCP-first (BLOCKING)". Phase wiring: `$HOME/.claude/multi-agent-refs/phases/phase-3-dev.md` "MUST: Figma MCP-first (BLOCKING pre-step)".
4
4
 
5
5
  When the task involves creating a SwiftUI component (any project), follow this architecture.
6
6
  These practices come from the battle-tested Figma-to-SwiftUI pipeline - apply them in every iOS project.
@@ -74,8 +74,8 @@ Phases by mode:
74
74
  | Mode | Phases |
75
75
  |---|---|
76
76
  | Full pipeline | 0,1,2,3,4,5,6,7 |
77
- | `--dev` | 0,3,5,6,7 |
78
- | `--dev autopilot`, `--dev local`, `--dev local autopilot` | 0,3,6,7 (Phase 5 interactive test gate dropped) |
77
+ | `--dev` | 0,3,4,5,6,7 |
78
+ | `--dev autopilot`, `--dev local`, `--dev local autopilot` | 0,3,4,6,7 (Phase 5 interactive test gate dropped) |
79
79
  | `--autopilot` | same as full pipeline, with confirmations skipped |
80
80
 
81
81
  Register each phase:
@@ -112,22 +112,23 @@ Why: an agent reasoning "this is a `--dev` task, so phases 1/2/4 will be skipped
112
112
  The correct sequence is **always**:
113
113
 
114
114
  ```text
115
- # Step A - register every phase tile in the active mode's set, in phase-number order
115
+ # Step A - register every phase tile in the ACTIVE MODE'S SET, in phase-number
116
+ # order. A phase outside the mode's set gets no TaskCreate at all - the example
117
+ # below is the full pipeline, whose set happens to be all eight.
116
118
  TaskCreate(Phase 0) → taskId₀
117
- TaskCreate(Phase 1) → taskId₁ # even if Phase 1 will be skipped in this mode
119
+ TaskCreate(Phase 1) → taskId₁
118
120
  TaskCreate(Phase 2) → taskId₂
119
121
  TaskCreate(Phase 3) → taskId₃
120
- TaskCreate(Phase 4) → taskId₄ # even if Phase 4 will be skipped in this mode
122
+ TaskCreate(Phase 4) → taskId₄
121
123
  TaskCreate(Phase 5) → taskId₅
122
124
  TaskCreate(Phase 6) → taskId₆
123
125
  TaskCreate(Phase 7) → taskId₇
124
126
 
125
127
  # Step B - only AFTER every tile is created, apply status updates
126
128
  TaskUpdate(taskId₀, status="in_progress") # Phase 0 starts
127
- # `--dev` mode immediately also fires:
128
- TaskUpdate(taskId₁, status="completed", activeForm="[SKIPPED]")
129
- TaskUpdate(taskId₂, status="completed", activeForm="[SKIPPED]")
130
- TaskUpdate(taskId₄, status="completed", activeForm="[SKIPPED]")
129
+ # A phase that IS in the set but short-circuits at runtime flips here, e.g. a
130
+ # full-pipeline run whose Phase 5 test gate is suppressed by autopilot:
131
+ TaskUpdate(taskId₅, status="completed", activeForm="[SKIPPED]")
131
132
  ```
132
133
 
133
134
  Mode-specific phase sets:
@@ -135,10 +136,10 @@ Mode-specific phase sets:
135
136
  | Mode | TaskCreate set (in order) |
136
137
  |---|---|
137
138
  | Full pipeline (`/multi-agent`, `:autopilot`, `:local`, `:local-autopilot`) | 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 (all 8) |
138
- | `:dev` | 0 → 3 → 5 → 6 → 7 (5 phases - 1/2/4 omitted entirely) |
139
- | `:dev-autopilot`, `:dev-local`, `:dev-local-autopilot` | 0 → 3 → 6 → 7 (4 phases - 1/2/4/5 omitted entirely; the autopilot/local variants drop the interactive Phase 5 test gate) |
139
+ | `:dev` | 0 → 3 → 4 → 5 → 6 → 7 (6 phases - 1/2 omitted entirely) |
140
+ | `:dev-autopilot`, `:dev-local`, `:dev-local-autopilot` | 0 → 3 → 4 → 6 → 7 (5 phases - 1/2/5 omitted entirely; the autopilot/local variants drop the interactive Phase 5 test gate) |
140
141
 
141
- Note: in `--dev` modes the omitted phases (1, 2, 4 - plus 5 in the autopilot/local variants) **do not get TaskCreate calls at all** - they're not part of the mode's phase set. The "[SKIPPED]" pattern above only applies if a normally-included phase is conditionally skipped at runtime. The authoritative per-mode set is the `for p in ...` init block in each mode's own entry doc; this table mirrors those blocks.
142
+ Note: in `--dev` modes the omitted phases (1, 2 - plus 5 in the autopilot/local variants) **do not get TaskCreate calls at all** - they're not part of the mode's phase set. Phase 4 is in every mode's set as of v14.0.0, so it is always registered. The "[SKIPPED]" pattern above only applies if a phase that IS in the set is conditionally skipped at runtime. The authoritative per-mode set is the `for p in ...` init block in each mode's own entry doc, generated by `gen-mode-dispatch.mjs`; this table mirrors those blocks.
142
143
 
143
144
  **Enforcement**: `smoke-tasklist-ordering.sh` scans every mode entry point doc (`commands/multi-agent.md`, `commands/multi-agent/{autopilot,local,local-autopilot,dev,dev-autopilot,dev-local,dev-local-autopilot}.md` + Copilot mirrors) for the explicit "in phase-number order" rule. Inventory drift fails the smoke.
144
145
 
@@ -309,7 +310,7 @@ The `tasklist_id` meta from the previous session is replaced with the new IDs du
309
310
 
310
311
  ## Continuation runs (finish / manual-test)
311
312
 
312
- A pre-existing `tracker-state.json` for the task is never re-initialized. Rules for any command that continues an earlier run (`/multi-agent:finish`, `/multi-agent:manual-test`, resume):
313
+ A pre-existing `tracker-state.json` for the task is never re-initialized. Rules for any command that continues an earlier run (`/multi-agent:ship`, `/multi-agent:manual-test`, resume):
313
314
 
314
315
  1. `init` runs ONLY when no state file exists for the task. Otherwise the existing file is kept - phase history (elapsed, tokens, model, meta) survives.
315
316
  2. The continuing command re-declares its phase set with `add` - `add` is idempotent, so existing phases keep their name, status, and token history; only genuinely new phases are appended. The card renders phases sorted by numeric id, so mixed sets stay in order.
@@ -332,5 +333,5 @@ A pre-existing `tracker-state.json` for the task is never re-initialized. Rules
332
333
 
333
334
  - `$HOME/.claude/multi-agent-refs/phases.md` section "Visual Phase Tracker" (canonical spec)
334
335
  - `$HOME/.claude/multi-agent-refs/progress-contract.md` (one-line stdout format, runs alongside the tracker)
335
- - `pipeline/scripts/phase-tracker.sh` (state file CRUD)
336
- - `pipeline/scripts/run-aggregator.mjs` (post-hoc cost summary)
336
+ - `$HOME/.claude/scripts/phase-tracker.sh` (state file CRUD)
337
+ - `$HOME/.claude/scripts/run-aggregator.mjs` (post-hoc cost summary)
@@ -1,5 +1,5 @@
1
1
  {
2
- "schemaVersion": "2.1.0",
2
+ "schemaVersion": "2.5.0",
3
3
  "global": {
4
4
  "identities": [],
5
5
  "keychainMapping": {
@@ -73,6 +73,12 @@
73
73
  "enabled": true,
74
74
  "mcpServerName": "dev-toolkit",
75
75
  "registry": "github-packages"
76
+ },
77
+ "skillConformance": {
78
+ "blockOnCoverageGap": false
79
+ },
80
+ "ship": {
81
+ "autoFix": false
76
82
  }
77
83
  },
78
84
  "projects": {},
@@ -25,7 +25,7 @@ The MCP token itself resolves through `prefs.global.keychainMapping.figma_mcp` (
25
25
 
26
26
  #### Tier 2 - Figma Personal Access Token via REST API (fallback)
27
27
 
28
- Token retrieval goes through `~/.claude/lib/credential-store.sh get <logical-key>` where `<logical-key>` is read from `prefs.global.keychainMapping.figma_pat` (or whichever per-user logical name the mapping resolves to). The literal Keychain service name is NEVER embedded in any synced file under `~/.claude/commands/` or `~/.copilot/skills/`; see the Synced Command Hygiene rule.
28
+ Token retrieval goes through `~/.claude/lib/credential-store.sh get <logical-key>` where `<logical-key>` is read from `prefs.global.keychainMapping.figma` (or whichever per-user logical name the mapping resolves to). The literal Keychain service name is NEVER embedded in any synced file under `~/.claude/commands/` or `~/.copilot/skills/`; see the Synced Command Hygiene rule.
29
29
 
30
30
  Endpoints:
31
31
  - Design context (frame metadata + structure):
@@ -33,7 +33,7 @@ Endpoints:
33
33
  - Screenshot render:
34
34
  `GET https://api.figma.com/v1/images/{fileKey}?ids={nodeId}&format=png&scale=2` with the same header. The response is a signed URL valid for 30 days; download it locally before the URL expires.
35
35
 
36
- If the REST call returns 401 / 403 (the PAT is expired or revoked), do NOT silently fall through to Tier 3 - run the Expired-token decision (`refs/keychain.md` Rule 1) for `figma_pat`: **Regenerate** / **Use a different token** / **Skip and continue**. Only on the explicit "Skip and continue" choice (or when no `figma_pat` is mapped) does the chain move to Tier 3.
36
+ If the REST call returns 401 / 403 (the PAT is expired or revoked), do NOT silently fall through to Tier 3 - run the Expired-token decision (`refs/keychain.md` Rule 1) for `figma`: **Regenerate** / **Use a different token** / **Skip and continue**. Only on the explicit "Skip and continue" choice (or when no `figma` is mapped) does the chain move to Tier 3.
37
37
 
38
38
  Tier 2 does NOT return a Code Connect snippet (the REST API has no equivalent). When operating on Tier 2, the canonical-component decision falls back to the repo's `*.figma.swift` / `*.figma.kt` mappings (search by `fileKey` + `nodeId`); if none match, record an Open Question for the design team and pick the closest existing primitive WITH user confirmation.
39
39