@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
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: multi-agent-test-screenshots
3
+ language: en
4
+ 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."
5
+ user-invocable: true
6
+ argument-hint: "[locale] - empty = tr; e.g. tr | en | de | ar"
7
+ ---
8
+
9
+ # multi-agent-test-screenshots - Locale screenshot set
10
+
11
+ Fixed-scenario alias, **parameterised by locale**. The scenario is pinned; the language
12
+ is not, because one skill per language would put a parameter in a name.
13
+
14
+ ## Locale resolution
15
+
16
+ 1. `$ARGUMENTS` names a locale (`tr`, `en`, `de`, `ar`, ...) → use it.
17
+ 2. `$ARGUMENTS` empty → `tr`.
18
+ 3. `$ARGUMENTS` is something other than a locale → do not guess a language and do not
19
+ silently fall back. Ask which locale, rendered in `outputLanguage`.
20
+
21
+ ## Dispatcher
22
+
23
+ Read and follow:
24
+
25
+ ```
26
+ $HOME/.copilot/multi-agent/sim-test.md
27
+ ```
28
+
29
+ (Equivalent on Claude Code: `$HOME/.claude/commands/sim-test.md`.)
30
+
31
+ Run it with **scenario = `screenshot <locale>`**, substituting the locale resolved
32
+ above. That is the tag the target doc matches; passing a bare `screenshot` leaves the
33
+ language unset.
34
+
35
+ ## Equivalent
36
+
37
+ `multi-agent-test "screenshot tr"` - identical behaviour. Both forms are supported;
38
+ neither is deprecated.
39
+
40
+ ## Requirements
41
+
42
+ - **iOS**: Xcode + booted Simulator (`xcrun simctl list | grep Booted`)
43
+ - **Android**: Android SDK + running emulator or USB device (`adb devices`)
44
+ - **MCP**: `dev-toolkit` MCP server registered (tool names start with `mcp__dev-toolkit__*`)
@@ -1,120 +1,48 @@
1
1
  ---
2
2
  name: multi-agent-testflight-validation
3
3
  language: en
4
- 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 TestFlight, or a submission was rejected and you need why."
4
+ 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."
5
5
  user-invocable: true
6
6
  argument-hint: "[repo] - empty = pick from prefs; repo name or path; --ipa=<path>; --archive=<path>; --resume"
7
7
  ---
8
8
 
9
- # multi-agent-testflight-validation - pre-submission validation
9
+ # multi-agent-testflight-validation - iOS alias for store-ready
10
10
 
11
- Catch, before you upload, what App Store Connect would send back after you do.
11
+ This skill is an alias. The implementation it used to carry was merged into
12
+ `multi-agent-store-ready`, which runs the same three gates on iOS and adds the
13
+ Android side, so there is one flow to maintain instead of two that had already
14
+ started to drift.
12
15
 
13
- **Local-only**: no commits, no push, no PR, no channels. **It never uploads** - only
14
- `--validate-app` is ever invoked, never `--upload-app`.
16
+ The name is kept because it is the one people reach for when the target is
17
+ TestFlight, and removing a surface is a breaking change.
15
18
 
16
- ## Why three gates
19
+ ## Dispatcher
17
20
 
18
- Each sees something the others structurally cannot, so reporting one as "the check"
19
- is how a build passes locally and gets rejected anyway.
21
+ Read and follow:
20
22
 
21
- | Gate | Runs | Needs | Sees | Blind to |
22
- |---|---|---|---|---|
23
- | **1. Static** | `ios_app_store_audit` (18 rules) | `.xcarchive` | privacy manifest, required-reason API, Info.plist, signing, entitlements, embedded SDK, IPv6, debug leak | anything account-dependent |
24
- | **2. Authoritative** | `ios_testflight_validate` → `altool --validate-app` | `.ipa` + credentials | unregistered bundle ID, profile/app-record mismatch, **version+build already used**, entitlement not provisioned | the Review Guidelines |
25
- | **3. Guideline** | `app-store-review` skill + repo evidence | repo checkout | ATT, privacy policy, account deletion, IAP, purpose-string wording | anything not in source |
26
-
27
- Most "we passed validation and still got rejected" cases are Gate 3 findings:
28
- Apple's validator does not read the Review Guidelines.
29
-
30
- ## Flow
31
-
32
- **0. Input.** `(empty)` → ask · `my-ios-app`/path → that repo · `--ipa=<path>` →
33
- Mode B without Gate 1 · `--archive=<path>` → Mode B with all gates · `--resume`.
34
- State at `~/.claude/logs/multi-agent/<task_id>/agent-state.json`,
35
- `taskId = TFV-<repo>-<yyyymmddHHMM>`. Register phases with
36
- `bash ~/.copilot/scripts/phase-tracker.sh` and render with
37
- `phase-tracker.sh render` at every boundary.
38
-
39
- **1. Pickers.** Repo (iOS entries in `prefs.projects`; a single match auto-resolves,
40
- and the breadcrumb says so) → branch → mode. Print
41
- `Step <i>/<n>: <what this decides>` for each. On `git fetch` failure do **not**
42
- silently use a cached ref, and **classify the failure before naming a cause**:
43
- `could not read Password` / `Authentication failed` / `403` is a credential
44
- problem, not a network one, and a VPN cannot fix it; `Could not resolve host` /
45
- `Operation timed out` is the network. Show the stderr line verbatim next to your
46
- classification, then offer the remedy that matches it. Only the network case gets
47
- the continue-on-a-stale-ref option: for a credential failure, staleness is
48
- unrelated to what broke.
49
-
50
- **2. Pre-flight.** `xcrun --find altool` and `xcodebuild -version`; a missing
51
- prerequisite halts. Resolve credentials and name the active tier in the report:
52
- tier 1 ASC API key (key id + issuer id from the keychain via
53
- `prefs.global.keychainMapping`, `.p8` at
54
- `~/.appstoreconnect/private_keys/AuthKey_<keyId>.p8`), tier 2 Apple ID +
55
- app-specific password by keychain reference, tier 3 none → **Gate 2 is `SKIPPED`
56
- and the verdict line says so**. Credentials come from `/multi-agent:setup`; never
57
- prompt for a secret value in chat. Tier 2 needs no elevated App Store Connect
58
- role, which matters when API-key creation is not permitted on the account.
59
-
60
- **3. Obtain the build.**
61
- - Mode B `.xcarchive` → Gate 1 runs; export with `ios_export_ipa` to reach Gate 2.
62
- - Mode B `.ipa` only → **Gate 1 `SKIPPED (needs .xcarchive)`**. The static audit
63
- reads archive structure an `.ipa` does not carry. Do not present a two-gate run
64
- as a full pass.
65
- - Mode A → worktree at `{projectRoot}/{worktreeBasePath}/{taskId}` (**never under
66
- `$HOME`**) → `ios_xcodebuild({action: "archive", configuration: "Release",
67
- destination: "generic/platform=iOS"})` - the simulator default would produce a
68
- non-distributable archive - then `ios_export_ipa({method:
69
- "app-store-connect", team_id, ...})`. Leave `allow_provisioning_updates` off
70
- unless asked: it lets xcodebuild create or modify profiles in the developer
71
- account, which a validation run has no business doing.
72
-
73
- **4. Gate 1.** `ios_app_store_audit({archive_path, rules: "all"})`. `error` blocks,
74
- `warning` advises. Keep each ITMS code - Gate 2 may return the same one, and that
75
- agreement tells the user it is real.
76
-
77
- **5. Gate 2.** `ios_testflight_validate({ipa_path, platform: "ios", <creds>})`.
78
- Render the verdict as returned: `PASS` / `FAIL` (each issue with ITMS code, mapped
79
- guideline, hint) / `SKIPPED` (with the reason, **never as a pass**). This is the
80
- only gate that catches an already-used build number - the most common wasted
81
- upload - so when it fails on that, name the next free build number.
82
-
83
- **6. Gate 3.** Load `app-store-review` and check, with an evidence path each:
84
- purpose strings (present, specific, matching actual use) · `PrivacyInfo.xcprivacy`
85
- (exists, declares required-reason APIs, matches linked SDKs) · ATT before any
86
- tracking · in-app account deletion when accounts are created · privacy policy
87
- reachable · IAP through StoreKit with no external purchase path · Sign in with
88
- Apple alongside third-party social login. Mark `pass` / `fail` /
89
- `not-applicable`, and `not-applicable` needs a reason - an unexamined area is not
90
- a pass.
23
+ ```
24
+ $HOME/.copilot/multi-agent/commands/store-ready.md
25
+ ```
91
26
 
92
- **7. Report.** `~/TestFlightChecks/<repo>-<branch>-<timestamp>/report.md` plus a
93
- printed summary:
27
+ (Equivalent on Claude Code: `$HOME/.claude/commands/multi-agent/store-ready/SKILL.md`.)
94
28
 
95
- ```
96
- Verdict: <N> of 3 gates cleared[, <M> skipped]
97
- Build: <path> · <bundle id> <version> (<build>)
98
- Auth: tier <1|2|none> · <method>
29
+ Run it with **platform pinned to `ios`** and skip its platform-detection step. Pass
30
+ `$ARGUMENTS` through verbatim: `--ipa=`, `--archive=`, a repo name or path, and
31
+ `--resume` all mean exactly what they mean there.
99
32
 
100
- Gate 1 static audit PASS | FAIL (<n> blocking, <n> advisory) | SKIPPED (<reason>)
101
- Gate 2 Apple validation PASS | FAIL (<n> issues) | SKIPPED (<reason>)
102
- Gate 3 guideline review PASS | FAIL (<n> findings) | <n> not-applicable
33
+ `--aab=` / `--apk=` are Android inputs and are not valid here. If one is supplied,
34
+ do not silently switch platform - say the Android inputs belong to
35
+ `multi-agent-store-ready`, and stop.
103
36
 
104
- Blocking - fix before uploading
105
- [ITMS-90683] Info.plist: NSCameraUsageDescription missing
106
- guideline 5.1.1 Data Collection and Storage
107
- <hint> · <file:line>
37
+ ## What you get
108
38
 
109
- Not run
110
- Gate 1: needs an .xcarchive; only an .ipa was supplied
111
- ```
39
+ Unchanged from before the merge, on the iOS path:
112
40
 
113
- A skipped gate is never folded into the pass count. Every blocking finding carries
114
- a file path or an ITMS code. No AI or assistant attribution anywhere; real
115
- newlines, no HTML entities.
41
+ | Gate | What runs | Needs |
42
+ |---|---|---|
43
+ | **1. Static** | `ios_app_store_audit` (18 rules, real ITMS codes) | an `.xcarchive` |
44
+ | **2. Authoritative** | `ios_testflight_validate` → `altool --validate-app` | an `.ipa` + credentials |
45
+ | **3. Policy** | `app-store-review` skill vs repo source | repo checkout |
116
46
 
117
- **8. Offer, do not act.** Print the exact `xcrun altool --upload-app` command for
118
- when the gates are clear (uploading stays an explicit human act), plus
119
- `--resume` after fixes and `/multi-agent:fix-bug` for code-level Gate 3 findings.
120
- Never upload, never bump the build number, never commit.
47
+ A skipped gate is never folded into the pass count, and the run never uploads. The
48
+ report lands in `~/StoreChecks/ios-<repo>-<branch>-<timestamp>/report.md`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: firebase
3
- 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 its cost and scaling traps."
3
+ 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 its cost and scaling traps."
4
4
  risk: unknown
5
5
  source: "vibeship-spawner-skills (Apache 2.0)"
6
6
  date_added: "2026-02-27"
@@ -3,7 +3,7 @@
3
3
  > Auto-generated by `pipeline/scripts/build-skills-index.mjs` - do not hand-edit.
4
4
  > Regenerate with `node pipeline/scripts/build-skills-index.mjs`.
5
5
 
6
- **196 skills** across 2 groups.
6
+ **201 skills** across 2 groups.
7
7
 
8
8
  | Group | Name | Platform | Description |
9
9
  |-------|------|----------|-------------|
@@ -56,7 +56,7 @@
56
56
  | external | `energykit` | - | Query grid electricity forecasts and submit load events using EnergyKit to help users optimize home electricity usage. Use when building sma |
57
57
  | external | `eventkit-calendar` | - | Create, read, and manage calendar events and reminders using EventKit and EventKitUI. Use when adding events to the user's calendar, creatin |
58
58
  | external | `fastapi-pro` | - | Build high-performance async APIs with FastAPI, SQLAlchemy 2.0, and Pydantic V2. Master microservices, WebSockets, and modern Python async p |
59
- | external | `firebase` | - | You're a developer who has shipped dozens of Firebase projects. You've seen the \\"easy\\" path lead to security breaches, runaway costs, an |
59
+ | external | `firebase` | - | 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 |
60
60
  | external | `github-actions-templates` | - | Production-ready GitHub Actions workflow patterns for testing, building, and deploying applications. Use when a GitHub Actions workflow has |
61
61
  | core | `google-play-compliance` | - | Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error c |
62
62
  | external | `gradle-kotlin-dsl` | - | Configure Android builds with Gradle Kotlin DSL, version catalogs (libs.versions.toml), convention plugins (build-logic module), common conf |
@@ -102,7 +102,6 @@
102
102
  | core | `multi-agent-dev-local` | - | Fast mode + local - Init → Dev(Opus) → Review → Commit → Report, no worktree. Use when a change should be developed and reviewed on the cu |
103
103
  | core | `multi-agent-dev-local-autopilot` | - | Fastest + local - Dev(Opus) + autopilot, no worktree, zero interaction. Use when a change should be developed on the current branch with n |
104
104
  | core | `multi-agent-diff-explain` | - | 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 |
105
- | core | `multi-agent-ship` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
106
105
  | core | `multi-agent-forget` | - | Remove a saved /multi-agent routine (created by /multi-agent:save): deletes its local-only command and its registry entry. Asks which one an |
107
106
  | core | `multi-agent-garbage-collect` | - | Sweep leftover /tmp scratch (picker state, review diffs, channel payloads, analysis drafts) from past runs. Dry-run first; confirms before d |
108
107
  | core | `multi-agent-help` | - | Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatib |
@@ -127,11 +126,17 @@
127
126
  | core | `multi-agent-scan` | - | Skill security scan: walks local skill directories against a tiered pattern catalog. Use when local skill directories need checking for unsa |
128
127
  | core | `multi-agent-search` | - | Log search across every agent-log.md with smart ranking and filters. Optional --semantic flag queries the per-repo triage corpus. Use when s |
129
128
  | core | `multi-agent-setup` | - | First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. Use when the pipeline is being set up f |
129
+ | core | `multi-agent-ship` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
130
130
  | core | `multi-agent-stack` | - | Select the active stack for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json (ios/android/mobile/backend/fr |
131
131
  | core | `multi-agent-status` | - | Show every multi-agent task's ID, phase, branch, and status. Use when asked what is running, or for an overview of every task. |
132
+ | core | `multi-agent-store-ready` | - | Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, |
132
133
  | core | `multi-agent-sync` | - | One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, website, and the dev-toolkit MCP server. Use whe |
133
134
  | core | `multi-agent-test` | - | UI Bug Hunter - iOS Simulator (simctl) + Android Emulator (adb). Auto-detects platform. Screenshot + tap + analyze on the booted device. T |
134
- | core | `multi-agent-testflight-validation` | - | Pre-submission validation for a TestFlight / App Store build (iOS, local-only). Three gates: static archive audit, Apple's own `altool --val |
135
+ | core | `multi-agent-test-accessibility` | - | Accessibility audit on a booted simulator / emulator: VoiceOver labels, sub-44pt tap targets, contrast, traits. Alias pinning the accessibil |
136
+ | core | `multi-agent-test-dark-mode` | - | Dark mode UI test on a booted simulator / emulator: walk every screen light then dark, report contrast + colour bugs. Alias pinning the dark |
137
+ | core | `multi-agent-test-dynamic-type` | - | Dynamic Type layout test on a booted simulator / emulator: re-walk every screen at XL through accessibility-extra-large, report truncation a |
138
+ | core | `multi-agent-test-screenshots` | - | App Store screenshot set from a booted simulator / emulator in a given locale, taken as an argument and defaulting to tr. Alias pinning the |
139
+ | core | `multi-agent-testflight-validation` | - | iOS-pinned alias of store-ready: same three gates on an iOS build, one implementation. Validates a TestFlight / App Store package, never upl |
135
140
  | core | `multi-agent-uninstall` | - | Uninstall the pipeline from Claude Code + Copilot CLI. Keychain access tokens are always left untouched; --all-data also clears pipeline set |
136
141
  | core | `multi-agent-update` | - | Update the pipeline to the latest version: git pull, install, migrate. Use when the installed pipeline is behind and should be brought to th |
137
142
  | external | `musickit-audio` | - | Integrate Apple Music playback, catalog search, and Now Playing metadata using MusicKit and MediaPlayer. Use when adding music search, Apple |