@mmerterden/multi-agent-pipeline 20.35.0 → 20.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +6 -5
  3. package/README.tr.md +6 -5
  4. package/docs/architecture.md +3 -3
  5. package/docs/ecosystem.md +5 -5
  6. package/docs/facts.json +4 -4
  7. package/install/catalog-history.json +1 -1
  8. package/manifest.json +210 -136
  9. package/package.json +5 -1
  10. package/pipeline/commands/multi-agent/SKILL.md +33 -154
  11. package/pipeline/commands/multi-agent/analysis/SKILL.md +14 -68
  12. package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +5 -8
  13. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +38 -109
  14. package/pipeline/commands/multi-agent/channels/SKILL.md +38 -167
  15. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +37 -144
  16. package/pipeline/commands/multi-agent/design-check/SKILL.md +27 -131
  17. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +22 -48
  18. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +37 -180
  19. package/pipeline/commands/multi-agent/jira/SKILL.md +16 -46
  20. package/pipeline/commands/multi-agent/office-pair/SKILL.md +66 -0
  21. package/pipeline/commands/multi-agent/office-status/SKILL.md +1 -1
  22. package/pipeline/commands/multi-agent/refactor/SKILL.md +23 -184
  23. package/pipeline/commands/multi-agent/resume/SKILL.md +30 -136
  24. package/pipeline/commands/multi-agent/review/SKILL.md +24 -199
  25. package/pipeline/commands/multi-agent/setup/SKILL.md +25 -181
  26. package/pipeline/commands/multi-agent/stack/SKILL.md +9 -53
  27. package/pipeline/commands/multi-agent/status/SKILL.md +13 -2
  28. package/pipeline/commands/multi-agent/store-ready/SKILL.md +27 -226
  29. package/pipeline/commands/multi-agent/sync/SKILL.md +38 -167
  30. package/pipeline/commands/multi-agent/test-gen/SKILL.md +2 -4
  31. package/pipeline/commands/multi-agent/update/SKILL.md +18 -60
  32. package/pipeline/contract/CHANGELOG.md +9 -0
  33. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  34. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  35. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  36. package/pipeline/contract/fixtures/runs-awaiting-question.json +1 -1
  37. package/pipeline/contract/fixtures/runs-empty.json +1 -1
  38. package/pipeline/contract/fixtures/runs-failed.json +1 -1
  39. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +1 -1
  40. package/pipeline/contract/fixtures/runs-pr-opened.json +1 -1
  41. package/pipeline/contract/fixtures/runs-running.json +1 -1
  42. package/pipeline/contract/manifest.json +5 -5
  43. package/pipeline/contract/types/index.d.ts +3 -2
  44. package/pipeline/lib/qr-code.mjs +26 -0
  45. package/pipeline/multi-agent-refs/autopilot-on/details.md +148 -0
  46. package/pipeline/multi-agent-refs/channels/generator.md +14 -0
  47. package/pipeline/multi-agent-refs/channels/preview.md +13 -0
  48. package/pipeline/multi-agent-refs/channels/reference.md +46 -0
  49. package/pipeline/multi-agent-refs/complaint-analysis/phases.md +159 -0
  50. package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
  51. package/pipeline/multi-agent-refs/design-check/export.md +1 -0
  52. package/pipeline/multi-agent-refs/design-check/init-inventory.md +1 -1
  53. package/pipeline/multi-agent-refs/design-check/scope-and-ledger.md +64 -0
  54. package/pipeline/multi-agent-refs/features/analysis-command-notes.md +53 -0
  55. package/pipeline/multi-agent-refs/garbage-collect/phases.md +60 -0
  56. package/pipeline/multi-agent-refs/help/en.md +1 -0
  57. package/pipeline/multi-agent-refs/help/tr.md +1 -0
  58. package/pipeline/multi-agent-refs/ios-coding-standard/plan.md +71 -0
  59. package/pipeline/multi-agent-refs/ios-coding-standard/resolve-and-scan.md +135 -0
  60. package/pipeline/multi-agent-refs/jira/picker-detail.md +71 -0
  61. package/pipeline/multi-agent-refs/orchestrator/copilot-pipeline.md +88 -0
  62. package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +96 -1
  63. package/pipeline/multi-agent-refs/refactor/sweep.md +190 -0
  64. package/pipeline/multi-agent-refs/resume/details.md +115 -2
  65. package/pipeline/multi-agent-refs/review/inputs.md +33 -1
  66. package/pipeline/multi-agent-refs/review/module-guides.md +9 -1
  67. package/pipeline/multi-agent-refs/review/panel.md +75 -0
  68. package/pipeline/multi-agent-refs/review/valven.md +5 -1
  69. package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +4 -0
  70. package/pipeline/multi-agent-refs/setup/token-save-flow.md +13 -0
  71. package/pipeline/multi-agent-refs/stack/background.md +72 -0
  72. package/pipeline/multi-agent-refs/store-ready/gates.md +139 -0
  73. package/pipeline/multi-agent-refs/store-ready/report.md +40 -2
  74. package/pipeline/multi-agent-refs/sync/office.md +10 -0
  75. package/pipeline/multi-agent-refs/sync/overview.md +61 -0
  76. package/pipeline/multi-agent-refs/sync/repo.md +91 -0
  77. package/pipeline/multi-agent-refs/update/details.md +83 -0
  78. package/pipeline/schemas/runs-index.schema.json +2 -1
  79. package/pipeline/scripts/contract-server.mjs +1 -1
  80. package/pipeline/scripts/office-pair.mjs +40 -9
  81. package/pipeline/scripts/runs-index.mjs +34 -7
  82. package/pipeline/scripts/status-overview.mjs +401 -0
  83. package/pipeline/skills/.skill-manifest.json +69 -65
  84. package/pipeline/skills/.skills-index.json +15 -4
  85. package/pipeline/skills/shared/README.md +4 -3
  86. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +8 -71
  87. package/pipeline/skills/shared/core/apple-archive-compliance/references/examples.md +67 -0
  88. package/pipeline/skills/shared/core/apple-archive-compliance/references/version-history.md +8 -0
  89. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +11 -73
  90. package/pipeline/skills/shared/core/google-play-compliance/references/examples.md +69 -0
  91. package/pipeline/skills/shared/core/google-play-compliance/references/notes.md +7 -0
  92. package/pipeline/skills/shared/core/google-play-compliance/references/version-history.md +5 -0
  93. package/pipeline/skills/shared/core/multi-agent/SKILL.md +39 -262
  94. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +35 -73
  95. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +37 -337
  96. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +27 -122
  97. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +8 -340
  98. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +37 -180
  99. package/pipeline/skills/shared/core/multi-agent-office-pair/SKILL.md +19 -0
  100. package/pipeline/skills/shared/core/multi-agent-office-status/SKILL.md +1 -1
  101. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +23 -184
  102. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +14 -82
  103. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +25 -277
  104. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +13 -2
  105. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +75 -219
  106. package/pipeline/skills/shared/external/alarmkit/SKILL.md +11 -162
  107. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-code.md +257 -0
  108. package/pipeline/skills/shared/external/android-architecture/SKILL.md +7 -58
  109. package/pipeline/skills/shared/external/android-architecture/references/code-examples.md +68 -0
  110. package/pipeline/skills/shared/external/app-intents/SKILL.md +3 -45
  111. package/pipeline/skills/shared/external/app-intents/references/code-examples.md +54 -0
  112. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +5 -81
  113. package/pipeline/skills/shared/external/app-store-optimization/references/engagement-and-localization.md +96 -0
  114. package/pipeline/skills/shared/external/app-store-review/SKILL.md +6 -112
  115. package/pipeline/skills/shared/external/app-store-review/references/monetization-and-submission.md +138 -0
  116. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +10 -117
  117. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models-code.md +186 -0
  118. package/pipeline/skills/shared/external/authentication/SKILL.md +3 -50
  119. package/pipeline/skills/shared/external/authentication/references/code-examples.md +59 -0
  120. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +3 -84
  121. package/pipeline/skills/shared/external/callkit-voip/references/code-examples.md +93 -0
  122. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -263
  123. package/pipeline/skills/shared/external/ci-cd-pipelines/references/pipeline-examples.md +281 -0
  124. package/pipeline/skills/shared/external/clean-code/SKILL.md +8 -41
  125. package/pipeline/skills/shared/external/clean-code/references/code-examples.md +56 -0
  126. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +8 -146
  127. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-code.md +214 -0
  128. package/pipeline/skills/shared/external/compose-components/SKILL.md +6 -80
  129. package/pipeline/skills/shared/external/compose-components/references/code-examples.md +89 -0
  130. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +5 -64
  131. package/pipeline/skills/shared/external/compose-navigation/references/code-examples.md +70 -0
  132. package/pipeline/skills/shared/external/core-data/SKILL.md +9 -157
  133. package/pipeline/skills/shared/external/core-data/references/core-data-code.md +221 -0
  134. package/pipeline/skills/shared/external/core-nfc/SKILL.md +3 -89
  135. package/pipeline/skills/shared/external/core-nfc/references/code-examples.md +98 -0
  136. package/pipeline/skills/shared/external/coreml/SKILL.md +17 -133
  137. package/pipeline/skills/shared/external/coreml/references/coreml-code.md +208 -0
  138. package/pipeline/skills/shared/external/css-modern/SKILL.md +8 -131
  139. package/pipeline/skills/shared/external/css-modern/references/code-examples.md +142 -0
  140. package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -103
  141. package/pipeline/skills/shared/external/database-patterns/references/orm-examples.md +112 -0
  142. package/pipeline/skills/shared/external/html-semantic/SKILL.md +7 -48
  143. package/pipeline/skills/shared/external/html-semantic/references/code-examples.md +54 -0
  144. package/pipeline/skills/shared/external/humanizer/SKILL.md +6 -19
  145. package/pipeline/skills/shared/external/humanizer/references/voice.md +24 -0
  146. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +13 -170
  147. package/pipeline/skills/shared/external/ios-accessibility/references/assistive-tech-review.md +224 -0
  148. package/pipeline/skills/shared/external/ios-localization/SKILL.md +2 -24
  149. package/pipeline/skills/shared/external/ios-localization/references/code-examples.md +30 -0
  150. package/pipeline/skills/shared/external/ios-networking/SKILL.md +3 -58
  151. package/pipeline/skills/shared/external/ios-networking/references/code-examples.md +67 -0
  152. package/pipeline/skills/shared/external/ios-security/SKILL.md +4 -64
  153. package/pipeline/skills/shared/external/ios-security/references/code-examples.md +74 -0
  154. package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -90
  155. package/pipeline/skills/shared/external/live-activities/references/code-examples.md +108 -0
  156. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +9 -23
  157. package/pipeline/skills/shared/external/localization-reuse-map/references/project-settings.md +22 -0
  158. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +5 -95
  159. package/pipeline/skills/shared/external/mapkit-location/references/code-examples.md +117 -0
  160. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +7 -106
  161. package/pipeline/skills/shared/external/nextjs-app-router/references/app-router-examples.md +124 -0
  162. package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -31
  163. package/pipeline/skills/shared/external/permissionkit/references/code-examples.md +37 -0
  164. package/pipeline/skills/shared/external/play-store-review/SKILL.md +6 -74
  165. package/pipeline/skills/shared/external/play-store-review/references/signing-and-policies.md +83 -0
  166. package/pipeline/skills/shared/external/push-notifications/SKILL.md +8 -125
  167. package/pipeline/skills/shared/external/push-notifications/references/notification-code.md +176 -0
  168. package/pipeline/skills/shared/external/python-patterns/SKILL.md +7 -158
  169. package/pipeline/skills/shared/external/python-patterns/references/python-examples.md +176 -0
  170. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +7 -157
  171. package/pipeline/skills/shared/external/rest-api-design/references/api-examples.md +175 -0
  172. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +11 -230
  173. package/pipeline/skills/shared/external/swift-architecture/references/pattern-examples.md +295 -0
  174. package/pipeline/skills/shared/external/swift-codable/SKILL.md +17 -149
  175. package/pipeline/skills/shared/external/swift-codable/references/codable-recipes.md +207 -0
  176. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +12 -99
  177. package/pipeline/skills/shared/external/swift-concurrency/references/code-examples.md +100 -0
  178. package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-additions.md +18 -0
  179. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +9 -78
  180. package/pipeline/skills/shared/external/swift-formatstyle/references/formatstyle-examples.md +113 -0
  181. package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -56
  182. package/pipeline/skills/shared/external/swift-language/references/code-examples.md +65 -0
  183. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +1 -0
  184. package/pipeline/skills/shared/external/swiftdata/SKILL.md +6 -122
  185. package/pipeline/skills/shared/external/swiftdata/references/code-examples.md +140 -0
  186. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -139
  187. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/interop-code.md +198 -0
  188. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +9 -81
  189. package/pipeline/skills/shared/external/tailwind-css/references/code-examples.md +91 -0
  190. package/pipeline/skills/shared/external/testing-backend/SKILL.md +7 -207
  191. package/pipeline/skills/shared/external/testing-backend/references/testing-examples.md +225 -0
  192. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +8 -89
  193. package/pipeline/skills/shared/external/typescript-patterns/references/code-examples.md +100 -0
  194. package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -20
  195. package/pipeline/skills/shared/external/vision-framework/references/code-examples.md +26 -0
  196. package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -169
  197. package/pipeline/skills/shared/external/vue-composition/references/vue-examples.md +187 -0
  198. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +7 -174
  199. package/pipeline/skills/shared/external/web-accessibility/references/a11y-examples.md +192 -0
  200. package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -66
  201. package/pipeline/skills/shared/external/web-performance/references/code-examples.md +77 -0
  202. package/pipeline/skills/shared/external/web-testing/SKILL.md +11 -186
  203. package/pipeline/skills/shared/external/web-testing/references/testing-examples.md +213 -0
  204. package/pipeline/skills/skills-index.md +2 -1
  205. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/format-and-output.md +0 -0
  206. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/publish-and-snapshot.md +0 -0
  207. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/sources-and-recipes.md +0 -0
@@ -0,0 +1,53 @@
1
+ # Analysis command notes: scope, profiles, template, outputs and tracker detail
2
+
3
+ Read by `/multi-agent:analysis` before Phase 0. The command file keeps the step skeleton, the side-effect contract, the gates and the hard rules; this file holds the scope, the profile table, the template rules, output naming and source-handling notes. Every question asked follows `$HOME/.claude/multi-agent-refs/picker-contract.md`. The engine contracts themselves live in the `analysis/` refs the command names.
4
+
5
+ ## Scope
6
+
7
+ This command is **independent** from the orchestrator's Phase 1 analysis (which is a stack/findings detector inside `/multi-agent`). It produces a stakeholder-ready, platform-agnostic feature-spec document - up to 23 sections, trimmed to whatever the evidence supports - before any implementation starts. Each per-platform file is rendered by projecting concept-layer content onto repo-extracted conventions (Pass B).
8
+
9
+ this command produces a *development* analysis - what to build, the architecture plan, files to add, the test plan, and which existing components to reuse. It is NOT a design / screen-anatomy specification. The design itself is already produced elsewhere (figma-to-swiftui builds the components and binds them via Code Connect), so the analysis consumes those existing bindings as the source of truth for "what already exists" (see Phase 1b.1) instead of re-deriving the design. Do not grow this command toward exhaustive per-screen layout / gesture / state documentation; keep it development-focused.
10
+
11
+ ## Profiles
12
+
13
+ Phase 0 Step 1b asks which analysis standard the document follows (Locked 31), and the answer selects the template. Both profiles read the same evidence: intake, fetching, repo evidence and convention extraction are shared, so the two cannot drift into two products.
14
+
15
+ | Profile | Template | Shape |
16
+ |---|---|---|
17
+ | `global` (default) | `analysis-template.md` | Development handoff, 23 sections. Business rules with Gherkin acceptance criteria, architecture plan, files to add, test plan. Zero-evidence sections drop (Locked 2). |
18
+ | `corporate` | `analysis-template-corporate.md` | Requirements document. `IG -> UC -> FG` spine with three traceability matrices, current and target state with impact analysis, then Technical Analysis and Development Analysis. The Part A backbone always renders, carrying `N/A` or `EKLENECEK` (Locked 32). |
19
+
20
+ One run emits one profile. A missing input never blocks either profile: the gap is written as `EKLENECEK` and raised as a Section 20 open question rather than halting the run.
21
+
22
+ **Stack is optional** (Locked 34). When no platform is selected the run still completes: everything that does not need a target repository renders in full, and only the development layer plus the Pass B projection are skipped, with a Section 20 row recording why. The output is a single file at `~/Desktop/multiAgentAnalysis/<feature-name>/<feature>.md` instead of one per repo: without a repo there is no working tree for the usual `analysis/` path to be relative to, and the current working directory is never written to. The Phase 3.5 picker shows the resolved path and accepts an override.
23
+
24
+ ## Template
25
+
26
+ v3 template at `$HOME/.claude/multi-agent-refs/analysis-template.md`. The document renders up to 23 main sections + footer, minus any dropped by the omission table. The analysis doc is a development handoff, so low-signal sections are default-drop: **19 Alternatives** (render only for a real 2+-option architectural decision), **22 Glossary** (render only on request or >5 unfamiliar domain terms), and **18 Rollout** (compact checklist only, dropped when the pipeline's own commit/PR/rollout phase covers it). Sections are chosen from evidence; there is no second mode (ADR-0015, `docs/adr/0015-one-pipeline-no-depth-answer.md` in the pipeline repo). Section omission rule (Locked 2): zero-evidence and default-drop sections omit entirely; a rendered section keeps its canonical template number, so the rendered set has gaps.
27
+
28
+ Numbering is plain Arabic numerals: `## 1. Geliştirme Özeti` / `## 1. Summary`, `## 2. Hedefler ve Karşı Hedefler` / `## 2. Goals and Non-Goals`. No special section characters; the section sign codepoint (U+00A7) is banned by `feedback_no-section-sign`.
29
+
30
+ The template is platform-agnostic (Locked 22). It speaks in concepts (state holder, view, navigator, use case, repository, DTO, state model, DI register, localization key, accessibility identifier, test method). Pass B (Phase 2b) projects each concept onto the selected platform using `state.analysisSpec.evidence.conventions[<repo>]` extracted at Phase 1c. Every projected cell carries a footnote pointing to its evidence source (Locked 24).
31
+
32
+ ## Phase summaries
33
+
34
+ - **Phase 0**: sequential `AskUserQuestion` steps filling `state.analysisSpec.*`: analysis name, analysis profile, account, platform multi-select, repos per platform, the six-question source batch (Figma / Swagger / Confluence / Jira / Standards / Firebase) and the two coverage opt-ins. Every step prints its breadcrumb.
35
+ - **Phases 1 to 1c**: fetch every declared source in parallel, collect the 13-bucket repo evidence, build the Code Connect index, and extract the seven convention groups.
36
+ - **Phases 3 to 5**: render one markdown file per platform, run the humanizer pass, gate on the validator and the references coverage gate, ask for the output destination, dispatch to Local / Confluence / Jira, report and stop.
37
+ - **Resume**: `analysis/resume.md` holds the `state.analysisSpec.phase` enumeration and the re-entry rule per paused phase.
38
+
39
+ ## Notes
40
+
41
+ - The minimum possible output (per per-platform file) is `1. Scope` + `7. Development Plan` (both always-present).
42
+ - If Confluence or Jira POST returns 401 / 403 during Phase 4, surface the error and offer Local fallback (the local drafts in `/tmp/` are still on disk; copying them into the repo working tree is always available).
43
+ - The `analysis/` directory is not in `.gitignore`; the user can `git add analysis/` manually. No auto-commit.
44
+ - **Per-platform file naming**: `analysis/<feature>-<platform>.md`. The `<platform>` slug is lowercase, one of `ios | android | web | backend` for a repo-backed run, or `mobile | web` for the channels a repo-less run derives from its evidence (Locked 34). `web` is the pre-`web` spelling and is still read back for older state and documents. The `<feature>` slug preserves the user's feature name with whitespace replaced by `-` (e.g. `User Profile` -> `UserProfile` or `Item-Status` depending on input shape; the renderer trims and de-duplicates dashes).
45
+ - **Standards binding (the Standards question)**: When `evidence.standards[]` is non-empty, every decision in Section 13 (Architecture Plan, corporate Section 17) must cite the binding source in its 13.7 Standards-binding table. The renderer enforces this by failing render if any architectural decision has no `cite:` reference; the user is prompted to either tighten the source or add a Risk row acknowledging the missing citation.
46
+ - **Firebase ingestion (the Firebase question)**: Console URLs are never fetched (auth-gated). Only `:names` and `:schema` inputs feed `evidence.firebase[]`. Section 11 Analytics (corporate Section 13) emits per-platform snippets but the events table itself is shared across all per-platform files (the rules / event vocabulary is one product invariant).
47
+ - **Wiki access fallback chain**: Phase 1 `wiki` fetcher tries (a) `git clone .wiki.git`, (b) `gh api repos/.../contents/<file>.md`, (c) raw `WebFetch` of the page URL. Only after all three fail does the entry land in `fetchErrors[]`.
48
+ - **Local-file safety**: `local-file` reads are scoped to `~/`, `/Users/`, and the repo's working tree. Paths outside these prefixes are rejected with `WARN: refusing to read <path>; outside allowed roots` to avoid accidental ingestion of unrelated files.
49
+ - **Standards vs Confluence vs Document split**: the Confluence question collects feature-specific spec pages and the Document question the same spec delivered as a `.docx` / `.pdf` / `.md` / `.txt` file - both describe what the feature IS and both land in `evidence.documents[]`. The Standards question collects cross-cutting documentation that constrains the development plan (architecture, coding conventions, navigation pattern). A source pasted in more than one of the three is de-duplicated (by URL, or by `realpath` for a local file) and the Standards entry wins, because it retains the binding flag.
50
+ - **Workspace coding documentation default**: when the Standards question's option 2 (Auto-detect) is selected, the probe also reads `prefs.projects[<project>].confluenceStandardsParent` (if set) and looks for child pages whose title starts with `Coding`, `Standards`, `Architecture`, or `Navigation`. If that fetch fails with auth, log a hint that the user should host an offline mirror at `prefs.projects[<project>].standardsFile` (canonical local fallback).
51
+ - **Mixed paste handling**: the Standards and Firebase Other inputs accept comma-separated mixed entries. Whitespace is trimmed; entries are de-duplicated by canonicalised string (lowercase scheme + host + path for URLs; `realpath` for local files; lowercase exact match for event names).
52
+ - **Repo-evidence reuse policy**: Phase 1b's catalogue is consulted by Pass B Section 7 rendering. The `direct-match` tag is the strongest signal; a `same-domain` row becomes an advisory note ("consider adapting existing X in the same feature directory"); `cross-cutting` items become a sentence in the section preamble ("reuse the cross-feature X from Common/"). See Locked decision 11.
53
+
@@ -0,0 +1,60 @@
1
+ # garbage-collect: what each phase covers
2
+
3
+ Read by `/multi-agent:garbage-collect` when a phase's output needs explaining,
4
+ or before answering what a sweep would or would not touch.
5
+
6
+ ## /tmp scratch (phase 1)
7
+
8
+ Each run writes ephemeral scratch under `/tmp`: picker state
9
+ (`multi-agent-picker-*`), PR/review diffs (`multi-agent-review-*`), issue
10
+ progress bodies (`issue-progress-*`), channel payloads (`channels-*`),
11
+ external-context bundles (`context-links-*` / `context-by-type-*`), and analysis
12
+ drafts (`analysis-*`). Most are never cleaned up, so a long-lived machine
13
+ accumulates them. `gc-tmp.sh` sweeps the known prefixes only.
14
+
15
+ ## Worktree residue (phase 2)
16
+
17
+ `gc-worktrees.sh` covers: stale worktree admin entries (`git worktree prune`,
18
+ applied immediately - it only drops bookkeeping for dirs that are already gone),
19
+ orphan `.worktrees/*` dirs no longer registered as worktrees, gitlink residue in
20
+ the index (`.worktrees/{id}` recorded as a "Subproject commit" entry by a
21
+ pre-guard `git add -A`), and a missing `.worktrees/` line in
22
+ `.git/info/exclude`.
23
+
24
+ ## Offloaded payloads (phase 3)
25
+
26
+ `offload-ref.sh` parks build logs, diffs and test output under
27
+ `.multi-agent/refs/<node_id>.md`. In worktree modes that directory dies with the
28
+ worktree; when the run chose a local workspace it lands in the real checkout,
29
+ and because it is gitignored it never shows up in `git status`. Only files
30
+ matching the node-id shape are touched - anything else in that directory is left
31
+ alone, and files inside the grace window are spared so a sweep cannot pull a ref
32
+ out from under a running phase.
33
+
34
+ ## Abandoned runs (phase 4, `--abandoned`)
35
+
36
+ Nothing else collects these. `gc-worktrees.sh` skips registered worktrees on
37
+ purpose, because a registered worktree belongs to a live run - and a run that
38
+ stopped never stops being "live".
39
+
40
+ The output has four kinds of line and they are not interchangeable:
41
+
42
+ | Line | Meaning |
43
+ |---|---|
44
+ | `would remove` / `would remove worktree` | reapable: stopped past its age limit, or finished with its worktree left behind |
45
+ | `would stash` | uncommitted work found - it goes into a stash entry labelled `autopilot/abandoned/<task-id>` (`git stash list`) and the worktree is **kept** |
46
+ | `would mark abandoned` | the state is stale but there is no worktree left to remove |
47
+ | `unattributed` | a worktree with no run state. **Never removed, whatever the flags.** `.worktrees/` is not exclusively ours, and nothing distinguishes a hand-made worktree from a pipeline one whose log was pruned. Report the list and its size; the user decides |
48
+
49
+ A path outside `<repo>/.worktrees/` is never removed because a state file can
50
+ record the repo root as its `worktreePath`.
51
+
52
+ ## Scope of each phase
53
+
54
+ The /tmp phase only touches `/tmp` scratch; the worktree phase only touches the
55
+ current repo's `.worktrees/` residue and index; the payload phase only touches
56
+ node-id files under `.multi-agent/refs/`. Persistent per-task logs live under
57
+ `~/.claude/logs/multi-agent/` and are cleaned by `/multi-agent:prune-logs`. The
58
+ per-repo memory stores under `~/.claude/memory/multi-agent/` are durable
59
+ knowledge, not scratch: they are removed only by `/multi-agent:uninstall
60
+ --all-data`, or one entry at a time with `learnings-ledger.mjs forget`.
@@ -88,6 +88,7 @@ Status & Resume:
88
88
  /multi-agent:serve Contract server for a client: 127.0.0.1, token, stops when idle
89
89
  /multi-agent:office-on Open the office in your browser: live runs and agents, PRs, keys, memory, system, jobs; its orientation room explains the rest
90
90
  /multi-agent:office-status Is the panel running, its URL (never the token), its last actions
91
+ /multi-agent:office-pair Pair a phone: show the QR, wait, compare the code with you, enrol it
91
92
  /multi-agent:office-off Stop the panel's server (it runs until you do)
92
93
 
93
94
  Post-Hoc & Side-Channel:
@@ -87,6 +87,7 @@ Status & Resume:
87
87
  /multi-agent:serve İstemci için sözleşme sunucusu: 127.0.0.1, token, boşta durur
88
88
  /multi-agent:office-on Ofisi tarayıcıda aç: canlı koşular ve ajanlar, PR'lar, anahtarlar, hafıza, sistem, işler; gerisini oryantasyon odası anlatır
89
89
  /multi-agent:office-status Panel çalışıyor mu, adresi (token asla), son işlemleri
90
+ /multi-agent:office-pair Telefonu eşle: QR'ı göster, bekle, kodu seninle karşılaştır, kaydet
90
91
  /multi-agent:office-off Panelin sunucusunu durdur (sen durdurana kadar çalışır)
91
92
 
92
93
  Post-Hoc & Side-Channel:
@@ -0,0 +1,71 @@
1
+ # ios-coding-standard: plan contents
2
+
3
+ Read by `/multi-agent:ios-coding-standard` before writing the Phase 4 plan. The
4
+ plan contains, in order:
5
+
6
+ 1. **Coverage ledger** - total targets · audited · skipped with reasons. Not 100% accounted for
7
+ means the plan is not deliverable.
8
+ 2. **Summary** - counts by severity and source, resolved vocabulary, branch to create.
9
+ 3. **Sensitive-data inventory** (Phase 2d) - first, because it is the highest-risk content.
10
+ 4. **Screen × role matrix** `[STRUCT-02]` - screens as rows, manifest roles as columns, cells
11
+ `✓ / missing / misplaced`. The structural map a newcomer reads first.
12
+ 5. **Type placement table** `[STRUCT-05]` - type · location · consumer count · correct tier ·
13
+ move required. Paired with the nested-type list `[STRUCT-01]`: owner · nested type · kind ·
14
+ reference count · verdict.
15
+ 6. **Visibility report** `[VIS-01, VIS-02]` - over-exposed declarations per file, non-final
16
+ classes with no subclass.
17
+ 7. **Boundary report** `[MOD-*]` - import graph (allowed vs forbidden, with coupling depth) ·
18
+ manifest graph (declared vs legal for the role, plus dead edges) · **removability delta**
19
+ ("removing X touches N files: ...") · inbound test (tests compile with no sibling present).
20
+ 8. **Testability seam report** `[TEST-*]` - types reaching for the environment, logic requiring a
21
+ view to execute, doubles whose signatures have drifted.
22
+ 9. **Change-cost probe** `[FLEX-*]` - pick two plausible upcoming changes (a new variant of an
23
+ existing screen; a new field on a shared entity) and state what each costs in files today.
24
+ 10. **Findings table** - rule ID · `file:line` · current state · proposed fix · severity · source ·
25
+ onboarding impact.
26
+ 11. **Per-file work** - grouped per file, blocking → important → suggestion; within a severity,
27
+ highest onboarding impact first.
28
+ 12. **Behaviour-preservation guard** - splitting files, adding MARKs, extracting extensions and
29
+ moving types must not change behaviour. Anything requiring a behaviour change (a missing
30
+ analytics event, a wrong result type, a timezone fix, a storage migration) goes in a
31
+ **separate group**, reviewed and tested on its own, never inside a mechanical split commit.
32
+ 13. **Tooling delegation & the ratchet** - the section that decides whether any of this survives.
33
+ - Classify each applied rule by its registry `enforcement`. For every `lint` / `format` /
34
+ `scan` rule, state the concrete mechanism and whether that toolchain exists in the repo
35
+ (`LintToolchain`). **When it does not exist, saying so is a finding**, ranked above most
36
+ individual violations it would have caught.
37
+ - Recommend **baseline-and-ratchet, never big-bang**: grandfather existing violations, surface
38
+ only new ones, drain the backlog behind a green build. Order the plan the same way - stop
39
+ the bleeding, then clean up.
40
+ - Custom lint rule identifiers **are** the registry IDs (`sec_01_no_plaintext_persistence`,
41
+ `mod_01_no_sibling_import`) so a violation points straight at the rule entry.
42
+ - **Linting is local-only by decision** - the skill's `references/lint-local.sh` with `references/swiftlint.draft.yml`, config
43
+ and baseline kept outside the repository; no committed config, no build phase, no CI job.
44
+ State this honestly in the plan rather than describing a gate that does not exist: a
45
+ pre-PR habit catches less than a wall, so the residual risk is real and belongs in the
46
+ report. Adopting it project-wide remains an open decision - record it as one so it stays
47
+ visible instead of quietly lapsing.
48
+ - Never imply the audit substitutes for the linter, or the linter for a gate. The audit finds
49
+ the debt once; the linter keeps a developer honest; only a gate stops it returning.
50
+ 14. **Numeric exit criteria** - target and today's measured value side by side: lint violations
51
+ per 1k lines (<1) · public-surface ratio, public declarations ÷ externally consumed symbols
52
+ (≈1) · forbidden cross-module imports (0) · removability delta · files over threshold and
53
+ files >120 lines with no sectioning (0) · screens missing a manifest role (0) · escape-hatch
54
+ count `[CONC-03]` (flat or falling) · exception-marker count (flat or falling) · dead code (0)
55
+ · screens with logic and no mirrored tests (0) · unclassified sensitive symbols (0).
56
+ 15. **Exception ledger** - every `// standard:exception(<ID>)` in the module: rule · reason ·
57
+ expiry · expired yes/no.
58
+ 16. **Open Questions** - Phase 2b dimensions with no majority, and unclassifiable symbols.
59
+ 17. **Suggested commit slicing** - one commit per file-group / concern.
60
+ 18. **Scope guard** - only this module is touched; definition of done is the module's own
61
+ verification path.
62
+
63
+ ## Onboarding summary
64
+
65
+ Then write a **separate one-page onboarding summary** beside the plan, aimed at a developer
66
+ joining next week rather than at whoever does the remediation: the ten always/never lines
67
+ specialised to this module, the screen file manifest, the placement ladder, the sensitive-data
68
+ classes in play, and the verification command. Nobody learns a codebase from a 40-finding audit -
69
+ this page is the actual deliverable, and the audit is how you earn the right to write it
70
+ accurately. Derive it from `references/STANDARD.md section 0`, do not re-invent it.
71
+
@@ -0,0 +1,135 @@
1
+ # ios-coding-standard: resolve and scan detail
2
+
3
+ <!-- toc -->
4
+ - [Phase 2](#phase-2)
5
+ - [Phase 3](#phase-3)
6
+ - [Verification reality](#verification-reality)
7
+ <!-- /toc -->
8
+
9
+ Read by `/multi-agent:ios-coding-standard` at the start of Phase 2 and again
10
+ before Phase 3. The rules themselves live in the `ai-ios-toolkit:ios-coding-standard`
11
+ skill (`references/rules.yml`); this file is procedure only.
12
+
13
+ ## Phase 2
14
+
15
+ Module roles from Phase 1 decide which dependency edges are legal: **feature** ·
16
+ **core/common** · **seam** (cross-module contracts/bridges/navigation) ·
17
+ **composition root** (legitimately knows every module).
18
+
19
+ ### 2a. The registry is the standard - in-module prose docs are NOT consulted
20
+
21
+ The skill's `references/rules.yml` (+ a project `modules/<Module>.yml` overlay) is the single
22
+ source of truth. Module prose docs are being retired so there is one place a rule can live;
23
+ consulting them re-creates the split this command exists to remove. If such a file exists and
24
+ contradicts the registry, that is a finding against the file, not against the code.
25
+
26
+ The only in-repo inputs are **code and manifests**: sources, tests, `Package.swift`, `Info.plist`,
27
+ the specs the generator reads, and the module registry from Phase 1.
28
+
29
+ ### 2b. Per-module overlay, then inference
30
+
31
+ 1. **`modules/<Module>.yml`** beside the project's own config carries what code cannot state: the vocabulary
32
+ bindings, the module's role, prohibitions that currently have **zero** instances, deliberate
33
+ carve-outs, name locks, and the real verification command. Registry-backed, so its findings may
34
+ be `blocking`.
35
+ *Why prohibitions need to be written down:* inference reads dominant patterns, and a rule
36
+ obeyed everywhere has no counter-example to infer from. A ban at 100% compliance is invisible
37
+ to a scan - it survives only if the overlay states it.
38
+ 2. **Repo-level rules** (root `CLAUDE.md`, contributing docs) apply to every module.
39
+ 3. **The module's own dominant pattern is its de-facto convention.** Count variants per dimension;
40
+ the minority instances are the finding. Internal consistency beats conformity to a sibling.
41
+ 4. No majority (even split, single instance) → not a finding. Record an Open Question.
42
+
43
+ Findings from step 3 are tagged `inferred` and capped at **suggestion**. Only registry- or
44
+ overlay-backed rules may be `blocking`.
45
+
46
+ **When the overlay is missing**, generate a draft from code evidence, print it for confirmation,
47
+ and mark every slot it could not derive - a frozen UI target, a name lock, a carve-out and an
48
+ operational constraint all look like ordinary code from the outside. Do not guess them; list them
49
+ as Open Questions.
50
+
51
+ ### 2c. Vocabulary
52
+
53
+ Bind each slot to a real symbol by grepping the module, then the reference module. **An unbound
54
+ slot disables its rules** - never invent a name, never import a sibling's.
55
+
56
+ `HandlerName` · `EventParam` · `CoordinatorType` · `ResultType` / `ErrorType` / `ErrorFactory` ·
57
+ `DIResolver` / `DIConfigurator` · `RequestModelSuffix` / `ResponseModelSuffix` / `TransportSuffix` ·
58
+ `MapperShape` · `SafeEnumProtocol` / `UnknownCase` · `CopySurface` · `AnalyticsSurface` ·
59
+ `A11yIdentifierSource` · `GeneratedServiceRoot` · `SharedComponentsDir` / `SharedEntitiesDir` ·
60
+ `MicroComponentLibrary` · `FrozenUITarget` · `DesignTokenNamespaces` · `CalendarDayHelper` ·
61
+ `LoggerAPI` · `FileHeaderShape` · `ScreenRoot` · `ScreenRoleSuffixes` · `AsyncStyle` ·
62
+ `CompositionRoot` · `SeamLayer` · `ModuleEntrySurface` · `ConcurrencyPosture` · `LintToolchain` ·
63
+ `CredentialStore` (the module's Keychain wrapper, if any).
64
+
65
+ Print the resolved table before scanning so a wrong binding is caught early.
66
+
67
+ ### 2d. Sensitive-data inventory - required before any SEC rule runs
68
+
69
+ The `SEC-*` rules are written against the **data classes** in `references/rules.yml →
70
+ sensitive_data_classes`, never against one module's field names. Resolve the module's concrete
71
+ instances of each class: grep entities, request/response models, storage calls and analytics
72
+ events for the values the module actually handles, and map each to its class.
73
+
74
+ Produce the inventory as a table - **class · concrete symbols · where it enters · required
75
+ lifetime (transient / survives-restart / survives-reinstall) · where it is actually stored ·
76
+ where it is logged · where it leaves (network, analytics, pasteboard, another module)**.
77
+
78
+ The **lifetime column is the one that decides SEC-01**, and it is filled by walking
79
+ `references/rules.yml → persistence_decision`, not by looking at what the code currently does. Compare it
80
+ against the storage column and report both mismatches:
81
+ - required transient but persisted anywhere (including the Keychain) → **over-persistence**;
82
+ - required to survive a restart but stored outside the Keychain → **under-protection**.
83
+
84
+ Then generate the SEC lint patterns *from this inventory*, so the checks match this module's real
85
+ vocabulary. A class with no instance here yields no finding; a symbol you cannot classify, or one
86
+ whose required lifetime nobody can state, is an Open Question, not a silent pass.
87
+
88
+ This table is a deliverable in its own right, independent of whether any violation is found.
89
+
90
+
91
+ ## Phase 3
92
+
93
+ ### Coverage gate - on disk, not in memory
94
+
95
+ Before scanning, write `.<module>-audit-coverage.tsv` to the scratch dir: one row per target
96
+ (every screen under `ScreenRoot`, every shared component, every entity, every file in every
97
+ target) with columns `path · status · rules-applied`. Mark rows as you go.
98
+
99
+ - Each target is **audited** or **explicitly skipped with a reason** (generated, fixture,
100
+ vendored). No third state.
101
+ - **The run is incomplete while any row is unmarked** - and the file, not a claim, is the proof.
102
+ Chunk the module if it is too large for one pass; the checklist survives a context reset.
103
+ - No sampling. A partial audit reported as complete certifies the unscanned screens as clean.
104
+
105
+ ### Grep hygiene
106
+
107
+ Registry `mechanism` patterns are line-based and match doc comments. Filter
108
+ `^[[:space:]]*//` - BSD grep does not understand `\s`, so a `\s*//` filter silently lets `/// ...`
109
+ through - then open each surviving hit and confirm it is real code. Report pre-filter and
110
+ post-verification counts separately; a table padded with comment matches destroys trust.
111
+
112
+ ### Judgement rules need evidence, not assertion
113
+
114
+ For any rule marked `enforcement: judgement`, a finding must carry the measurement its `check`
115
+ names - a reference count, a call-site count, a consumer count, a file list. **No count, no
116
+ finding.** This is what keeps a subjective rule from becoming an opinion.
117
+
118
+ Every judgement rule has a worked ✗/✓ pair in `EXAMPLES.md`, keyed by ID. Cite it in the finding's
119
+ proposed fix rather than re-describing the shape - the developer applying the fix should be
120
+ reading the same picture the audit used.
121
+
122
+ ### Module-specific overrides
123
+
124
+ The module's own docs win over the registry, including where they contradict a sibling module.
125
+ Never apply one module's dialect to another. List every override honoured, so the reader sees why
126
+ a registry rule was not raised.
127
+
128
+ ## Verification reality
129
+
130
+ Verification reality is per-module - establish it, do not assume it. Some
131
+ targets cannot be compiled from the CLI (asset symbol generation, UIKit-dependent
132
+ packages, a dependency failing earlier in the graph); there, verification is
133
+ Xcode and a manifest dump validates the manifest only. Never trust a piped
134
+ build's exit code - a pipe reports the tail's status. Record the module's actual
135
+ verification command in the plan.
@@ -0,0 +1,71 @@
1
+ # jira picker: list format and maturity detail
2
+
3
+ Read by `/multi-agent:jira` when rendering the issue list (step 3/4), when the
4
+ maturity check (step 3.5/4) returns a description or blocker case, and when
5
+ writing the picker state file.
6
+
7
+ ## Issue list format
8
+
9
+ Priority badge prefix, status suffix:
10
+
11
+ ```
12
+ [3/4] Pick issue (24 found, priority-sorted):
13
+ > [Blocker] PROJ-12345 - Login crash on iOS 17 (In Progress)
14
+ [Critical] PROJ-12340 - Payment fails for refunds (In Review)
15
+ [High] PROJ-12338 - Dark mode polish (To Do)
16
+ [Medium] PROJ-12330 - Add empty state (To Do)
17
+ [ - ] PROJ-12300 - Refactor LoginViewModel (To Do)
18
+ ```
19
+
20
+ ## Maturity shape
21
+
22
+ `~/.claude/lib/issue-fetcher.sh` returns:
23
+
24
+ ```jsonc
25
+ "maturity": {
26
+ "score": 0..100,
27
+ "blockers": ["status_closed", "already_resolved", "description_empty"],
28
+ "warnings": ["short_description", "no_repro_steps", "no_acceptance_criteria", "description_empty_parent_available"],
29
+ "summary": "..."
30
+ }
31
+ ```
32
+
33
+ ## Empty description and the parent candidate
34
+
35
+ Development sub-tasks are often filed with no description of their own, with
36
+ the real requirements on the parent issue. Before scoring, `issue-fetcher.sh`
37
+ fetches the issue's `parent` (single hop, no chasing the parent's parent). If
38
+ the issue's own description is empty and the parent's is not, it does **not**
39
+ auto-substitute - it exposes `descriptor.parentKey` +
40
+ `descriptor.parentDescription` as a candidate and adds
41
+ `description_empty_parent_available` to `warnings` (not `blockers`) instead of
42
+ the plain `description_empty` blocker. If the parent is also empty or
43
+ unreachable, `description_empty` still blocks.
44
+
45
+ ## Picker state file
46
+
47
+ `/tmp/multi-agent-picker-{taskId}.json`, read by `multi-repo-pipeline.sh bridge`:
48
+
49
+ ```json
50
+ {
51
+ "taskId":"PROJ-12345-{timestamp}",
52
+ "shortId":<int>,
53
+ "branch":"<feature|bugfix>/PROJ-12345",
54
+ "baseBranch":"develop",
55
+ "issueRef":{...},
56
+ "primary":{"name":"...","cloneUrl":"...","provider":"github|bitbucket"},
57
+ "extras":[{...}],
58
+ "worktreeRoot":"~/.worktrees/PROJ-12345-{timestamp}",
59
+ "commitType":"<feat|fix>",
60
+ "identity":{"name":"...","email":"..."}
61
+ }
62
+ ```
63
+
64
+ ## Blocker follow-up detail
65
+
66
+ An edit is a reason to re-check, never proof the gap closed - the check re-runs
67
+ on the new content, and only a DIFFERENT gap set ever earns a second comment.
68
+ Read the item's existing comments FIRST and derive the prior ask from the newest
69
+ one of ours (`priorFromComments`): a scan is a new run with a fresh state file,
70
+ so state alone would make every scan a first ask. Full contract:
71
+ `features/maturity-followup.md`.
@@ -0,0 +1,88 @@
1
+ # Copilot CLI orchestrator - project detection, routing and phase summaries
2
+
3
+ Detail behind the Copilot CLI orchestrator skill (`skills/shared/core/multi-agent/SKILL.md`). The skill keeps the routing skeleton, the hard rules and the gates; this file carries the project table, the full routing rows and the per-phase routing summaries. Each phase's specification is `$HOME/.claude/multi-agent-refs/phases/phase-N-<name>.md`; where a summary here and a phase ref disagree, the phase ref wins.
4
+
5
+ ## Project detection
6
+
7
+ Detect the project from cwd FIRST, then validate the input format:
8
+
9
+ | cwd contains | Project | Accepted Input | Rejected Input |
10
+ |--------------|---------|----------------|----------------|
11
+ | `/my-ios-app` | my-app | `"PROJ-XXX" "branch"` | GitHub Issue URL |
12
+ | `/my-figma-app` | figma | `"https://github.com/.../issues/N"` | Jira ID + branch |
13
+ | Other | generic | Both formats | - |
14
+
15
+ If the user gives the wrong format for the project, warn:
16
+
17
+ - my-ios-app + GitHub URL: "This project expects a Jira ID + branch. Example: multi-agent \"PROJ-12345\" \"feature/PROJ-12345-desc\""
18
+ - my-figma-app + Jira: "This project expects a GitHub Issue URL. Example: multi-agent \"https://github.com/my-org/my-figma-app/issues/316\""
19
+
20
+ ## Input types
21
+
22
+ Five types, matching the `commands/multi-agent/SKILL.md` dispatcher contract (cross-CLI parity is enforced by `smoke-cross-cli-behavior.sh`):
23
+
24
+ | # | Pattern | Type | Action |
25
+ |---|---------|------|--------|
26
+ | 1 | `#N` or bare `316` | github-issue-number | Fetch via gh after project selection |
27
+ | 2 | `https://github.com/.../issues/N` | github-issue-url | Extract org/repo/N, fetch via gh |
28
+ | 3 | `https://{JIRA_HOST}/browse/{JIRA_KEY}-XXXXX` | jira-url | Extract ID, fetch via Jira API |
29
+ | 4 | `{JIRA_KEY}-XXXXX` (bare) | jira-id | Fetch via Jira API |
30
+ | 5 | Anything else | free-text | No external fetch |
31
+
32
+ All types enter the same Phase 0 flow.
33
+
34
+ ## Routing rows
35
+
36
+ | Input Pattern | Action |
37
+ |---------------|--------|
38
+ | `"PROJ-XXX" "branch"` | my-app only: Jira ID + branch name, auto-assigned incremental ID |
39
+ | `"https://github.com/..."` | figma only: parse the issue, extract Jira from title/body, auto-create the branch |
40
+ | `status` | Show all tasks with ID, phase, status |
41
+ | `log [id]` | Show agent-log.md for the task (latest if no id) |
42
+ | `resume [id]` | Resume a paused/failed task from the last successful phase |
43
+ | `kill [id]` | Stop the task, delete worktree + branch + logs; asks to confirm first |
44
+ | `clear-logs` | Superseded: redirect only |
45
+ | `purge` | Delete ALL worktrees, branches, logs, state, counter: full reset |
46
+ | `review` | Skip phases 0-3, review the current diff only |
47
+ | `autopilot` flag | Add to any pipeline command: skip user confirmations except destructive ops |
48
+ | No args / `help` | Usage guide |
49
+
50
+ Every task gets an auto-incremented short ID (`#1`, `#2`), stored in `agent-state.json`.
51
+
52
+ ## Autopilot matrix
53
+
54
+ `multi-agent "PROJ-12345" "feature/PROJ-12345-desc" autopilot` skips interactive confirmations and runs end-to-end.
55
+
56
+ | Phase | Normal | Autopilot |
57
+ |-------|--------|-----------|
58
+ | Phase 1 (Plan Approval Gate) | Clarification (max 2 rounds) + approval loop; the user replies `onayla` / `iptal` / free-text | Gate skip: log the plan, go straight to Phase 2 |
59
+ | Phase 3 (User test) | "Want to test it?" then wait | Skip, straight to Phase 4 |
60
+ | Phase 4 (Commit) | "Want to commit?" then wait | Automatic commit + push |
61
+ | Phase 4 (PR) | "Want to open a PR?" then wait | Automatically create the PR |
62
+
63
+ `"autopilot": true` is added to `agent-state.json` and survives a resume.
64
+
65
+ ## Persona models
66
+
67
+ | Persona | `preferredModel` |
68
+ |---|---|
69
+ | `explorer` | `sonnet` |
70
+ | `code-reviewer` | `fable` (Reviewer 1; Phase 3 sets Reviewer 2 `opus`, Reviewer 3 `sonnet`) |
71
+ | `security-auditor` | `opus` |
72
+ | `ios-architect` / `android-architect` / `backend-architect` | `fable` |
73
+
74
+ Each persona file carries its own `modelRationale`. Observability: emit a `phase.agent.dispatch` OTel span with `{persona, resolved_model, override_source}` when `MULTI_AGENT_OTEL_SPANS=1` (see `phase-tracker.sh`).
75
+
76
+ ## Phase summaries
77
+
78
+ **Phase 1: Plan.** Two halves, one approval gate. 1a Analysis (`explorer`, Sonnet): parallel explore agents scan related files, patterns and impact areas, then log `Phase 1: Plan (analysis) - {N} files identified`. 1b Planning (Fable): task breakdown into todos with dependencies, `ios-architect` review for structural changes, an approach per todo, then the Plan Approval Gate (`phases/phase-1-plan.md` Step 5). 5a clarification runs only when the description is ambiguous (vague acceptance, UI task without Figma, API task without an endpoint contract, `ambiguityScore >= 2`, parent-story scope drift), max 2 rounds, then a "best-effort" banner. 5b approval loop: `onayla` / `iptal` / free-text edit; an edit makes Fable revise and re-render, no iteration cap. Persist `clarificationRounds`, `clarificationQuestions`, `clarificationAnswers`, `planIterations`, `planApprovedAt`, `planEditRequests` to `state.phases["1"]`.
79
+
80
+ **Phase 2: Dev (Sonnet).** Per todo in dependency order: mark `in_progress`, TDD (failing test, verify RED, minimal code, verify GREEN, refactor), build via a task agent, on failure fix and rebuild (max 3, `retryCount` in `agent-state.json`), mark `done`, log `Phase 2: {todo-id} - Test ok, Build ok`.
81
+
82
+ **Phase 3: Review (parallel + triage).** Step 0 diff risk scoring is advisory: `node $HOME/.claude/scripts/diff-risk-score.mjs --base "$BASE_BRANCH" --top 5`, injected as `${PRIORITY_FILES}`; off when `prefs.global.diffRiskAdvisory = false`. Reviewers by host: Claude Code runs `claude-fable-5-1` (security + architecture), `claude-opus-5-5` (edge cases), `claude-sonnet-5-5` (quality); Copilot CLI runs `gpt-5.4`, `claude-opus-4.7`, `claude-sonnet-4.6` (no Fable). Triage is one top-tier pass (`claude-fable-5-1` on Claude Code, `claude-opus-4.7` on Copilot CLI). Blocking findings go back to Phase 2 (max 3 iterations), important ones are fixed and re-reviewed, suggestions applied when reasonable.
83
+
84
+ **Phase 4: Commit & PR.** Per-project steps and the GitHub issue body update: `orchestrator/phase-4-5-projects.md`.
85
+
86
+ **Phase 5: Report.** Finalize `agent-log.md` with: timeline table (phase, agent, model, duration, status, detail), agent activity report, token estimate, per-phase time distribution, review iterations, files changed (`git diff --stat`), review consensus, and test scenarios in Turkish for Jira (precondition, steps, expected result). Then print a compact terminal summary: task id and status, total time, agent calls, files changed, commit and PR, the wiki page when one was pushed, and the path to the full report under `~/.claude/logs/multi-agent/{project}/{task-id}/agent-log.md`. Log `Phase 5: Report complete`. The wiki + Figma screenshot step runs only for a component implementation with a GitHub issue: `orchestrator/phase-4-5-projects.md`.
87
+
88
+ **Localization scope.** Phase labels are English on every host. Reviewer-count qualifiers such as `(parallel + triage)` stay English. Out of scope for localization (always English, per `prefs.schema.json`): reviewer and triage system prompts, commit messages, PR titles and bodies, Jira comments, wiki content and log payloads inside `agent-log.md`.
@@ -2,6 +2,7 @@
2
2
 
3
3
  <!-- toc -->
4
4
  - [Canonical invocation](#canonical-invocation)
5
+ - [Routing and loading tables](#routing-and-loading-tables)
5
6
  - [Routing detail](#routing-detail)
6
7
  - [Agent definitions](#agent-definitions)
7
8
  - [jira Command](#jira-command)
@@ -12,7 +13,7 @@
12
13
  - [Global Paths](#global-paths)
13
14
  <!-- /toc -->
14
15
 
15
- > Loaded by `commands/multi-agent/SKILL.md` (the `/multi-agent` dispatcher). The SKILL keeps the routing tables, the loading table and the rules; this file carries the per-CLI invocation table, the agent definitions, the `jira` / `issue` / Direct-ID step lists, the Interactive Launcher prompts, the status table and the global paths. Read the matching section before routing one of those inputs.
16
+ > Loaded by `commands/multi-agent/SKILL.md` (the `/multi-agent` dispatcher). The SKILL keeps a compact routing table and the rules; this file carries the full routing and loading tables, the per-CLI invocation table, the agent definitions, the `jira` / `issue` / Direct-ID step lists, the Interactive Launcher prompts, the status table and the global paths. Read the matching section before routing one of those inputs.
16
17
 
17
18
  ## Canonical invocation
18
19
 
@@ -33,6 +34,100 @@ The space-form (`multi-agent <subcommand>`) is still routed by this dispatcher
33
34
  for backward compatibility, but the colon (Claude) / dash (Copilot) forms are
34
35
  the canonical invocations and the only forms surfaced in autocomplete.
35
36
 
37
+ ## Routing and loading tables
38
+
39
+ The full tables behind the dispatcher's compact routing table. Route first, then `Read` only the file the routed action needs.
40
+
41
+ ### Routing
42
+
43
+ | Input Pattern | Action |
44
+ |---------------|--------|
45
+ | `#N`, `316` | GitHub Issue # - parse, select project, start pipeline |
46
+ | `https://github.com/.../issues/N` | GitHub Issue URL - fetch, auto-detect or ask project |
47
+ | `https://{JIRA_HOST}/browse/{JIRA_KEY}-XXXXX` | Jira URL - fetch, select project, start pipeline |
48
+ | `{JIRA_KEY}-XXXXX` | Jira ID - fetch, select project, start pipeline |
49
+ | Free-text | Bug/feature description - select project, start pipeline |
50
+ | `jira` | 4-step picker (hesap → proje → issue → dev-context) - `commands/multi-agent/jira/SKILL.md` delegate |
51
+ | `issue` | 4-step picker (hesap → repo → issue → dev-context) - `commands/multi-agent/issue/SKILL.md` delegate |
52
+ | `status` | List all tasks (scan `$HOME/.claude/logs/multi-agent/`) |
53
+ | `log [id]` | Show task log |
54
+ | `resume [id]` | Resume paused task |
55
+ | `kill [id]` | Delete worktree (logs preserved). Confirm first |
56
+ | `clear-logs` | **Superseded - redirect, do not run.** Say so and route to `prune-logs`. It targeted `.worktrees/PROJ-*/agent-log.md`, a path nothing has written to since logs moved to `$HOME/.claude/logs/multi-agent/{project}/{task-id}/`; running it would report deleting nothing as success. |
57
+ | `purge` | Worktree + logs + counter - full reset (double confirm) |
58
+ | `review [#N\|repo#N\|PR-url\|branch]` | Parallel review of a PR or branch diff; with no input (interactive) lists open GitHub + Bitbucket PRs to multi-select. Posts per-finding inline comments + approve/needs-work on PRs. No worktree. |
59
+ | `review-jira [KEY\|url]` | Grade a Jira issue's readiness for the pipeline (scope / AC / repro / design / API / stack), then post the gaps as a Jira comment. Read-only on code. |
60
+ | `review-issue [#N\|repo#N\|url]` | Grade a GitHub issue's readiness for the pipeline, then post the gaps as an issue comment. Read-only on code. |
61
+ | `analysis ["<feature>"]` | Standalone feature-spec analysis; stops after the document. No worktree, no commits, no dev chain. |
62
+ | `complaint-analysis ["<run-name>"] [--file <path>] [<jira-id\|confluence-url> ...]` | Customer-complaint triage to a report and a verdict; read-only on code. No worktree, commits or dev chain. |
63
+ | `build-optimize` | iOS-only Xcode build performance wrapper; recommend-first plan. Fail-fast on non-iOS stacks. |
64
+ | `channels [PR-url\|#N\|Jira-url\|Jira-id] [--channels pr,jira,confluence,wiki] [--content normal,test,auto-diff,note] [--message "..."]` | Post the task report to multi-select channels with multi-select content; Phase 5 delegates here, also post-hoc. No worktree. |
65
+ | `create-jira ["desc"] [figma-url] [swagger-url]` | Create a standards-compliant Jira issue (Task / Bug / Story) with full draft preview + explicit approval before create. No worktree, no commits. |
66
+ | `test` or `test [args]` | UI Bug Hunter - screenshot + tap + analyze on booted simulator via MCP (read `$HOME/.claude/commands/sim-test.md`). `/multi-agent:test` also resolves here via the `commands/multi-agent/test/SKILL.md` delegate. |
67
+ | `test-dark-mode` · `test-accessibility` · `test-dynamic-type` · `test-screenshots [locale]` | Fixed-scenario aliases for the four parameterless / single-parameter `test` scenarios, so the tag autocompletes instead of having to be quoted. Each delegates to the same `sim-test.md` with its scenario pinned; behaviour is identical to the quoted form, which is not deprecated. |
68
+ | `store-ready [repo] [--archive=\|--ipa=\|--aab=\|--apk=] [--skip-sweep]` | Pre-submission store readiness for a built package, iOS and Android, local-only. Validates only, never ships a build. |
69
+ | `manual-test [#id]` | Phase 5 standalone Manual Test - checks out the task branch, prints Xcode / SourceTree hints, waits for user verdict (`ok` / `fix: ...`). |
70
+ | `design-check [scope]` | Mock-mode vs Figma design audit (iOS / Android, local-only) with a coverage gate. No commits, no CI. |
71
+ | `stack [ios\|android\|backend\|mobile\|all]` | Swap skills for next conversation. No arg = show current stack. |
72
+ | `language [en\|tr]` | Show or set the assistant `outputLanguage` (explanations and chat replies). `promptLanguage` is locked to `en` and is not toggleable. No arg = show current `outputLanguage`. With `en` or `tr` = set and persist `outputLanguage`. Commits and branch names stay English; PR, Jira and wiki bodies follow it. |
73
+ | `setup` | Keychain token + Git Identity onboarding |
74
+ | `autopilot` | Skip user confirmations, auto commit/PR |
75
+ | No args / `help` | Show usage guide |
76
+
77
+ ### Loading
78
+
79
+ `commands/multi-agent/{cmd}/SKILL.md` files are invocable actions (each its own `/multi-agent:<name>` slash command); `$HOME/.claude/multi-agent-refs/**` are internal references read by the dispatcher, never invoked directly, and live outside `commands/` so they never appear in slash-command autocomplete.
80
+
81
+ | Route | File to Read |
82
+ |-------|-------------|
83
+ | Pipeline task (any input type) | `$HOME/.claude/multi-agent-refs/phases.md` + `$HOME/.claude/multi-agent-refs/_account-picker.md` + `_repo-picker.md` + `_dev-context.md` |
84
+ | `jira` | `$HOME/.claude/commands/multi-agent/jira/SKILL.md` (4-step picker) |
85
+ | `issue` | `$HOME/.claude/commands/multi-agent/issue/SKILL.md` (4-step picker) |
86
+ | Direct ID (`{JIRA_KEY}-N`, `#N`, gh URL, repo#N, free-text) | `$HOME/.claude/multi-agent-refs/_input-parser.md` → `_account-picker.md` → `lib/issue-fetcher.sh` (maturity check) → `_dev-context.md` |
87
+ | `setup` | `$HOME/.claude/commands/multi-agent/setup/SKILL.md` |
88
+ | `help` | `$HOME/.claude/commands/multi-agent/help/SKILL.md` |
89
+ | `channels` | `$HOME/.claude/commands/multi-agent/channels/SKILL.md` |
90
+ | `sync` | `$HOME/.claude/commands/multi-agent/sync/SKILL.md` |
91
+ | `clear-logs` | Handled inline - redirect to `prune-logs`, see the routing note |
92
+ | `review` | `$HOME/.claude/commands/multi-agent/review/SKILL.md` |
93
+ | `review-jira` | `$HOME/.claude/commands/multi-agent/review-jira/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/readiness-review.md`) |
94
+ | `review-issue` | `$HOME/.claude/commands/multi-agent/review-issue/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/readiness-review.md`) |
95
+ | `analysis` | `$HOME/.claude/commands/multi-agent/analysis/SKILL.md` |
96
+ | `complaint-analysis` | `$HOME/.claude/commands/multi-agent/complaint-analysis/SKILL.md` |
97
+ | `build-optimize` | `$HOME/.claude/commands/multi-agent/build-optimize/SKILL.md` |
98
+ | `create-jira` | `$HOME/.claude/commands/multi-agent/create-jira/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/generate-issue.md`) |
99
+ | `stack` | `$HOME/.claude/commands/multi-agent/stack/SKILL.md` |
100
+ | `language` | Handled inline - set/show outputLanguage in preferences |
101
+ | SwiftUI component task (iOS) | `$HOME/.claude/multi-agent-refs/swiftui-guide.md` |
102
+ | Jetpack Compose task (Android) | `$HOME/.claude/multi-agent-refs/android-guide.md` |
103
+ | Backend API task | `$HOME/.claude/multi-agent-refs/backend-guide.md` |
104
+ | Web component task | `$HOME/.claude/multi-agent-refs/web-guide.md` |
105
+ | Phase 1 or Phase 5 (knowledge) | `$HOME/.claude/multi-agent-refs/knowledge.md` |
106
+ | Token lookup needed | `$HOME/.claude/multi-agent-refs/keychain.md` |
107
+ | Audit tools (Phase 3) | `$HOME/.claude/multi-agent-refs/audit-guide.md` |
108
+ | `test` | `$HOME/.claude/commands/sim-test.md` (colon-form `/multi-agent:test` uses the delegate at `commands/multi-agent/test/SKILL.md`) |
109
+ | `test-dark-mode` · `test-accessibility` · `test-dynamic-type` · `test-screenshots` | `$HOME/.claude/commands/sim-test.md`, scenario pinned by the command name (delegates at `commands/multi-agent/test-*/SKILL.md`) |
110
+ | `manual-test` | `$HOME/.claude/commands/multi-agent/manual-test/SKILL.md` |
111
+ | `design-check` | `$HOME/.claude/commands/multi-agent/design-check/SKILL.md` |
112
+
113
+ **Modifier flag** (`autopilot`) and **ops** (`status`, `log`, `resume`, `kill`, `purge`, `review`) are parsed inline by this file - no separate spec files, they compose with the pipeline or do one-shot work.
114
+
115
+ Guide selection (auto, from the Phase 1 detected stack):
116
+ - iOS detected -> load `swiftui-guide.md`
117
+ - Android detected -> load `android-guide.md`
118
+ - Python/Node.js/Go detected -> load `backend-guide.md`
119
+ - React/Vue/Next.js detected -> load `web-guide.md`
120
+ - Multiple stacks -> load all relevant guides
121
+
122
+ ### Lib scripts
123
+
124
+ Under `~/.claude/lib/`:
125
+ - `account-resolver.sh` - keychain account inventory
126
+ - `issue-fetcher.sh` - Jira/GitHub fetch + maturity scoring
127
+ - `repo-cache.sh` - TTL-cached repo list
128
+ - `submodule-detector.sh` - `.gitmodules` parse → dev-context suggestions
129
+ - `multi-repo-pipeline.sh` - worktree/branch/commit/PR orchestration
130
+
36
131
  ## Routing detail
37
132
 
38
133
  The full action descriptions for the routing rows the dispatcher keeps short.