@mmerterden/multi-agent-pipeline 14.1.0 → 14.2.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 (40) hide show
  1. package/CHANGELOG.md +177 -1
  2. package/README.md +4 -4
  3. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +1 -1
  4. package/package.json +1 -1
  5. package/pipeline/commands/deploy.md +4 -1
  6. package/pipeline/commands/multi-agent/SKILL.md +6 -3
  7. package/pipeline/commands/multi-agent/dev/SKILL.md +5 -1
  8. package/pipeline/commands/multi-agent/help/SKILL.md +49 -11
  9. package/pipeline/commands/multi-agent/setup/SKILL.md +1 -1
  10. package/pipeline/commands/multi-agent/store-ready/SKILL.md +340 -0
  11. package/pipeline/commands/multi-agent/sync/SKILL.md +11 -5
  12. package/pipeline/commands/multi-agent/test/SKILL.md +18 -8
  13. package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +33 -0
  14. package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +33 -0
  15. package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +33 -0
  16. package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +41 -0
  17. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +28 -201
  18. package/pipeline/commands/sim-test.md +45 -36
  19. package/pipeline/multi-agent-refs/cross-cli-contract.md +3 -2
  20. package/pipeline/multi-agent-refs/knowledge.md +1 -1
  21. package/pipeline/multi-agent-refs/phases/phase-0-init.md +7 -4
  22. package/pipeline/schemas/prefs.schema.json +1 -1
  23. package/pipeline/schemas/token-budget.json +2 -2
  24. package/pipeline/scripts/build-stack-plugins.mjs +21 -0
  25. package/pipeline/scripts/migrate-prefs.mjs +30 -0
  26. package/pipeline/skills/.skills-index.json +57 -12
  27. package/pipeline/skills/shared/README.md +11 -6
  28. package/pipeline/skills/shared/core/multi-agent/SKILL.md +13 -17
  29. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +50 -12
  30. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +18 -3
  31. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +50 -0
  32. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +4 -3
  33. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +18 -8
  34. package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +37 -0
  35. package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +37 -0
  36. package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +37 -0
  37. package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +44 -0
  38. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +29 -101
  39. package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
  40. package/pipeline/skills/skills-index.md +9 -4
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "skillCount": 196,
3
+ "skillCount": 201,
4
4
  "entries": [
5
5
  {
6
6
  "name": "accessibility-compliance-accessibility-audit",
@@ -445,7 +445,7 @@
445
445
  },
446
446
  {
447
447
  "name": "firebase",
448
- "description": "You're a developer who has shipped dozens of Firebase projects. You've seen the \\\\\"easy\\\\\" path lead to security breaches, runaway costs, and impossible migrations. You know Firebase is powerful, but you also know its sharp edges. Use when integrating or reviewing Firebase: auth, Firestore, function",
448
+ "description": "You're a developer who has shipped dozens of Firebase projects. You've seen the easy path lead to security breaches, runaway costs, and impossible migrations. You know Firebase is powerful, but you also know its sharp edges. Use when integrating or reviewing Firebase: auth, Firestore, functions, or ",
449
449
  "platform": null,
450
450
  "group": "external",
451
451
  "triggerKeywords": [],
@@ -857,15 +857,6 @@
857
857
  "triggerPaths": [],
858
858
  "relativePath": "shared/core/multi-agent-diff-explain/SKILL.md"
859
859
  },
860
- {
861
- "name": "multi-agent-ship",
862
- "description": "Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenario comment). No dev phase. Use when local work is already done and only review, build, commit and reporting remain.",
863
- "platform": null,
864
- "group": "core",
865
- "triggerKeywords": [],
866
- "triggerPaths": [],
867
- "relativePath": "shared/core/multi-agent-ship/SKILL.md"
868
- },
869
860
  {
870
861
  "name": "multi-agent-forget",
871
862
  "description": "Remove a saved /multi-agent routine (created by /multi-agent:save): deletes its local-only command and its registry entry. Asks which one and confirms. Use when a saved routine is no longer wanted and should be removed.",
@@ -1082,6 +1073,15 @@
1082
1073
  "triggerPaths": [],
1083
1074
  "relativePath": "shared/core/multi-agent-setup/SKILL.md"
1084
1075
  },
1076
+ {
1077
+ "name": "multi-agent-ship",
1078
+ "description": "Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenario comment). No dev phase. Use when local work is already done and only review, build, commit and reporting remain.",
1079
+ "platform": null,
1080
+ "group": "core",
1081
+ "triggerKeywords": [],
1082
+ "triggerPaths": [],
1083
+ "relativePath": "shared/core/multi-agent-ship/SKILL.md"
1084
+ },
1085
1085
  {
1086
1086
  "name": "multi-agent-stack",
1087
1087
  "description": "Select the active stack for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json (ios/android/mobile/backend/frontend/fullstack/all). Use when a repo's stack changed or the wrong plugins are enabled for it.",
@@ -1100,6 +1100,15 @@
1100
1100
  "triggerPaths": [],
1101
1101
  "relativePath": "shared/core/multi-agent-status/SKILL.md"
1102
1102
  },
1103
+ {
1104
+ "name": "multi-agent-store-ready",
1105
+ "description": "Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, the store's own authoritative validation, and a policy review against repo source. Separate verdict per gate, a skipped gate never counted as a pass. Validates",
1106
+ "platform": null,
1107
+ "group": "core",
1108
+ "triggerKeywords": [],
1109
+ "triggerPaths": [],
1110
+ "relativePath": "shared/core/multi-agent-store-ready/SKILL.md"
1111
+ },
1103
1112
  {
1104
1113
  "name": "multi-agent-sync",
1105
1114
  "description": "One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, website, and the dev-toolkit MCP server. Use when work is finished and should be propagated across Claude Code, Copilot CLI, the repos, the website and the dev-toolkit server.",
@@ -1118,9 +1127,45 @@
1118
1127
  "triggerPaths": [],
1119
1128
  "relativePath": "shared/core/multi-agent-test/SKILL.md"
1120
1129
  },
1130
+ {
1131
+ "name": "multi-agent-test-accessibility",
1132
+ "description": "Accessibility audit on a booted simulator / emulator: VoiceOver labels, sub-44pt tap targets, contrast, traits. Alias pinning the accessibility scenario. Use when auditing a screen for assistive-technology support.",
1133
+ "platform": null,
1134
+ "group": "core",
1135
+ "triggerKeywords": [],
1136
+ "triggerPaths": [],
1137
+ "relativePath": "shared/core/multi-agent-test-accessibility/SKILL.md"
1138
+ },
1139
+ {
1140
+ "name": "multi-agent-test-dark-mode",
1141
+ "description": "Dark mode UI test on a booted simulator / emulator: walk every screen light then dark, report contrast + colour bugs. Alias pinning the dark-mode scenario. Use when a dark-mode rendering bug is suspected.",
1142
+ "platform": null,
1143
+ "group": "core",
1144
+ "triggerKeywords": [],
1145
+ "triggerPaths": [],
1146
+ "relativePath": "shared/core/multi-agent-test-dark-mode/SKILL.md"
1147
+ },
1148
+ {
1149
+ "name": "multi-agent-test-dynamic-type",
1150
+ "description": "Dynamic Type layout test on a booted simulator / emulator: re-walk every screen at XL through accessibility-extra-large, report truncation and clipping. Alias pinning the dynamic-type scenario. Use when checking a layout survives large text.",
1151
+ "platform": null,
1152
+ "group": "core",
1153
+ "triggerKeywords": [],
1154
+ "triggerPaths": [],
1155
+ "relativePath": "shared/core/multi-agent-test-dynamic-type/SKILL.md"
1156
+ },
1157
+ {
1158
+ "name": "multi-agent-test-screenshots",
1159
+ "description": "App Store screenshot set from a booted simulator / emulator in a given locale, taken as an argument and defaulting to tr. Alias pinning the screenshot scenario. Use when generating store screenshots or checking a localised build renders.",
1160
+ "platform": null,
1161
+ "group": "core",
1162
+ "triggerKeywords": [],
1163
+ "triggerPaths": [],
1164
+ "relativePath": "shared/core/multi-agent-test-screenshots/SKILL.md"
1165
+ },
1121
1166
  {
1122
1167
  "name": "multi-agent-testflight-validation",
1123
- "description": "Pre-submission validation for a TestFlight / App Store build (iOS, local-only). Three gates: static archive audit, Apple's own `altool --validate-app`, and a Review-Guidelines check. ITMS codes are mapped to the rule each implies. Validates only, never uploads. Use when a build is about to go to Tes",
1168
+ "description": "iOS-pinned alias of store-ready: same three gates on an iOS build, one implementation. Validates a TestFlight / App Store package, never uploads. Use when an iOS build is about to go to TestFlight, or a submission was rejected and you need why.",
1124
1169
  "platform": null,
1125
1170
  "group": "core",
1126
1171
  "triggerKeywords": [],
@@ -2,11 +2,11 @@
2
2
 
3
3
  Single source of truth for skills delivered to both Claude Code (`~/.claude/skills/`) and Copilot CLI (`~/.copilot/skills/`) by the installer.
4
4
 
5
- **Total:** 196 skills (47 core + 149 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
5
+ **Total:** 201 skills (52 core + 149 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
6
6
 
7
7
  ## Directory layout
8
8
 
9
- - **`core/`** - 47 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
9
+ - **`core/`** - 52 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
10
10
  - **`external/`** - 149 iOS / Android / generic skills imported from the upstream skill library. Mirrors of third-party guidance.
11
11
  - Install destination stays flat: both trees flatten into `~/.claude/skills/` and `~/.copilot/skills/`. See ADR-0006 for the rationale.
12
12
 
@@ -14,7 +14,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
14
14
 
15
15
  ## Categories
16
16
 
17
- - [Pipeline Orchestration](#pipeline-orchestration) - 47
17
+ - [Pipeline Orchestration](#pipeline-orchestration) - 52
18
18
  - [iOS / Apple Ecosystem](#ios-apple-ecosystem) - 89
19
19
  - [Android / Kotlin](#android-kotlin) - 13
20
20
  - [Web / Frontend](#web-frontend) - 10
@@ -40,7 +40,6 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
40
40
  | [`multi-agent-dev-local`](./core/multi-agent-dev-local/) | `core` | Fast mode + local - Init → Dev(Opus) → Review → Commit → Report, no worktree. Use when a change should be developed and reviewed on the cu |
41
41
  | [`multi-agent-dev-local-autopilot`](./core/multi-agent-dev-local-autopilot/) | `core` | Fastest + local - Dev(Opus) + autopilot, no worktree, zero interaction. Use when a change should be developed on the current branch with n |
42
42
  | [`multi-agent-diff-explain`](./core/multi-agent-diff-explain/) | `core` | Map Phase 4 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which |
43
- | [`multi-agent-ship`](./core/multi-agent-ship/) | `core` | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
44
43
  | [`multi-agent-forget`](./core/multi-agent-forget/) | `core` | Remove a saved /multi-agent routine (created by /multi-agent:save): deletes its local-only command and its registry entry. Asks which one an |
45
44
  | [`multi-agent-garbage-collect`](./core/multi-agent-garbage-collect/) | `core` | Sweep leftover /tmp scratch (picker state, review diffs, channel payloads, analysis drafts) from past runs. Dry-run first; confirms before d |
46
45
  | [`multi-agent-help`](./core/multi-agent-help/) | `core` | Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatib |
@@ -65,11 +64,17 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
65
64
  | [`multi-agent-scan`](./core/multi-agent-scan/) | `core` | Skill security scan: walks local skill directories against a tiered pattern catalog. Use when local skill directories need checking for unsa |
66
65
  | [`multi-agent-search`](./core/multi-agent-search/) | `core` | Log search across every agent-log.md with smart ranking and filters. Optional --semantic flag queries the per-repo triage corpus. Use when s |
67
66
  | [`multi-agent-setup`](./core/multi-agent-setup/) | `core` | First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. Use when the pipeline is being set up f |
67
+ | [`multi-agent-ship`](./core/multi-agent-ship/) | `core` | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
68
68
  | [`multi-agent-stack`](./core/multi-agent-stack/) | `core` | Select the active stack for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json (ios/android/mobile/backend/fr |
69
69
  | [`multi-agent-status`](./core/multi-agent-status/) | `core` | Show every multi-agent task's ID, phase, branch, and status. Use when asked what is running, or for an overview of every task. |
70
+ | [`multi-agent-store-ready`](./core/multi-agent-store-ready/) | `core` | Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, |
70
71
  | [`multi-agent-sync`](./core/multi-agent-sync/) | `core` | One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, website, and the dev-toolkit MCP server. Use whe |
71
72
  | [`multi-agent-test`](./core/multi-agent-test/) | `core` | UI Bug Hunter - iOS Simulator (simctl) + Android Emulator (adb). Auto-detects platform. Screenshot + tap + analyze on the booted device. T |
72
- | [`multi-agent-testflight-validation`](./core/multi-agent-testflight-validation/) | `core` | Pre-submission validation for a TestFlight / App Store build (iOS, local-only). Three gates: static archive audit, Apple's own `altool --val |
73
+ | [`multi-agent-test-accessibility`](./core/multi-agent-test-accessibility/) | `core` | Accessibility audit on a booted simulator / emulator: VoiceOver labels, sub-44pt tap targets, contrast, traits. Alias pinning the accessibil |
74
+ | [`multi-agent-test-dark-mode`](./core/multi-agent-test-dark-mode/) | `core` | Dark mode UI test on a booted simulator / emulator: walk every screen light then dark, report contrast + colour bugs. Alias pinning the dark |
75
+ | [`multi-agent-test-dynamic-type`](./core/multi-agent-test-dynamic-type/) | `core` | Dynamic Type layout test on a booted simulator / emulator: re-walk every screen at XL through accessibility-extra-large, report truncation a |
76
+ | [`multi-agent-test-screenshots`](./core/multi-agent-test-screenshots/) | `core` | App Store screenshot set from a booted simulator / emulator in a given locale, taken as an argument and defaulting to tr. Alias pinning the |
77
+ | [`multi-agent-testflight-validation`](./core/multi-agent-testflight-validation/) | `core` | iOS-pinned alias of store-ready: same three gates on an iOS build, one implementation. Validates a TestFlight / App Store package, never upl |
73
78
  | [`multi-agent-uninstall`](./core/multi-agent-uninstall/) | `core` | Uninstall the pipeline from Claude Code + Copilot CLI. Keychain access tokens are always left untouched; --all-data also clears pipeline set |
74
79
  | [`multi-agent-update`](./core/multi-agent-update/) | `core` | Update the pipeline to the latest version: git pull, install, migrate. Use when the installed pipeline is behind and should be brought to th |
75
80
 
@@ -97,7 +102,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
97
102
  | [`device-integrity`](./external/device-integrity/) | `external` | Verify device legitimacy and app integrity using DeviceCheck (DCDevice per-device bits) and App Attest (DCAppAttestService key generation, a |
98
103
  | [`energykit`](./external/energykit/) | `external` | Query grid electricity forecasts and submit load events using EnergyKit to help users optimize home electricity usage. Use when building sma |
99
104
  | [`eventkit-calendar`](./external/eventkit-calendar/) | `external` | Create, read, and manage calendar events and reminders using EventKit and EventKitUI. Use when adding events to the user's calendar, creatin |
100
- | [`firebase`](./external/firebase/) | `external` | You're a developer who has shipped dozens of Firebase projects. You've seen the \\"easy\\" path lead to security breaches, runaway costs, an |
105
+ | [`firebase`](./external/firebase/) | `external` | You're a developer who has shipped dozens of Firebase projects. You've seen the easy path lead to security breaches, runaway costs, and impo |
101
106
  | [`healthkit`](./external/healthkit/) | `external` | Read, write, and query Apple Health data using HealthKit. Covers HKHealthStore authorization, sample queries, statistics queries, statistics |
102
107
  | [`hig-components-content`](./external/hig-components-content/) | `external` | Apple Human Interface Guidelines for content display components. Use when designing or reviewing how content is displayed on an Apple platfo |
103
108
  | [`hig-components-layout`](./external/hig-components-layout/) | `external` | Apple Human Interface Guidelines for layout and navigation components. Use when designing or reviewing layout and navigation on an Apple pla |
@@ -133,20 +133,16 @@ When `multi-agent kill [id]` is called:
133
133
 
134
134
  ---
135
135
 
136
- ## Clear Logs
136
+ ## Clear Logs - superseded, redirect only
137
137
 
138
- When `multi-agent clear-logs` is called:
138
+ `multi-agent clear-logs`: **do not run it.** Say it was superseded, then route to
139
+ `multi-agent-prune-logs` (per-task logs, audit trail and metrics kept) or
140
+ `multi-agent-garbage-collect` (`/tmp` scratch + worktree residue).
139
141
 
140
- 1. **Confirm**: `"All task logs will be deleted (agent-log.md + agent-state.json). Worktrees and branches will be kept. Are you sure?"`
141
- 2. **Scan**: Find all `.worktrees/PROJ-*/agent-log.md` and `agent-state.json` files
142
- 3. **Delete**: Remove log and state files from each worktree
143
- 4. **Do NOT reset counter**: `.worktrees/.multi-agent-counter` stays intact - prevents ID collision with existing worktrees
144
- 5. **Confirm**:
145
- ```
146
- 🧹 Logs cleared
147
- Deleted: {N} agent-log.md + {N} agent-state.json
148
- Worktrees & branches: untouched
149
- ```
142
+ It scanned `.worktrees/PROJ-*/`, which holds no logs - they live at
143
+ `$HOME/.claude/logs/multi-agent/{project}/{task-id}/` - so it deleted nothing and
144
+ reported success. The name stays as a redirect so an existing invocation still lands
145
+ somewhere correct.
150
146
 
151
147
  ---
152
148
 
@@ -185,8 +181,8 @@ When `multi-agent purge` is called:
185
181
 
186
182
  When `multi-agent resume [id]` is called:
187
183
 
188
- 1. **Find state file**: Scan `.worktrees/PROJ-{id}/agent-state.json`
189
- - If no `id` given, find the most recent worktree with `status != "done"`
184
+ 1. **Find state file**: `$HOME/.claude/logs/multi-agent/{project}/{task-id}/agent-state.json` - that is where Phase 0 writes it, not inside the worktree. A task finalized by Phase 6 keeps its state at `.../{task-id}/artifacts/agent-state.json`, so look there too before reporting not-found.
185
+ - If no `id` given, take the most recent task dir with `status != "done"`
190
186
  2. **Read state**: Parse `agent-state.json` → determine last completed phase
191
187
  3. **Restore context**: Read `agent-log.md` for previous findings:
192
188
  - Phase 1 analysis findings → reuse in Phase 2+
@@ -397,8 +393,8 @@ Full contract: `refs/tracker-contract.md` section "TaskCreate ordering (strict)"
397
393
  git config user.name "{identity.name}"
398
394
  git config user.email "{identity.email}"
399
395
  ```
400
- 4. Create log file: `.worktrees/PROJ-{id}/agent-log.md` with header
401
- 5. Create state file: `.worktrees/PROJ-{id}/agent-state.json` with:
396
+ 4. Create log file: `$HOME/.claude/logs/multi-agent/{project}/{task-id}/agent-log.md` with header
397
+ 5. Create state file: `$HOME/.claude/logs/multi-agent/{project}/{task-id}/agent-state.json` with:
402
398
  ```json
403
399
  {
404
400
  "taskId": "PROJ-12345",
@@ -589,7 +585,7 @@ Skip this sub-step if the task is NOT a component implementation (e.g., bug fix,
589
585
  ⏱️ Total: 3m 18s | Agents: 12 calls | Files: 4 changed
590
586
  📦 Commit: abc1234 | PR: #87
591
587
  📖 Wiki: {ComponentName}.md pushed to wiki master
592
- 📋 Full report: .worktrees/PROJ-{id}/agent-log.md
588
+ 📋 Full report: ~/.claude/logs/multi-agent/{project}/{task-id}/agent-log.md
593
589
  ```
594
590
  3. Log: `📋 Phase 7: Report complete`
595
591
 
@@ -94,7 +94,8 @@ Utility Commands (dash form on Copilot, colon form on Claude Code):
94
94
  /multi-agent:log [#id] Show task log
95
95
  /multi-agent:resume [#id] Resume a paused task
96
96
  /multi-agent:kill [#id] Delete worktree (logs preserved)
97
- /multi-agent:clear-logs Clean global log directory
97
+ /multi-agent:prune-logs Delete per-task logs (audit + metrics kept; dry-run first)
98
+ /multi-agent:garbage-collect Sweep leftover /tmp scratch + worktree residue (dry-run first)
98
99
  /multi-agent:purge Worktree + logs - full reset (double confirm)
99
100
  /multi-agent:channels Post multi-channel report (Jira/Confluence/Wiki/PR)
100
101
  /multi-agent:review Review a PR or branch diff; no URL -> pick open GitHub/Bitbucket PRs
@@ -104,6 +105,13 @@ Utility Commands (dash form on Copilot, colon form on Claude Code):
104
105
  /multi-agent:sync Sync ecosystem (Claude + Copilot + website)
105
106
  /multi-agent:setup Keychain tokens + Git identity + language onboarding
106
107
  /multi-agent:language [en|tr] Show or set prompt language
108
+ /multi-agent:store-ready [repo] [--archive=|--ipa=|--aab=|--apk=] Pre-submission store readiness,
109
+ iOS + Android, local-only. Three symmetric gates per platform: static package
110
+ audit, the store's own validator, policy review vs source. Plus the running-app
111
+ sweep. A skipped gate is never counted as a pass. Never uploads.
112
+ /multi-agent:testflight-validation [repo] [--ipa=|--archive=] iOS-pinned alias of :store-ready.
113
+ /multi-agent:ios-coding-standard [module] Audit an iOS module against the 99-rule coding-standard
114
+ registry -> remediation plan + onboarding summary -> hand off to dev.
107
115
 
108
116
  ------------------------------------------------------------
109
117
 
@@ -117,11 +125,22 @@ Interactive Launchers:
117
125
  UI Testing (standalone):
118
126
 
119
127
  /multi-agent:test Full simulator test (screenshot all screens)
120
- /multi-agent:test "dark mode" Dark mode bug test
121
- /multi-agent:test "accessibility" Accessibility audit
122
- /multi-agent:test "dynamic type" Large text size test
123
- /multi-agent:test "screenshot tr" App Store screenshots in Turkish
124
- /multi-agent:test "store-ready" App Store guideline pre-flight check
128
+
129
+ Fixed-scenario commands - no quoting, and they autocomplete off `test-`:
130
+
131
+ /multi-agent:test-dark-mode Dark mode bug test
132
+ /multi-agent:test-accessibility Accessibility audit
133
+ /multi-agent:test-dynamic-type Large text size test
134
+ /multi-agent:test-screenshots [tr] App Store screenshot set in a locale (default tr)
135
+
136
+ The scenario-tag form still works and is not deprecated - each command above is
137
+ an alias for it.
138
+
139
+ /multi-agent:test "dark mode" | "accessibility" | "dynamic type" | "screenshot <lang>"
140
+
141
+ `store-ready` is NOT a UI test: it validates a built package, on iOS and Android,
142
+ and lives at /multi-agent:store-ready. The old /multi-agent:test "store-ready"
143
+ tag still works and hands off there.
125
144
 
126
145
  Manual Test (Phase 5 standalone - Xcode hint flow):
127
146
 
@@ -243,7 +262,8 @@ Utility Komutları:
243
262
  /multi-agent:log [#id] Task log'unu göster
244
263
  /multi-agent:resume [#id] Duraklamış task'ı devam ettir
245
264
  /multi-agent:kill [#id] Worktree'yi sil (log'lar korunur)
246
- /multi-agent:clear-logs Global log dizinini temizle
265
+ /multi-agent:prune-logs Task bazlı log'ları sil (audit + metrics korunur; önce dry-run)
266
+ /multi-agent:garbage-collect /tmp artıkları + worktree residue süpür (önce dry-run)
247
267
  /multi-agent:purge Worktree + log'lar - tam reset (çift onay)
248
268
  /multi-agent:channels Multi-channel rapor gönder (Jira/Confluence/Wiki/PR)
249
269
  /multi-agent:review PR veya branch diff'ini review et; URL yoksa -> açık GitHub/Bitbucket PR seç
@@ -253,6 +273,13 @@ Utility Komutları:
253
273
  /multi-agent:sync Ekosistemi senkronize et
254
274
  /multi-agent:setup Keychain token + Git kimliği + dil onboarding
255
275
  /multi-agent:language [en|tr] Prompt dilini göster veya ayarla
276
+ /multi-agent:store-ready [repo] [--archive=|--ipa=|--aab=|--apk=] Yükleme öncesi store hazırlığı,
277
+ iOS + Android, yalnızca lokal. Platform başına 3 simetrik kapı: statik paket
278
+ denetimi, store'un kendi doğrulayıcısı, kaynağa karşı politika incelemesi.
279
+ Artı çalışan-app sweep'i. Atlanan kapı asla pass sayılmaz. Asla yüklemez.
280
+ /multi-agent:testflight-validation [repo] [--ipa=|--archive=] :store-ready'nin iOS'a sabitlenmiş alias'ı.
281
+ /multi-agent:ios-coding-standard [modül] Bir iOS modülünü 99 kurallık kodlama-standardı registry'sine
282
+ göre denetler -> düzeltme planı + onboarding özeti -> dev'e devreder.
256
283
 
257
284
  ------------------------------------------------------------
258
285
 
@@ -266,11 +293,22 @@ Utility Komutları:
266
293
  UI Testing (standalone):
267
294
 
268
295
  /multi-agent:test Tam simulator testi (tüm ekran screenshot'ları)
269
- /multi-agent:test "dark mode" Dark mode bug testi
270
- /multi-agent:test "accessibility" Erişilebilirlik denetimi
271
- /multi-agent:test "dynamic type" Büyük metin boyutu testi
272
- /multi-agent:test "screenshot tr" App Store screenshot (Türkçe locale)
273
- /multi-agent:test "store-ready" App Store guideline pre-flight
296
+
297
+ Sabit-senaryo komutları - tırnak gerekmez, `test-` ile autocomplete'e düşer:
298
+
299
+ /multi-agent:test-dark-mode Dark mode bug testi
300
+ /multi-agent:test-accessibility Erişilebilirlik denetimi
301
+ /multi-agent:test-dynamic-type Büyük metin boyutu testi
302
+ /multi-agent:test-screenshots [tr] Belirtilen dilde App Store screenshot seti (default tr)
303
+
304
+ Senaryo etiketli form çalışmaya devam eder, kaldırılmadı - yukarıdaki komutların
305
+ her biri onun alias'ı.
306
+
307
+ /multi-agent:test "dark mode" | "accessibility" | "dynamic type" | "screenshot <dil>"
308
+
309
+ `store-ready` bir UI testi DEĞİL: üretilmiş paketi doğrular, iOS + Android, ve
310
+ /multi-agent:store-ready altında. Eski /multi-agent:test "store-ready" etiketi
311
+ çalışmaya devam eder ve oraya devreder.
274
312
 
275
313
  Manuel Test (Phase 5 standalone - Xcode hint akışı):
276
314
 
@@ -9,14 +9,29 @@ user-invocable: true
9
9
 
10
10
  Reset every multi-agent state. Nuclear option - requires double confirmation.
11
11
 
12
+ Backed by `$HOME/.copilot/scripts/purge.sh`, which is safe by default (dry-run,
13
+ deletes nothing until `--yes`), resolves every `rm` target strictly inside
14
+ `<repo>/.worktrees/`, and never touches the main worktree or main/master/develop.
15
+
16
+ Task log dirs are NOT purge territory - use `multi-agent-prune-logs`. The audit
17
+ trail and metrics corpus at the log root are always preserved.
18
+
12
19
  ## Steps
13
20
 
14
- 1. **Scan** - Find all worktrees:
21
+ 1. **Preview (dry-run)** - let the script enumerate; do not hand-roll a scan:
15
22
  ```bash
16
- find {repo}/.worktrees/ -name "agent-state.json" -maxdepth 2
23
+ bash $HOME/.copilot/scripts/purge.sh
17
24
  ```
25
+ Nothing to remove -> report "nothing to purge" and stop.
26
+
27
+ **Never discover worktrees by looking for `agent-state.json` inside them.** That
28
+ was this skill's scan until v14.2.1 and it finds nothing: state lives at
29
+ `$HOME/.claude/logs/multi-agent/{project}/{task-id}/`, not in the worktree, so
30
+ the marker is absent from every real worktree. The scan returned zero while live
31
+ worktrees sat on disk, and purge reported "nothing to purge" as success. The
32
+ script enumerates `<repo>/.worktrees/*/` directly, which is why it works.
18
33
 
19
- 2. **Show list**:
34
+ 2. **Show list** (the script prints it; this is the shape):
20
35
  ```
21
36
  ⚠️ WARNING: Will be deleted:
22
37
  - .worktrees/PROJ-133139/ (branch: feature/PROJ-133139-...)
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: multi-agent-store-ready
3
+ language: en
4
+ description: "Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, the store's own authoritative validation, and a policy review against repo source. Separate verdict per gate, a skipped gate never counted as a pass. Validates only, never uploads. Use when a build is about to go to TestFlight or a Play track, or when a submission was rejected and the reason is not obvious."
5
+ user-invocable: true
6
+ argument-hint: "[repo] - empty = pick; repo name or path; --ipa= | --archive= | --aab= | --apk=; --skip-sweep; --resume"
7
+ ---
8
+
9
+ # multi-agent-store-ready - pre-submission validation, iOS + Android
10
+
11
+ Catch, before you upload, what App Store Connect or the Play Console would send
12
+ back after you do.
13
+
14
+ **Local-only.** No commits, no push, no PR. **It never uploads**: iOS runs
15
+ `--validate-app`, never `--upload-app`; Android never commits a Play edit.
16
+
17
+ **Input**: $ARGUMENTS
18
+
19
+ ## Dispatcher
20
+
21
+ The full flow - input parsing, pickers, pre-flight, the running-app sweep, the
22
+ three gates per platform, the report format and the next-action offer - lives in
23
+ one place. Read and follow:
24
+
25
+ ```
26
+ $HOME/.copilot/multi-agent/commands/store-ready.md
27
+ ```
28
+
29
+ (Equivalent on Claude Code: `$HOME/.claude/commands/multi-agent/store-ready/SKILL.md`.)
30
+
31
+ Do not re-derive the gate structure from this file; it is a summary, and the target
32
+ doc is the contract.
33
+
34
+ ## Gate matrix (summary - the target doc is authoritative)
35
+
36
+ | Gate | iOS | Android |
37
+ |---|---|---|
38
+ | 1 Static | `ios_app_store_audit` 18 rules, needs an `.xcarchive` | `android_apk_audit` + `google-play-compliance` 21 rules, needs an `.aab` |
39
+ | 2 Authoritative | `ios_testflight_validate` → `altool --validate-app`, needs credentials | `SKIPPED` - Play's authoritative check is server-side only and no client ships here |
40
+ | 3 Policy | `app-store-review` skill vs repo source | `play-store-review` skill vs repo source |
41
+
42
+ Gate 2's asymmetry is reported as an asymmetry. An Android run clears at most 2 of 3
43
+ gates and must never print `passed`. A skipped gate is never folded into the pass
44
+ count on either platform.
45
+
46
+ ## Related surfaces
47
+
48
+ `multi-agent-testflight-validation` is a thin alias onto this skill, kept so the
49
+ iOS-only name keeps working; it resolves here with the platform pinned to iOS.
50
+ `multi-agent-test "store-ready"` also resolves here. There is one implementation.
@@ -31,7 +31,7 @@ Run all steps automatically:
31
31
 
32
32
  ```
33
33
  Step 1: DETECT Compare timestamps, find stale targets
34
- Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 44 sub-command skills)
34
+ Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 49 sub-command skills)
35
35
  Step 2b: CODEX Claude Code -> Codex CLI (1 router skill + 44 specs as refs + 8 agent TOML)
36
36
  Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub)
37
37
  Step 3d: DEV-TOOLKIT Companion MCP server -> detect movement, ship gates, commit + publish
@@ -223,14 +223,15 @@ When invoked with the `release` argument:
223
223
  |-------------|-------------|
224
224
  | `~/.claude/commands/multi-agent/{cmd}.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
225
225
 
226
- **44 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
226
+ **49 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
227
227
 
228
228
  ```
229
229
  analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, design-check, dev,
230
230
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, forget, garbage-collect,
231
231
  help, ios-coding-standard, issue, jira, kill, language, local,
232
232
  local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review, review-issue, review-jira,
233
- routines, save, scan, search, setup, ship, stack, status, sync, test, testflight-validation, uninstall, update
233
+ routines, save, scan, search, setup, ship, stack, status, store-ready, sync, test, test-accessibility,
234
+ test-dark-mode, test-dynamic-type, test-screenshots, testflight-validation, uninstall, update
234
235
  ```
235
236
 
236
237
  **NOT synced**: `refs/*` - Lazy-load references, Claude Code specific
@@ -26,14 +26,24 @@ Pass `$ARGUMENTS` through verbatim - the target doc picks the right test matri
26
26
 
27
27
  ## Quick reference
28
28
 
29
- | Invocation | What it does |
30
- |---|---|
31
- | `multi-agent-test` | Walk all screens, collect screenshot + UI tree, general report |
32
- | `multi-agent-test "dark mode"` | Light/dark comparison, contrast + color bugs |
33
- | `multi-agent-test "accessibility"` | VoiceOver label + tap target + contrast audit |
34
- | `multi-agent-test "dynamic type"` | XL-XXXL text-size layout check |
35
- | `multi-agent-test "screenshot tr"` | App Store screenshot set (Turkish locale) |
36
- | `multi-agent-test "store-ready"` | App Store guideline pre-flight check |
29
+ | Invocation | Fixed-scenario alias | What it does |
30
+ |---|---|---|
31
+ | `multi-agent-test` | - | Walk all screens, collect screenshot + UI tree, general report |
32
+ | `multi-agent-test "dark mode"` | `multi-agent-test-dark-mode` | Light/dark comparison, contrast + color bugs |
33
+ | `multi-agent-test "accessibility"` | `multi-agent-test-accessibility` | VoiceOver label + tap target + contrast audit |
34
+ | `multi-agent-test "dynamic type"` | `multi-agent-test-dynamic-type` | XL-XXXL text-size layout check |
35
+ | `multi-agent-test "screenshot <lang>"` | `multi-agent-test-screenshots [locale]` | App Store screenshot set in a locale (alias defaults to tr) |
36
+ | `multi-agent-test "store-ready" [path]` | hands off to `multi-agent-store-ready` | package validation, not a UI test |
37
+
38
+ Both columns are supported and neither is deprecated; the aliases exist so the
39
+ scenario list autocompletes off `test-` instead of having to be remembered.
40
+
41
+ `store-ready` is the odd one out: it validates a built **package** rather than a
42
+ running app, so it is not implemented here at all. `multi-agent-store-ready` owns
43
+ it on both platforms - three gates per platform, plus this file's sweep as its
44
+ Step A. `multi-agent-testflight-validation` is the iOS-pinned alias of that skill.
45
+ The quoted tag is kept as a hand-off so an existing invocation still lands
46
+ somewhere correct.
37
47
 
38
48
  ## Requirements
39
49
 
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: multi-agent-test-accessibility
3
+ language: en
4
+ description: "Accessibility audit on a booted simulator / emulator: VoiceOver labels, sub-44pt tap targets, contrast, traits. Alias pinning the accessibility scenario. Use when auditing a screen for assistive-technology support."
5
+ user-invocable: true
6
+ argument-hint: "(no arguments - the scenario is fixed)"
7
+ ---
8
+
9
+ # multi-agent-test-accessibility - Accessibility audit
10
+
11
+ Fixed-scenario alias. The implementation is the UI Bug Hunter flow; this skill only
12
+ pins the scenario so the tag does not have to be typed or quoted.
13
+
14
+ ## Dispatcher
15
+
16
+ Read and follow:
17
+
18
+ ```
19
+ $HOME/.copilot/multi-agent/sim-test.md
20
+ ```
21
+
22
+ (Equivalent on Claude Code: `$HOME/.claude/commands/sim-test.md`.)
23
+
24
+ Run it with **scenario = `accessibility`**. Ignore `$ARGUMENTS`; the scenario is fixed
25
+ by the skill name. Anything the user adds is context for the report, never a scenario
26
+ override - to run a different matrix they invoke that skill.
27
+
28
+ ## Equivalent
29
+
30
+ `multi-agent-test "accessibility"` - identical behaviour. Both forms are supported;
31
+ neither is deprecated.
32
+
33
+ ## Requirements
34
+
35
+ - **iOS**: Xcode + booted Simulator (`xcrun simctl list | grep Booted`)
36
+ - **Android**: Android SDK + running emulator or USB device (`adb devices`)
37
+ - **MCP**: `dev-toolkit` MCP server registered (tool names start with `mcp__dev-toolkit__*`)
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: multi-agent-test-dark-mode
3
+ language: en
4
+ description: "Dark mode UI test on a booted simulator / emulator: walk every screen light then dark, report contrast + colour bugs. Alias pinning the dark-mode scenario. Use when a dark-mode rendering bug is suspected."
5
+ user-invocable: true
6
+ argument-hint: "(no arguments - the scenario is fixed)"
7
+ ---
8
+
9
+ # multi-agent-test-dark-mode - Dark mode UI test
10
+
11
+ Fixed-scenario alias. The implementation is the UI Bug Hunter flow; this skill only
12
+ pins the scenario so the tag does not have to be typed or quoted.
13
+
14
+ ## Dispatcher
15
+
16
+ Read and follow:
17
+
18
+ ```
19
+ $HOME/.copilot/multi-agent/sim-test.md
20
+ ```
21
+
22
+ (Equivalent on Claude Code: `$HOME/.claude/commands/sim-test.md`.)
23
+
24
+ Run it with **scenario = `dark mode`**. Ignore `$ARGUMENTS`; the scenario is fixed by
25
+ the skill name. Anything the user adds is context for the report, never a scenario
26
+ override - to run a different matrix they invoke that skill.
27
+
28
+ ## Equivalent
29
+
30
+ `multi-agent-test "dark mode"` - identical behaviour. Both forms are supported;
31
+ neither is deprecated.
32
+
33
+ ## Requirements
34
+
35
+ - **iOS**: Xcode + booted Simulator (`xcrun simctl list | grep Booted`)
36
+ - **Android**: Android SDK + running emulator or USB device (`adb devices`)
37
+ - **MCP**: `dev-toolkit` MCP server registered (tool names start with `mcp__dev-toolkit__*`)
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: multi-agent-test-dynamic-type
3
+ language: en
4
+ description: "Dynamic Type layout test on a booted simulator / emulator: re-walk every screen at XL through accessibility-extra-large, report truncation and clipping. Alias pinning the dynamic-type scenario. Use when checking a layout survives large text."
5
+ user-invocable: true
6
+ argument-hint: "(no arguments - the scenario is fixed)"
7
+ ---
8
+
9
+ # multi-agent-test-dynamic-type - Dynamic Type layout test
10
+
11
+ Fixed-scenario alias. The implementation is the UI Bug Hunter flow; this skill only
12
+ pins the scenario so the tag does not have to be typed or quoted.
13
+
14
+ ## Dispatcher
15
+
16
+ Read and follow:
17
+
18
+ ```
19
+ $HOME/.copilot/multi-agent/sim-test.md
20
+ ```
21
+
22
+ (Equivalent on Claude Code: `$HOME/.claude/commands/sim-test.md`.)
23
+
24
+ Run it with **scenario = `dynamic type`**. Ignore `$ARGUMENTS`; the scenario is fixed
25
+ by the skill name. Anything the user adds is context for the report, never a scenario
26
+ override - to run a different matrix they invoke that skill.
27
+
28
+ ## Equivalent
29
+
30
+ `multi-agent-test "dynamic type"` - identical behaviour. Both forms are supported;
31
+ neither is deprecated.
32
+
33
+ ## Requirements
34
+
35
+ - **iOS**: Xcode + booted Simulator (`xcrun simctl list | grep Booted`)
36
+ - **Android**: Android SDK + running emulator or USB device (`adb devices`)
37
+ - **MCP**: `dev-toolkit` MCP server registered (tool names start with `mcp__dev-toolkit__*`)