@mmerterden/multi-agent-pipeline 20.36.0 → 20.37.1

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 (222) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/docs/facts.json +2 -2
  3. package/docs/features.md +1 -1
  4. package/docs/recovery-guide.md +1 -1
  5. package/install/catalog-history.json +1 -1
  6. package/manifest.json +225 -148
  7. package/package.json +1 -1
  8. package/pipeline/commands/multi-agent/SKILL.md +33 -154
  9. package/pipeline/commands/multi-agent/analysis/SKILL.md +14 -68
  10. package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +5 -8
  11. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +38 -109
  12. package/pipeline/commands/multi-agent/channels/SKILL.md +38 -167
  13. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +37 -144
  14. package/pipeline/commands/multi-agent/design-check/SKILL.md +27 -131
  15. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +22 -48
  16. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +37 -180
  17. package/pipeline/commands/multi-agent/jira/SKILL.md +16 -46
  18. package/pipeline/commands/multi-agent/manual-test/SKILL.md +12 -7
  19. package/pipeline/commands/multi-agent/refactor/SKILL.md +23 -184
  20. package/pipeline/commands/multi-agent/resume/SKILL.md +30 -136
  21. package/pipeline/commands/multi-agent/review/SKILL.md +24 -199
  22. package/pipeline/commands/multi-agent/setup/SKILL.md +25 -181
  23. package/pipeline/commands/multi-agent/stack/SKILL.md +9 -53
  24. package/pipeline/commands/multi-agent/status/SKILL.md +13 -2
  25. package/pipeline/commands/multi-agent/store-ready/SKILL.md +27 -226
  26. package/pipeline/commands/multi-agent/sync/SKILL.md +35 -164
  27. package/pipeline/commands/multi-agent/test-gen/SKILL.md +2 -4
  28. package/pipeline/commands/multi-agent/update/SKILL.md +18 -60
  29. package/pipeline/contract/CHANGELOG.md +9 -0
  30. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  31. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  32. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  33. package/pipeline/contract/fixtures/runs-awaiting-question.json +1 -1
  34. package/pipeline/contract/fixtures/runs-empty.json +1 -1
  35. package/pipeline/contract/fixtures/runs-failed.json +1 -1
  36. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +1 -1
  37. package/pipeline/contract/fixtures/runs-pr-opened.json +1 -1
  38. package/pipeline/contract/fixtures/runs-running.json +1 -1
  39. package/pipeline/contract/manifest.json +5 -5
  40. package/pipeline/contract/types/index.d.ts +3 -2
  41. package/pipeline/multi-agent-refs/audit-guide.md +20 -0
  42. package/pipeline/multi-agent-refs/autopilot-on/details.md +148 -0
  43. package/pipeline/multi-agent-refs/channels/generator.md +14 -0
  44. package/pipeline/multi-agent-refs/channels/preview.md +13 -0
  45. package/pipeline/multi-agent-refs/channels/reference.md +46 -0
  46. package/pipeline/multi-agent-refs/complaint-analysis/phases.md +159 -0
  47. package/pipeline/multi-agent-refs/design-check/export.md +1 -0
  48. package/pipeline/multi-agent-refs/design-check/init-inventory.md +1 -1
  49. package/pipeline/multi-agent-refs/design-check/scope-and-ledger.md +64 -0
  50. package/pipeline/multi-agent-refs/features/analysis-command-notes.md +53 -0
  51. package/pipeline/multi-agent-refs/features/commit-multi-repo.md +63 -0
  52. package/pipeline/multi-agent-refs/features/dev-multi-repo.md +51 -0
  53. package/pipeline/multi-agent-refs/features/test-gap.md +40 -0
  54. package/pipeline/multi-agent-refs/features/worktree-finalize.md +1 -1
  55. package/pipeline/multi-agent-refs/garbage-collect/phases.md +60 -0
  56. package/pipeline/multi-agent-refs/ios-coding-standard/plan.md +71 -0
  57. package/pipeline/multi-agent-refs/ios-coding-standard/resolve-and-scan.md +135 -0
  58. package/pipeline/multi-agent-refs/jira/picker-detail.md +71 -0
  59. package/pipeline/multi-agent-refs/orchestrator/copilot-pipeline.md +88 -0
  60. package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +96 -1
  61. package/pipeline/multi-agent-refs/orchestrator/phase-3-user-test.md +12 -9
  62. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +4 -4
  63. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +8 -47
  64. package/pipeline/multi-agent-refs/phases/phase-3-review.md +21 -65
  65. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +9 -59
  66. package/pipeline/multi-agent-refs/phases/phase-5-report.md +0 -31
  67. package/pipeline/multi-agent-refs/refactor/sweep.md +190 -0
  68. package/pipeline/multi-agent-refs/resume/details.md +115 -2
  69. package/pipeline/multi-agent-refs/review/inputs.md +33 -1
  70. package/pipeline/multi-agent-refs/review/module-guides.md +9 -1
  71. package/pipeline/multi-agent-refs/review/panel.md +75 -0
  72. package/pipeline/multi-agent-refs/review/valven.md +5 -1
  73. package/pipeline/multi-agent-refs/rules.md +1 -1
  74. package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +4 -0
  75. package/pipeline/multi-agent-refs/setup/token-save-flow.md +13 -0
  76. package/pipeline/multi-agent-refs/stack/background.md +72 -0
  77. package/pipeline/multi-agent-refs/store-ready/gates.md +139 -0
  78. package/pipeline/multi-agent-refs/store-ready/report.md +40 -2
  79. package/pipeline/multi-agent-refs/sync/office.md +10 -0
  80. package/pipeline/multi-agent-refs/sync/overview.md +61 -0
  81. package/pipeline/multi-agent-refs/sync/repo.md +91 -0
  82. package/pipeline/multi-agent-refs/update/details.md +83 -0
  83. package/pipeline/office/index.html +6 -3
  84. package/pipeline/office/toolkit.json +1 -1
  85. package/pipeline/rules/figma-pipeline.md +6 -3
  86. package/pipeline/schemas/prefs.schema.json +1 -1
  87. package/pipeline/schemas/runs-index.schema.json +2 -1
  88. package/pipeline/scripts/_memory-policy.mjs +27 -5
  89. package/pipeline/scripts/checkpoint-fold.sh +59 -0
  90. package/pipeline/scripts/contract-server.mjs +1 -1
  91. package/pipeline/scripts/gate-ledger.mjs +1 -1
  92. package/pipeline/scripts/office-control.mjs +41 -15
  93. package/pipeline/scripts/offload-ref.sh +1 -1
  94. package/pipeline/scripts/rework-rulings.mjs +5 -3
  95. package/pipeline/scripts/runs-index.mjs +34 -7
  96. package/pipeline/scripts/scope-check-gate.mjs +15 -2
  97. package/pipeline/scripts/status-overview.mjs +401 -0
  98. package/pipeline/scripts/user-test-handoff.sh +203 -0
  99. package/pipeline/scripts/validate-planning.mjs +5 -3
  100. package/pipeline/scripts/validate-triage.mjs +2 -1
  101. package/pipeline/scripts/write-state.mjs +13 -4
  102. package/pipeline/skills/.skill-manifest.json +64 -64
  103. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +7 -70
  104. package/pipeline/skills/shared/core/apple-archive-compliance/references/examples.md +67 -0
  105. package/pipeline/skills/shared/core/apple-archive-compliance/references/version-history.md +8 -0
  106. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +10 -72
  107. package/pipeline/skills/shared/core/google-play-compliance/references/examples.md +69 -0
  108. package/pipeline/skills/shared/core/google-play-compliance/references/notes.md +7 -0
  109. package/pipeline/skills/shared/core/google-play-compliance/references/version-history.md +5 -0
  110. package/pipeline/skills/shared/core/multi-agent/SKILL.md +39 -262
  111. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +35 -73
  112. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +37 -337
  113. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +27 -122
  114. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +8 -340
  115. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +37 -180
  116. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +12 -7
  117. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +23 -184
  118. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +14 -82
  119. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +25 -277
  120. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +13 -2
  121. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +73 -217
  122. package/pipeline/skills/shared/external/alarmkit/SKILL.md +11 -162
  123. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-code.md +257 -0
  124. package/pipeline/skills/shared/external/android-architecture/SKILL.md +7 -58
  125. package/pipeline/skills/shared/external/android-architecture/references/code-examples.md +68 -0
  126. package/pipeline/skills/shared/external/app-intents/SKILL.md +3 -45
  127. package/pipeline/skills/shared/external/app-intents/references/code-examples.md +54 -0
  128. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +5 -81
  129. package/pipeline/skills/shared/external/app-store-optimization/references/engagement-and-localization.md +96 -0
  130. package/pipeline/skills/shared/external/app-store-review/SKILL.md +6 -112
  131. package/pipeline/skills/shared/external/app-store-review/references/monetization-and-submission.md +138 -0
  132. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +10 -117
  133. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models-code.md +186 -0
  134. package/pipeline/skills/shared/external/authentication/SKILL.md +3 -50
  135. package/pipeline/skills/shared/external/authentication/references/code-examples.md +59 -0
  136. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +3 -84
  137. package/pipeline/skills/shared/external/callkit-voip/references/code-examples.md +93 -0
  138. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -263
  139. package/pipeline/skills/shared/external/ci-cd-pipelines/references/pipeline-examples.md +281 -0
  140. package/pipeline/skills/shared/external/clean-code/SKILL.md +8 -41
  141. package/pipeline/skills/shared/external/clean-code/references/code-examples.md +56 -0
  142. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +8 -146
  143. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-code.md +214 -0
  144. package/pipeline/skills/shared/external/compose-components/SKILL.md +6 -80
  145. package/pipeline/skills/shared/external/compose-components/references/code-examples.md +89 -0
  146. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +5 -64
  147. package/pipeline/skills/shared/external/compose-navigation/references/code-examples.md +70 -0
  148. package/pipeline/skills/shared/external/core-data/SKILL.md +9 -157
  149. package/pipeline/skills/shared/external/core-data/references/core-data-code.md +221 -0
  150. package/pipeline/skills/shared/external/core-nfc/SKILL.md +3 -89
  151. package/pipeline/skills/shared/external/core-nfc/references/code-examples.md +98 -0
  152. package/pipeline/skills/shared/external/coreml/SKILL.md +17 -133
  153. package/pipeline/skills/shared/external/coreml/references/coreml-code.md +208 -0
  154. package/pipeline/skills/shared/external/css-modern/SKILL.md +8 -131
  155. package/pipeline/skills/shared/external/css-modern/references/code-examples.md +142 -0
  156. package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -103
  157. package/pipeline/skills/shared/external/database-patterns/references/orm-examples.md +112 -0
  158. package/pipeline/skills/shared/external/html-semantic/SKILL.md +7 -48
  159. package/pipeline/skills/shared/external/html-semantic/references/code-examples.md +54 -0
  160. package/pipeline/skills/shared/external/humanizer/SKILL.md +6 -19
  161. package/pipeline/skills/shared/external/humanizer/references/voice.md +24 -0
  162. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +13 -170
  163. package/pipeline/skills/shared/external/ios-accessibility/references/assistive-tech-review.md +224 -0
  164. package/pipeline/skills/shared/external/ios-localization/SKILL.md +2 -24
  165. package/pipeline/skills/shared/external/ios-localization/references/code-examples.md +30 -0
  166. package/pipeline/skills/shared/external/ios-networking/SKILL.md +3 -58
  167. package/pipeline/skills/shared/external/ios-networking/references/code-examples.md +67 -0
  168. package/pipeline/skills/shared/external/ios-security/SKILL.md +4 -64
  169. package/pipeline/skills/shared/external/ios-security/references/code-examples.md +74 -0
  170. package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -90
  171. package/pipeline/skills/shared/external/live-activities/references/code-examples.md +108 -0
  172. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +9 -23
  173. package/pipeline/skills/shared/external/localization-reuse-map/references/project-settings.md +22 -0
  174. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +5 -95
  175. package/pipeline/skills/shared/external/mapkit-location/references/code-examples.md +117 -0
  176. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +7 -106
  177. package/pipeline/skills/shared/external/nextjs-app-router/references/app-router-examples.md +124 -0
  178. package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -31
  179. package/pipeline/skills/shared/external/permissionkit/references/code-examples.md +37 -0
  180. package/pipeline/skills/shared/external/play-store-review/SKILL.md +6 -74
  181. package/pipeline/skills/shared/external/play-store-review/references/signing-and-policies.md +83 -0
  182. package/pipeline/skills/shared/external/push-notifications/SKILL.md +8 -125
  183. package/pipeline/skills/shared/external/push-notifications/references/notification-code.md +176 -0
  184. package/pipeline/skills/shared/external/python-patterns/SKILL.md +7 -158
  185. package/pipeline/skills/shared/external/python-patterns/references/python-examples.md +176 -0
  186. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +7 -157
  187. package/pipeline/skills/shared/external/rest-api-design/references/api-examples.md +175 -0
  188. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +11 -230
  189. package/pipeline/skills/shared/external/swift-architecture/references/pattern-examples.md +295 -0
  190. package/pipeline/skills/shared/external/swift-codable/SKILL.md +17 -149
  191. package/pipeline/skills/shared/external/swift-codable/references/codable-recipes.md +207 -0
  192. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +12 -99
  193. package/pipeline/skills/shared/external/swift-concurrency/references/code-examples.md +100 -0
  194. package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-additions.md +18 -0
  195. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +9 -78
  196. package/pipeline/skills/shared/external/swift-formatstyle/references/formatstyle-examples.md +113 -0
  197. package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -56
  198. package/pipeline/skills/shared/external/swift-language/references/code-examples.md +65 -0
  199. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +1 -0
  200. package/pipeline/skills/shared/external/swiftdata/SKILL.md +6 -122
  201. package/pipeline/skills/shared/external/swiftdata/references/code-examples.md +140 -0
  202. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -139
  203. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/interop-code.md +198 -0
  204. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +9 -81
  205. package/pipeline/skills/shared/external/tailwind-css/references/code-examples.md +91 -0
  206. package/pipeline/skills/shared/external/testing-backend/SKILL.md +7 -207
  207. package/pipeline/skills/shared/external/testing-backend/references/testing-examples.md +225 -0
  208. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +8 -89
  209. package/pipeline/skills/shared/external/typescript-patterns/references/code-examples.md +100 -0
  210. package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -20
  211. package/pipeline/skills/shared/external/vision-framework/references/code-examples.md +26 -0
  212. package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -169
  213. package/pipeline/skills/shared/external/vue-composition/references/vue-examples.md +187 -0
  214. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +7 -174
  215. package/pipeline/skills/shared/external/web-accessibility/references/a11y-examples.md +192 -0
  216. package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -66
  217. package/pipeline/skills/shared/external/web-performance/references/code-examples.md +77 -0
  218. package/pipeline/skills/shared/external/web-testing/SKILL.md +11 -186
  219. package/pipeline/skills/shared/external/web-testing/references/testing-examples.md +213 -0
  220. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/format-and-output.md +0 -0
  221. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/publish-and-snapshot.md +0 -0
  222. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/sources-and-recipes.md +0 -0
@@ -0,0 +1,139 @@
1
+ # store-ready: the three gates, input flags and Gate 2 detail
2
+
3
+ <!-- toc -->
4
+ - [Why three gates, and why the same three on both platforms](#why-three-gates-and-why-the-same-three-on-both-platforms)
5
+ - [Gate matrix](#gate-matrix)
6
+ - [Input](#input)
7
+ - [Step A: why the sweep belongs here](#step-a-why-the-sweep-belongs-here)
8
+ - [Gate 1: severity](#gate-1-severity)
9
+ - [Gate 2](#gate-2)
10
+ - [Gate 3: scope](#gate-3-scope)
11
+ <!-- /toc -->
12
+
13
+ Read by `/multi-agent:store-ready` before Step 0. The command file keeps the step
14
+ order, the skip and never-ship rules; this file holds the gate model, the input
15
+ table and the Gate 2 procedure per platform.
16
+
17
+ ## Why three gates, and why the same three on both platforms
18
+
19
+ Each gate sees what the others cannot, so no single one is "the check". The
20
+ failure modes are the same on both platforms: a malformed package, a package the
21
+ store refuses, a policy a human enforces.
22
+
23
+ | Gate | Sees | Blind to |
24
+ |---|---|---|
25
+ | **1. Static** | package structure, manifests, signing, declared APIs and SDKs | anything depending on the store account |
26
+ | **2. Authoritative** | what the store's own validator says about this exact binary | written policy - no validator reads it |
27
+ | **3. Policy** | consent flows, deletion paths, purchase routing, disclosures | anything not visible in source |
28
+
29
+ A validation run must not be able to ship a build by accident: iOS runs
30
+ `--validate-app`, never `--upload-app`; when Google Play is onboarded, Android Gate 2
31
+ uploads the bundle into a throwaway edit that is validated and deleted, only after
32
+ the user approves that plan.
33
+
34
+ ## Gate matrix
35
+
36
+ | Gate | iOS | Android |
37
+ |---|---|---|
38
+ | 1 Static | `ios_app_store_audit({archive_path, rules: "all"})` - 18 rules with real ITMS codes. Needs an `.xcarchive`. Reference: `apple-archive-compliance` skill | `android_apk_audit` plus the `google-play-compliance` skill's 21 rules: `bundletool validate` + manifest dump, `aapt2 dump badging`, `apksigner verify`, ABI / native scan. Needs an `.aab` (an `.apk` narrows it, see Step 3) |
39
+ | 2 Authoritative | `ios_testflight_validate({ipa_path, platform: "ios", <credentials>})` → `xcrun altool --validate-app`, plus `store_asc_next_build_number` for whether the build number is already used. Needs an `.ipa` + credentials | With `google_play` onboarded: `store_play_validate_bundle({package_name, bundle_path})` - Google validates the `.aab` in a throwaway Publishing API edit that is then deleted, never committed. Without it, Play's check exists only server-side and nothing local reproduces it, so this gate reports `SKIPPED (no local Play validator)` with the reason `Google Play not onboarded`. Do not substitute `bundletool validate` - that is Gate 1 |
40
+ | 3 Policy | `ai-ios-toolkit:app-store-review` skill vs repo source | `ai-android-toolkit:play-store-review` skill vs repo source |
41
+
42
+ Gate 2's asymmetry is reported, not smoothed over. On iOS it is the only gate that
43
+ catches a version+build pair already used. On Android it runs only with Google Play
44
+ onboarded and the throwaway-edit upload approved; without both, an Android run
45
+ clears at most 2 of 3 gates and never prints `passed`.
46
+
47
+ The `store_*` tools need `@mmerterden/multi-agent-toolkit-mcp` ≥ v3.17.0. On an
48
+ older server they are absent, and each branch that uses one falls back to the
49
+ behaviour it has without the credential.
50
+
51
+ ## Input
52
+
53
+ | Input | Meaning |
54
+ |---|---|
55
+ | (empty) | ask which repo (Step 1) |
56
+ | `my-app` or a path | that repo |
57
+ | `--archive=<path>` | iOS, build supplied; all three gates can run |
58
+ | `--ipa=<path>` | iOS, build supplied; Gate 1 reports `SKIPPED (needs .xcarchive)` |
59
+ | `--aab=<path>` | Android, build supplied; Gate 1 + 3 run |
60
+ | `--apk=<path>` | Android; Gate 1 runs the subset that does not need a bundle, and says which rules it could not apply |
61
+ | `--skip-sweep` | skip Step A, when no simulator / emulator is available or only the package matters |
62
+ | `--resume` | continue the last run from its state file |
63
+
64
+ Platform detection when no build flag is given:
65
+
66
+ ```
67
+ cwd or repo contains .xcodeproj / .xcworkspace / Package.swift -> iOS
68
+ cwd or repo contains build.gradle / build.gradle.kts -> Android
69
+ both -> ask which
70
+ neither -> halt: "store-ready needs an iOS or Android project"
71
+ ```
72
+
73
+ Branch picker options after the fetch: the current branch, the default branch, and
74
+ any `release/*` / `tkdevelop/*` heads. Mode B (supply a
75
+ build) is fastest and needs no signing in-run; Mode A (build from the branch) needs a
76
+ distribution certificate and profile in the keychain on iOS, the release signing
77
+ config on Android, and takes as long as a real release build.
78
+
79
+ ## Step A: why the sweep belongs here
80
+
81
+ The gates read a package; the sweep reads the app. A build can be structurally
82
+ perfect and still ship an unreadable screen, so the sweep stays part of store
83
+ readiness rather than being a separate errand. It delegates the mechanics to the UI
84
+ Bug Hunter flow and merges its findings into the single Step 7 report,
85
+ severity-grouped alongside the gate findings.
86
+
87
+ ## Gate 1: severity
88
+
89
+ `error` findings are blocking; `warning` is advisory. Group by severity and keep
90
+ each finding's ITMS / Play policy code - Gate 2 may return the same code on iOS,
91
+ and seeing it in both places tells the user it is real rather than a heuristic. The
92
+ iOS direct-package fallback runs only when the audit tool is genuinely absent, and
93
+ the report says which path ran.
94
+
95
+ ## Gate 2
96
+
97
+ **iOS**: `ios_testflight_validate({ipa_path, platform: "ios", <credential args>})`.
98
+ Render the verdict exactly as returned:
99
+
100
+ - `PASS` - Apple accepted the binary for delivery.
101
+ - `FAIL` - list each issue with its ITMS code, the mapped guideline, and the hint.
102
+ - `SKIPPED` - print the reason. **Never render this as a pass.**
103
+
104
+ Gate 2 is the only gate that catches a build number already used - so when it
105
+ fails on that, say so plainly and name the next free build number.
106
+
107
+ **Build number** (App Store Connect onboarded, `store_status` reports
108
+ `appStoreConnect.configured`): find the app with `store_asc_apps` by the archive's
109
+ bundle id, then `store_asc_next_build_number({app_id, version: <CFBundleShortVersionString>})`.
110
+ Report the archive's `CFBundleVersion` as `already used` (not above the highest
111
+ uploaded one, with the suggested next) or `free`. Read-only; it never changes the
112
+ project. Without the credential, skip this line and say why.
113
+
114
+ **Android, Google Play onboarded, attended run.** Call
115
+ `store_play_validate_bundle({package_name: <applicationId>, bundle_path: <.aab>})`
116
+ without `confirm`. It returns the plan only: it would open an edit, upload the
117
+ bundle, validate the edit, then delete it, committing nothing and changing no
118
+ track. Show that plan to the user and ask (picker, `question` / `description` in
119
+ `outputLanguage`, `header` `Play check`, labels `Validate on Play` / `Skip`).
120
+ Only on **Validate on Play**, call it again with `confirm: true`. Render the
121
+ verdict from `valid`: `true` → `PASS`, `false` → `FAIL` with the returned
122
+ `error`. On **Skip**, report `SKIPPED (no local Play validator)` with the reason
123
+ `user declined the upload`.
124
+
125
+ **Android otherwise** (unattended, or not onboarded): do not call the tool; report
126
+ `SKIPPED (no local Play validator)` with the reason from the Step 2 states.
127
+
128
+ `bundletool validate` is Gate 1 in every case; reporting it here would fake a
129
+ cleared gate.
130
+
131
+ Google does not document whether an upload into a discarded edit reserves its
132
+ `versionCode`; fastlane's `validate_only` runs the same sequence as a pre-release
133
+ check. If the real upload is later refused as "already used", raise `versionCode`.
134
+
135
+ ## Gate 3: scope
136
+
137
+ This is the gate that catches what a human reviewer rejects, so it reads source,
138
+ not the binary. Both review skills cover a `Crash symbolication` row (dSYM upload
139
+ step / `mapping.txt` upload).
@@ -1,7 +1,8 @@
1
1
  # store-ready: report template
2
2
 
3
- Read by `/multi-agent:store-ready` for Step 7. The report rules stay in the
4
- command file; this is the layout they apply to.
3
+ Read by `/multi-agent:store-ready` for Steps 7 and 8. The command file keeps
4
+ the skip and attribution rules; this file holds the layout, the full report
5
+ rules and the next actions Step 8 prints.
5
6
 
6
7
  Write to `~/StoreChecks/<platform>-<repo>-<branch>-<timestamp>/report.md` and print
7
8
  a summary.
@@ -38,3 +39,40 @@ Before rollout (human inputs, not verified)
38
39
  Rollback / forward-fix owner: <name>
39
40
  Forward-fix plan: <one line>
40
41
  ```
42
+
43
+ ## Rules
44
+
45
+ - A skipped gate is never folded into the pass count. The verdict line states the
46
+ skip. An Android run whose Gate 2 did not run therefore reads
47
+ `2 of 3 gates cleared, 1 skipped` at best.
48
+ - Every blocking finding carries a file path or a store code. A finding the user
49
+ cannot act on is noise.
50
+ - The `Before rollout` block (phased rollout, `Halt thresholds`, rollback /
51
+ forward-fix owner, forward-fix plan) is filled by a human, never inferred. When it
52
+ is left unfilled the verdict line gains the suffix `, rollout plan missing`.
53
+ - The printed summary carries the verdict line, per-gate status, Blocking / Advisory /
54
+ Not run / Open questions, and the `Before rollout` block.
55
+ - Humanize via `--lang en` by default (`promptLanguage` is locked to `"en"`); pass
56
+ `--lang=tr` explicitly to opt into Turkish.
57
+ - No AI or assistant attribution anywhere, per
58
+ `$HOME/.claude/rules/git-conventions.md`.
59
+ - Real newlines, no HTML entities, per
60
+ `$HOME/.claude/multi-agent-refs/rules.md "External System Outputs"`.
61
+
62
+ ## Next actions
63
+
64
+ Step 8 prints these and stops:
65
+
66
+ - the exact upload command for when the gates are clear, so uploading stays an
67
+ explicit human act:
68
+ - iOS: `xcrun altool --upload-app ...`
69
+ - Android: the Play Console upload, or the `gradle publish` task the project
70
+ declares - never run it
71
+ - `/multi-agent:store-ready --resume` to re-run after fixes
72
+ - `/multi-agent:channels` to land the findings in Jira / Confluence / Wiki / PR
73
+ - the enabled stack plugin's `fix-bug` skill (`ai-ios-toolkit:fix-bug` or the stack
74
+ equivalent) when Gate 3 produced code-level findings
75
+
76
+ `/multi-agent:testflight-validation` is a thin alias onto the command, kept so the
77
+ iOS-only name keeps working; it resolves there with the platform pinned to iOS.
78
+ `/multi-agent:test "store-ready"` also resolves there. There is one implementation.
@@ -0,0 +1,10 @@
1
+ # Office Check (Step 3e)
2
+
3
+ Read by `/multi-agent:sync` at Step 3e of every sync and at step 9c of a release.
4
+
5
+ The office panel ships with the pipeline, so a sync carries it by checking it, not by copying it:
6
+
7
+ 1. `node ~/multi-agent-pipeline/pipeline/scripts/office-build.mjs --check`: the committed page is what `pipeline/office-src` builds to, and `office/toolkit.json` carries the toolkit version in `docs/facts.json`. Either stale fails the sync until it is rebuilt and committed; a release that regenerates facts rebuilds the office right after.
8
+ 2. After the install steps, compare `pipeline/office/index.html` with the installed copies (`~/.claude/office/`, and the Copilot and Codex trees when installed), byte for byte, plus the asset list. A difference means the install is behind: run `node install.js --installed` and compare again.
9
+ 3. Report the toolkit version the installed `office/toolkit.json` carries: it is what the office Tools window starts, and it moves forward with every release.
10
+ 4. An office server that is already running picks the update up by itself: the open page shows a reload banner, and `/multi-agent:office-on` replaces a server whose code changed. Nothing to restart by hand.
@@ -0,0 +1,61 @@
1
+ # Sync Overview: targets, shared sections, tokens
2
+
3
+ Read by `/multi-agent:sync` before Step 1.5 (DETECT) to know every target's
4
+ path and direction, and before any step that switches GitHub identity or
5
+ publishes.
6
+
7
+ ## Targets
8
+
9
+ | # | Target | Path | Direction |
10
+ |---|-------|-----|-----|
11
+ | 1 | Claude Code (source of truth) | `~/.claude/commands/multi-agent/` + `~/.claude/multi-agent-refs/` + `~/.claude/agents/` + `~/.claude/scripts/` + `~/.claude/lib/` | source |
12
+ | 2 | Copilot CLI | `~/.copilot/copilot-instructions.md` + `~/.copilot/skills/` | <- from Claude |
13
+ | 2b | Codex CLI | `~/.codex/AGENTS.md` + `~/.codex/skills/multi-agent/` + `~/.codex/multi-agent-refs/` + `~/.codex/agents/*.toml` | <- from Claude (path-rewritten) |
14
+ | 3 | multi-agent-pipeline repo | `~/multi-agent-pipeline/pipeline/` | <- from Claude (genericized) |
15
+ | 4 | Website | `{owner}/{website-host}` | <- version + features |
16
+ | 5 | multi-agent-toolkit MCP server | resolved from `prefs.global.devToolkit` or the `mcpServers` registration | own repo: gate, commit, publish |
17
+
18
+ ## Sync rules (Claude <-> Copilot)
19
+
20
+ 1. **Read first** - understand every target's current state before making any change
21
+ 2. **Preserve file structure** - each target has its own format:
22
+ - `commands/multi-agent/` SKILL tree + `multi-agent-refs/phases/`: detailed pipeline spec (frontmatter, phases, routing)
23
+ - `copilot-instructions.md`: general development instructions + pipeline summary section
24
+ - `multi-agent-pipeline/pipeline/`: generic open-source version (NO personal data)
25
+ 3. **Sync the shared sections** (Claude ↔ Copilot):
26
+ - Pipeline entries table (base / :autopilot)
27
+ - Project detection (URL-based + cwd-based)
28
+ - Figma pipeline flow
29
+ - Git conventions (author, branch, commit format)
30
+ - Keychain management (registry, naming convention, multi-agent pattern)
31
+ 4. **Do not duplicate** - summary in Copilot, full spec in Claude. Keep this distinction.
32
+ 5. **Report** - show a short diff summary after sync
33
+
34
+ ## Keychain Token Access
35
+
36
+ | Operation | Token Source |
37
+ |-------|---------------|
38
+ | `gh` CLI (personal) | `{owner}` gh auth (Keychain) |
39
+ | `gh` CLI (work) | `{user}_<work-label>` gh auth (Keychain) - see `prefs.global.accounts[]` |
40
+ | npm publish | `NODE_AUTH_TOKEN` - `GITHUB_TOKEN` in CI, Keychain PAT locally |
41
+ | multi-agent-toolkit publish (Step 3d) | `npm` logical Keychain key -> throwaway `--userconfig`, registry from that repo's `publishConfig` |
42
+
43
+ ```bash
44
+ gh auth switch --user {owner} # for personal repos
45
+ ```
46
+
47
+ ## Website files (Step 4)
48
+
49
+ | File | What to sync |
50
+ |-------|--------------|
51
+ | `src/lib/i18n.tsx` | Phase count, model count, feature descriptions (EN + TR) |
52
+ | `src/data/projects.ts` | Version number, tagline, description, feature list |
53
+
54
+ ## Sub-command paths
55
+
56
+ | Claude Code | Copilot CLI |
57
+ |-------------|-------------|
58
+ | `~/.claude/commands/multi-agent/{cmd}/SKILL.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
59
+
60
+ **Claude -> Copilot**: add SKILL.md frontmatter (`name`, `description`, `user-invocable: true`, `argument-hint`)
61
+ **Copilot -> Claude**: simplify the frontmatter (`description` + `allowed-tools`), add `$ARGUMENTS`
@@ -0,0 +1,91 @@
1
+ # Pipeline Repo Sync (Step 3)
2
+
3
+ Read by `/multi-agent:sync` before Step 3 (REPO), and before writing or reviewing
4
+ any synced shell script.
5
+
6
+ ## Platform support (macOS only)
7
+
8
+ Only macOS is supported (ADR-0012). `package.json` declares `os: ["darwin"]`, which npm enforces on the root package, so this tree cannot be installed elsewhere, and a detection table for other hosts would describe a case that cannot occur.
9
+
10
+ **Contract for synced shell scripts.** The runtime is BSD userland and bash 3.2,
11
+ and that is a stricter constraint than "cross-platform", not a looser one:
12
+
13
+ 1. Path handling: always quote (`"$f"`); use `$HOME`, never `/Users/...`.
14
+ 2. `grep -P` is banned. BSD grep has no `-P`: it exits 2, and with `2>/dev/null`
15
+ that reads as "found nothing". Use `-E`.
16
+ 3. Timestamps: `stat -c %Y` FIRST, then `stat -f %m`. GNU-first ordering is
17
+ required because `stat -f` is a valid GNU flag (`--file-system`) that
18
+ succeeds and prints something that is not a timestamp.
19
+ 4. Hashes: `sha256sum || shasum`, in that order. The gate fails a file that
20
+ names either alone.
21
+ 5. `find` traversal: `-prune` for `node_modules`, `Pods`, `.build`,
22
+ `DerivedData`, `.next`.
23
+ 6. Sed / awk: POSIX-portable. `-E`, never `-r`; `sed -i ''` on BSD.
24
+ 7. Keychain I/O: always via `~/.claude/lib/credential-store.sh get|set`, never
25
+ `security` directly - the wrapper is what keeps a secret off argv.
26
+ 8. Verification: after Step 3 (REPO), `bash -n` every shell script in
27
+ `pipeline/lib/` and `pipeline/scripts/`.
28
+
29
+ ## Repo sync rules
30
+
31
+ 1. **Source**: `~/.claude/commands/multi-agent/` + `~/.claude/multi-agent-refs/` + `~/.claude/agents/` + `~/.claude/lib/`
32
+ 2. **Target**: `~/multi-agent-pipeline/pipeline/`
33
+ 3. **Genericization** (must be applied BEFORE writing to the target):
34
+ - Jira project key (`prefs.global.defaultJiraKey`) -> `{JIRA_KEY}`, `PROJ` in examples
35
+ - Personal names/emails -> generic placeholder
36
+ - Branch names -> `develop`
37
+ - Project names -> `my-app`
38
+ - `{JIRA_HOST}`, `{BITBUCKET_HOST}`, `{CONFLUENCE_HOST}`, `{CORP_DOMAIN}` stay as-is
39
+ - **Verify**: `grep` scan for personal/corporate data inside pipeline/ -> 0 results
40
+ 4. **File mapping**:
41
+ ```
42
+ ~/.claude/commands/multi-agent/ -> pipeline/commands/multi-agent/
43
+ ~/.claude/multi-agent-refs/ -> pipeline/multi-agent-refs/ (refs + pickers, non-command)
44
+ ~/.claude/commands/sim-test.md -> pipeline/commands/sim-test.md
45
+ ~/.claude/agents/*.md -> pipeline/agents/
46
+ ```
47
+ 5. **Files NOT synced** (local-only, may contain personal data):
48
+ - `~/.claude/multi-agent-preferences.json`
49
+ - `~/.claude/CLAUDE.md`, `~/.claude/rules/`, `~/.claude/knowledge/`
50
+ - `~/.claude/scripts/` - EXCEPT `pre-commit-check.sh`, `agent-guard.sh`, `agent-guard.py`, and `build-stack-plugins.mjs` (generic, synced)
51
+ - `~/.claude/settings.json`
52
+ - `~/.claude/office/` - the office panel flows the other way: its source is the repo (`pipeline/office-src`, built by `office-build.mjs` into `pipeline/office`), and the installer copies it to each host. Never copy it from `~/.claude` into the repo; Step 3e checks it instead
53
+ - `~/.claude/multi-agent-refs/registries/` - the installer copies gate registries there from `pipeline/skills/shared/external`; the repo already holds the source
54
+ - **Any `~/.claude/commands/multi-agent/*/SKILL.md` whose frontmatter has `local-only: true`** - these are user/repo-specific alias wrappers that delegate to a private marketplace plugin's skills exposed as `multi-agent:<name>`. Syncing them would leak the private plugin/skill names into the public pipeline. Skip them at copy time; the backstop below proves none reached `pipeline/commands/`.
55
+ ```bash
56
+ grep -rl "^local-only: true" ~/multi-agent-pipeline/pipeline/commands/ 2>/dev/null \
57
+ && { echo "ABORT: local-only wrapper leaked into pipeline/commands"; exit 1; } || true
58
+ # backstop: corporate refs only (generic ai-ios-toolkit is fine)
59
+ grep -rniE "ai-(ios-engineering|mobile)-toolkit:(create-ui-component|evolve-ui-component|fix-bug|branch-and-pr|backlog|code-connect|figma-utility|resource-utility|component-wiki|component-docs|figma-setup)" \
60
+ ~/multi-agent-pipeline/pipeline/commands/ 2>/dev/null \
61
+ && { echo "ABORT: corporate reference leaked into pipeline/commands"; exit 1; } || true
62
+ ```
63
+ - **Installed-tree artifacts.** Picker descriptions are Turkish with a
64
+ `description-en:` sidecar when `outputLanguage=tr`, and fable-tier agents
65
+ carry `model: opus` while `fableEnabled` is off. The repo always gets the
66
+ English form and `model: fable`, so normalize after copying:
67
+ ```bash
68
+ # normalize: restore English descriptions, strip description-en sidecars
69
+ node ~/multi-agent-pipeline/pipeline/scripts/localize-commands.mjs restore \
70
+ --dir ~/multi-agent-pipeline/pipeline/commands/multi-agent
71
+ grep -rl "^description-en:" ~/multi-agent-pipeline/pipeline/commands/ 2>/dev/null \
72
+ && { echo "ABORT: description-en sidecar leaked into pipeline/commands"; exit 1; } || true
73
+ # backstop: repo description lines must be English (Turkish-diacritics proxy)
74
+ grep -rn '^description:.*[çğıöşüÇĞİÖŞÜ]' ~/multi-agent-pipeline/pipeline/commands/ 2>/dev/null \
75
+ && { echo "ABORT: localized description leaked into pipeline/commands"; exit 1; } || true
76
+ node ~/multi-agent-pipeline/pipeline/lib/agent-model-sync.mjs --dir ~/multi-agent-pipeline/pipeline/agents --fable-on
77
+ ```
78
+
79
+ 6. **Cross-platform smoke gate** (final step of the REPO sync, before push):
80
+ ```bash
81
+ # bash -n: parse-level syntax check on every shell script
82
+ find ~/multi-agent-pipeline/pipeline/lib ~/multi-agent-pipeline/pipeline/scripts \
83
+ -name "*.sh" -type f -exec bash -n {} \;
84
+ # Should print nothing - any output is a portability regression.
85
+
86
+ # Portability grep: flag known non-portable constructs introduced post-sync.
87
+ grep -rnE "stat -f[^[:space:]]+[^|]|sed -i[^[:space:]'\"]" \
88
+ ~/multi-agent-pipeline/pipeline/lib ~/multi-agent-pipeline/pipeline/scripts || true
89
+ # Each hit needs an explicit GNU/BSD fallback per the Platform Support contract.
90
+ ```
91
+ Gate failure -> abort push, surface the file + line, fix in the `~/.claude/` source first, re-sync.
@@ -0,0 +1,83 @@
1
+ # update: details and sample output
2
+
3
+ Read by `/multi-agent:update` before writing the step 6 summary, or when a step
4
+ fails and its reasoning matters.
5
+
6
+ ## Why doctor runs after the install
7
+
8
+ An update is the moment the layout changes, so it is the moment a layout check
9
+ is worth most: a script that moved, a host tree that did not get the copy, a
10
+ version stamp that disagrees with the package.
11
+
12
+ ## Why the download pins the scope (step 3)
13
+
14
+ `--registry` does NOT override a scope mapping. A user-level .npmrc line like
15
+ `@scope:registry=https://npm.pkg.github.com` wins over it, so the download hits
16
+ the wrong registry, fails with `notarget`, and `--silent` hides why. Pinning the
17
+ scope is the setting that actually loses to nothing.
18
+
19
+ The tarball path is taken from `npm pack`'s own output, never a glob: an older
20
+ tarball left in `$UPD_DIR` would be extracted instead, and the run would install
21
+ the version it was trying to leave.
22
+
23
+ The registry is read with `curl`, not `npm view`, because `npm view` can answer
24
+ from a stale local cache.
25
+
26
+ ## What `--installed` refreshes
27
+
28
+ `--installed` refreshes exactly the CLI targets that already carry a version
29
+ stamp (`$HOME/.claude/.pipeline-version`, `$HOME/.copilot/.pipeline-version`,
30
+ `$HOME/.codex/.pipeline-version`) and adds none: an update never installs
31
+ Copilot CLI or Codex CLI on a machine that only had Claude Code. With no stamp at
32
+ all it installs Claude Code. Each refreshed target gets the new version stamp.
33
+
34
+ ## Retired adapters (step 4c)
35
+
36
+ Cursor, Antigravity and Copilot Chat adapters are no longer targets; the pipeline
37
+ targets Claude Code, Copilot CLI and Codex CLI. Per-project adapter files
38
+ (`.cursor/`, `.agent/`, `.github/copilot-instructions.md`) live in the user's
39
+ repos and are left untouched.
40
+
41
+ ## Writing the step 6 summary
42
+
43
+ The JSON holds every release between the old and the new version (not only the
44
+ last one) and, for each plugin the refresh moved, that plugin's releases. Turn it
45
+ into a short note in `outputLanguage`, written for the person using the
46
+ pipeline, not for its maintainers:
47
+
48
+ - First line: `✓ Updated: v<CUR> → v<NEW>`, then one line per updated plugin
49
+ (`ai-ios-toolkit 0.20.0 → 0.21.0`).
50
+ - Then up to four groups, each only when it has entries: **New** (added),
51
+ **Fixed**, **Changed**, **Removed** (Turkish: Yeni, Düzeltilen, Değişen,
52
+ Kaldırılan). Put security entries first under Fixed.
53
+ - One plain sentence per item about what the user notices or can now do. Merge
54
+ items that say the same thing; leave out internal-only entries (smoke tests,
55
+ CI, refactors, budgets, docs) unless they change what a user sees. At most
56
+ about eight items per group; when more were dropped, say how many and that the
57
+ full list is in the CHANGELOG.
58
+ - Last line, when anything needs action: what to do (restart Claude Code for
59
+ plugin changes, run a command a release asks for).
60
+
61
+ With empty notes and no plugin updates, print only the version line.
62
+
63
+ ## Sample output
64
+
65
+ ```
66
+ Current: v15.6.0 Latest: v15.7.0
67
+ -> npm pack @{npm-scope}/multi-agent-pipeline@15.7.0
68
+ -> node install.js --installed (Claude Code; no Copilot CLI or Codex CLI stamp, not installed)
69
+ -> migrate-prefs.mjs (0 changes - already v2.6.0)
70
+
71
+ ✓ Updated: v15.6.0 → v15.7.0
72
+ ai-ios-toolkit 0.19.0 → 0.20.0
73
+
74
+ New
75
+ - iOS design review: critiques a screen against the HIG from screenshots.
76
+ Fixed
77
+ - The usage report reads the tracker as it is written.
78
+ Restart Claude Code to load the updated plugins.
79
+
80
+ Verification:
81
+ schema-validation: 27/27 pass
82
+ cross-cli-behavior: 14/14 pass
83
+ ```