@mmerterden/multi-agent-pipeline 20.36.0 → 20.37.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 (191) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/docs/facts.json +1 -1
  3. package/install/catalog-history.json +1 -1
  4. package/manifest.json +194 -122
  5. package/package.json +1 -1
  6. package/pipeline/commands/multi-agent/SKILL.md +33 -154
  7. package/pipeline/commands/multi-agent/analysis/SKILL.md +14 -68
  8. package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +5 -8
  9. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +38 -109
  10. package/pipeline/commands/multi-agent/channels/SKILL.md +38 -167
  11. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +37 -144
  12. package/pipeline/commands/multi-agent/design-check/SKILL.md +27 -131
  13. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +22 -48
  14. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +37 -180
  15. package/pipeline/commands/multi-agent/jira/SKILL.md +16 -46
  16. package/pipeline/commands/multi-agent/refactor/SKILL.md +23 -184
  17. package/pipeline/commands/multi-agent/resume/SKILL.md +30 -136
  18. package/pipeline/commands/multi-agent/review/SKILL.md +24 -199
  19. package/pipeline/commands/multi-agent/setup/SKILL.md +25 -181
  20. package/pipeline/commands/multi-agent/stack/SKILL.md +9 -53
  21. package/pipeline/commands/multi-agent/status/SKILL.md +13 -2
  22. package/pipeline/commands/multi-agent/store-ready/SKILL.md +27 -226
  23. package/pipeline/commands/multi-agent/sync/SKILL.md +35 -164
  24. package/pipeline/commands/multi-agent/test-gen/SKILL.md +2 -4
  25. package/pipeline/commands/multi-agent/update/SKILL.md +18 -60
  26. package/pipeline/contract/CHANGELOG.md +9 -0
  27. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  28. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  29. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  30. package/pipeline/contract/fixtures/runs-awaiting-question.json +1 -1
  31. package/pipeline/contract/fixtures/runs-empty.json +1 -1
  32. package/pipeline/contract/fixtures/runs-failed.json +1 -1
  33. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +1 -1
  34. package/pipeline/contract/fixtures/runs-pr-opened.json +1 -1
  35. package/pipeline/contract/fixtures/runs-running.json +1 -1
  36. package/pipeline/contract/manifest.json +5 -5
  37. package/pipeline/contract/types/index.d.ts +3 -2
  38. package/pipeline/multi-agent-refs/autopilot-on/details.md +148 -0
  39. package/pipeline/multi-agent-refs/channels/generator.md +14 -0
  40. package/pipeline/multi-agent-refs/channels/preview.md +13 -0
  41. package/pipeline/multi-agent-refs/channels/reference.md +46 -0
  42. package/pipeline/multi-agent-refs/complaint-analysis/phases.md +159 -0
  43. package/pipeline/multi-agent-refs/design-check/export.md +1 -0
  44. package/pipeline/multi-agent-refs/design-check/init-inventory.md +1 -1
  45. package/pipeline/multi-agent-refs/design-check/scope-and-ledger.md +64 -0
  46. package/pipeline/multi-agent-refs/features/analysis-command-notes.md +53 -0
  47. package/pipeline/multi-agent-refs/garbage-collect/phases.md +60 -0
  48. package/pipeline/multi-agent-refs/ios-coding-standard/plan.md +71 -0
  49. package/pipeline/multi-agent-refs/ios-coding-standard/resolve-and-scan.md +135 -0
  50. package/pipeline/multi-agent-refs/jira/picker-detail.md +71 -0
  51. package/pipeline/multi-agent-refs/orchestrator/copilot-pipeline.md +88 -0
  52. package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +96 -1
  53. package/pipeline/multi-agent-refs/refactor/sweep.md +190 -0
  54. package/pipeline/multi-agent-refs/resume/details.md +115 -2
  55. package/pipeline/multi-agent-refs/review/inputs.md +33 -1
  56. package/pipeline/multi-agent-refs/review/module-guides.md +9 -1
  57. package/pipeline/multi-agent-refs/review/panel.md +75 -0
  58. package/pipeline/multi-agent-refs/review/valven.md +5 -1
  59. package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +4 -0
  60. package/pipeline/multi-agent-refs/setup/token-save-flow.md +13 -0
  61. package/pipeline/multi-agent-refs/stack/background.md +72 -0
  62. package/pipeline/multi-agent-refs/store-ready/gates.md +139 -0
  63. package/pipeline/multi-agent-refs/store-ready/report.md +40 -2
  64. package/pipeline/multi-agent-refs/sync/office.md +10 -0
  65. package/pipeline/multi-agent-refs/sync/overview.md +61 -0
  66. package/pipeline/multi-agent-refs/sync/repo.md +91 -0
  67. package/pipeline/multi-agent-refs/update/details.md +83 -0
  68. package/pipeline/schemas/runs-index.schema.json +2 -1
  69. package/pipeline/scripts/contract-server.mjs +1 -1
  70. package/pipeline/scripts/runs-index.mjs +34 -7
  71. package/pipeline/scripts/status-overview.mjs +401 -0
  72. package/pipeline/skills/.skill-manifest.json +63 -63
  73. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +7 -70
  74. package/pipeline/skills/shared/core/apple-archive-compliance/references/examples.md +67 -0
  75. package/pipeline/skills/shared/core/apple-archive-compliance/references/version-history.md +8 -0
  76. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +10 -72
  77. package/pipeline/skills/shared/core/google-play-compliance/references/examples.md +69 -0
  78. package/pipeline/skills/shared/core/google-play-compliance/references/notes.md +7 -0
  79. package/pipeline/skills/shared/core/google-play-compliance/references/version-history.md +5 -0
  80. package/pipeline/skills/shared/core/multi-agent/SKILL.md +39 -262
  81. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +35 -73
  82. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +37 -337
  83. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +27 -122
  84. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +8 -340
  85. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +37 -180
  86. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +23 -184
  87. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +14 -82
  88. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +25 -277
  89. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +13 -2
  90. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +73 -217
  91. package/pipeline/skills/shared/external/alarmkit/SKILL.md +11 -162
  92. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-code.md +257 -0
  93. package/pipeline/skills/shared/external/android-architecture/SKILL.md +7 -58
  94. package/pipeline/skills/shared/external/android-architecture/references/code-examples.md +68 -0
  95. package/pipeline/skills/shared/external/app-intents/SKILL.md +3 -45
  96. package/pipeline/skills/shared/external/app-intents/references/code-examples.md +54 -0
  97. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +5 -81
  98. package/pipeline/skills/shared/external/app-store-optimization/references/engagement-and-localization.md +96 -0
  99. package/pipeline/skills/shared/external/app-store-review/SKILL.md +6 -112
  100. package/pipeline/skills/shared/external/app-store-review/references/monetization-and-submission.md +138 -0
  101. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +10 -117
  102. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models-code.md +186 -0
  103. package/pipeline/skills/shared/external/authentication/SKILL.md +3 -50
  104. package/pipeline/skills/shared/external/authentication/references/code-examples.md +59 -0
  105. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +3 -84
  106. package/pipeline/skills/shared/external/callkit-voip/references/code-examples.md +93 -0
  107. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -263
  108. package/pipeline/skills/shared/external/ci-cd-pipelines/references/pipeline-examples.md +281 -0
  109. package/pipeline/skills/shared/external/clean-code/SKILL.md +8 -41
  110. package/pipeline/skills/shared/external/clean-code/references/code-examples.md +56 -0
  111. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +8 -146
  112. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-code.md +214 -0
  113. package/pipeline/skills/shared/external/compose-components/SKILL.md +6 -80
  114. package/pipeline/skills/shared/external/compose-components/references/code-examples.md +89 -0
  115. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +5 -64
  116. package/pipeline/skills/shared/external/compose-navigation/references/code-examples.md +70 -0
  117. package/pipeline/skills/shared/external/core-data/SKILL.md +9 -157
  118. package/pipeline/skills/shared/external/core-data/references/core-data-code.md +221 -0
  119. package/pipeline/skills/shared/external/core-nfc/SKILL.md +3 -89
  120. package/pipeline/skills/shared/external/core-nfc/references/code-examples.md +98 -0
  121. package/pipeline/skills/shared/external/coreml/SKILL.md +17 -133
  122. package/pipeline/skills/shared/external/coreml/references/coreml-code.md +208 -0
  123. package/pipeline/skills/shared/external/css-modern/SKILL.md +8 -131
  124. package/pipeline/skills/shared/external/css-modern/references/code-examples.md +142 -0
  125. package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -103
  126. package/pipeline/skills/shared/external/database-patterns/references/orm-examples.md +112 -0
  127. package/pipeline/skills/shared/external/html-semantic/SKILL.md +7 -48
  128. package/pipeline/skills/shared/external/html-semantic/references/code-examples.md +54 -0
  129. package/pipeline/skills/shared/external/humanizer/SKILL.md +6 -19
  130. package/pipeline/skills/shared/external/humanizer/references/voice.md +24 -0
  131. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +13 -170
  132. package/pipeline/skills/shared/external/ios-accessibility/references/assistive-tech-review.md +224 -0
  133. package/pipeline/skills/shared/external/ios-localization/SKILL.md +2 -24
  134. package/pipeline/skills/shared/external/ios-localization/references/code-examples.md +30 -0
  135. package/pipeline/skills/shared/external/ios-networking/SKILL.md +3 -58
  136. package/pipeline/skills/shared/external/ios-networking/references/code-examples.md +67 -0
  137. package/pipeline/skills/shared/external/ios-security/SKILL.md +4 -64
  138. package/pipeline/skills/shared/external/ios-security/references/code-examples.md +74 -0
  139. package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -90
  140. package/pipeline/skills/shared/external/live-activities/references/code-examples.md +108 -0
  141. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +9 -23
  142. package/pipeline/skills/shared/external/localization-reuse-map/references/project-settings.md +22 -0
  143. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +5 -95
  144. package/pipeline/skills/shared/external/mapkit-location/references/code-examples.md +117 -0
  145. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +7 -106
  146. package/pipeline/skills/shared/external/nextjs-app-router/references/app-router-examples.md +124 -0
  147. package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -31
  148. package/pipeline/skills/shared/external/permissionkit/references/code-examples.md +37 -0
  149. package/pipeline/skills/shared/external/play-store-review/SKILL.md +6 -74
  150. package/pipeline/skills/shared/external/play-store-review/references/signing-and-policies.md +83 -0
  151. package/pipeline/skills/shared/external/push-notifications/SKILL.md +8 -125
  152. package/pipeline/skills/shared/external/push-notifications/references/notification-code.md +176 -0
  153. package/pipeline/skills/shared/external/python-patterns/SKILL.md +7 -158
  154. package/pipeline/skills/shared/external/python-patterns/references/python-examples.md +176 -0
  155. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +7 -157
  156. package/pipeline/skills/shared/external/rest-api-design/references/api-examples.md +175 -0
  157. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +11 -230
  158. package/pipeline/skills/shared/external/swift-architecture/references/pattern-examples.md +295 -0
  159. package/pipeline/skills/shared/external/swift-codable/SKILL.md +17 -149
  160. package/pipeline/skills/shared/external/swift-codable/references/codable-recipes.md +207 -0
  161. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +12 -99
  162. package/pipeline/skills/shared/external/swift-concurrency/references/code-examples.md +100 -0
  163. package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-additions.md +18 -0
  164. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +9 -78
  165. package/pipeline/skills/shared/external/swift-formatstyle/references/formatstyle-examples.md +113 -0
  166. package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -56
  167. package/pipeline/skills/shared/external/swift-language/references/code-examples.md +65 -0
  168. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +1 -0
  169. package/pipeline/skills/shared/external/swiftdata/SKILL.md +6 -122
  170. package/pipeline/skills/shared/external/swiftdata/references/code-examples.md +140 -0
  171. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -139
  172. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/interop-code.md +198 -0
  173. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +9 -81
  174. package/pipeline/skills/shared/external/tailwind-css/references/code-examples.md +91 -0
  175. package/pipeline/skills/shared/external/testing-backend/SKILL.md +7 -207
  176. package/pipeline/skills/shared/external/testing-backend/references/testing-examples.md +225 -0
  177. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +8 -89
  178. package/pipeline/skills/shared/external/typescript-patterns/references/code-examples.md +100 -0
  179. package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -20
  180. package/pipeline/skills/shared/external/vision-framework/references/code-examples.md +26 -0
  181. package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -169
  182. package/pipeline/skills/shared/external/vue-composition/references/vue-examples.md +187 -0
  183. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +7 -174
  184. package/pipeline/skills/shared/external/web-accessibility/references/a11y-examples.md +192 -0
  185. package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -66
  186. package/pipeline/skills/shared/external/web-performance/references/code-examples.md +77 -0
  187. package/pipeline/skills/shared/external/web-testing/SKILL.md +11 -186
  188. package/pipeline/skills/shared/external/web-testing/references/testing-examples.md +213 -0
  189. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/format-and-output.md +0 -0
  190. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/publish-and-snapshot.md +0 -0
  191. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/sources-and-recipes.md +0 -0
@@ -271,80 +271,18 @@ On Android diffs, reviewer agent annotates new/changed permissions with their po
271
271
 
272
272
  ## Examples
273
273
 
274
- ### Primary: `/multi-agent:test "store-ready"`
275
-
276
- ```
277
- # Full report on most recent bundle (auto-pick)
278
- /multi-agent:test "store-ready" --auto-pick
279
-
280
- # Specific .aab, blockers only, Turkish
281
- /multi-agent:test "store-ready" app/build/outputs/bundle/release/app-release.aab --threshold=error --lang=tr
282
-
283
- # Supply last version code for progression check
284
- multi-agent-test "store-ready" --last-version-code=142 --auto-pick
285
-
286
- # Raw JSON for CI
287
- /multi-agent:test "store-ready" --format=json --auto-pick
288
- ```
289
-
290
- ### Phase 3 Security Auditor (catalog cross-ref, no tool invocation)
291
-
292
- When a Phase 3 review diff touches Android release-relevant paths (`AndroidManifest.xml`, `build.gradle(.kts)`, `proguard-rules.pro`, `network_security_config.xml`), the security-auditor persona loads this skill's 21-rule policy catalog and cites matching ruleIDs next to its findings. No bundletool / aapt2 / apksigner invocation at review time - catalog reads are free.
293
-
294
- ```
295
- # Example finding from Phase 3 Security Auditor (wired in v5.8.1):
296
- [BLOCKING] AndroidManifest.xml: new MANAGE_EXTERNAL_STORAGE permission added
297
- (google-play-compliance / dangerous-permissions - Policy - Permissions)
298
- File: app/src/main/AndroidManifest.xml:12
299
- Fix: Remove the permission or add Play Console justification before submitting.
300
- MANAGE_EXTERNAL_STORAGE triggers mandatory policy review on every update.
301
- ```
302
-
303
- ### `/multi-agent:review` (PR citation)
304
-
305
- ```
306
- # Standard review - auto-loads Google catalog when diff touches Android release files
307
- /multi-agent:review
308
-
309
- # Review a specific branch
310
- /multi-agent:review feature/PROJ-67890-file-manager
311
- ```
312
-
313
- Findings in the review report carry the same `(google-play-compliance / <ruleID> - <Play ref>)` format as Phase 4 - the review command reuses the catalog contract.
314
-
315
- ### `/multi-agent:channels` (PR body auto-augmentation)
316
-
317
- ```
318
- # Run the compliance scan first so its JSON lands in /tmp
319
- /multi-agent:test "store-ready" --auto-pick --last-version-code=142
320
-
321
- # Then deliver the report - channels auto-appends a Store compliance section
322
- # to the PR body / Jira comment / Confluence page if the cache is < 6h old
323
- # and at least one blocker or warning was found.
324
- /multi-agent:channels PROJ-67890 --channels pr,jira
325
- ```
326
-
327
- The appended section is structured:
328
-
329
- ```markdown
330
- ### Store compliance
331
-
332
- ⚠️ 3 blocker(s), 2 warning(s) - run /multi-agent:test "store-ready" for the full report.
333
-
334
- - `target-api-level` - Policy - Target API: targetSdkVersion = 35 but Play Console requires ≥ 36 for new apps and updates
335
- - `native-64bit` - Policy - 64-bit: lib/armeabi-v7a/libfoo.so has no arm64-v8a counterpart
336
- - `foreground-service-types` - Android 14: <service> missing android:foregroundServiceType
337
- + 2 more
338
- ```
274
+ Invocation examples for each consumer (`/multi-agent:test "store-ready"`, the Phase 3 Security Auditor
275
+ catalog cross-reference, `/multi-agent:review` citations and the `/multi-agent:channels` Store compliance
276
+ section) are in [references/examples.md](references/examples.md).
339
277
 
340
278
  ## Notes
341
279
 
342
- - **Policy thresholds change yearly.** The target API level in Rule #1 advances each August for new apps / November for updates. When a new Android version ships, update Rule #1 `target-api-level` with the new threshold.
343
- - **Not a substitute for Play Console pre-launch report.** This skill catches static issues (manifest, signing, size, debug tools). Dynamic issues (crashes, ANRs, security vulnerabilities) require Play Console's own pre-launch testing on real devices.
344
- - **Data Safety form audit is partial.** Rule #14 flags manifest permissions that commonly trigger form updates, but the declared answers live in Play Console and cannot be cross-checked from here. The Android Publisher API has no Data Safety read: its only operation, `applications.dataSafety`, writes the declaration. With `google_play` onboarded, the toolkit's `store_search` / `store_call` reach the rest of the Android Publisher and Play Developer Reporting APIs (tracks, bundles, vitals), but the gap for Data Safety stays.
280
+ The target API threshold in Rule #1 moves every year, the scan is static and does not replace the Play Console
281
+ pre-launch report, and the Data Safety check is partial: [references/notes.md](references/notes.md).
345
282
 
346
- ## Version history
283
+ ## References
347
284
 
348
- - **v5.8.0** - Skill introduced. Orchestrates bundletool + aapt2 + apksigner, 21-rule catalog, EN+TR humanizer. Primary consumer only (`/multi-agent:test "store-ready"`).
349
- - **v5.8.1** - 3 additional consumer surfaces wired (Phase 3 Security Auditor cross-ref, `/multi-agent:review` citation, `/multi-agent:channels` PR-body auto-augmentation). Regression-locked by `smoke-compliance-skills.sh` (45 assertions).
350
- - **v6.0.0** - `language: en` frontmatter tag; 4-consumer Examples section expanded.
285
+ - [rules.yml](references/rules.yml): the machine-readable rule catalog behind the catalog table.
286
+ - [Examples](references/examples.md): open for command lines, a sample auditor finding and the exact Store compliance section channels appends.
287
+ - [Limits and caveats](references/notes.md): open before trusting a clean result or when a new Android version ships.
288
+ - [Version history](references/version-history.md): which release introduced each consumer surface.
@@ -0,0 +1,69 @@
1
+ # Google Play compliance: Examples
2
+
3
+ Invocation examples for each consumer surface of the skill.
4
+
5
+ ## Primary: `/multi-agent:test "store-ready"`
6
+
7
+ ```
8
+ # Full report on most recent bundle (auto-pick)
9
+ /multi-agent:test "store-ready" --auto-pick
10
+
11
+ # Specific .aab, blockers only, Turkish
12
+ /multi-agent:test "store-ready" app/build/outputs/bundle/release/app-release.aab --threshold=error --lang=tr
13
+
14
+ # Supply last version code for progression check
15
+ multi-agent-test "store-ready" --last-version-code=142 --auto-pick
16
+
17
+ # Raw JSON for CI
18
+ /multi-agent:test "store-ready" --format=json --auto-pick
19
+ ```
20
+
21
+ ## Phase 3 Security Auditor (catalog cross-ref, no tool invocation)
22
+
23
+ When a Phase 3 review diff touches Android release-relevant paths (`AndroidManifest.xml`, `build.gradle(.kts)`, `proguard-rules.pro`, `network_security_config.xml`), the security-auditor persona loads this skill's 21-rule policy catalog and cites matching ruleIDs next to its findings. No bundletool / aapt2 / apksigner invocation at review time - catalog reads are free.
24
+
25
+ ```
26
+ # Example finding from Phase 3 Security Auditor (wired in v5.8.1):
27
+ [BLOCKING] AndroidManifest.xml: new MANAGE_EXTERNAL_STORAGE permission added
28
+ (google-play-compliance / dangerous-permissions - Policy - Permissions)
29
+ File: app/src/main/AndroidManifest.xml:12
30
+ Fix: Remove the permission or add Play Console justification before submitting.
31
+ MANAGE_EXTERNAL_STORAGE triggers mandatory policy review on every update.
32
+ ```
33
+
34
+ ## `/multi-agent:review` (PR citation)
35
+
36
+ ```
37
+ # Standard review - auto-loads Google catalog when diff touches Android release files
38
+ /multi-agent:review
39
+
40
+ # Review a specific branch
41
+ /multi-agent:review feature/PROJ-67890-file-manager
42
+ ```
43
+
44
+ Findings in the review report carry the same `(google-play-compliance / <ruleID> - <Play ref>)` format as Phase 4 - the review command reuses the catalog contract.
45
+
46
+ ## `/multi-agent:channels` (PR body auto-augmentation)
47
+
48
+ ```
49
+ # Run the compliance scan first so its JSON lands in /tmp
50
+ /multi-agent:test "store-ready" --auto-pick --last-version-code=142
51
+
52
+ # Then deliver the report - channels auto-appends a Store compliance section
53
+ # to the PR body / Jira comment / Confluence page if the cache is < 6h old
54
+ # and at least one blocker or warning was found.
55
+ /multi-agent:channels PROJ-67890 --channels pr,jira
56
+ ```
57
+
58
+ The appended section is structured:
59
+
60
+ ```markdown
61
+ ### Store compliance
62
+
63
+ ⚠️ 3 blocker(s), 2 warning(s) - run /multi-agent:test "store-ready" for the full report.
64
+
65
+ - `target-api-level` - Policy - Target API: targetSdkVersion = 35 but Play Console requires ≥ 36 for new apps and updates
66
+ - `native-64bit` - Policy - 64-bit: lib/armeabi-v7a/libfoo.so has no arm64-v8a counterpart
67
+ - `foreground-service-types` - Android 14: <service> missing android:foregroundServiceType
68
+ + 2 more
69
+ ```
@@ -0,0 +1,7 @@
1
+ # Google Play compliance: Limits and Caveats
2
+
3
+ What the static scan does not cover and which thresholds move over time.
4
+
5
+ - **Policy thresholds change yearly.** The target API level in Rule #1 advances each August for new apps / November for updates. When a new Android version ships, update Rule #1 `target-api-level` with the new threshold.
6
+ - **Not a substitute for Play Console pre-launch report.** This skill catches static issues (manifest, signing, size, debug tools). Dynamic issues (crashes, ANRs, security vulnerabilities) require Play Console's own pre-launch testing on real devices.
7
+ - **Data Safety form audit is partial.** Rule #14 flags manifest permissions that commonly trigger form updates, but the declared answers live in Play Console and cannot be cross-checked from here. The Android Publisher API has no Data Safety read: its only operation, `applications.dataSafety`, writes the declaration. With `google_play` onboarded, the toolkit's `store_search` / `store_call` reach the rest of the Android Publisher and Play Developer Reporting APIs (tracks, bundles, vitals), but the gap for Data Safety stays.
@@ -0,0 +1,5 @@
1
+ # Google Play compliance: Version History
2
+
3
+ - **v5.8.0** - Skill introduced. Orchestrates bundletool + aapt2 + apksigner, 21-rule catalog, EN+TR humanizer. Primary consumer only (`/multi-agent:test "store-ready"`).
4
+ - **v5.8.1** - 3 additional consumer surfaces wired (Phase 3 Security Auditor cross-ref, `/multi-agent:review` citation, `/multi-agent:channels` PR-body auto-augmentation). Regression-locked by `smoke-compliance-skills.sh` (45 assertions).
5
+ - **v6.0.0** - `language: en` frontmatter tag; 4-consumer Examples section expanded.
@@ -13,307 +13,84 @@ Read and follow the instructions in this file's INSTRUCTION.md section below.
13
13
 
14
14
  # Multi-Agent Task Orchestrator
15
15
 
16
- References under `$HOME/.claude/multi-agent-refs/` are installed with Claude Code.
17
-
18
- ## Project Detection
19
-
20
- Detect project from cwd FIRST, then validate input format:
21
-
22
- | cwd contains | Project | Accepted Input | Rejected Input |
23
- |--------------|---------|----------------|----------------|
24
- | `/my-ios-app` | my-app | `"PROJ-XXX" "branch"` | GitHub Issue URL |
25
- | `/my-figma-app` | figma | `"https://github.com/.../issues/N"` | Jira ID + branch |
26
- | Other | generic | Both formats | - |
27
-
28
- If user gives wrong format for the project, warn:
29
- - my-ios-app + GitHub URL → "This project expects a Jira ID + branch. Example: multi-agent \"PROJ-12345\" \"feature/PROJ-12345-desc\""
30
- - my-figma-app + Jira → "This project expects a GitHub Issue URL. Example: multi-agent \"https://github.com/my-org/my-figma-app/issues/316\""
31
-
32
- ## Input Parsing
33
-
34
- Classify user input into one of 5 types (matches the `commands/multi-agent/SKILL.md` dispatcher contract; cross-CLI parity is enforced by `smoke-cross-cli-behavior.sh`):
35
-
36
- | # | Pattern | Type | Action |
37
- |---|---------|------|--------|
38
- | 1 | `#N` or bare `316` | github-issue-number | Fetch via gh after project selection |
39
- | 2 | `https://github.com/.../issues/N` | github-issue-url | Extract org/repo/N, fetch via gh |
40
- | 3 | `https://{JIRA_HOST}/browse/{JIRA_KEY}-XXXXX` | jira-url | Extract ID, fetch via Jira API |
41
- | 4 | `{JIRA_KEY}-XXXXX` (bare) | jira-id | Fetch via Jira API |
42
- | 5 | Anything else | free-text | No external fetch |
43
-
44
- All types enter the same Phase 0 flow.
16
+ References under `$HOME/.claude/multi-agent-refs/` are installed with Claude Code. Before routing, read `$HOME/.claude/multi-agent-refs/orchestrator/copilot-pipeline.md`: project detection (cwd decides which input format is accepted, and the wrong format gets a warning), the five input types, the full routing rows, the autopilot matrix, the persona models and the per-phase summaries.
45
17
 
46
18
  ## Routing
47
19
 
48
- Parse the user's input and route to the correct sub-command:
49
-
50
- | Input Pattern | Action |
51
- |---------------|--------|
52
- | `"PROJ-XXX" "branch"` | **my-app only** - Jira ID + branch name → auto-assigned incremental ID |
53
- | `"https://github.com/..."` | **figma only** - parse issue, extract Jira from title/body, auto-create branch |
54
- | `status` | Show all tasks with ID, phase, status |
55
- | `log [id]` | Show agent-log.md for task (latest if no id) |
56
- | `resume [id]` | Resume paused/failed task from last successful phase |
57
- | `kill [id]` | Stop task, delete worktree + branch + logs. Asks confirm first |
58
- | `clear-logs` | Superseded - redirect only, see below |
59
- | `purge` | Nuclear cleanup - delete ALL worktrees, branches, logs, state, counter. Full reset |
60
- | `review` | Skip phases 0-3, review current diff only |
61
- | `autopilot` flag | Add to any pipeline command - skip user confirmations except destructive ops |
62
- | No args / `help` | Show usage guide (project-specific) |
20
+ `status`, `log [id]`, `resume [id]`, `kill [id]`, `clear-logs`, `purge`, `review` (current diff only), the `autopilot` flag, and no args / `help`. Anything else is a task input (Jira ID + branch, GitHub issue URL or number, free text) and enters Phase 0.
63
21
 
64
- ## Task operations: status, kill, purge, resume
65
-
66
- Every task gets an auto-incremented short ID (`#1`, `#2`), stored in `agent-state.json`.
22
+ ## Task operations
67
23
 
68
24
  - **kill** MUST ask for confirmation before deleting anything; the remote branch is deleted ONLY on a second, explicit yes.
69
25
  - **purge** MUST confirm twice: a first confirm, then a native `AskUserQuestion` paranoia gate where anything other than **Purge permanently** cancels. Remote branches are deleted ONLY on explicit confirmation.
70
- - **resume** reads `$HOME/.claude/logs/multi-agent/{project}/{task-id}/agent-state.json` (or `.../artifacts/agent-state.json` for a task Phase 4 finalized) and restarts from `currentPhase + 1`.
71
- - **clear-logs**: **do not run it.** Say it was superseded, then route to `multi-agent-prune-logs` (per-task logs, audit trail and metrics kept) or `multi-agent-garbage-collect` (`/tmp` scratch + worktree residue). Logs live at `$HOME/.claude/logs/multi-agent/{project}/{task-id}/`, not under `.worktrees/`.
72
-
73
- Full procedure: `$HOME/.claude/multi-agent-refs/orchestrator/operations.md`. Read it when the input is `status`, `kill`, `purge` or `resume`.
74
-
75
- ---
76
-
77
- ## Autopilot Mode
26
+ - **resume** reads `$HOME/.claude/logs/multi-agent/{project}/{task-id}/agent-state.json` (or `.../artifacts/agent-state.json`) and restarts from `currentPhase + 1`.
27
+ - **clear-logs**: **do not run it.** Say it was superseded and route to `multi-agent-prune-logs` or `multi-agent-garbage-collect`.
78
28
 
79
- Add `autopilot` to any pipeline command (`multi-agent "PROJ-12345" "feature/PROJ-12345-desc" autopilot`) to skip interactive confirmations and run end-to-end.
29
+ Read `$HOME/.claude/multi-agent-refs/orchestrator/operations.md` when the input is `status`, `kill`, `purge` or `resume`.
80
30
 
81
- | Phase | Normal | Autopilot |
82
- |-------|--------|-----------|
83
- | Phase 1 (Plan Approval Gate) | Clarification (max 2 rounds) + approval loop - user replies `onayla`/`iptal`/free-text | **Gate skip** - log the plan, go straight to Phase 2 (autopilot contract: zero interaction) |
84
- | Phase 3 (User test) | "Want to test it?" → wait | Skip → go straight to Phase 4 |
85
- | Phase 4 (Commit) | "Want to commit?" → wait | Automatic commit + push |
86
- | Phase 4 (PR) | "Want to open a PR?" → wait | Automatically create the PR |
31
+ ## Autopilot
87
32
 
88
- **What NEVER skips (even in autopilot):**
89
- - Phase 3 Review → if there is a blocking finding, return to Phase 2, fix + rebuild automatically (safety)
90
- - Kill/Purge confirmations → destructive operations always ask
91
- - Build fail → fix + rebuild automatically (max 3 retries). If it still fails after 3 retries → pause, ask the user
33
+ `autopilot` skips confirmations: the Plan Approval Gate becomes a **Gate skip** (log the plan, go to Phase 2), the user test is skipped, commit, push and PR run automatically. **Never skipped:** a blocking review finding returns to Phase 2; kill / purge confirmations always ask; a build failure retries at most 3 times, then pauses and asks. Read `$HOME/.claude/multi-agent-refs/phases/modes.md` when `autopilot` is set.
92
34
 
93
- **State tracking**: `"autopilot": true` is added to `agent-state.json`. Autopilot continues on resume too.
35
+ ## Agent dispatch - per-persona model routing
94
36
 
95
- Full procedure: `$HOME/.claude/multi-agent-refs/phases/modes.md`. Read it when `autopilot` is set, for the circuit-breaker halts and the Phase 5 channels pause.
96
-
97
- ---
98
-
99
- ## Agent dispatch - per-persona model routing
100
-
101
- Every agent persona under `$HOME/.claude/agents/*.md` declares a `preferredModel` frontmatter field. The orchestrator MUST honor it on every dispatch, on both Claude Code and Copilot CLI - cross-CLI parity is enforced by `smoke-cross-cli-behavior.sh`. Each persona file carries its own `modelRationale`; this is the rung only.
102
-
103
- | Persona | `preferredModel` |
104
- |---|---|
105
- | `explorer` | `sonnet` |
106
- | `code-reviewer` | `fable` (Reviewer 1; Phase 3 sets Reviewer 2 `opus`, Reviewer 3 `sonnet`) |
107
- | `security-auditor` | `opus` |
108
- | `ios-architect` / `android-architect` / `backend-architect` | `fable` |
109
-
110
- **Dispatch contract:**
37
+ Every persona under `$HOME/.claude/agents/*.md` declares `preferredModel`; honor it on every dispatch, on both CLIs.
111
38
 
112
39
  ```bash
113
40
  persona_file="$HOME/.claude/agents/${persona}.md"
114
41
  pref_model="$(awk '/^preferredModel:/ {print $2; exit}' "$persona_file")"
115
- override="${PHASE_MODEL_OVERRIDE:-}" # per-dispatch, e.g. Phase 3 Reviewer 3 → sonnet
42
+ override="${PHASE_MODEL_OVERRIDE:-}"
116
43
  routed="${override:-$("$HOME/.claude/lib/model-dispatch.sh" subagent --persona "$persona" --phase "$currentPhase" --task-kind "$taskType" --default "${pref_model:-opus}" 2>/dev/null)}"
117
44
  resolved_model="${routed:-${pref_model:-opus}}"
118
-
119
- export CLAUDE_CODE_SUBAGENT_MODEL="$resolved_model"
120
- # Claude Code honors the env var; Copilot CLI also passes it as --model.
45
+ export CLAUDE_CODE_SUBAGENT_MODEL="$resolved_model" # Copilot CLI also passes it as --model
121
46
  ```
122
47
 
123
- **Precedence:** per-dispatch `PHASE_MODEL_OVERRIDE` > `prefs.global.modelRouting` rule > persona `preferredModel` > global default (`opus`). Routing here is Anthropic-only: features/model-fallback.md "Routing at dispatch".
124
-
125
- **Simple text tasks (`delegate`):** before summarizing a log or document, extracting fields, labelling or drafting a translation or commit body in-session, ask `"$HOME/.claude/lib/model-dispatch.sh" delegate --default host`. `free` means call `llm_delegate`; `ESCALATE_TO_CLAUDE` or any other answer means do it in-session. Never for code, plans, reviews or triage. Task list and rules: `$HOME/.claude/multi-agent-refs/features/free-models.md`.
126
-
127
- **Observability:** emit `phase.agent.dispatch` OTel span with `{persona, resolved_model, override_source}` attributes when `MULTI_AGENT_OTEL_SPANS=1` (see `phase-tracker.sh`).
128
-
129
- ## Skill loading and injection
130
-
131
- Gated by `prefs.global.dynamicSkillLoading` (default `false`): when on, only skills matched by `match-skills.mjs` are injected into Phase 1-3 sub-agent prompts; without `.skills-index.json` it eager-loads, so it never blocks the happy path. Every sub-agent prompt SHOULD carry task-specific context from Phase 1 on top of the persona's embedded skills.
132
-
133
- Full procedure: `$HOME/.claude/multi-agent-refs/orchestrator/skill-loading.md`. Read it when `dynamicSkillLoading` is on, or when composing a sub-agent prompt.
48
+ **Precedence:** per-dispatch `PHASE_MODEL_OVERRIDE` > `prefs.global.modelRouting` rule > persona `preferredModel` > global default (`opus`). Anthropic-only: features/model-fallback.md "Routing at dispatch". Simple text tasks ask `model-dispatch.sh delegate --default host` first; `free` means `llm_delegate`, never for code, plans, reviews or triage (`$HOME/.claude/multi-agent-refs/features/free-models.md`).
134
49
 
135
- ---
50
+ Skill injection (`prefs.global.dynamicSkillLoading`): read `$HOME/.claude/multi-agent-refs/orchestrator/skill-loading.md` when it is on or when composing a sub-agent prompt.
136
51
 
137
52
  ## Phase Pipeline
138
53
 
139
- Run phases sequentially. Log every step to `agent-log.md`.
140
- If any phase fails, mark task as `paused` and stop - user can `resume` later.
141
-
142
- **The blocks below are the routing summary, not the specification.** Each phase's
143
- full contract lives in `$HOME/.claude/multi-agent-refs/phases/phase-{n}-{name}.md`
144
- and is read when that phase actually starts. Modes are in `phases/modes.md`,
145
- operations in `phases/operations.md`, the log shape in `phases/log-format.md`.
146
- Where a summary here and a ref disagree, the ref wins.
54
+ Run phases sequentially, log every step to `agent-log.md`, and on a failure mark the task `paused` and stop. Each phase's contract is `$HOME/.claude/multi-agent-refs/phases/phase-N-<name>.md`, read when that phase starts; the ref wins over any summary. Update `agent-state.json` at EVERY phase transition.
147
55
 
148
56
  ### Canonical phase labels (TaskCreate + banner)
149
57
 
150
- Every user-facing phase title - TaskCreate cards, `phase-banner.sh` headers, and any status line rendered to the terminal - MUST come from this table. Phase labels are English on every host (`promptLanguage` is fixed to `en`; picker text follows its own matrix):
151
-
152
- | # | Label |
153
- |---|----------------------|
154
- | 0 | Phase 0: Init |
155
- | 1 | Phase 1: Plan |
156
- | 2 | Phase 2: Dev |
157
- | 3 | Phase 3: Review |
58
+ | # | Label |
59
+ |---|---|
60
+ | 0 | Phase 0: Init |
61
+ | 1 | Phase 1: Plan |
62
+ | 2 | Phase 2: Dev |
63
+ | 3 | Phase 3: Review |
158
64
  | 4 | Phase 4: Commit & PR |
159
- | 5 | Phase 5: Report |
65
+ | 5 | Phase 5: Report |
160
66
 
161
- **Render rule:**
162
-
163
- 1. For TaskCreate, use the matching label as the task `subject`.
164
- 2. For terminal banners, call `phase-banner.sh` with the `auto` sentinel and `PHASE_LANG=en` env - or pass the literal label from the table. Never invent a new label.
165
- 3. Reviewer-count qualifiers (e.g. `(parallel + triage)`) stay English - they are technical artifacts, not user copy.
166
-
167
- **Out of scope for localization** (always EN, per `prefs.schema.json`): reviewer/triage system prompts, commit messages, PR titles/bodies, Jira comments, wiki content, log payloads inside `agent-log.md` - these are external artifacts consumed by other tools and humans beyond this user.
67
+ TaskCreate subjects and `phase-banner.sh` headers (`auto`, `PHASE_LANG=en`) use these labels only, in English on every host. Never invent a label.
168
68
 
169
69
  #### TaskCreate ordering (strict)
170
70
 
171
- All TaskCreate calls fire in strict phase-number order BEFORE any TaskUpdate is applied (Claude Code path; Copilot CLI has no TaskList widget, so this rule is Claude-only). The widget renders by creation order, so out-of-order calls scramble the tile stack even when the state file is correct. Pre-marking phases as completed/skipped before Phase 0 starts is FORBIDDEN: register each tile in order as `pending`, then flip via TaskUpdate when the phase actually short-circuits. Mode-specific phase sets:
172
-
173
- - `multi-agent`, `multi-agent-autopilot`: 0 → 1 → 2 → 3 → 4 → 5
174
- - `multi-agent-analysis`: 0 → 1 → 3 → 4 → 5 (no code is written, so Dev is not in the set)
175
-
176
- Every mode registers its whole set at Step -1. Full contract: `refs/tracker-contract.md` section "TaskCreate ordering (strict)".
71
+ All TaskCreate calls fire in strict phase-number order BEFORE any TaskUpdate (Claude Code only; Copilot CLI has no widget). Never pre-mark a phase completed or skipped: register every tile as `pending`, then flip it. `multi-agent`, `multi-agent-autopilot`: 0-5; `multi-agent-analysis`: 0, 1, 3, 4, 5. Contract: `refs/tracker-contract.md`.
177
72
 
178
73
  ### Phase 0: Init
179
74
 
180
- > **Contract (strict)** - Phase 0 has **8 sequential interactive steps**, defined in
181
- > `$HOME/.claude/multi-agent-refs/phases/phase-0-init.md`. Read it before every Phase 0 run and execute all of
182
- > them. Do **NOT** short-circuit: even when the input is a Jira ID plus a branch, the
183
- > prefs load, the multi-repo offer, the branch picker and the branch-name confirm are
184
- > required UX checkpoints.
185
- >
186
- > **Exit gate (BLOCKING).** Before marking Phase 0 completed:
187
- >
188
- > ```bash
189
- > node "$HOME/.copilot/scripts/phase0-exit-gate.mjs" "$TASK_ID" --input "$USER_INPUT"
190
- > ```
191
- >
192
- > Non-zero means Phase 0 did not produce its own output - `taskType`, `baseBranch`,
193
- > `baseFetchStatus`, a worktree path distinct from the project root, and a recorded Figma
194
- > access tier when the input carries a Figma URL. Fix the missing step; do not proceed.
195
- >
196
- > **Credential inventory (Step 0).** Run
197
- > `bash "$HOME/.copilot/lib/credential-inventory.sh" --json` and store the result in
198
- > `agent-state.json.credentialInventory`. Per `refs/keychain.md` Rule 2, never ask the
199
- > user for data a mapped credential can fetch. Ask for the pointer (the issue URL)
200
- > instead, and say what you will do with it.
201
-
202
- Per-project input parsing (my-ios-app / my-figma-app / generic), worktree creation, git author and the initial log + state files. Full procedure: `$HOME/.claude/multi-agent-refs/orchestrator/phase-0-projects.md`. Read it when Phase 0 reaches input parsing and worktree setup.
203
-
204
- **IMPORTANT**: Update `agent-state.json` at EVERY phase transition. This file is the resume source of truth.
205
-
206
- **Issue family** (Jira input, once `agent-state.json` exists): run
207
- `bash "$HOME/.copilot/lib/jira-family-write.sh" resolve --state "$STATE_FILE"`. It records the
208
- story, dev and test sub-tasks and the story format check in `state.jiraFamily`, and asks and writes nothing;
209
- the channels Jira step writes to them.
210
-
211
- ### Phase 1: Plan
212
- Two halves, one phase, one approval gate.
213
-
214
- **1a - Analysis** (claude-sonnet-5-5, `explorer` persona)
215
- 1. Launch **explore agents** (parallel) to scan the codebase: related files, existing patterns and conventions, potential impact areas
216
- 2. Summarize findings
217
- 3. Log: `📊 Phase 1: Plan (analysis) - {N} files identified, {summary}`
218
-
219
- **1b - Planning** (claude-fable-5-1)
220
- 1. Create task breakdown → todos with dependencies
221
- 2. Launch **ios-architect** agent for architecture review (if structural changes)
222
- 3. Determine development approach per todo (new file, modify, refactor)
223
- 4. Log: `🧠 Phase 1: Plan - {N} todos created`
224
- 5. **Plan Approval Gate** (interactive only - autopilot may not ask). Full flow in `refs/phases/phase-1-plan.md` Step 5:
225
- - **5a - Clarification** (conditional, max 2 rounds): if the Jira/issue description is ambiguous (vague acceptance, UI task without Figma, API task without endpoint contract, `ambiguityScore >= 2`, parent-story scope drift), ask structured questions before rendering the plan. User answers → plan regenerated. If it is still unclear after the 2nd round, render the plan with a "best-effort" banner.
226
- - **5b - Approval loop**: render plan → user: `onayla`/`iptal`/free-text. A free-text edit request → the planning model (Fable) revises the plan → show it again. No iteration cap; user controls exit via `onayla` or `iptal`.
227
- - Persist `clarificationRounds`, `clarificationQuestions`, `clarificationAnswers`, `planIterations`, `planApprovedAt`, `planEditRequests` to `state.phases["1"]`.
75
+ Run all **8 sequential interactive steps** in `$HOME/.claude/multi-agent-refs/phases/phase-0-init.md`; never short-circuit. Step 0: `bash "$HOME/.copilot/lib/credential-inventory.sh" --json` into `agent-state.json.credentialInventory`; never ask for data a mapped credential can fetch. **Exit gate (BLOCKING)**: `node "$HOME/.copilot/scripts/phase0-exit-gate.mjs" "$TASK_ID" --input "$USER_INPUT"`; non-zero means Phase 0 skipped its own output (`taskType`, `baseBranch`, `baseFetchStatus`, a worktree distinct from the project root, the Figma tier for a Figma URL): fix the missing step. Per-project parsing and worktree: `$HOME/.claude/multi-agent-refs/orchestrator/phase-0-projects.md`. Jira input: `bash "$HOME/.copilot/lib/jira-family-write.sh" resolve --state "$STATE_FILE"` (records, writes nothing).
228
76
 
229
- ### Phase 2: Dev (claude-sonnet-5-5)
230
- For each todo (respecting dependency order):
231
- 1. Update todo status: `in_progress`
232
- 2. **TDD cycle**: write failing test → verify RED; write minimal code → verify GREEN; refactor if needed
233
- 3. Run build: `xcodebuild` via **task agent**
234
- 4. If build fails → fix → rebuild (max 3 attempts, track `retryCount` in `agent-state.json`)
235
- 5. Update todo status: `done`
236
- 6. Log: `⚡ Phase 2: {todo-id} - Test ✅ Build ✅`
77
+ ### Phases 1-5
237
78
 
238
- ### Phase 3: Review (parallel + triage)
239
- 0. **Diff Risk Scoring (advisory)** - before reviewer dispatch run `node $HOME/.claude/scripts/diff-risk-score.mjs --base "$BASE_BRANCH" --top 5` and inject the top-N risk-ranked files as a `${PRIORITY_FILES}` block into each reviewer's prompt. Heuristic, deterministic, sub-second, never gates the pipeline. Disabled when `prefs.global.diffRiskAdvisory = false`. Signals: security paths (×3), schema migrations (×4), public API surfaces (×2), no-test-change (×2.5), complexity delta (×1.5), UI-critical paths (×1.5), loc changed (×1).
240
- 1. Launch **code-reviewer** agents in parallel. Reviewer set depends on which CLI is hosting the pipeline:
241
- - **Claude Code** (3 reviewers): `claude-fable-5-1` (deep security + architecture) + `claude-opus-5-5` (edge cases, different perspective) + `claude-sonnet-5-5` (quality + correctness)
242
- - **Copilot CLI** (3 reviewers): `gpt-5.4` (edge cases, different perspective) + `claude-opus-4.7` + `claude-sonnet-4.6` (Fable is not offered on Copilot CLI)
243
- - Triage: single top-tier pass over merged findings (`claude-fable-5-1` on Claude Code, `claude-opus-4.7` on Copilot CLI)
244
- 2. Collect findings, classify:
245
- - 🔴 **Blocking** → must fix → back to Phase 2 (max 3 iterations)
246
- - 🟡 **Important** → fix and re-review
247
- - 🟢 **Suggestion** → apply if reasonable
248
- 3. Log: `🔍 Phase 3: Review - {consensus}`
79
+ - **1 Plan**: analysis (`explorer`), planning, then the **Plan Approval Gate** (interactive only): clarification max 2 rounds, approval loop `onayla` / `iptal` / free-text.
80
+ - **2 Dev**: TDD per todo, build, max 3 fix attempts.
81
+ - **3 Review**: three parallel reviewers + one triage pass; blocking goes back to Phase 2 (max 3 iterations). Interactive user test via `AskUserQuestion`, saying yes removes the worktree and checks the branch out: `$HOME/.claude/multi-agent-refs/orchestrator/phase-3-user-test.md`.
82
+ - **4 Commit & PR**: ask before commit (No pauses; `resume` later) and before the PR; `git add` specific files, never `git add -A`; author from `prefs.global.identities[]`. Read `$HOME/.claude/multi-agent-refs/orchestrator/phase-4-5-projects.md`.
83
+ - **5 Report**: finalize `agent-log.md` (`$HOME/.claude/multi-agent-refs/phases/log-format.md`), print the summary.
249
84
 
250
- #### Phase 3 user test (optional, interactive)
251
- Lets the user test the code before the PR, through a native `AskUserQuestion` picker (never a typed y/N prompt). The prompt MUST say that yes **removes the worktree and checks the branch out locally**, or the side effect is implicit. Skip → Phase 4; a requested fix recreates the worktree and returns to Phase 2. Commits live on the branch, so removing the worktree does NOT delete them.
252
-
253
- Full procedure: `$HOME/.claude/multi-agent-refs/orchestrator/phase-3-user-test.md`. Read it when Phase 3 review is done and the run is interactive.
254
-
255
- ### Phase 4: Commit & PR
256
-
257
- Every project:
258
- 1. **Ask**: "Want to commit?" **No** → pause; the user continues with `resume` when ready.
259
- 2. my-figma-app: run `/figma-iteration-commit {ComponentName}` - do NOT commit manually, the skill manages everything.
260
- 3. my-app / generic: stage specific files with `git add` (NOT `git add -A` - avoid committing .env, credentials, or other sensitive files), commit as `{type}({scope}): {description} [PROJ-{id}]`, push, then **Ask**: "Want to open a Pull Request?" before creating it.
261
- 4. Author: resolved from `prefs.global.identities[]` - NEVER hardcode.
262
-
263
- Full procedure: `$HOME/.claude/multi-agent-refs/orchestrator/phase-4-5-projects.md`. Read it when Phase 4 starts, for the per-project steps and the GitHub issue body update.
264
-
265
- ### Phase 5: Report
266
- 1. Finalize `agent-log.md` with ALL sections:
267
- - **Timeline table**: phase, agent, model, duration, status, detail
268
- - **Agent Activity Report**: per-agent call count, total duration, models used, skill count
269
- - **Token Estimate**: estimated token usage per agent + total
270
- - **Per-Phase Time Distribution**: ASCII bar chart showing time per phase
271
- - **Review Iterations**: blocking/important/suggestion counts per iteration
272
- - **Files Changed**: `git diff --stat` output
273
- - **Review Consensus**: final 🔴/🟡/🟢 status
274
- - **Test Scenarios**: Turkish, for Jira (Precondition → Steps → Expected result)
275
- 2. Print compact summary to terminal:
276
- ```
277
- ✅ PROJ-{id} complete
278
- ⏱️ Total: 3m 18s | Agents: 12 calls | Files: 4 changed
279
- 📦 Commit: abc1234 | PR: #87
280
- 📖 Wiki: {ComponentName}.md pushed to wiki master
281
- 📋 Full report: ~/.claude/logs/multi-agent/{project}/{task-id}/agent-log.md
282
- ```
283
- 3. Log: `📋 Phase 5: Report complete`
284
-
285
- **Step 2 - Wiki + Figma screenshots** runs only for a component implementation with a GitHub Issue (skip for a bug fix or refactor). Full procedure: `$HOME/.claude/multi-agent-refs/orchestrator/phase-4-5-projects.md`. Read it when Phase 5 reports a component task.
286
-
287
- ---
288
-
289
- ## Log File Format
290
-
291
- Canonical shape, and the path the code actually uses, live in
292
- `$HOME/.claude/multi-agent-refs/phases/log-format.md`. Read it when writing
293
- the log; do not re-derive the format here.
294
-
295
- ## Component Generation
296
-
297
- Generic guide: `$HOME/.claude/multi-agent-refs/component-generation.md`.
298
- Dispatch (which plugin skill handles it per CLI):
299
- `$HOME/.claude/multi-agent-refs/component-dispatch.md`.
300
- Loaded only for a task that generates a component from a design.
85
+ Component generation: `$HOME/.claude/multi-agent-refs/component-generation.md` and `component-dispatch.md`, only for a design-to-component task.
301
86
 
302
87
  ## Rules
303
88
 
304
- - ❌ NEVER put "Copilot", "AI", "generated by" in code or commits
305
- - ❌ NEVER commit without passing build
306
- - ❌ NEVER commit without passing review
307
- - ❌ NEVER auto-close an issue (GitHub or Jira); PR bodies use `Ref: #N` / `Related: #N`, never `Closes/Fixes/Resolves`
308
- - ✅ Follow existing code style and conventions
309
- - ✅ Use design tokens, no magic numbers
310
- - ✅ Every public method must have tests
311
- - ✅ Xcode header on new Swift files
312
- - ✅ Commit message format:
313
- - With Jira: `{type}({scope}): description [PROJ-{id}]`
314
- - Without Jira (generic): `{type}({scope}): description [#{shortId}]`
315
- - ✅ Git author: resolved from `prefs.global.identities[]` (e.g. `{identity.name} <{identity.email}>`) - NEVER hardcoded
316
-
317
- ## Help Display
89
+ - NEVER put "Copilot", "AI", "generated by" in code or commits
90
+ - NEVER commit without passing build or review
91
+ - NEVER auto-close an issue (GitHub or Jira); PR bodies use `Ref: #N` / `Related: #N`, never `Closes/Fixes/Resolves`
92
+ - Follow existing code style; design tokens, no magic numbers; every public method tested; Xcode header on new Swift files
93
+ - Commit: `{type}({scope}): description [PROJ-{id}]`, or `[#{shortId}]` without Jira
94
+ - Git author from `prefs.global.identities[]`, never hardcoded
318
95
 
319
- Rendered by the `multi-agent-help` skill (`/multi-agent-help`), which owns the full text in both languages.
96
+ Help: the `multi-agent-help` skill (`/multi-agent-help`).