@mmerterden/multi-agent-pipeline 19.1.3 → 19.1.4

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 +56 -7
  2. package/README.md +42 -15
  3. package/README.tr.md +38 -12
  4. package/docs/ecosystem.md +3 -4
  5. package/docs/facts.json +3 -3
  6. package/install/_common.mjs +5 -5
  7. package/install/_mcp-register.mjs +1 -1
  8. package/install/_plugin-skills.mjs +3 -4
  9. package/install/copilot.mjs +5 -5
  10. package/manifest.json +42 -42
  11. package/package.json +1 -1
  12. package/pipeline/commands/multi-agent/setup/SKILL.md +4 -4
  13. package/pipeline/commands/sim-test.md +4 -4
  14. package/pipeline/multi-agent-refs/analysis/locked.md +2 -2
  15. package/pipeline/multi-agent-refs/channels/jira.md +8 -8
  16. package/pipeline/multi-agent-refs/features/base-branch-evidence.md +2 -2
  17. package/pipeline/multi-agent-refs/features/scope-check.md +1 -1
  18. package/pipeline/multi-agent-refs/features/stack-skill-routing.md +1 -1
  19. package/pipeline/multi-agent-refs/phases/operations.md +1 -1
  20. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +3 -3
  21. package/pipeline/multi-agent-refs/rules.md +1 -1
  22. package/pipeline/scripts/autopilot-runner.mjs +6 -7
  23. package/pipeline/scripts/build-references.mjs +3 -3
  24. package/pipeline/scripts/build-stack-plugins.mjs +1 -1
  25. package/pipeline/scripts/bulk-read.sh +6 -4
  26. package/pipeline/scripts/doctor.mjs +4 -4
  27. package/pipeline/scripts/learnings-ledger.mjs +1 -1
  28. package/pipeline/scripts/match-skills.mjs +4 -4
  29. package/pipeline/scripts/memory-load.sh +3 -3
  30. package/pipeline/scripts/plan-coverage-gate.mjs +3 -3
  31. package/pipeline/scripts/run-aggregator.mjs +2 -2
  32. package/pipeline/scripts/runs-index.mjs +7 -7
  33. package/pipeline/scripts/scope-check-gate.mjs +1 -1
  34. package/pipeline/scripts/smoke-schema-validation.sh +9 -12
  35. package/pipeline/scripts/usage-report.mjs +5 -5
  36. package/pipeline/scripts/validate-analysis-doc.mjs +3 -3
  37. package/pipeline/scripts/write-state.mjs +22 -11
  38. package/pipeline/skills/.skill-manifest.json +3 -3
  39. package/pipeline/skills/shared/core/multi-agent/SKILL.md +2 -2
  40. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +4 -5
package/manifest.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "19.1.3",
4
- "commit": "ab89855c58cbddec0ea834d80efc7dfc3f630c69",
5
- "generatedAt": "2026-09-21T06:32:52.127Z",
3
+ "version": "19.1.4",
4
+ "commit": "f13a6b27715b704907240b373fd20eb54d921c3e",
5
+ "generatedAt": "2026-09-21T09:27:23.265Z",
6
6
  "algorithm": "sha256",
7
7
  "fileCount": 1057,
8
8
  "files": {
9
- "CHANGELOG.md": "a17d55e5b1f00236a491817510d60a845f6ff31a9b466dc56fed3daf19cb2deb",
9
+ "CHANGELOG.md": "d925ef34f59caeed05e44bd5f53e5ea0f64ea4cca946d3d3ff027bc1b449bdde",
10
10
  "LICENSE": "8d8c51aaf1e1538b180c69965fa038db71be86798cc3e26a143bebfefe16a43e",
11
- "README.md": "63cba0443ff6750cf979ca39093f80f414a9ffa72bdf08a196a4fb821520fb5d",
12
- "README.tr.md": "429823b93ae79e783ac91559251ff741d01b147146fffb6fb30f8a980ca157c2",
11
+ "README.md": "ec1a92a3397ce7ed2665c18636c291ded71f1dbf5d36526232cae62edbbf6f82",
12
+ "README.tr.md": "fa72bdd99b0c80c5e3f976cbd9a71e08b3784eb4ce120ef57995440db1a3cbb1",
13
13
  "SECURITY.md": "3fb38c517a8e2c6cea84c871b98a0c91ef3df17379028ba4f1686e07369e4c6e",
14
14
  "docs/FIGMA_PIPELINE.md": "24155e13690ade810d99cda6a350051f0810bc971ae341bdef561a0a46f5032a",
15
15
  "docs/adr/0001-three-model-triage.md": "79a6f1025469f607a5859add21854052d7433bc213f4aceee2e159b613eeb6a1",
@@ -29,9 +29,9 @@
29
29
  "docs/adr/README.md": "4d7ac308a1b41d84c27c9097cc0907e0eadadc4b5776814b6495535049c2d148",
30
30
  "docs/architecture.md": "6abbbf037539c9026727f4e237395962ca132f7260a35524a4820f6d6e2b8e88",
31
31
  "docs/best-practices.md": "aeaaa12d518233cb09577c1dbaee00d62cd26f9f7e0400c681fe38742d6a7ba2",
32
- "docs/ecosystem.md": "051520cefee38d34894ef563ab987be15dc47cc9172fc6692ee440a77fa1f2c0",
32
+ "docs/ecosystem.md": "68a79da4b2582e807b99c0e85cd9a175febafb2202088e003718bc5de732c5ea",
33
33
  "docs/engineering.md": "550528cd47c7d2c921729c68d0782a00ac8e77a4bdfec479f6749f9c3235d188",
34
- "docs/facts.json": "58ed4849960aee5efe4cbbb66e576db5b077468e9bcb6f936bae4cbcba6fe51d",
34
+ "docs/facts.json": "82e1e4b2069f055984064f869098eb4a9446e7e8e528c38650682d3fbecfb73f",
35
35
  "docs/features.md": "927e5e54f7b1348ce2cddecb0d11115dc5ae9db20558b12d67932d38b26dad3f",
36
36
  "docs/performance.md": "bbf2f3922c25dcba0c1a9e69ef420e3871a729af5b35009a49b48a5d3c5cd151",
37
37
  "docs/recovery-guide.md": "1cc014295f8c8ffba1f1c44397b657e925f1bc0e4757217d6e69e8cfb271f3cb",
@@ -41,24 +41,24 @@
41
41
  "install.js": "b2d71a926a62c96c994c76735f40dff068c429b5a368005fb62e60972da41c2a",
42
42
  "install/_codex-agents.mjs": "ef9364c6b7001f083be24f8bf3ef1658adadc50195c64e46ffdee388a6419fe9",
43
43
  "install/_codex-instructions.mjs": "add75ffc0e8d8db0e3bf275b46017a897a4cadb83dc66c7d3affd73bcead20f8",
44
- "install/_common.mjs": "bd6ebdc808882d8fd896a2135d645bbaf06b9cf26c355d30e009b43e2476c4b0",
44
+ "install/_common.mjs": "fab97294852c79c30dff355f34fefb6d7d859483d03505b586cef84141479c88",
45
45
  "install/_copilot-instructions.mjs": "73e4b82b2af0f3e1669f772fa0788dac6b540c131e56d5fe38dcf29be85cc019",
46
46
  "install/_dev-only-files.mjs": "8f8327a19fd03f8aaf7c5f739391ea4c97d47a59bb936e9b8cb485a3e59dbfe6",
47
47
  "install/_managed-block.mjs": "7328728a7c82744b66218034389fc295d1384311daa5415408afa94be14303d3",
48
- "install/_mcp-register.mjs": "a3465132cf841a4ab36dc108d648e2957bd7ebef10dea6319b5509200a53b34b",
48
+ "install/_mcp-register.mjs": "56a785984afbba54aedc3677652ca4ee990d98d45b6599a3937cb656cad53b46",
49
49
  "install/_platform-filter.mjs": "8733d7d151e26a89aec5b486e0ac5b5849c0d7cea80d46f28a9a1a61a77c7032",
50
- "install/_plugin-skills.mjs": "c329c2885cd2bb5ddbdedba1c7b9b5b86e254d388e44a466f4df3b07f62ce433",
50
+ "install/_plugin-skills.mjs": "bf287053133f940df0ca434cfc5ee522fd27e80dc7f7e60ccc963ecaabee047a",
51
51
  "install/_telemetry.mjs": "5433d753f909beed2c8789272bba05e245482c472f83d3444f58000c4c9a634b",
52
52
  "install/_unattended-profile.mjs": "56aa49f3c9b885b4d0bc48597fc2d6c388d5d47767dd4d9d5aa820d7f8111267",
53
53
  "install/claude.mjs": "056656e4437803ac7b0538921f3d43452e456d88ebd736d94e5d88cc5e2826b5",
54
54
  "install/codex.mjs": "3b41d51552d6f6fd7e62e3fa232f7ef63fae4a0ef53c4b54f9bf20be441c3d1e",
55
- "install/copilot.mjs": "27cd2d686b6d7b14f62833af8a1b76d90f68fbd5d20abeb098f22ab9ce1c4d63",
55
+ "install/copilot.mjs": "6a494e76e46fd36f03fbc0338ed598f0f1032fe63feef7b7c9b392c0f9fbe2c0",
56
56
  "install/index.mjs": "c78d095731de0c281895d0b50dfab05b612802e1d4e05342bc561cd9155513e3",
57
57
  "install/templates/claude-hooks.json": "eec51881826222694e79cc70437bbeaf996b49f37ce4c2cd065cce9a3591d1d0",
58
58
  "install/templates/codex-instructions.md": "dd78eb9553e725c039380457245793a5fc748ae37ebf5ccfe11be5ed5b9a4025",
59
59
  "install/templates/copilot-instructions.md": "18161f2a8c995044aeae69d47200795b8babcf8b80d5e09e8d91dcfb7c841ce2",
60
60
  "install/templates/multi-agent-autopilot.plist.template": "d79de637b17330e720be43b96bfcdd51797bd9ce219eafaa3dd5a8ece96e4814",
61
- "package.json": "0fab4746bdc36850af7a7e5900578ea934202f13e8bbe71831ab619a4e28c9a0",
61
+ "package.json": "64e8ac95077d45cace1f6191f8e56375e3b4dc37260392d71668b37d3ab3564c",
62
62
  "pipeline/agents/android-architect.md": "baa5787b3a4c800dd065e27e05f44462927c9938c8bb676c80f18cb10e2b12c4",
63
63
  "pipeline/agents/backend-architect.md": "a83bd7f8b0a5289a1ef9a9b59d60fc759b8db260606ff2df427cf5ade5db8530",
64
64
  "pipeline/agents/bulk-reader.md": "0b9d415fab2c449d43329d759049af9401255d06b32d57a38c95e684837b19bf",
@@ -119,7 +119,7 @@
119
119
  "pipeline/commands/multi-agent/save/SKILL.md": "3b4414373f36b487317ebb661119b7caf3d1d0ac775035fdbce826cfc8e969da",
120
120
  "pipeline/commands/multi-agent/scan/SKILL.md": "5d326f6929f43164eec5da44ccc44ef6956255b180a09798fdebd99c0fe4ebd0",
121
121
  "pipeline/commands/multi-agent/search/SKILL.md": "2ed15dc7d71c7044e0410e8cff192cb795a64d8110fa615903288a7de7eb8565",
122
- "pipeline/commands/multi-agent/setup/SKILL.md": "c79f21eb4fc72b88c17111ae26fd4bd73d09c07a19fb09ddba8ba870f1ad8958",
122
+ "pipeline/commands/multi-agent/setup/SKILL.md": "0a77ce3247a7112cb64fe87300a42f5f3e58ee01f3c1cd190622fb32b88e36a9",
123
123
  "pipeline/commands/multi-agent/stack/SKILL.md": "70d7e038d47dc0dcde77995f5a1b5ce74e86fabf3127c2d580cccff3eb097c6b",
124
124
  "pipeline/commands/multi-agent/status/SKILL.md": "2e682a88c7e0d0cfb5a98cb6fb039c156ae79edf3e020bc158569a7541ee44b4",
125
125
  "pipeline/commands/multi-agent/steer/SKILL.md": "891628bc4b215ee68fd4b4507ee2e780a3d38f1a872f6778fcd12ba3d3207a74",
@@ -134,7 +134,7 @@
134
134
  "pipeline/commands/multi-agent/uninstall/SKILL.md": "ed5cdb8dc8c47c750e6374bc2add49b2305616f1131386f3377008edacf4fe2f",
135
135
  "pipeline/commands/multi-agent/update/SKILL.md": "d938dc180878118abea1213482effe30229860b473e9a947d040576f584ae874",
136
136
  "pipeline/commands/security-review.md": "2485ac912eebc61f6470075bd7d9c8bf759a22384514fcc3997a9a674a4766b3",
137
- "pipeline/commands/sim-test.md": "227251aa4c321ba1bf6efaf58833bdc5acaeb63b0b1aae4c44fc447d1fa30b64",
137
+ "pipeline/commands/sim-test.md": "17fcefc2030f0ab24b3ee59807dfc11264b34d7455138081996859b1fee8664e",
138
138
  "pipeline/lib/_jira-auth.sh": "534080c9f53666f7aadd6fdd998ff98e61cb54c53739006f07eecb6b86d6e210",
139
139
  "pipeline/lib/account-resolver.sh": "61e99f28699dcd8f12d66072ea55165ea7d78211bf2ee39bc5d68a96f7d4d491",
140
140
  "pipeline/lib/analysis-jira-write.sh": "477e7b4e2aaaa8289ab0cdb315f04c3a9b22beb8f075bbb73b6fa174d6679197",
@@ -190,7 +190,7 @@
190
190
  "pipeline/multi-agent-refs/analysis-template.md": "747d272b70c52c6ff8b321eb24c6553d93c144d872f431d7bfcbfe7d6619d2d4",
191
191
  "pipeline/multi-agent-refs/analysis/evidence.md": "0550bc0bc9865dcd4a879cb5bf2fad1869f58ea2fa60c906577e421a485e3b26",
192
192
  "pipeline/multi-agent-refs/analysis/intake.md": "9b92880a57218cf5e552547d4ddd9ee797603573ecd16617b1fc60b5e03c3564",
193
- "pipeline/multi-agent-refs/analysis/locked.md": "d82c7cc3523eba064eb4e5316101bd39cf1be4704dd785fe552c64d6fa4e7e0d",
193
+ "pipeline/multi-agent-refs/analysis/locked.md": "bd6f199331dcb204e25fddbc0b052d9589b48ff370dd23f4b9fd437d48971946",
194
194
  "pipeline/multi-agent-refs/analysis/redesign.md": "ed0b1c6c4157b0063debecad3342a48c83f3b015160cb6f37fbc429167ad18c3",
195
195
  "pipeline/multi-agent-refs/analysis/render.md": "19ba156f82d8e42657256657a42b998586b42117e91570f434c230fcccab5a16",
196
196
  "pipeline/multi-agent-refs/analysis/resolve.md": "c38a465f15c6140e4a4d42cd0b312c32e306ec7b36df385182da1a6a045dee8e",
@@ -201,7 +201,7 @@
201
201
  "pipeline/multi-agent-refs/backend-guide.md": "b8809b06f7feea6a13f9b433a2b9828e39c81ef3ab59edd23c61cf183d80f7b0",
202
202
  "pipeline/multi-agent-refs/channels/confluence.md": "1e1d731e9f57efdfe77efab3281d74b7f16e28d3d49699da516225492c551ffc",
203
203
  "pipeline/multi-agent-refs/channels/issue-comment.md": "19df6d8d6c23b5ea88687250dc10dd5fa35ba2b2e279efcb000e83622a0664f6",
204
- "pipeline/multi-agent-refs/channels/jira.md": "72265b54da1e2cfa23ab7bc5508feaeffe2cfbce5915793642506962929f1988",
204
+ "pipeline/multi-agent-refs/channels/jira.md": "8d1901758c890a90ac171ecf36566370f6bebdceb48e1387cd1bf11223ea6c8a",
205
205
  "pipeline/multi-agent-refs/channels/pr-review-actions.md": "21bf53796ae4ecd59769f9944ad8c7d1cd3a5915b0956be99ec875b847b33c00",
206
206
  "pipeline/multi-agent-refs/channels/pr.md": "a6d5244a3bf5cf5f15d961a07972c9917db98c436f1a9cfdfe6c3c3dba7d5b69",
207
207
  "pipeline/multi-agent-refs/channels/wiki.md": "ba52c5efaedc067dd8456fe9076af694d7e3dae9bda621f1df65c9159cd422da",
@@ -212,7 +212,7 @@
212
212
  "pipeline/multi-agent-refs/cross-cli-contract.md": "6cffb12e1aff14c50b01ba5597bb72a52cc207eae83ef285f76d4f5654e97179",
213
213
  "pipeline/multi-agent-refs/features/analysis-jira.md": "5542735d39a96d288cf99d1dfe18ec30270d2777a260c80d74ab6e5121edc9fb",
214
214
  "pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md": "1995fb86bee28600c727cd6c94f39da33efd67f2bce3092705b354f4b2cd3aad",
215
- "pipeline/multi-agent-refs/features/base-branch-evidence.md": "d9e5db990aa2c124a3898151689d244d91746a22f711a2bc664098ac3f16930f",
215
+ "pipeline/multi-agent-refs/features/base-branch-evidence.md": "7b875d61cf11ecc9119b440037be0e849931b0c00f4c102640590f7e59e1646b",
216
216
  "pipeline/multi-agent-refs/features/code-graph.md": "dcdeb8f87da55e43d2bef10291e8a8b93ec3f880d995e8346809baa9d3a3011f",
217
217
  "pipeline/multi-agent-refs/features/code-intelligence.md": "f115b9e983d8617e64208326a3c858b59b6c5e960caaf35f97ac13b16bfc4c59",
218
218
  "pipeline/multi-agent-refs/features/cost-analysis.md": "42f1b90b41ef454f29ccfd3f93c959920f0e74cbca65e140695e9a30d6d90b87",
@@ -230,10 +230,10 @@
230
230
  "pipeline/multi-agent-refs/features/review-delta.md": "4fd2c3979c7a42b23350424294e96de43967d51ae86757369cdf7229e648636a",
231
231
  "pipeline/multi-agent-refs/features/review-file-set.md": "a751888bce82a8e6970c9abe7f354c5c0704956e5278aeb091b893be0df5c1ef",
232
232
  "pipeline/multi-agent-refs/features/review-multi-repo.md": "b0c45a9d67ccb85e7e245604830e40cce6f94d72e026dae980ea61dfe9fd6fc0",
233
- "pipeline/multi-agent-refs/features/scope-check.md": "06bba954280403d17c975c7cf0490cc7fc2f9dc1441def3c0c4d48ac6a02ee6f",
233
+ "pipeline/multi-agent-refs/features/scope-check.md": "4f8844de8137256df4b83a5c54852353df1bbf7387c3f76f42e09058a04153b7",
234
234
  "pipeline/multi-agent-refs/features/shadow-git.md": "d020c7b99a993eb11398d08e0518207b990b3ec3807fbcf0926c6cb304777ce9",
235
235
  "pipeline/multi-agent-refs/features/skill-conformance.md": "e62c30cd36716f48a836a1372cfbd11e61b7dbc50be01ce0370c3acf5fc01427",
236
- "pipeline/multi-agent-refs/features/stack-skill-routing.md": "e71e5492a00ea07cc9e533f0b72c0423e166c62e20c1bf400ece4527b21a15f9",
236
+ "pipeline/multi-agent-refs/features/stack-skill-routing.md": "8d45fb7331509411617d2bf5c42e752eaaa7ada24dcf38140f2710b28ab4fc0f",
237
237
  "pipeline/multi-agent-refs/features/url-enrichment.md": "64af9f058ac5e7fbc662acb8839adf0d4cd67ee20db91e8f9a3b7a514bdb3eed",
238
238
  "pipeline/multi-agent-refs/features/usage-reporting.md": "c65dcdac7ff4ec54578cdfce3b84e818eb122a40fced9bc10a5cdb5650e9e40d",
239
239
  "pipeline/multi-agent-refs/features/verify-by-test.md": "6be89c7020ebdce6903e1f72cb74adeb5c4eb93a5f0e18c0b1b7c0cae619a42a",
@@ -250,9 +250,9 @@
250
250
  "pipeline/multi-agent-refs/phases.md": "0f473c60622752eec60631f1c58232b345f938c4018226a012650f706921bbd7",
251
251
  "pipeline/multi-agent-refs/phases/log-format.md": "e03a93239ee0f06048c1f22cacfc76d485b53285cbcebd4e2eb034a67f017b22",
252
252
  "pipeline/multi-agent-refs/phases/modes.md": "1a735f9bbf6fa34129cbb9374113481ac39d13192e6cfece94895a2989e6c1f7",
253
- "pipeline/multi-agent-refs/phases/operations.md": "78ffd2a95ad0d1bb34951e2450888410586ddb366246fe0603c94852d2ef7b81",
253
+ "pipeline/multi-agent-refs/phases/operations.md": "dc1628b2974584c0d9b14ff4ab27f9bdfa712621299c66efea92dcd0a4a53a5f",
254
254
  "pipeline/multi-agent-refs/phases/phase-0-init.md": "335abcec15efc4da8b793fd4c311e39309000db0b3c6707e2e99ed5a876dc3fe",
255
- "pipeline/multi-agent-refs/phases/phase-1-plan.md": "e624ee4a8bb6ca9fd1da3b45c10a90ea7a2aa7f29883c58d7a0a482025c9197a",
255
+ "pipeline/multi-agent-refs/phases/phase-1-plan.md": "b3044205f1607732c3810153b0a269d87148278073fbf17704f35867f52c195c",
256
256
  "pipeline/multi-agent-refs/phases/phase-2-dev.md": "43422b3b924b3083c44b811630286dc04e537fbfbc90a2a7bbefde1943d8cd78",
257
257
  "pipeline/multi-agent-refs/phases/phase-3-review.md": "05572e7fbde68702c12721a19421b324d914bd45240e719a848f0a7d4f3a0214",
258
258
  "pipeline/multi-agent-refs/phases/phase-4-commit.md": "da5ec29cefe75322dd474697f3f1c3e676b3981d2bdca66f04d0cb9f95db879f",
@@ -264,7 +264,7 @@
264
264
  "pipeline/multi-agent-refs/readiness-review.md": "cdaea8291ed085ab938ac6e2a5b611d6ed4792c219e785ef925bf281a12ec5f6",
265
265
  "pipeline/multi-agent-refs/refactor/observations.md": "7a63a7043bf1c42a78296ab082b1cace67fbcdf0078fec736fffd9af3147b6ce",
266
266
  "pipeline/multi-agent-refs/refactor/toolkit-research.md": "1ef7f36345c5a7d2f6bb8529ef39e9e00865c6ca851aec942891bc2f8a57ea2b",
267
- "pipeline/multi-agent-refs/rules.md": "d6cf4464ca19979b67337bb01ea1fe6062edadc9f56696a2b6b252431b207df5",
267
+ "pipeline/multi-agent-refs/rules.md": "a5fd1ba3628395e785b37f85aa4f09fd47c860838f6388f84e9016e02c7ceade",
268
268
  "pipeline/multi-agent-refs/setup/app-store-connect.md": "6208a8125212e3ef44faf61236c5dd8ec3e8f71817fa477e8cd92415906a0759",
269
269
  "pipeline/multi-agent-refs/setup/firebase.md": "a82031c67993762303a7ecd222e2574fbbf8d65dcc6b17e051a8dd53a9e31474",
270
270
  "pipeline/multi-agent-refs/setup/repo-discovery.md": "1cee0cc448a6359c04a3b9dca6030ea69636e57b720a4a52169760ffd0559a1e",
@@ -347,13 +347,13 @@
347
347
  "pipeline/scripts/autopilot-arming.mjs": "ef51d729c03c099898bd3479763085251896b1a1e2ce5c4336bab946a10522e7",
348
348
  "pipeline/scripts/autopilot-intake.mjs": "5ccb1087039a35827c6e6ded0ab12c6a5ec8ce4ce7d52b113ab81414ae9bbad9",
349
349
  "pipeline/scripts/autopilot-menubar.swift": "e2004ddc8b2592818b90b9ae75e9d250f83f33f2d56480bd0870ffe8d3ce0180",
350
- "pipeline/scripts/autopilot-runner.mjs": "f37e1ecf5075dc4329c520226c56191f663c03e999662e246abf2ae78eac3fa2",
350
+ "pipeline/scripts/autopilot-runner.mjs": "818d11701abea6bf12c13b015a0bf669d724533d522378e931b599f0277e12ba",
351
351
  "pipeline/scripts/autopilot-status.sh": "e4643f2bce5bae4634771c414c60bb9b520bb878fdabb534e83206f911579c62",
352
352
  "pipeline/scripts/base-branch-candidates.mjs": "c73a02033ed9f10c15b3aaf010432f0d4e429a75eba14731e9a64492e3fe3859",
353
- "pipeline/scripts/build-references.mjs": "bf741eff80720cf3d01f20ca13d6371e0f2e6c47f6020d2b7d3bf9af3975929b",
353
+ "pipeline/scripts/build-references.mjs": "6998a67800e7263e0940a32ee9def5e6e4667a0149f5eae9dadd6ef4b5959fd0",
354
354
  "pipeline/scripts/build-skills-index.mjs": "35b7ae8299db6a554064096ea34b476cb231b5f15bbf0dd86dd3b128399e9390",
355
- "pipeline/scripts/build-stack-plugins.mjs": "be327b0c5e91e5fd90572c4e55321396eae0406c5c469bc4eafdf410714ef8d6",
356
- "pipeline/scripts/bulk-read.sh": "1f0662e83cc4b38e733993887e94ee64b9e56452dca8313cac7d315beb98b4a3",
355
+ "pipeline/scripts/build-stack-plugins.mjs": "b95a618afba167c24ef13ee39401b28b833c454e5c517adf82bd8e99b842a410",
356
+ "pipeline/scripts/bulk-read.sh": "f5f55e229b00b849a84e6b6015e3bba1f0cb59dba5fb011857d1ceaafe7ad614",
357
357
  "pipeline/scripts/capture-evidence.sh": "2f7657786e07c17c302b76d4ea6bafe391b65be3dd891901b78019af3a7e38e1",
358
358
  "pipeline/scripts/capture-flush.sh": "8fe8e130e59bacaa9f830a80504fc1495766f0cfbd5e7d995f7c19212326b5d5",
359
359
  "pipeline/scripts/capture-resume.sh": "8fbe261310c139dd6fc9aa896a7f93953bdf44b5909607c8c16f59aad88e4296",
@@ -374,7 +374,7 @@
374
374
  "pipeline/scripts/crush-json.mjs": "303382670f8f170c8c6710202853a2de2915625813cd157185f9be4e2b27258e",
375
375
  "pipeline/scripts/diff-explain.mjs": "79137dafe5a3b90a5496611c215669f26d92ab070dc4a71f1d37ed095a49c471",
376
376
  "pipeline/scripts/diff-risk-score.mjs": "b3e8da42fea1258162e40f4eb7809074831339b7563874527f7e825f7aa795ca",
377
- "pipeline/scripts/doctor.mjs": "73edeadd54d9cca035bf94b80e7f394da6e0692d3e803da1baa37db76f44e3ce",
377
+ "pipeline/scripts/doctor.mjs": "f1f821d21b37e694c4b1c2cbb3a7f7453d014c84b403f028fcefd0b36b26ddd6",
378
378
  "pipeline/scripts/evidence-gate.mjs": "54bd99ad7ead241cdb9b6281994dac31695fd0c7cf92222249803abc1a48f78a",
379
379
  "pipeline/scripts/feedback-send.mjs": "8ec3f8fcafbe0de6c916a13a151d009cb804522537621b239a183591dddeec85",
380
380
  "pipeline/scripts/finding-fingerprint.mjs": "fa12ab10701db5d2bfff014e41d1cd4c0b2b772aee5fc69205de14b2761b0c83",
@@ -402,13 +402,13 @@
402
402
  "pipeline/scripts/keychain.py": "8af71a5b50d3cafa439e270383a3f7d83bb236348544c1ec4522ca3ec8b74df6",
403
403
  "pipeline/scripts/learn-from-transcripts.mjs": "337c4cf96728afebd3938276975b41925299485a357c0fe9cc10a22f95811945",
404
404
  "pipeline/scripts/learning-curve.mjs": "d574eec427c7f37a7a77a9ef9e2499f50dadc2215a20ae24e31654afd3497f36",
405
- "pipeline/scripts/learnings-ledger.mjs": "732a466663ccb7fe9793171de90489ce2312a78d0877483fb50e26f1deb70a68",
405
+ "pipeline/scripts/learnings-ledger.mjs": "411bf80329a1c7700e5a523d5f0a7d1d3a716514f9656703bce67e26e71e0bb0",
406
406
  "pipeline/scripts/localize-commands.mjs": "36bdc1e4f6f8d4d84150ca5d5fab3f2b54104d1f90903b36170b4dd756454a7f",
407
407
  "pipeline/scripts/log-metric.sh": "e3169936284d957537f68634e2dac4f12dcb041943f8dd69dd495325ddabd2e3",
408
408
  "pipeline/scripts/make-manifest.mjs": "db692c1bfcc0a7721ffb0b4d9ec57b74fadcaddf2821a32e222a4d4a513c425a",
409
- "pipeline/scripts/match-skills.mjs": "451734b21769474b0c40d5ec454a5ca25d319e030d760110789f54bbf386d347",
409
+ "pipeline/scripts/match-skills.mjs": "dd6c023a623ce6e9999f3eceaacd91f8d0c8ac621e3f025c8949e2203dc05bdf",
410
410
  "pipeline/scripts/maturity-followup.mjs": "e26ec6c95b6e30e3e341c4e3baa865a65b3ee4d4367d4282290deabdbfdd70f2",
411
- "pipeline/scripts/memory-load.sh": "9039a2c9441383b6750dbd56547c7ca6877f96c304427b1ab1f8de36d7148aca",
411
+ "pipeline/scripts/memory-load.sh": "c6a1976372ed033c9f3b55e757e22d05b4ef0d9774bfe185453d8847525b4a89",
412
412
  "pipeline/scripts/memory-save.sh": "8caf85d47774f3e4beaed4a78dc730cd24175545f91625c3a393f1613787766b",
413
413
  "pipeline/scripts/migrate-prefs.mjs": "3ed67c4ab9d7e1427d084d6626679113d55d02b9fe957b40c7c5485a3572566a",
414
414
  "pipeline/scripts/migrate-state.mjs": "b6fb42f56ea56ab10c00e947f013e3aecaeef1aa0d819493eedbef7cdf7d4370",
@@ -420,7 +420,7 @@
420
420
  "pipeline/scripts/phase-banner.sh": "acca704968d6263810de5804ea50a96b7aab7472ec98a7149d92b78b380d8fa0",
421
421
  "pipeline/scripts/phase-tracker.sh": "c5e1a511656a2b96100ecf21fdf9a77ea42a3e446db5b0eb004e3b7f39c70dac",
422
422
  "pipeline/scripts/phase0-exit-gate.mjs": "12eec91c89b0b859f681a0e322563935f9e730990f2f9ae864fd9ff3437bf8d9",
423
- "pipeline/scripts/plan-coverage-gate.mjs": "939f34c3eaef6867d5066c260c68ac894fd19d588cb8d2c7c030c428a9443d5f",
423
+ "pipeline/scripts/plan-coverage-gate.mjs": "ead8936fda3b7ea3a17f25b7f4ee4479ee98e78d28f9ecf11d21e3a5987284e8",
424
424
  "pipeline/scripts/pre-commit-check.sh": "b6ed51b072370759c8481d47edd140afd1360c2f442f11acd574e3689292b58c",
425
425
  "pipeline/scripts/pre-push-check.sh": "ff98e73d02aa75cfa9411c29c838241e8529e832e1421ca9c25c39aa07bcd968",
426
426
  "pipeline/scripts/probe-evidence-capability.sh": "803213d8f566d3c6bda3afc074e99c11477e076894ec340e90ed6d5f7d328a58",
@@ -435,20 +435,20 @@
435
435
  "pipeline/scripts/review-file-filter.mjs": "8b1fd9661b8d61b4282a4579ef360f952c827f90520b69ffde4770fdaeaaa05b",
436
436
  "pipeline/scripts/review-scope.mjs": "60be90f1dce0a87071695bbedf17eb4e8600b1c742b97aef8cbea41802315b93",
437
437
  "pipeline/scripts/routine-registry.mjs": "23973f361c71988a699d33bbc649c3e009a76082962cb1f22bdfcbe6efa85b04",
438
- "pipeline/scripts/run-aggregator.mjs": "33c9ffdd4fba87e7f67633da208d00835d2c70c696539533767afbdbbdad9b4b",
438
+ "pipeline/scripts/run-aggregator.mjs": "6630242733c662167bb21da7da06298ed0e724aecc135d5fd97d7ed1b9bd02f3",
439
439
  "pipeline/scripts/run-metrics.mjs": "6db53f3814a992c1f23beae7a54c84310be5af8e84dbff5a6768a91169152f02",
440
440
  "pipeline/scripts/run-ui-tests.sh": "5f1cb05ab0b387f9b89d8f34a0f60182906f0ca27cca4d41926b7217eee86bc5",
441
- "pipeline/scripts/runs-index.mjs": "37e751d079062ba3eb2af78eb6b9b23d6f90786b5d4cef3d9502129ab74339b6",
441
+ "pipeline/scripts/runs-index.mjs": "4040e2b381df3411fcf2f170c8c0ad0e2dfad66afd92367e63dc2cc5c3982a4c",
442
442
  "pipeline/scripts/scan-agent-config.sh": "41dbd995de799f599dc365ea8cfe55542c48c7387c4f94a596a1e6feec278168",
443
443
  "pipeline/scripts/scan-skills.sh": "85765b7ec15af13ade5c9ccedd88329c19b11a627e8df6dccd4839e95361dfb7",
444
- "pipeline/scripts/scope-check-gate.mjs": "4fa73110d1bd1f0534f4157fb85fa0834c31b0aedda67b95ca9c033201134710",
444
+ "pipeline/scripts/scope-check-gate.mjs": "a71b736b1283b6b99fcca23ae2159e9fb134e1e65dbfec1e66d63a5cc20582f4",
445
445
  "pipeline/scripts/scorecard-snapshot.mjs": "320fb2c811e085451d152997e6b5ee54fa0d14d374d9592ac7880443c5d02ae3",
446
446
  "pipeline/scripts/search-logs.sh": "af0ce9b75edd359cc93dd678d35b15eb9bb0f14a4b044d8e4d639f8cdb82c76f",
447
447
  "pipeline/scripts/sign-skills.sh": "779355dcf8ce383959e9a3c6093f46660a0875e83a805b7a67983acc8551cb59",
448
448
  "pipeline/scripts/skill-conformance.mjs": "4adc30335e8a194ac13b23c442559efbd8aa4113356d2094f07b5ac660a94946",
449
449
  "pipeline/scripts/skill-siblings.mjs": "b3ea1f8cc059711f1a33a575dd2d63cd16f8922952bd400064ff62e5ddc44de3",
450
450
  "pipeline/scripts/smoke-cross-cli-behavior.sh": "4f7eac25003e0c9bb483d475814f1caf6e04cd18ea1543be432df12daeffd9ec",
451
- "pipeline/scripts/smoke-schema-validation.sh": "9d23339d4d61cb779e78edd8d1e1a4b065936a15049fa9f823763f1190cce649",
451
+ "pipeline/scripts/smoke-schema-validation.sh": "37519dd51015130b01ed3f92a986794e308f758504df90cef047e54be5c9684a",
452
452
  "pipeline/scripts/test-gap-rules/android.json": "367da48a14036a102fb422206fbc877cd52548fe34a6ff8565a503df2421bce5",
453
453
  "pipeline/scripts/test-gap-rules/go.json": "1de067f47b13d539ce00d0b0cb32c050a4805c255533cb5af1b1645777125e2f",
454
454
  "pipeline/scripts/test-gap-rules/ios.json": "212da713f7274cb3ae051e1ef06f93376f7ff1806487c10b504a4a2da0cf5196",
@@ -463,8 +463,8 @@
463
463
  "pipeline/scripts/update-check.sh": "327a02306884093d2b93f395d2c297d5dc6b0c59757a740004bfafb13616fef0",
464
464
  "pipeline/scripts/update-issue-progress.sh": "7a77d9e5bd60ffad06f3cc41088e1b1d49b4dc2842f287b7f6ba6023d7bd1a52",
465
465
  "pipeline/scripts/usage-register.mjs": "72e4460b728c382afb35cc9266059e176155838bd762833d48ae19b99bc864f2",
466
- "pipeline/scripts/usage-report.mjs": "34a93273103e56a4a917d75dfbe89bb9319a99d10a4532868a35fa9321fedf7f",
467
- "pipeline/scripts/validate-analysis-doc.mjs": "377747281d530276dbd199e175185105c0814171e4782d86a015b5d6e31a8be0",
466
+ "pipeline/scripts/usage-report.mjs": "a8e1ba87872530df0a2e6cc86c18ec680dd22e38532bb92566bf44c362f13097",
467
+ "pipeline/scripts/validate-analysis-doc.mjs": "ae56b7578ef51e008a99f84eba9def3e0f1dd2bd87a3880f2083aa98b365f7a1",
468
468
  "pipeline/scripts/validate-analysis.mjs": "d2dc9ccf45f6ca2702908761939edd830d18b3b273016a4b449f26fe285d5ea1",
469
469
  "pipeline/scripts/validate-code-graph.mjs": "0ceac2f5b59f641334d54dc30bee5265361fb5fe1fc97e2f9791b546efe79941",
470
470
  "pipeline/scripts/validate-complaint-doc.mjs": "5a4de279a481a04e96aa1eebce6431e0679ae49a084dfc55541d77c61fad6ecb",
@@ -479,8 +479,8 @@
479
479
  "pipeline/scripts/verify.mjs": "2d06091b919fd3db073a0b101ed4752baf08815b974e7a713272f54cab479acb",
480
480
  "pipeline/scripts/website-deploy-commit.sh": "523482438b265ca1f1883ec5fb450e803566a1239eaccdc423e12c5426140a84",
481
481
  "pipeline/scripts/worktree-finalize.sh": "f905ba69272d32afc75b5deb8406efabfe0865bdeec2e150a521d5a1b0c51b8a",
482
- "pipeline/scripts/write-state.mjs": "1367280057d2b747da55ba62af6f884a647f2675c0bde10c39dc68c84ff7daac",
483
- "pipeline/skills/.skill-manifest.json": "fc25b360a03932f8c5575e337cc476524d15c199fb6ff8e76b23fe3668267f22",
482
+ "pipeline/scripts/write-state.mjs": "5552665f05c16edae63f038baee0390d5fa69396535d29e6b46ff87f6182786f",
483
+ "pipeline/skills/.skill-manifest.json": "b98885ef5127339b369e086bf0f4a5dc3808412b4e36f5a21964a283c1790ab6",
484
484
  "pipeline/skills/.skills-index.json": "05545f7603267576f614d6eedd0369bfcf5b8d1aadbf4c791295559f930b4bb2",
485
485
  "pipeline/skills/shared/README.md": "12692c36caaf2f4567cf21b788dad66e1bc34cae345dc8045e0569834b819414",
486
486
  "pipeline/skills/shared/core/apple-archive-compliance/SKILL.md": "6675a53441f2f3bedc82284998f402bd51fa251c7491a595e12c6c4016830337",
@@ -495,7 +495,7 @@
495
495
  "pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md": "065958fb3ff608d7d0ea36b3eef4614da442742dc69b00799cf1658848cee786",
496
496
  "pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md": "7446424d3dd480751358a0e3de917f3d22bb4f1ce6dec1b99217877c6b217e76",
497
497
  "pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md": "91b807e8a4a211d88b2f0d6cb30c2ba5cdbb0abf6983fbd3dfeb5778e94a8c1a",
498
- "pipeline/skills/shared/core/multi-agent-channels/SKILL.md": "414eead38b461c8aa95f6af3175366be905338233e6872313f5d4f59a02351af",
498
+ "pipeline/skills/shared/core/multi-agent-channels/SKILL.md": "e4f59e784d77018326e719632ef371e50e9fb9af61318a7d5bf713c386c0fd3f",
499
499
  "pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md": "2fe393b49155155e44f722d4942dec677152bfb012e2337c6521d41d87be1d69",
500
500
  "pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md": "b1890c3c60ca3af73108ed83a7fbf35338e261520e0feade5cc9d99ecb6eb878",
501
501
  "pipeline/skills/shared/core/multi-agent-design-check/SKILL.md": "28efc8b47d3d3fc052b91c7083870d2e7a3d604f65c5d476b9a21ba382e051e0",
@@ -547,7 +547,7 @@
547
547
  "pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md": "0f770a279e12a5edf73cb947ca2d128c013c78646d983c3d4bdfe722a4a990ef",
548
548
  "pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md": "b7940b4ab305ac8bcdc1798dbc0d56e96018ba6959566657878b6a583dc6183d",
549
549
  "pipeline/skills/shared/core/multi-agent-update/SKILL.md": "8a0b089ea5c0d81813dc936d8b9d012f956e6381f71e025ca8878e538a8e9303",
550
- "pipeline/skills/shared/core/multi-agent/SKILL.md": "9ab7af2ffb01f8eb0fae624ae40ea9ff2f6d69ad61544bd266b1b97f60eb4a0f",
550
+ "pipeline/skills/shared/core/multi-agent/SKILL.md": "7ea676d07cd0104cc929b825463c521aff66047c6dcdfc28e9e37ca3752107da",
551
551
  "pipeline/skills/shared/external/NOTICE-dimillian-skills.md": "402a96240476446ac284e1cf7c64ed66a7bc1119e92464bb632e737176aa494a",
552
552
  "pipeline/skills/shared/external/NOTICE-swift-ios-skills.md": "a2b150f2ad92ee4564d5bec2681d5b7943e8fddbf5eaab8fcdbece722e626a03",
553
553
  "pipeline/skills/shared/external/NOTICE-xcode-build-skills.md": "1c9c1790d3173928dae0964f653583936d0b40cb7a7fe6b732f132b104fef3ef",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "19.1.3",
3
+ "version": "19.1.4",
4
4
  "description": "6-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI and Codex CLI. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Fable triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -70,10 +70,10 @@ per-field matrix in `$HOME/.claude/multi-agent-refs/rules.md` ("Language Applica
70
70
  English. Wizard status and the post-setup summary follow `outputLanguage`. External
71
71
  payloads remain English.
72
72
 
73
- > This paragraph used to say every prompt renders in English "per the fixed
74
- > `promptLanguage`", which contradicted the canonical matrix and produced
75
- > half-English pickers on Turkish runs: `promptLanguage` governs only the button and
76
- > chip chrome, never the question a user reads.
73
+ > `promptLanguage` governs only the button and chip chrome, never the question a
74
+ > user reads. Rendering a whole prompt in English "per the fixed
75
+ > `promptLanguage`" contradicts the matrix above and produces half-English
76
+ > pickers on Turkish runs.
77
77
 
78
78
  ### Step 0.5 - Dependency check
79
79
 
@@ -188,10 +188,10 @@ file can do: the static package audit, the store's own validator, and a policy
188
188
  review against repo source. It merges both halves into one severity-grouped report
189
189
  and offers the `/multi-agent:channels` follow-up.
190
190
 
191
- The archive-compliance audit used to be duplicated here, invoking
192
- `ios_app_store_audit` with exactly the arguments the store-ready command's Gate 1
193
- uses. Two copies of one call is how the iOS path grew a second door with no Gate 2,
194
- no Gate 3 and no Android parity, so the copy is gone rather than kept in sync.
191
+ The archive-compliance audit is NOT repeated here. Invoking `ios_app_store_audit`
192
+ with the arguments the store-ready command's Gate 1 already uses would put two
193
+ copies of one call in the tree, which is how a second door opens with no Gate 2,
194
+ no Gate 3 and no Android parity behind it.
195
195
 
196
196
  **No argument (full test):**
197
197
 
@@ -46,7 +46,7 @@ behind.
46
46
  ### Full list
47
47
 
48
48
  1. **One feature per run.** Every Figma URL, Confluence page, Jira ID, and Standards source the user supplies belongs to the **same feature**. The command never asks "which feature is this for?" or "which URL is primary?". Mixed inputs covering multiple features are treated as user error: surface the conflict, stop, and ask the user to split into separate runs.
49
- 2. **Section omission rule.** Sections with zero evidence are dropped entirely; no `TBD` placeholder section. **A rendered section keeps its canonical template number**, so the set has gaps and that is correct: `1, 2, 4, 9, 13, 14, 21` is a valid rendered document. This clause used to say numbering re-flows sequentially `1..N`, which could not hold alongside Locked 30 - that decision threads ids across sections BY NUMBER (`Section 15.1 scenario`, `Section 4.4`, `Section 3/5 layout cells`), and a re-flowed document sends every one of those cross-references to the wrong section or to nothing. No emitted document ever re-flowed; the rule was the part that was wrong. What IS checked: every rendered number is a real template number, and the numbers ascend without repeating.
49
+ 2. **Section omission rule.** Sections with zero evidence are dropped entirely; no `TBD` placeholder section. **A rendered section keeps its canonical template number**, so the set has gaps and that is correct: `1, 2, 4, 9, 13, 14, 21` is a valid rendered document. Numbering does NOT re-flow sequentially `1..N`: that cannot hold alongside Locked 30, which threads ids across sections BY NUMBER (`Section 15.1 scenario`, `Section 4.4`, `Section 3/5 layout cells`), so a re-flowed document sends every one of those cross-references to the wrong section or to nothing. What IS checked: every rendered number is a real template number, and the numbers ascend without repeating.
50
50
  3. **Citation discipline.** Every quoted UI string, endpoint path, error code, or analytics event name in Sections 2-4 must carry an inline citation: `[Figma annotation <nodeId>]` for copy taken from a Dev Mode annotation, `[Figma <nodeId>]` (MCP) or `[figma-export: <project-slug>/<screen-slug>:<nodeId>]` (local source) for design strings; `file:line` for repo evidence; `Confluence:<pageId>:<heading-slug>` for spec text. **Annotation-as-copy precedence:** when the project's `figma-config` has `annotations.enabled` and a node carries a Dev Mode annotation, that annotation is the authoritative copy for the node and the visible text layer is treated as a placeholder; cite the annotation, not the layer text. Never invent copy - blank beats a guess; a node whose annotation has the base language but is missing a target language emits a Section 20 (Risks) row rather than a fabricated value. Uncited quotes are downgraded to `[label TBD - see Open Questions]` and a row is added to Section 7 Risks. Subagent prose and Code Connect snippets are not citations.
51
51
  4. **The spec is forward-looking.** Section bodies describe the new feature as drawn / specified. Findings that exist only in legacy code or the existing branch appear as `> Legacy reference: <text> (file:line)` blockquotes inside the relevant section, never as the lead sentence or a primary table row. A legacy-only finding with no forward counterpart goes to Section 7 Risks as a decision item: "current code does X; should the new feature keep, change, or drop this?".
52
52
  5. **Output default = Local file.** The Phase 3.5 output picker keeps `Local file` pre-selected. Confluence and Jira outputs are never default-selected (see `analysis-output-confluence-on-request` memory).
@@ -76,7 +76,7 @@ behind.
76
76
  27. **SwiftUI Preview block mandatory (iOS projection, SwiftUI only).** When the iOS file is produced AND the affected view is a SwiftUI view (detected via `import SwiftUI` + `: View` protocol conformance in `evidence.repoEvidence[<repo>].buckets.uiComponents`), Section 13.6 renders a Preview block table covering at minimum: canonical default (LTR Light), Dark, RTL, Dynamic Type accessibilityLarge, and one error variant. Loading state and edge-case variants are added when distinct from canonical. UIKit-only features (no SwiftUI view artefact) drop Section 13.6 with note `(N/A: UIKit-only feature)`. Preview macro convention (`#Preview` for Swift 5.9+ vs legacy `PreviewProvider`) is read from `evidence.conventions[<repo>].previewMacro`. Each Preview variant listed in Section 13.6 must have a matching row in Section 15.2 Snapshot Tests; a Preview without a snapshot row triggers a Section 20 Risk.
77
77
  28. **Variant usage explicit and bounded.** Section 6 inventory rows list which variants this feature consumes per component (concrete enum case + bool value). New Section 6.X (Variant Usage Matrix) catalogues the full variant axis vs. used subset with a rationale per excluded variant. Sections 13.6 (Preview) and 15.2 (Snapshot) cover only the used subset; expanding the variant set requires updating Section 6.X first.
78
78
  29. **Analysis as self-contained design bridge - no MCP outside analysis phase (BLOCKING, pipeline-wide).** The analysis document is the sole design source for every downstream phase. After Phase 1 of `/multi-agent:analysis` produces `analysis/<feature>-<platform>.md`, Phase 1 Plan, Phase 2 Dev, Phase 3 Review, Phase 3 Review, Phase 4 Commit, and Phase 5 Report consume only the analysis document plus repo Code Connect mappings (`*.figma.swift` / `*.figma.kt`). Calling `mcp__claude_ai_Figma__*`, hitting `api.figma.com`, or fetching a `figma.com/design/...` URL during Phase 2+ is a violation. Applies to every mode that runs Phase 2+: `/multi-agent`, `/multi-agent:autopilot`, `/multi-agent:local`, `/multi-agent:local-autopilot`, at either depth. Hard requirement (v9.0.0): Phase 2 Pre-item and Phase 3 Pre-item (BLOCKING) abort the run when the analysis document is missing. Memory: `[[mcp-only-in-analysis]]`. Generic rule rationale and access matrix: see `$HOME/.claude/rules/figma-pipeline.md` "MUST: No MCP outside analysis phase".
79
- 30. **Business-rule to acceptance-criterion to test traceability (AI + human spine).** The analysis is a development handoff that both an AI implementer and a human reviewer must act on, so it is bound by one shared-ID vocabulary. Every business rule carries a stable id `BR-<slug>-NN` (Section 4.4). Each rule maps to at least one acceptance criterion written Given / When / Then (binary - two readers must not be able to disagree on pass/fail). Each acceptance criterion maps to unit-test scenarios in Section 15.1, one row per case across happy / boundary / error / empty-nil (enumerate at least the failure modes; agents hallucinate error handling when it is omitted). The same ids thread onward: Section 15.6 UI-test flows reference the `BR-` ids and use stable selectors (accessibilityIdentifier / testTag), Section 16 accessibility items reuse those identifiers, Section 11 analytics events cite their triggering rule or story, and Section 3/5 layout cells carry token + Figma node refs. Never invent copy or values (blank beats a guess; a missing source becomes a Section 20 Open Question). **Gate:** a business rule with no acceptance criterion, or an acceptance criterion with no Section 15.1 scenario, fails the dispatch gate. There is no mode clause: the rule used to be suspended in Lite mode, which deferred the rule-to-test half to "whenever the feature is later analyzed in Full" - a debt nothing tracked and nothing ever paid. Section 15 renders when there is evidence for it and is dropped when there is not, like every other section, and the gate applies to whatever was rendered.
79
+ 30. **Business-rule to acceptance-criterion to test traceability (AI + human spine).** The analysis is a development handoff that both an AI implementer and a human reviewer must act on, so it is bound by one shared-ID vocabulary. Every business rule carries a stable id `BR-<slug>-NN` (Section 4.4). Each rule maps to at least one acceptance criterion written Given / When / Then (binary - two readers must not be able to disagree on pass/fail). Each acceptance criterion maps to unit-test scenarios in Section 15.1, one row per case across happy / boundary / error / empty-nil (enumerate at least the failure modes; agents hallucinate error handling when it is omitted). The same ids thread onward: Section 15.6 UI-test flows reference the `BR-` ids and use stable selectors (accessibilityIdentifier / testTag), Section 16 accessibility items reuse those identifiers, Section 11 analytics events cite their triggering rule or story, and Section 3/5 layout cells carry token + Figma node refs. Never invent copy or values (blank beats a guess; a missing source becomes a Section 20 Open Question). **Gate:** a business rule with no acceptance criterion, or an acceptance criterion with no Section 15.1 scenario, fails the dispatch gate. There is no mode clause. Suspending the rule for a lighter mode defers the rule-to-test half to "whenever the feature is later analyzed in Full" - a debt nothing tracks and nothing ever paid. Section 15 renders when there is evidence for it and is dropped when there is not, like every other section, and the gate applies to whatever was rendered.
80
80
 
81
81
  31. **Analysis profile selected at intake.** `state.analysisSpec.profile` is `global` (default) or `corporate`, asked once at Phase 0 Step 1b and never re-asked mid-run. `global` renders `$HOME/.claude/multi-agent-refs/analysis-template.md` (23 sections, development handoff). `corporate` renders `$HOME/.claude/multi-agent-refs/analysis-template-corporate.md` (requirements document: `IG -> UC -> FG` spine, three traceability matrices, current-to-target state with impact analysis, then Technical Analysis and Development Analysis). **Both profiles read the same `state.analysisSpec.evidence.*`** - intake, fetching, repo evidence and convention extraction are shared and profile-independent; only the projection differs. This is what keeps the two templates from drifting into two products. One run emits one profile: rendering both from a single run would produce two documents describing the same feature, and the next reader would have to decide which one is current. When only one profile is available (`prefs.global.analysisProfiles` lists one, or the corporate profile has no binding configuration), the step auto-resolves and prints its breadcrumb with the resolution noted, per the picker contract.
82
82
  32. **Corporate backbone always renders.** In the `corporate` profile the Locked 2 omission rule is replaced for Part A and the footer: those sections render even with zero evidence, carrying `N/A` when the section is genuinely out of scope for the feature and `EKLENECEK` when evidence is expected but missing. This is the point of a requirements document - a reader has to be able to tell "we considered hardware needs and there are none" from "nobody looked". Every `EKLENECEK` emits a matching Section 20 Risks and Open Questions row naming what is missing and who can answer it; an `EKLENECEK` with no such row fails the dispatch gate, because an unanswered question nobody owns is how a placeholder reaches production. **Missing inputs never block the run**: the corporate source practice of halting until every input arrives is deliberately not adopted - the document is produced with `EKLENECEK` in the gaps and the gaps are raised in Section 20. Part B follows the global omission table unchanged. In the `global` profile Locked 2 applies as written, with no placeholder of any kind.
@@ -50,9 +50,9 @@ it is the PR body (`channels/pr.md`).
50
50
  A `gaps[]` entry prints its reason on the line where the artefact would have been (`Düzeltme öncesi: ticket'ta görsel yok`). Never an empty thumbnail, never a silent omission. Contract: `$HOME/.claude/multi-agent-refs/features/visual-evidence.md`.
51
51
 
52
52
  **`test_scenarios`** - one titled scenario per acceptance criterion, each a
53
- numbered list of steps ending in the expected result. Given/When/Then was the
54
- shape here for several releases and it reads as translated English to the person
55
- who actually runs these; a tester wants a list they can follow with the app open.
53
+ numbered list of steps ending in the expected result. Not Given/When/Then: it
54
+ reads as translated English to the person who actually runs these, and a tester
55
+ wants a list they can follow with the app open.
56
56
  The heading and the text render in `outputLanguage`; this file shows the English
57
57
  skeleton:
58
58
 
@@ -176,7 +176,7 @@ The parenthesised forms are the ones that actually bite: `(x)` in a comparison t
176
176
 
177
177
  The program runs AFTER the markdown conversion above and BEFORE the POST. Order is load-bearing in both directions: run it earlier and the conversion re-introduces sequences behind it; skip it and `{{...}}` monospace does not save you, because Jira parses emoticons inside monospace too.
178
178
 
179
- Do not hand-apply this table. It was hand-applied for several releases and a smiley reached a ticket anyway - a long comment gives the eye no reason to stop on the `:)` at the end of a selector.
179
+ Do not hand-apply this table. A long comment gives the eye no reason to stop on the `:)` at the end of a selector, so the program applies it or nothing does.
180
180
 
181
181
  Lines outside these patterns pass through verbatim. Multi-paragraph blocks are joined with one blank line.
182
182
 
@@ -224,10 +224,10 @@ That script escapes every body unconditionally (`lib/jira-publish.sh:109`) and
224
224
  passes the token through a `-K` config rather than argv, so neither the escape
225
225
  nor the token handling depends on an agent remembering a step.
226
226
 
227
- This block used to be a hand-written `jq` + `curl` pair with the escape as a
228
- separate `--check` line above it, and a shipped comment rendered the Swift
229
- selector `hash(into:)` as `hash(into` plus a smiley - twice. The escaper was
230
- present, correct, and simply not run on that path: `:)` reached Jira intact and
227
+ Not a hand-written `jq` + `curl` pair with the escape as a separate `--check`
228
+ line above it. In that shape the escaper is present, correct, and simply not run
229
+ on the POST path: a Swift selector such as `hash(into:)` renders as `hash(into`
230
+ plus a smiley, because `:)` reaches Jira intact and
231
231
  Jira's wiki renderer turned it into an emoticon, which is what section
232
232
  *Emoticon escaping* below is about. A defence that has to be invoked by hand is
233
233
  a defence that is eventually not invoked.
@@ -97,8 +97,8 @@ GitHub's analogue is the milestone title, read the same way.
97
97
 
98
98
  ## 2b. A filter is not a ranking
99
99
 
100
- Step 3's rule-5 list used to be narrowed with `grep -E '(develop|release|main|master)'`,
101
- which is the prefix table this whole feature exists not to have - and worse than a
100
+ Step 3's rule-5 list is NOT narrowed with `grep -E '(develop|release|main|master)'`.
101
+ That is the prefix table this whole feature exists not to have - and worse than a
102
102
  table, because it DISCARDS. A repo whose release branches read `stabilise-2.7`
103
103
  matched none of the four words, so none of its branches reached the picker, the
104
104
  convention-learner had nothing to learn from, and the version on the issue could
@@ -1,6 +1,6 @@
1
1
  # Feature: Scope self-check (Phase 2 Step 3.7)
2
2
 
3
- **Pattern**: Phase 3 reconstructs everything from the diff. The one thing it cannot reconstruct is why each file was touched and what was left out on purpose, so Dev states both before the handoff, and a deterministic gate checks the statement against the real diff. The record also carries the code-simplifier rationales (Step 3.6) that used to be discarded, and it feeds two later consumers: the `<scope-self-check>` block in the Phase 3 reviewer prefix and the PR body in Phase 4.
3
+ **Pattern**: Phase 3 reconstructs everything from the diff. The one thing it cannot reconstruct is why each file was touched and what was left out on purpose, so Dev states both before the handoff, and a deterministic gate checks the statement against the real diff. The record also carries the code-simplifier rationales (Step 3.6) that would otherwise be discarded, and it feeds two later consumers: the `<scope-self-check>` block in the Phase 3 reviewer prefix and the PR body in Phase 4.
4
4
 
5
5
  ## The record
6
6
 
@@ -41,7 +41,7 @@ Nothing enabled is not an error: a repo whose stack was never selected legitimat
41
41
  no toolkit. Record the no-op with the enabled set that was read, so "none applied" is
42
42
  distinguishable from "never looked".
43
43
 
44
- **Not enabled is not an error here**, unlike component dispatch: a repo whose stack was never selected legitimately has no toolkit, and halting would make the pipeline unusable there. Record the no-op and continue. (This paragraph used to say "a backend or web repo legitimately has no toolkit" - that stopped being true when the web and backend toolkits shipped, and the sentence outlived the fact by several releases.)
44
+ **Not enabled is not an error here**, unlike component dispatch: a repo whose stack was never selected legitimately has no toolkit, and halting would make the pipeline unusable there. Record the no-op and continue. Every stack now has a toolkit, so "no toolkit" means the stack was never selected, not that none exists for it.
45
45
 
46
46
  Two marketplaces may ship the same toolkit name (a public one and a corporate one). Resolve whichever is enabled and record its **name and version** in the ledger entry, because the routing table and the skill set differ between versions - a finding that cites a skill has to be traceable to the version that defined it.
47
47
 
@@ -176,7 +176,7 @@ This keeps orchestrator context lean and enables programmatic routing.
176
176
  bash $HOME/.claude/scripts/capture-flush.sh --state "$STATE_FILE" --quiet
177
177
  ```
178
178
 
179
- The durable stores used to be written only in Phase 5, which is the phase a run is LEAST likely to reach: a run killed in Phase 2 threw away every finding it had established, and the next run on the same repo paid to rediscover it. The flush is idempotent (the second call through writes 0 rows), costs no API tokens, calls no model, and never fails the transition. Phase 5 is now the LAST flush rather than the only one. The trigger is deliberately mechanical - a phase transition, not a model noticing that a moment qualifies.
179
+ The durable stores are NOT written only in Phase 5, which is the phase a run is LEAST likely to reach: a run killed in Phase 2 threw away every finding it had established, and the next run on the same repo paid to rediscover it. The flush is idempotent (the second call through writes 0 rows), costs no API tokens, calls no model, and never fails the transition. Phase 5 is now the LAST flush rather than the only one. The trigger is deliberately mechanical - a phase transition, not a model noticing that a moment qualifies.
180
180
  - *Compaction trigger.* If conversation context exceeds ~50%, run `/compact` preserving "modified files, plan, open review findings, current phase + sub-step" before continuing. Don't wait for auto-compaction near the limit - it triggers exactly when context is worst and is lossy. After compaction, re-read `agent-state.json` AND the latest `## Handoff` block in `agent-log.md` to re-ground.
181
181
 
182
182
  **Handoff block (v10.8.0)**: the structured artifact the phase-boundary checkpoint appends to `agent-log.md`. Written by the orchestrator from state it already holds - no agent dispatch, no extra LLM call. Cap at ~15 lines; the latest block is authoritative (earlier ones are history). This is the fresh-context re-entry contract: a resume or post-compaction session rebuilds working context from the latest handoff + `agent-state.json` + git log, never from conversation memory.
@@ -412,9 +412,9 @@ and stored, only invisible.
412
412
  printf '%s' "$PLAN_JSON" | bash "$HOME/.claude/lib/plan-todos.sh" set "$TASK_ID" -
413
413
  ```
414
414
 
415
- `set` accepts a planning-output document and converts it itself. The conversion
416
- used to be written out here, which made the `tasks[]`-to-`todos[]` mapping a
417
- thing two files defined, and this was the copy nothing tested.
415
+ `set` accepts a planning-output document and converts it itself. Writing the
416
+ conversion out here too would make the `tasks[]`-to-`todos[]` mapping a thing two
417
+ files define, and the copy in prose is the one nothing tests.
418
418
 
419
419
  Phase 2 (Dev) then iterates with `plan-todos.sh next "$TASK_ID"` until empty, calling `start` before each step and `complete` (with notes) or `fail`/`skip` after. Phase 3 (Review) reads the Todo list to verify all `completed` items map to diff hunks. Phase 5 (Report) renders `list` into the agent-log + PR body.
420
420
 
@@ -215,7 +215,7 @@ Per Locked decision 30 of `/multi-agent:analysis` and the parallel rule in `$HOM
215
215
 
216
216
  The ban is **Figma**-shaped, not MCP-shaped: the multi-agent-toolkit MCP (simulator, screenshot, xcodebuild, accessibility) is unaffected in every phase, and `smoke-no-mcp-in-dev-phases.sh` agrees - it matches `figma` in the tool name and nothing else. A bare "MCP forbidden" has been read as banning the screenshot and UI-test tools, which is how a run reaches Phase 5 with no evidence.
217
217
 
218
- The per-phase matrix (which phase may fetch Figma, and what its sole design source is instead) lives in `rules/figma-pipeline.md` "Phase access matrix". It was copied here as a seven-row table for several releases, two paragraphs below this file's own instruction not to duplicate that rule file. Violation of either copy: `smoke-no-mcp-in-dev-phases.sh` fails the run.
218
+ The per-phase matrix (which phase may fetch Figma, and what its sole design source is instead) lives in `rules/figma-pipeline.md` "Phase access matrix". It is not restated here, per this file's own instruction two paragraphs above not to duplicate that rule file. Violation of either copy: `smoke-no-mcp-in-dev-phases.sh` fails the run.
219
219
 
220
220
  Memory: [[mcp-only-in-analysis]]
221
221
 
@@ -587,13 +587,12 @@ function main() {
587
587
  const attempts = readAttempted();
588
588
  const breaker = consecutiveFailures(attempts);
589
589
  if (BREAKER_LIMIT > 0 && breaker.count >= BREAKER_LIMIT) {
590
- // HALF-OPEN, not latched. The first version of this returned here on every
591
- // tick, and the only writer of attempted.jsonl is downstream of this
592
- // return - so once it opened, no new attempt could ever be recorded, the
593
- // consecutive count could never fall, and the runner was stopped for good.
594
- // The log line said "until an attempt succeeds" and the feature doc said
595
- // "one successful attempt clears it": both described a state the code made
596
- // unreachable.
590
+ // HALF-OPEN, not latched. The only writer of attempted.jsonl is downstream
591
+ // of this return, so returning on every tick would mean that once the
592
+ // breaker opened no new attempt could be recorded, the consecutive count
593
+ // could never fall, and the runner would be stopped for good - while the
594
+ // log line promises "until an attempt succeeds" and the feature doc
595
+ // promises "one successful attempt clears it".
597
596
  //
598
597
  // A breaker that cannot re-close is not a breaker, it is an off switch with
599
598
  // a misleading label. So after a cooldown one probe is let through: if the
@@ -2,9 +2,9 @@
2
2
  // build-references.mjs - deterministic Section 21 References table for an
3
3
  // /multi-agent:analysis document (Locked 33).
4
4
  //
5
- // The references table used to be prose the model filled in. That lists what an
6
- // author remembers consulting, which is a different set from what the run
7
- // actually fetched: sources that failed to load vanish silently, scope decisions
5
+ // The references table is built, not written as prose the model fills in. Prose
6
+ // lists what an author remembers consulting, which is a different set from what
7
+ // the run actually fetched: sources that failed to load vanish silently, scope decisions
8
8
  // made in conversation never appear, and a Figma link with no node id points at
9
9
  // whatever the file looks like today. This turns the table into a projection of
10
10
  // `state.analysisSpec.evidence.*` so the two cannot disagree.
@@ -72,7 +72,7 @@ const PLUGINS_REPO = getArg("--plugins-repo", join(HOME, "multi-agent-plugins"))
72
72
  // nowhere else: on a CI runner the checkout is under the workspace directory,
73
73
  // so --check-routing reported "source not found" and three tests failed on
74
74
  // every clean host while passing locally. That is the whole class of bug CI
75
- // exists to catch, and it survived because CI was asleep.
75
+ // exists to catch, which is why this path is not left to CI alone.
76
76
  const PIPE_ROOT = getArg("--pipeline", join(dirname(fileURLToPath(import.meta.url)), "..", ".."));
77
77
  const EXTERNAL = join(PIPE_ROOT, "pipeline/skills/shared/external");
78
78
  const DRY = args.includes("--dry-run");
@@ -91,10 +91,12 @@ if command -v jq >/dev/null 2>&1; then
91
91
  fi
92
92
  [ -n "$MODEL" ] || MODEL="${PREF_MODEL:-haiku}"
93
93
 
94
- # bulk-read is one of the two call sites the pipeline makes itself, so routing
95
- # may send it outside the Anthropic ladder - unlike a subagent, nothing here
96
- # belongs to the host. An explicit --model still wins: a caller that named a
97
- # rung asked for that rung.
94
+ # Routing picks the rung INSIDE the Anthropic ladder. The worker below is the
95
+ # `claude` CLI, which speaks that ladder and nothing else, so a rung on another
96
+ # provider is refused at dispatch rather than returned and failed. Sending this
97
+ # read to a third-party provider would put the file's full text outside the
98
+ # account that owns it, and that is a decision a user makes, not a default.
99
+ # An explicit --model still wins: a caller that named a rung asked for that rung.
98
100
  if [ -z "${MODEL_EXPLICIT:-}" ] && [ -x "$HERE/../lib/model-dispatch.sh" ]; then
99
101
  MODEL=$("$HERE/../lib/model-dispatch.sh" bulk-read \
100
102
  --phase "$PHASE" --default "$MODEL" 2>/dev/null) || MODEL="${PREF_MODEL:-haiku}"
@@ -1051,10 +1051,10 @@ function main() {
1051
1051
  process.exitCode = code;
1052
1052
  }
1053
1053
 
1054
- // Exported so the gate can DRIVE the engine instead of reading it. The BLOCK
1055
- // downgrade used to be asserted with a regex over this file's own source, which
1056
- // a comment carrying the same two substrings satisfied just as well as the code
1057
- // did - the enforcement could be deleted outright and the gate stayed green.
1054
+ // Exported so the gate can DRIVE the engine instead of reading it. Asserting the
1055
+ // BLOCK downgrade with a regex over this file's own source proves nothing: a
1056
+ // comment carrying the same two substrings satisfies it as well as the code does,
1057
+ // so the enforcement could be deleted outright and the gate would stay green.
1058
1058
  export { report, results as __results, MAY_BLOCK as __mayBlock };
1059
1059
 
1060
1060
  // realpath on both sides: `import.meta.url` is already resolved, while argv[1]
@@ -475,7 +475,7 @@ function cmdBrief() {
475
475
  );
476
476
  ordered = fused.slice(0, max).map((x) => pool[x.index]);
477
477
  // A task whose words match nothing in the ledger must not silently inject an
478
- // empty block where the newest entries used to be: fall back to recency.
478
+ // empty block in place of the newest entries: fall back to recency.
479
479
  if (ordered.length === 0) ordered = pool.slice().reverse().slice(0, max);
480
480
  }
481
481
 
@@ -40,10 +40,10 @@ const here = dirname(fileURLToPath(import.meta.url));
40
40
  *
41
41
  * This script lives in two shapes: `<repo>/pipeline/scripts/` in a checkout, and
42
42
  * `~/.claude/scripts/` (or `~/.copilot`, `~/.codex`) once installed. The default
43
- * used to be `resolve(here, "..", "..") + "/pipeline/skills/.skills-index.json"`,
44
- * which is right in a checkout and resolves to `$HOME/pipeline/skills/...` from an
45
- * installed tree - a path that has never existed. So dynamic skill loading exited 1
46
- * on every real install while passing its own smoke, which runs from the repo.
43
+ * is NOT `resolve(here, "..", "..") + "/pipeline/skills/.skills-index.json"`.
44
+ * That is right in a checkout and resolves to `$HOME/pipeline/skills/...` from an
45
+ * installed tree - a path that does not exist. Dynamic skill loading would exit 1
46
+ * on every real install while passing a smoke that runs from the repo.
47
47
  *
48
48
  * Installed layout is tried first: that is where a user's run happens.
49
49
  */