@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
@@ -15,46 +15,11 @@ allowed-tools: Bash, Read, Edit, Write, AskUserQuestion
15
15
 
16
16
  Stack skills ship as plugins in the `{owner}/multi-agent-plugins` marketplace. Selecting a stack = **enabling the matching plugin(s)** in the current repo's `.claude/settings.json` `enabledPlugins`. Two toolkits are stack-independent and always enabled alongside the stack plugin(s): `ai-common-toolkit` (accessibility audit, humanizer, Firebase) and `ai-analyst-toolkit` (GitHub and package-registry evidence, community signal for analysis work).
17
17
 
18
- On Claude Code the marketplace plugins are the ONLY source of stack skills - nothing is copied into `~/.claude/skills` anymore. A stack that is not enabled here is simply absent from the session. Copilot CLI and Codex CLI have no plugin loader; they receive a local copy filtered to the enabled stacks at install time, which is why step 5 below offers to refresh those copies after a change.
18
+ Claude Code reads stack skills only from the enabled plugins; Copilot CLI and Codex CLI get a local copy filtered at install time (step 5). Host details, usage examples, a preview snippet and why the map is derived: `$HOME/.claude/multi-agent-refs/stack/background.md`. Read it when the user asks what an argument enables or how selection works.
19
19
 
20
- This replaces the old `stack-swap.sh` mechanic that physically moved skill directories in `~/.claude/skills/`. There is no SessionStart hook and no directory shuffling - enablement is declarative, per-repo, and versioned.
20
+ ## Stack -> plugin map
21
21
 
22
- ## Usage
23
-
24
- ```bash
25
- /multi-agent:stack # no arg → native multi-select picker (current state pre-noted)
26
- /multi-agent:stack ios # SwiftUI toolkit + common
27
- /multi-agent:stack ios backend # any combination, space-separated
28
- /multi-agent:stack android # Compose toolkit + common
29
- /multi-agent:stack mobile # alias: ios + android + common
30
- /multi-agent:stack backend # Python / Node spec-driven toolkit + common
31
- /multi-agent:stack web # React / TSX toolkit + common (alias: frontend)
32
- /multi-agent:stack fullstack # alias: web + backend + common
33
- /multi-agent:stack all # all four stack toolkits + common
34
- ```
35
-
36
- ## Stack → plugin map
37
-
38
- Derived, not listed. `pluginsForStacks()` in `scripts/_stack-routing.mjs` owns
39
- it, and this file deliberately carries no copy: the mapping was written out by
40
- hand in four places, and every copy is a chance to get the one asymmetry wrong -
41
- the detector says `web`, the marketplace ships `ai-frontend-toolkit`.
42
-
43
- ```bash
44
- node -e 'import(process.env.HOME+"/.claude/scripts/_stack-routing.mjs").then(m=>{
45
- const st=process.argv.slice(1).flatMap(a=>m.expandStackArg(a));
46
- if(!st.length){console.error("Unknown stack. One of: "+m.KNOWN_STACKS.join(" ")+" mobile fullstack all");process.exit(1);}
47
- const r=m.pluginsForStacks(st);
48
- if(r.dropped.length) console.error("not in the marketplace, dropped: "+r.dropped.join(" "));
49
- console.log(r.plugins.join(" "));
50
- })' "$@"
51
- ```
52
-
53
- `ai-common-toolkit` and `ai-analyst-toolkit` are in every answer, including the
54
- empty one: neither is stack-specific. Multiple args union their sets, and the
55
- aliases (`frontend`, `mobile`, `fullstack`, `all`) expand in the module so
56
- `/multi-agent:stack mobile` cannot mean one thing here and another in the
57
- installer.
22
+ Derived, not listed: `pluginsForStacks()` in `scripts/_stack-routing.mjs` owns it (aliases `frontend`, `mobile`, `fullstack`, `all` expand there too). Never write the map out by hand. `ai-common-toolkit` and `ai-analyst-toolkit` are in every answer.
58
23
 
59
24
  ## Behaviour
60
25
 
@@ -70,8 +35,8 @@ installer.
70
35
  - every stack toolkit **not** in the union is set to `false` (leave non-`@multi-agent-plugins` entries untouched)
71
36
  - `ai-common-toolkit@multi-agent-plugins` and `ai-analyst-toolkit@multi-agent-plugins` are always `true`
72
37
  - **legacy-key cleanup**: delete any `ai-*-engineering-toolkit@multi-agent-plugins` keys - those plugin names were retired by the `ai-<stack>-toolkit` rename and a stale `true` there enables a plugin that no longer exists in the marketplace
73
- - **Apple's Xcode skills**: when `~/.claude/xcode-apple-marketplace` exists (the installer linked this Mac's Xcode 27.1+ plugin), set `xcode-integration@xcode-apple` to `true` if `ios` is in the selection and `false` otherwise. Apple's skills are the reference for iPhone Duo and window resizing, SwiftUI, App Intents and the accessibility audits, and they are the first route for those iOS tasks. Without that directory there is nothing to enable; leave the key absent
74
- 4. **Unknown arg** → show the table above; do not guess.
38
+ - **Apple's Xcode skills**: when `~/.claude/xcode-apple-marketplace` exists, set `xcode-integration@xcode-apple` to `true` if `ios` is in the selection and `false` otherwise. Without that directory leave the key absent
39
+ 4. **Unknown arg** → show the known stacks; do not guess.
75
40
  5. **Copilot/Codex refresh offer.** Their local skill copies are filtered to the enabled stacks at install time, so after a change ask (single `AskUserQuestion`, not silent): "Refresh Copilot/Codex local copies now?" - Yes runs `node <pipelineRepo>/install.js --copilot --codex`, No leaves them stale with a one-line warning naming the command to run later. Skip this question entirely when neither `~/.copilot` nor `~/.codex` exists.
76
41
 
77
42
  ## Implementation
@@ -92,10 +57,7 @@ if [ "$#" -eq 0 ]; then
92
57
  exit 0
93
58
  fi
94
59
 
95
- # resolve every arg and derive the ON set - one owner, see the map above.
96
- # The marketplace suffix is appended INSIDE node: `$ON` is a single string, and
97
- # re-splitting it in the shell to suffix each name is the zsh word-splitting trap
98
- # (`printf %s@x $ON` suffixes the whole string, not each word).
60
+ # resolve every arg and derive the ON set; the suffix is appended inside node
99
61
  ON=$(MP="$MP" node -e 'import(process.env.HOME+"/.claude/scripts/_stack-routing.mjs").then(m=>{
100
62
  const st=process.argv.slice(1).flatMap(a=>m.expandStackArg(a));
101
63
  if(!st.length){console.error("Unknown stack. One of: "+m.KNOWN_STACKS.join(" ")+" mobile fullstack all");process.exit(1);}
@@ -105,19 +67,14 @@ ON=$(MP="$MP" node -e 'import(process.env.HOME+"/.claude/scripts/_stack-routing.
105
67
  })' "$@") || exit 1
106
68
  ```
107
69
 
108
- Then write it with the one writer of these rules (the office panel's
109
- `POST /v1/stack` calls the same script):
70
+ Then write it with the one writer of these rules:
110
71
 
111
72
  ```bash
112
73
  node "$HOME/.claude/scripts/stack-toggle.mjs" set --repo "$PWD" "$@" --json
113
74
  ```
114
75
 
115
- `stack-toggle.mjs` applies the write rules above (selection `true`, every other
116
- stack toolkit `false`, `ai-common-toolkit` and `ai-analyst-toolkit` always
117
- `true`, retired `ai-*-engineering-toolkit` keys deleted, `xcode-integration@xcode-apple`
118
- following `ios` when the Apple marketplace is linked, every other key kept),
119
- writes the file atomically and prints the resulting `enabledPlugins`. It refuses
120
- an empty selection and an unknown stack (exit 1) and never hand-edits the JSON.
76
+ `stack-toggle.mjs` applies the write rules above atomically and refuses an
77
+ empty selection and an unknown stack (exit 1). Never hand-edit the JSON.
121
78
  `stack-toggle.mjs status --repo "$PWD" --json` is the read for status mode.
122
79
  Then print the resulting `enabledPlugins` block and run step 5 (Copilot/Codex refresh offer).
123
80
 
@@ -126,4 +83,3 @@ Then print the resulting `enabledPlugins` block and run step 5 (Copilot/Codex re
126
83
  - Enablement is per-repo and declarative - commit `.claude/settings.json` so teammates get the same stack.
127
84
  - Restart the conversation (or reload the window) for Claude Code to pick up newly enabled plugins.
128
85
  - Pipeline Phase 1 stack detection is independent (it reads project files); `stack` only sets which plugin skill set is active.
129
- - The old `stack-swap.sh` skill-dir swap has been removed; stack selection is entirely plugin enablement.
@@ -19,10 +19,20 @@ Show every active and completed task as a table.
19
19
  question:
20
20
 
21
21
  ```bash
22
- node "$HOME/.claude/scripts/runs-index.mjs" # grouped table
23
- node "$HOME/.claude/scripts/runs-index.mjs" --json # the same records
22
+ node "$HOME/.claude/scripts/status-overview.mjs" # live sessions, tokens, accounts, runs
23
+ node "$HOME/.claude/scripts/status-overview.mjs" --json # the same document
24
+ node "$HOME/.claude/scripts/runs-index.mjs" [--all] # the full run table
24
25
  ```
25
26
 
27
+ `status-overview.mjs` answers "what is happening right now": each live
28
+ Claude Code session with the run it drives and its token spend (subagents
29
+ included), the tokens of the last 24 hours, the github.com accounts gh holds
30
+ with the active one marked, the git author, and which logical credentials
31
+ from `keychainMapping` are registered. It reads credential names only and
32
+ never a value; never run `credential-store.sh get` to "check" one. Show its
33
+ sections as they come, then the run table below. Token figures are list-price
34
+ estimates, not a bill.
35
+
26
36
  `runs-index.mjs` resolves through `lib/run-paths.sh` / `scripts/_run-paths.mjs`,
27
37
  so it sees both directory layouts (`<project>/<id>/` and the flat `<id>/`),
28
38
  the salvaged `artifacts/` copy Phase 4 leaves behind, and every spelling of a
@@ -49,6 +59,7 @@ Show every active and completed task as a table.
49
59
  | `stopped` - Stopped mid-development | anything else past phase 0 | `resume #N` or `kill #N` |
50
60
  | `question` - Left at a question | phase 0, nothing pending | `garbage-collect --abandoned` - nothing was built |
51
61
  | `unknown` - Status not recorded | no `status` field | say so; offer nothing |
62
+ | `done` - Finished | `status` is `complete`, `completed`, `done`, `abandoned` or `cancelled`, checked first | nothing; the table folds it into a count unless `--all` |
52
63
 
53
64
  A run with no `status` is **not** placed in an actionable group. Unknown is
54
65
  not a finding, and calling it dead is the same false claim in the other
@@ -11,17 +11,7 @@ allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdat
11
11
 
12
12
  # /multi-agent:store-ready - pre-submission validation, iOS + Android
13
13
 
14
- Catch, before you upload, what App Store Connect or the Play Console would send
15
- back after you do.
16
-
17
- **Local-only.** No commits, no push, no PR, no channels unless you ask at the end.
18
- A worktree, when needed, only archives without touching your working tree.
19
-
20
- **It never ships.** iOS runs `--validate-app`, never `--upload-app`. Android
21
- never commits a Play edit: when Google Play is onboarded, Gate 2 uploads the
22
- bundle into a throwaway edit that is validated and deleted, and only after the
23
- user approves that plan. A validation run must not be able to ship a build by
24
- accident.
14
+ **Local-only**: no commits, push, PR or channels unless asked at the end; a worktree only archives. **It never ships**: iOS runs `--validate-app`, never `--upload-app`; Android uploads only into a throwaway Play edit, after approval, and never commits it.
25
15
 
26
16
  **Input**: $ARGUMENTS
27
17
 
@@ -31,252 +21,63 @@ accident.
31
21
  - The Play throwaway edit is deleted whether validation passes or fails.
32
22
  - Gate 3 reads source, not the binary: a policy finding cites `file:line` in the repo the package was built from.
33
23
 
34
- ## Why three gates, and why the same three on both platforms
35
-
36
- Each gate sees what the others cannot, so no single one is "the check". The
37
- failure modes are the same on both platforms: a malformed package, a package the
38
- store refuses, a policy a human enforces.
39
-
40
- | Gate | Sees | Blind to |
41
- |---|---|---|
42
- | **1. Static** | package structure, manifests, signing, declared APIs and SDKs | anything depending on the store account |
43
- | **2. Authoritative** | what the store's own validator says about this exact binary | written policy - no validator reads it |
44
- | **3. Policy** | consent flows, deletion paths, purchase routing, disclosures | anything not visible in source |
45
-
46
- ### Gate matrix
47
-
48
- | Gate | iOS | Android |
49
- |---|---|---|
50
- | 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) |
51
- | 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 |
52
- | 3 Policy | `ai-ios-toolkit:app-store-review` skill vs repo source | `ai-android-toolkit:play-store-review` skill vs repo source |
53
-
54
- Gate 2's asymmetry is reported, not smoothed over. On iOS it is the only gate that
55
- catches a version+build pair already used. On Android it runs only with Google Play
56
- onboarded and the throwaway-edit upload approved; without both, an Android run
57
- clears at most 2 of 3 gates and never prints `passed`.
24
+ ## Three gates per platform
58
25
 
59
- The `store_*` tools need `@mmerterden/multi-agent-toolkit-mcp` ≥ v3.17.0. On an
60
- older server they are absent, and each branch below that uses one falls back to
61
- the behaviour it has without the credential.
26
+ 1 Static, 2 Authoritative (the store's validator), 3 Policy (repo source). Read `$HOME/.claude/multi-agent-refs/store-ready/gates.md` before Step 0: the gate matrix, Gate 2's asymmetry, input flags, the `store_*` toolkit version.
62
27
 
63
28
  ## Step 0 - parse input, detect platform
64
29
 
65
- | Input | Meaning |
66
- |---|---|
67
- | (empty) | ask which repo (Step 1) |
68
- | `my-app` or a path | that repo |
69
- | `--archive=<path>` | iOS, build supplied; all three gates can run |
70
- | `--ipa=<path>` | iOS, build supplied; Gate 1 reports `SKIPPED (needs .xcarchive)` |
71
- | `--aab=<path>` | Android, build supplied; Gate 1 + 3 run |
72
- | `--apk=<path>` | Android; Gate 1 runs the subset that does not need a bundle, and says which rules it could not apply |
73
- | `--skip-sweep` | skip Step A, when no simulator / emulator is available or only the package matters |
74
- | `--resume` | continue the last run from its state file |
75
-
76
- Platform detection when no build flag is given:
77
-
78
- ```
79
- cwd or repo contains .xcodeproj / .xcworkspace / Package.swift -> iOS
80
- cwd or repo contains build.gradle / build.gradle.kts -> Android
81
- both -> ask which
82
- neither -> halt: "store-ready needs an iOS or Android project"
83
- ```
84
-
85
- State lives at `$HOME/.claude/logs/multi-agent/<task_id>/agent-state.json` with
86
- `taskId = SR-<repo>-<yyyymmddHHMM>`. Register phases with the tracker
87
- (`$HOME/.claude/multi-agent-refs/tracker-contract.md`) so `:resume` and `:status`
88
- work like any other run.
30
+ Flags: `gates.md` "Input". Without a build flag: `.xcodeproj` / `.xcworkspace` / `Package.swift` -> iOS; `build.gradle` / `build.gradle.kts` -> Android; both -> ask; neither -> halt with "store-ready needs an iOS or Android project".
89
31
 
90
- ## Step 1 - pickers (native, always)
91
-
92
- Use `AskUserQuestion` for every step - never a numbered text menu. Questions and
93
- descriptions render in `prefs.global.outputLanguage`; `label` and `header` stay
94
- English, per `$HOME/.claude/multi-agent-refs/picker-contract.md`. Print the
95
- `Step <i>/<n>: <what this decides>` breadcrumb for each.
96
-
97
- 1. **Repo** - from `prefs.projects` matching the detected platform. A single match
98
- auto-resolves (say so in the breadcrumb, do not silently skip the step).
99
- 2. **Branch** - the branch to validate. Run `git fetch --prune` first, capturing
100
- **stderr**. **If the fetch fails, do not silently fall back to a cached ref**, and
101
- **classify before naming a cause** (credential / network / wrong remote), printing
102
- the observed stderr line next to the classification. A credential failure never
103
- gets the cached-ref fallback. Then offer the current branch, the default branch,
104
- and any `release/*` / `tkdevelop/*` heads.
105
- Full procedure: `$HOME/.claude/multi-agent-refs/store-ready/preflight.md`. Read it for the fetch-failure table.
106
- 3. **Mode** - how the build is obtained:
107
- - `Supply a build` (Mode B, default) - fastest, no signing needed in-run.
108
- - `Build from this branch` (Mode A) - iOS needs a distribution certificate and
109
- profile in the keychain; Android needs the release signing config. Takes as
110
- long as a real release build.
111
-
112
- ## Step 2 - pre-flight, before anything expensive
113
-
114
- Report every line; a missing prerequisite is a halt, not a warning.
32
+ State `$HOME/.claude/logs/multi-agent/<task_id>/agent-state.json`, `taskId = SR-<repo>-<yyyymmddHHMM>`, tracker per `$HOME/.claude/multi-agent-refs/tracker-contract.md`.
115
33
 
116
- **iOS**: `altool` and `xcodebuild` must resolve. Then resolve credentials and
117
- **state which tier is active in the report**: tier 1 ASC API key (`store_status`
118
- reports `appStoreConnect.configured`), tier 2 Apple ID + app-specific password,
119
- tier 3 neither, where **Gate 2 reports `SKIPPED`, and the run says so in the verdict
120
- line**. Multi-provider accounts need `--provider-public-id`; ask when it is not in prefs.
34
+ ## Step 1 - pickers (native, always)
121
35
 
122
- **Android**: `bundletool`, `aapt2` and `apksigner` must resolve.
36
+ `AskUserQuestion` for every step, never a numbered text menu, per `$HOME/.claude/multi-agent-refs/picker-contract.md`.
123
37
 
124
- Full procedure: `$HOME/.claude/multi-agent-refs/store-ready/preflight.md`. Read it for Step 2 (commands, tier table, provider lookup).
38
+ 1. **Repo** from `prefs.projects` matching the detected platform; a single match auto-resolves and the breadcrumb says so.
39
+ 2. **Branch.** `git fetch --prune`, capturing stderr. **If the fetch fails, do not silently fall back to a cached ref**; **classify before naming a cause** (credential / network / wrong remote) beside the stderr line; a credential failure never gets the cached ref. Fetch-failure table: `$HOME/.claude/multi-agent-refs/store-ready/preflight.md`.
40
+ 3. **Mode**: `Supply a build` (Mode B, default) or `Build from this branch` (Mode A, needs release signing).
125
41
 
126
- Then resolve whether Android Gate 2 can run. Call `store_status` (no probe) and read
127
- `googlePlay.configured`:
42
+ ## Step 2 - pre-flight, before anything expensive
128
43
 
129
- | State | Gate 2 |
130
- |---|---|
131
- | `googlePlay.configured: true` and `MULTI_AGENT_UNATTENDED` unset | runs `store_play_validate_bundle`, after the user approves the upload (Step 5) |
132
- | `googlePlay.configured: true` and `MULTI_AGENT_UNATTENDED=1` | `SKIPPED (no local Play validator)`, reason: the toolkit refuses the upload in an unattended run |
133
- | not configured, or no `store_status` tool | `SKIPPED (no local Play validator)`, reason: `Google Play not onboarded` (`/multi-agent:setup` Step 3d) |
44
+ Report every line; a missing prerequisite is a halt, not a warning. iOS: `altool` + `xcodebuild`, then credentials, **stating which tier is active**; tier 3 means **Gate 2 reports `SKIPPED`** and the verdict line says so. Android: `bundletool`, `aapt2`, `apksigner`. Read `store-ready/preflight.md` for Step 2.
134
45
 
135
- Say which one it is.
46
+ Android Gate 2 from `store_status` (`googlePlay.configured`), and say which:
47
+ - configured, attended: runs `store_play_validate_bundle` after approval (Step 5);
48
+ - configured, `MULTI_AGENT_UNATTENDED=1`: `SKIPPED (no local Play validator)`, the toolkit refuses the upload unattended;
49
+ - not configured or no tool: `SKIPPED (no local Play validator)`, reason `Google Play not onboarded`.
136
50
 
137
- Credentials come from `/multi-agent:setup`; never prompt for a secret value in
138
- chat.
51
+ Credentials come from `/multi-agent:setup`; never prompt for a secret value in chat.
139
52
 
140
53
  ## Step A - running-app sweep (unless `--skip-sweep`)
141
54
 
142
- The gates read a package; this reads the app. A build can be structurally perfect
143
- and still ship an unreadable screen, so the sweep stays part of store readiness
144
- rather than being a separate errand.
145
-
146
- Requires a booted simulator / emulator. When none is available, report
147
- `Sweep: SKIPPED (no booted device)` and continue to the gates - never halt the
148
- package validation for it, and never silently omit the line.
149
-
150
- Delegate to the UI Bug Hunter flow (`$HOME/.claude/commands/sim-test.md`) for the
151
- mechanics, running the light + dark + large-text passes over every screen. Merge
152
- its findings into the single report at Step 7, severity-grouped alongside the gate
153
- findings.
55
+ No booted device: `Sweep: SKIPPED (no booted device)`, continue, never omit the line. Else run `$HOME/.claude/commands/sim-test.md` light + dark + large-text over every screen; findings go into Step 7.
154
56
 
155
57
  ## Step 3 - obtain the build
156
58
 
157
- Mode B (supply a build) and Mode A (build from the branch). Full procedure:
158
- `$HOME/.claude/multi-agent-refs/store-ready/build.md`. Read it for Step 3. Rules that hold either way:
159
-
160
- - **iOS `.ipa` only** → **Gate 1 is `SKIPPED (needs .xcarchive)`**; never present a
161
- two-gate run as a full pass. An Android `.apk` **lists the rules it could not apply**.
162
- - Never validate an artifact whose provenance you did not state; print which one you picked.
163
- - Mode A worktree at `{projectRoot}/.worktrees/{taskId}`, **never under `$HOME`**, never
164
- a direct checkout of the main working tree.
165
- - iOS archives with `destination: "generic/platform=iOS"`. Android with no release
166
- signing config halts; never audit a debug artifact.
167
- - Leave `allow_provisioning_updates` off unless the user asks.
168
- - A failed build or export halts with the parsed errors.
59
+ Read `$HOME/.claude/multi-agent-refs/store-ready/build.md` for Step 3. Always: an `.ipa` alone makes **Gate 1 `SKIPPED (needs .xcarchive)`**; an `.apk` **lists the rules it could not apply**; state provenance; Mode A worktree **never under `$HOME`**; never audit a debug artifact; a failed build halts.
169
60
 
170
61
  ## Step 4 - Gate 1, static package audit
171
62
 
172
- - **iOS**: `ios_app_store_audit({archive_path, rules: "all"})`, per the
173
- `apple-archive-compliance` skill. The direct-package fallback runs only when the
174
- tool is genuinely absent, and the report says which path ran. An archive with no
175
- dSYM (`<archive>/dSYMs/*.dSYM` count zero) is a blocking `[SYMBOLS]` finding.
176
- - **Android**: `android_apk_audit` plus the `google-play-compliance` skill's 21 rules.
177
- A `minifyEnabled true` module whose build produced no `mapping.txt` is a blocking
178
- `[SYMBOLS]` finding.
179
-
180
- Full procedure: `$HOME/.claude/multi-agent-refs/store-ready/gate-1-static.md`. Read it for Gate 1.
181
-
182
- `error` findings are blocking; `warning` is advisory. Group by severity and keep
183
- each finding's ITMS / Play policy code - Gate 2 may return the same code on iOS,
184
- and seeing it in both places tells the user it is real rather than a heuristic.
63
+ iOS `ios_app_store_audit({archive_path, rules: "all"})` per `apple-archive-compliance`; no dSYM is a blocking `[SYMBOLS]` finding. Android `android_apk_audit` plus the `google-play-compliance` 21 rules; a minified module with no `mapping.txt` is blocking `[SYMBOLS]`. Read `store-ready/gate-1-static.md` for Gate 1. `error` blocks, `warning` advises; keep every ITMS / Play code.
185
64
 
186
65
  ## Step 5 - Gate 2, the store's own validation
187
66
 
188
- **iOS**: `ios_testflight_validate({ipa_path, platform: "ios", <credential args>})`.
189
- Render the verdict exactly as returned:
190
-
191
- - `PASS` - Apple accepted the binary for delivery.
192
- - `FAIL` - list each issue with its ITMS code, the mapped guideline, and the hint.
193
- - `SKIPPED` - print the reason. **Never render this as a pass.**
194
-
195
- Gate 2 is the only gate that catches a build number already used - so when it
196
- fails on that, say so plainly and name the next free build number.
197
-
198
- **Build number** (App Store Connect onboarded, `store_status` reports
199
- `appStoreConnect.configured`): find the app with `store_asc_apps` by the archive's
200
- bundle id, then `store_asc_next_build_number({app_id, version: <CFBundleShortVersionString>})`.
201
- Report the archive's `CFBundleVersion` as `already used` (not above the highest
202
- uploaded one, with the suggested next) or `free`. Read-only; it never changes the
203
- project. Without the credential, skip this line and say why.
204
-
205
- **Android**, by the state resolved in Step 2:
206
-
207
- - **Google Play onboarded, attended run.** Call
208
- `store_play_validate_bundle({package_name: <applicationId>, bundle_path: <.aab>})`
209
- without `confirm`. It returns the plan only: it would open an edit, upload the
210
- bundle, validate the edit, then delete it, committing nothing and changing no
211
- track. Show that plan to the user and ask (picker, `question` / `description` in
212
- `outputLanguage`, `header` `Play check`, labels `Validate on Play` / `Skip`).
213
- Only on **Validate on Play**, call it again with `confirm: true`. Render the
214
- verdict from `valid`: `true` → `PASS`, `false` → `FAIL` with the returned
215
- `error`. On **Skip**, report `SKIPPED (no local Play validator)` with the reason
216
- `user declined the upload`.
217
- - **Otherwise** (unattended, or not onboarded) do not call the tool: report
218
- `SKIPPED (no local Play validator)` with the reason from the Step 2 table.
219
-
220
- `bundletool validate` is Gate 1 in every case; reporting it here would fake a
221
- cleared gate.
222
-
223
- Google does not document whether an upload into a discarded edit reserves its
224
- `versionCode`; fastlane's `validate_only` runs the same sequence as a pre-release
225
- check. If the real upload is later refused as "already used", raise `versionCode`.
67
+ iOS: `ios_testflight_validate({ipa_path, platform: "ios", <credential args>})`, verdict exactly as returned; `SKIPPED` is **never rendered as a pass**. With App Store Connect onboarded, check the build number via `store_asc_apps` + `store_asc_next_build_number` (read-only).
226
68
 
227
- ## Step 6 - Gate 3, policy review
228
-
229
- Load the platform's review skill and review the repo against it. This is the gate
230
- that catches what a human reviewer rejects, so it reads source, not the binary.
69
+ Android, attended and onboarded: call `store_play_validate_bundle` without `confirm` for the plan, show it, ask (`header` `Play check`, labels `Validate on Play` / `Skip`); only on **Validate on Play** call again with `confirm: true`. Skip reports `SKIPPED (no local Play validator)`, reason `user declined the upload`. Otherwise do not call it. `bundletool validate` is Gate 1, never reported here. Verdict rendering and build-number detail: `gates.md` "Gate 2".
231
70
 
232
- **iOS** - `ai-ios-toolkit:app-store-review`; **Android** - `ai-android-toolkit:play-store-review`.
233
- Both cover a `Crash symbolication` row (dSYM upload step / `mapping.txt` upload).
234
- Full procedure: `$HOME/.claude/multi-agent-refs/store-ready/gate-3-policy.md`. Read it for Gate 3 (the per-platform area tables).
71
+ ## Step 6 - Gate 3, policy review
235
72
 
236
- For each: `pass` / `fail` / `not-applicable` with the evidence path that justifies
237
- it. `not-applicable` needs a reason - an unexamined area is not a pass.
73
+ iOS `ai-ios-toolkit:app-store-review`, Android `ai-android-toolkit:play-store-review`, against repo source, `Crash symbolication` row included (`store-ready/gate-3-policy.md`). Each area is `pass` / `fail` / `not-applicable` with evidence; `not-applicable` needs a reason.
238
74
 
239
75
  ## Step 7 - report
240
76
 
241
- Write to `~/StoreChecks/<platform>-<repo>-<branch>-<timestamp>/report.md` and print
242
- a summary: verdict line, per-gate status, Blocking / Advisory / Not run / Open
243
- questions, and the `Before rollout` block (phased rollout, `Halt thresholds`,
244
- rollback / forward-fix owner, forward-fix plan).
245
- Full procedure: `$HOME/.claude/multi-agent-refs/store-ready/report.md`. Read it for Step 7 (the report layout).
246
-
247
- Rules for the report:
248
-
249
- - A skipped gate is never folded into the pass count. The verdict line states the
250
- skip. An Android run whose Gate 2 did not run therefore reads
251
- `2 of 3 gates cleared, 1 skipped` at best.
252
- - Every blocking finding carries a file path or a store code. A finding the user
253
- cannot act on is noise.
254
- - The `Before rollout` block is filled by a human, never inferred. When it is
255
- left unfilled the verdict line gains the suffix `, rollout plan missing`.
256
- - Humanize via `--lang en` by default (`promptLanguage` is locked to `"en"`); pass
257
- `--lang=tr` explicitly to opt into Turkish.
258
- - No AI or assistant attribution anywhere, per
259
- `$HOME/.claude/rules/git-conventions.md`.
260
- - Real newlines, no HTML entities, per
261
- `$HOME/.claude/multi-agent-refs/rules.md "External System Outputs"`.
77
+ Write `~/StoreChecks/<platform>-<repo>-<branch>-<timestamp>/report.md`; read `store-ready/report.md` for the layout and rules. A skipped gate is never in the pass count (`2 of 3 gates cleared, 1 skipped` at best); `Before rollout` (`Halt thresholds`, rollback / forward-fix owner) is human-filled, never inferred; no AI attribution.
262
78
 
263
79
  ## Step 8 - offer the next action, do not take it
264
80
 
265
- Print, and stop:
266
-
267
- - the exact upload command for when the gates are clear, so uploading stays an
268
- explicit human act:
269
- - iOS: `xcrun altool --upload-app ...`
270
- - Android: the Play Console upload, or the `gradle publish` task the project
271
- declares - never run it
272
- - `/multi-agent:store-ready --resume` to re-run after fixes
273
- - `/multi-agent:channels` to land the findings in Jira / Confluence / Wiki / PR
274
- - the enabled stack plugin's `fix-bug` skill (`ai-ios-toolkit:fix-bug` or the stack equivalent) when Gate 3 produced code-level findings
275
-
276
- Never upload a build for release, never commit a Play edit, never bump the build number, never commit.
277
-
278
- ## Related surfaces
81
+ Print and stop the `store-ready/report.md` "Next actions" (upload stays a human act). Never upload a build for release, never commit a Play edit, never bump the build number, never commit.
279
82
 
280
- `/multi-agent:testflight-validation` is a thin alias onto this command, kept so the
281
- iOS-only name keeps working; it resolves here with the platform pinned to iOS.
282
- `/multi-agent:test "store-ready"` also resolves here. There is one implementation.
83
+ `/multi-agent:testflight-validation` (iOS-pinned) and `/multi-agent:test "store-ready"` resolve here.