@mmerterden/multi-agent-pipeline 20.25.1 → 20.27.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 (47) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/README.tr.md +1 -1
  4. package/docs/facts.json +3 -3
  5. package/install/catalog-history.json +1 -1
  6. package/manifest.json +50 -39
  7. package/package.json +5 -5
  8. package/pipeline/commands/multi-agent/channels/SKILL.md +23 -19
  9. package/pipeline/lib/_jira-auth.sh +3 -1
  10. package/pipeline/lib/issue-fetcher.sh +40 -2
  11. package/pipeline/lib/jira-family-write.sh +339 -0
  12. package/pipeline/lib/jira-publish.sh +28 -1
  13. package/pipeline/lib/jira-remote-links.sh +99 -0
  14. package/pipeline/multi-agent-refs/analysis/intake.md +2 -0
  15. package/pipeline/multi-agent-refs/analysis/render.md +4 -2
  16. package/pipeline/multi-agent-refs/channels/jira.md +12 -8
  17. package/pipeline/multi-agent-refs/channels/pr.md +11 -8
  18. package/pipeline/multi-agent-refs/channels/test-run.md +52 -0
  19. package/pipeline/multi-agent-refs/conventions-defaults.md +2 -0
  20. package/pipeline/multi-agent-refs/features/analysis-issue-links.md +42 -0
  21. package/pipeline/multi-agent-refs/features/jira-family.md +175 -0
  22. package/pipeline/multi-agent-refs/features/localization-reuse.md +25 -0
  23. package/pipeline/multi-agent-refs/features/url-enrichment.md +11 -3
  24. package/pipeline/multi-agent-refs/features/visual-evidence.md +35 -9
  25. package/pipeline/multi-agent-refs/generate-issue.md +9 -11
  26. package/pipeline/multi-agent-refs/phases/phase-0-init.md +13 -7
  27. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +2 -0
  28. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +1 -1
  29. package/pipeline/multi-agent-refs/phases/phase-5-report.md +2 -1
  30. package/pipeline/multi-agent-refs/phases.md +1 -1
  31. package/pipeline/multi-agent-refs/platform-parity.md +1 -1
  32. package/pipeline/multi-agent-refs/tracker-contract.md +10 -6
  33. package/pipeline/schemas/agent-state.schema.json +86 -0
  34. package/pipeline/schemas/prefs.schema.json +34 -0
  35. package/pipeline/schemas/unattended-policy.json +1 -0
  36. package/pipeline/scripts/_sibling-root.mjs +38 -0
  37. package/pipeline/scripts/gen-facts.mjs +5 -3
  38. package/pipeline/scripts/jira-family.mjs +947 -0
  39. package/pipeline/scripts/jira-wiki-escape.mjs +3 -3
  40. package/pipeline/scripts/plan-remote-links.mjs +339 -0
  41. package/pipeline/scripts/render-flow-run.mjs +583 -0
  42. package/pipeline/scripts/render-jira-evidence.mjs +213 -0
  43. package/pipeline/skills/.skill-manifest.json +5 -5
  44. package/pipeline/skills/shared/core/multi-agent/SKILL.md +5 -0
  45. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +15 -2
  46. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
  47. package/pipeline/skills/shared/external/ios-localization/SKILL.md +5 -0
package/manifest.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.25.1",
4
- "commit": "0eb30e00ade8fca0b4c5c778182d8e7dedac3901",
5
- "generatedAt": "2026-10-14T16:23:55.250Z",
3
+ "version": "20.27.0",
4
+ "commit": "ecae7ee9cdf384be989d519a17cdf8b89c594d38",
5
+ "generatedAt": "2026-10-16T06:02:08.689Z",
6
6
  "algorithm": "sha256",
7
- "fileCount": 1391,
7
+ "fileCount": 1402,
8
8
  "files": {
9
- "CHANGELOG.md": "c2c25cc5f3ca4fb30fe20d0ac8d1182142e4baf0f1d31e6a1f32961d95fc8fee",
9
+ "CHANGELOG.md": "849337446408fe3fadb526d34e45c6a774b62d0b7aa88333a31d0c9aac41ac44",
10
10
  "LICENSE": "8d8c51aaf1e1538b180c69965fa038db71be86798cc3e26a143bebfefe16a43e",
11
- "README.md": "834be811f7e40d5a3cd5a04f61da666cc5fd746b8499781edfd2d083d88cc775",
12
- "README.tr.md": "ae0a9acf8e367716bbba716f31b800bc4b912d3e98874b3e2123ea8684abbec3",
11
+ "README.md": "7727e831f6421adeeaf2e34d9aeb8a6a11ad7ee5b166e09ade43d70704c27cfb",
12
+ "README.tr.md": "ce7978c53c733cf359c21423fbfed640f20644584ff153aaab473958fdccfdc3",
13
13
  "SECURITY.md": "0eb89553ddcfc56bfe9712315b55a6630ee2f579631aaeccd6ad24f8ac769a0b",
14
14
  "docs/FIGMA_PIPELINE.md": "ea01f3ea5fef1a9cb316040a2d416fcf87dd4f2a14b5497aa00994a0b5dc7e6a",
15
15
  "docs/adr/0001-three-model-triage.md": "79a6f1025469f607a5859add21854052d7433bc213f4aceee2e159b613eeb6a1",
@@ -34,7 +34,7 @@
34
34
  "docs/best-practices.md": "f8b75b0d38b5896a6a852bb30a1edddeb24dab8b5b7b1d9313290e1241c72024",
35
35
  "docs/ecosystem.md": "9b23467fca1bcdc0275e7eccd3428c36181ba9f8cd866778159edd7d65a4d563",
36
36
  "docs/engineering.md": "550528cd47c7d2c921729c68d0782a00ac8e77a4bdfec479f6749f9c3235d188",
37
- "docs/facts.json": "d3ea7392093c784ca410ce811fc57cb55ffb701fa1795c17f4afdabb2fc8006b",
37
+ "docs/facts.json": "9b8a5d8dd40cb543146acc627afc0b456f9f4d2b8273509c3d4cca7cf00b7010",
38
38
  "docs/features.md": "d5fcbe3acc05e054efdf0c43ddfc1a82ef3d463f349ea2ec5b4842fa26d9d49d",
39
39
  "docs/performance.md": "bbf2f3922c25dcba0c1a9e69ef420e3871a729af5b35009a49b48a5d3c5cd151",
40
40
  "docs/recovery-guide.md": "59a8f1b66b34cb9ff5507b3d54dac3b9915e184aa044d9c758d18cac818d510e",
@@ -54,7 +54,7 @@
54
54
  "install/_unattended-profile.mjs": "e1ed82bde35d19105ee12c2a551eb778912b0e5c93ab227fd15c993098d98de0",
55
55
  "install/_usage-lifecycle.mjs": "4b010c4e75d6f8e13b58d80a93cc9407f42ccde781c9ed12dcb8e7faf05e526c",
56
56
  "install/_xcode-skills.mjs": "1a7e20f1e6743324b941c5d3ecac9f94c65fff1534ffd9c63b39cbea4f8d101a",
57
- "install/catalog-history.json": "6e9be7c160b7288084bd859a62e09cd0f4c43be1d1414fee9807aa343f5f7245",
57
+ "install/catalog-history.json": "af32be1b6a9a209413c7ae89cb69f2bde500545f732e505c94182cc3c15f5acc",
58
58
  "install/claude.mjs": "106ce353ebc19c8319d057ce342e1f989519510465c798399076b5f3d8727904",
59
59
  "install/codex.mjs": "08925fe9f3ecdf509b37f01105652c847475d20fcde2db0d679b9a7d663ca145",
60
60
  "install/copilot.mjs": "41dc394b8a3ae77cfd194ce0ca9bbcafce9bdce349f1f72eeb86569f993e15fe",
@@ -66,7 +66,7 @@
66
66
  "install/templates/multi-agent-autopilot-awake.plist.template": "ddd25c76c56fcbb38a89de8e35637372d70ace993d6bc487a88ca9cfb702fe1f",
67
67
  "install/templates/multi-agent-autopilot.plist.template": "122c8a61cd927edd99375d6e3da40f1d42bcceed5b6641785c8b28bb930bc77e",
68
68
  "install/unattended-profile-legacy.json": "f52e86b998956f09ad306b1735a6c10b58580d7082d8a55665a4c6bb15c3aa1f",
69
- "package.json": "dd4297297078a881bab0fdaeb64d804d3cbe8a73b0ccaad9cf09dd1c77ff5349",
69
+ "package.json": "8bc7f4948cd5ba3a59a7a38116ea6f6d116f73907d916555a92ce228364a465e",
70
70
  "pipeline/agents/android-architect.md": "11fb74543cb0ebcf9525ca6654fe95d53da7229e0bf4a1149b31fd9005abc453",
71
71
  "pipeline/agents/backend-architect.md": "b02a606c301e4714131aed70ae6d16eeb77fbc819a001e2752cff2488d4246de",
72
72
  "pipeline/agents/bulk-reader.md": "6597052cd7d205bac2b1c7633f5232fe1a40730664a913b8eb77efd5a786dc25",
@@ -91,7 +91,7 @@
91
91
  "pipeline/commands/multi-agent/autopilot/SKILL.md": "ae95364c28e21a5d12b8a579180d59963bad3738fcfd978180c5dca6e55a0d02",
92
92
  "pipeline/commands/multi-agent/bug-bash/SKILL.md": "0ae5883b72239c74f4f64fc2d60526091e471afa6a2886f90f70a469a85cc832",
93
93
  "pipeline/commands/multi-agent/build-optimize/SKILL.md": "e74d6f5be703acef1704092d5fe53485d95fe6c220bb768accaf68ebd212b7c1",
94
- "pipeline/commands/multi-agent/channels/SKILL.md": "5c6d54c7153ceba6b19ecd55f2211d5ef0f97c472aac0623729fbe9f2fb9a3c0",
94
+ "pipeline/commands/multi-agent/channels/SKILL.md": "ad2669cee680964185a38212148173d60df09d4d98126e237563743f2c5cfa2a",
95
95
  "pipeline/commands/multi-agent/complaint-analysis/SKILL.md": "b9ab7b9444cf99f25868d90f050ed96f04ac8cd8ea18d0999376184b067fc2bc",
96
96
  "pipeline/commands/multi-agent/create-jira/SKILL.md": "ac3d3e0ab2fb079b7c4107928573912699f68600f922b2f453be49c65317665a",
97
97
  "pipeline/commands/multi-agent/design-check/SKILL.md": "d3cb1b50f2d14cf22a38f4c0db98c852e8ed0586e969f7e6da7c1d65f36554eb",
@@ -168,7 +168,7 @@
168
168
  "pipeline/contract/frozen/toolbox.json": "d52f94ca81f62e4c0d67f0718ce6361f332f289b09fe7cc25c8f5f40feb0ffff",
169
169
  "pipeline/contract/manifest.json": "e9163ba923619447f872416d7f57ea48d67dc13c356c9544f24957f4131946bf",
170
170
  "pipeline/contract/types/index.d.ts": "1434e70701023a7274fb13c9dbdf901b2a0d7259e46f3fcf40fe2454300c32a3",
171
- "pipeline/lib/_jira-auth.sh": "fc468736057f8841d824eb1a4db527442562f8979fea333ebaef5527f4369e9f",
171
+ "pipeline/lib/_jira-auth.sh": "b5fd733ac26727eda299976c688456e95611ca40acafd3947c66c445d77f2237",
172
172
  "pipeline/lib/account-resolver.sh": "f7bef9beba3f839268509361651be0b1e1f319f2f23821f90ba466fdf185a8f6",
173
173
  "pipeline/lib/agent-model-sync.mjs": "2e0264ca8d8fef761563db219d588fed9067847043f960f68f055c186c20b668",
174
174
  "pipeline/lib/analysis-jira-write.sh": "26e17b8a972819a1649ead8cc4e6f0ff8548dd686c2572107e1777fb384f639d",
@@ -203,9 +203,11 @@
203
203
  "pipeline/lib/figma-token.sh": "b192b1d3c8f75f1deb81731e95e080372d87fb44779805d05cdb7cb585ee1db0",
204
204
  "pipeline/lib/gc-report.sh": "a70a1fbaea4fb6dbb9a56471119e403071b4358fb0d4577b62bb4d5e08eaf87e",
205
205
  "pipeline/lib/invoked-directly.mjs": "a7014f252174414c267cc303a992aa9f3986541c5aad188c87cc6809ba3b69bd",
206
- "pipeline/lib/issue-fetcher.sh": "36f6eb41935fa44072cf3c9a92a5698d4ffd762103eb57f733e65687ab47479e",
206
+ "pipeline/lib/issue-fetcher.sh": "a074c100d31d08bd04573ae77f51beda4174dc4eaf6781e31000b13117e59da0",
207
207
  "pipeline/lib/jira-epic-link.sh": "b5f9ce1067cd8e9f0e547da4e681b71e4ff8c145e9a759fc98f83703dfca4d35",
208
- "pipeline/lib/jira-publish.sh": "a32e6a682ae730ddd9c6df64b9ece1fb73c797111c63f5c247d7e733668da6b7",
208
+ "pipeline/lib/jira-family-write.sh": "b29674fd2dc6993636d0c8b6b674a069f37d76775420372a755a1ce3b0f94b95",
209
+ "pipeline/lib/jira-publish.sh": "d80c7c128fb16e67962d087f0e12ecbb396d8c7367bbb4f6d7eecb7cedf60fb3",
210
+ "pipeline/lib/jira-remote-links.sh": "ec62eeec7e666ebe5b73870d539306780bd6c32ced1acfda9046a95669a3687f",
209
211
  "pipeline/lib/json-file-lock.mjs": "d8a9075e6fa4fd10d4fb84efd438f92906fb3181455d661ca5fe604c57441524",
210
212
  "pipeline/lib/md2confluence-v3.py": "3677ca47931e4b3d0fd2ce3e11299fc5f6d24799eb8332e37dd60b6c3c4653a2",
211
213
  "pipeline/lib/model-dispatch.sh": "6500a5a7cb6a4c099cf1d01678bc9465a3d4eb1001e1f516dcc5eacd69577158",
@@ -255,10 +257,10 @@
255
257
  "pipeline/multi-agent-refs/analysis-template-corporate.md": "a1352dff1e39ef75cb25fadfc686595a584a87e337a45633e99d272b5e38a112",
256
258
  "pipeline/multi-agent-refs/analysis-template.md": "5a5376a615332ab75003c2baf897248ba7c06ad2238a41ea1e7d1de0ff491374",
257
259
  "pipeline/multi-agent-refs/analysis/evidence.md": "b0c216dc8869b729947ac5ecd33d20034b1a90bd8d648028a20ea7214b748658",
258
- "pipeline/multi-agent-refs/analysis/intake.md": "f5fb9e16620acb63fa41d14165d04f0fa6f5f7e178250a6f2b5b6d921d176f53",
260
+ "pipeline/multi-agent-refs/analysis/intake.md": "192a2da33ceaf4a255645960bc7d6883ab2845b9d45b30ada8faafaf4ad82aba",
259
261
  "pipeline/multi-agent-refs/analysis/locked.md": "c914d3da5182bfbb3ba613299cf38f12832fda2f17e1968e5a8fd7b32d867bdf",
260
262
  "pipeline/multi-agent-refs/analysis/redesign.md": "6314fc1e14e05166efbea4819d5b07adb838d0704bde61b4b69cef637f251d58",
261
- "pipeline/multi-agent-refs/analysis/render.md": "a65f2957623c1cef0f61cda4c89626524c703e5fb4070db446a13c091cdb4c5c",
263
+ "pipeline/multi-agent-refs/analysis/render.md": "c3dc2c4dea9c5094ca538abda20543f7fbbca64d3e15f41c3c9e1eae7a64f095",
262
264
  "pipeline/multi-agent-refs/analysis/resolve.md": "2e3631a8a9af999e01c66455378020e2134e6ca91bed3a40cd94717da94a34cb",
263
265
  "pipeline/multi-agent-refs/analysis/resume.md": "25a430b3a81c877b31c473cb0b708b1b225de3faf4d5f4b2918908df305c6d90",
264
266
  "pipeline/multi-agent-refs/analysis/reusable-refs.md": "6058c704a689d20af95a13295fd2e34f8636647f16ab991961ad9b7c0655bd34",
@@ -270,15 +272,16 @@
270
272
  "pipeline/multi-agent-refs/channels/board.md": "895edfd4a26f7f5fbe13f0eb5865d30975ed86ee3dbd4bd3bd12340f48001fcb",
271
273
  "pipeline/multi-agent-refs/channels/confluence.md": "1e1d731e9f57efdfe77efab3281d74b7f16e28d3d49699da516225492c551ffc",
272
274
  "pipeline/multi-agent-refs/channels/issue-comment.md": "19df6d8d6c23b5ea88687250dc10dd5fa35ba2b2e279efcb000e83622a0664f6",
273
- "pipeline/multi-agent-refs/channels/jira.md": "7969579dbc69c40743dc547163c5161af06205dece7327e33c9c4775bac96c14",
275
+ "pipeline/multi-agent-refs/channels/jira.md": "a164ac34b708ec1a3916ee69bcd3758aad5b40d6192fecb829d445afe0a41425",
274
276
  "pipeline/multi-agent-refs/channels/multi-repo.md": "a309478d8ba253c797904b1ad174be958e4d365b5ff008634ad1d5fc87969474",
275
277
  "pipeline/multi-agent-refs/channels/pr-review-actions.md": "21bf53796ae4ecd59769f9944ad8c7d1cd3a5915b0956be99ec875b847b33c00",
276
- "pipeline/multi-agent-refs/channels/pr.md": "abe0101d4f2a7cb1ecd88c4260e9ae9e7d6dd65dd52afbf6c44c573c48d11f20",
278
+ "pipeline/multi-agent-refs/channels/pr.md": "7c374018e2cdd50c0de45728b3ee84fbc21f5d8f6fbcc6db127616be80e39c72",
279
+ "pipeline/multi-agent-refs/channels/test-run.md": "d9d2d325fd8439bc4be03a76c1250bc828c2aadd0d135fb272441705eae777ea",
277
280
  "pipeline/multi-agent-refs/channels/wiki.md": "ba52c5efaedc067dd8456fe9076af694d7e3dae9bda621f1df65c9159cd422da",
278
281
  "pipeline/multi-agent-refs/complaint-analysis-template.md": "dd5f12a8f56ee4dc177fa7bfba4ffe9ad021e5f1b9e661a49031f02dd6e37109",
279
282
  "pipeline/multi-agent-refs/component-dispatch.md": "2ab9094aa716397e4840cd48f736c3f4fc3e7c4f9ccc5c7c7c52f9e8b0a28fb5",
280
283
  "pipeline/multi-agent-refs/component-generation.md": "04fdb3fd0f1c129e1df8243184a3225cebd9c4f63511d6015eb356a92eda8891",
281
- "pipeline/multi-agent-refs/conventions-defaults.md": "608a05ec6332fc19ee12c0418fbf25165f80e6c06cfee9efed7f27fab185d97d",
284
+ "pipeline/multi-agent-refs/conventions-defaults.md": "c7ef37d269a49aaa05b096085edb318ce67870aa9a75b7afe219df1af3aa81b6",
282
285
  "pipeline/multi-agent-refs/cross-cli-contract.md": "9a21e8aa6adff02f2514b5dd8cb5581e5e10e28007469e663912719ac4b8f2bd",
283
286
  "pipeline/multi-agent-refs/design-check/build-launch.md": "0ac64d07ef7389e22f7443f79c70a0a4f8bb87dcff6dbc94c63e034febe194ea",
284
287
  "pipeline/multi-agent-refs/design-check/compare.md": "2a0a89542a8bfefcfeaf1068dd91edb6947392f911f23e8b4857e4ace8fd15d7",
@@ -287,6 +290,7 @@
287
290
  "pipeline/multi-agent-refs/design-check/figma-mapping.md": "731b7f19ddee2e67ea5d318e95e3a0d6840fa62c4ad682a25315509ac9ddcbc3",
288
291
  "pipeline/multi-agent-refs/design-check/init-inventory.md": "62defc5ea804f6c8f059a8d512b023791daac59274c0def28cefd7709a7fe862",
289
292
  "pipeline/multi-agent-refs/design-check/mcp-currency-gate.md": "70a96d3135af905989cd1819e6fb37fc44d25df9817b1efcd20121ec6db76d74",
293
+ "pipeline/multi-agent-refs/features/analysis-issue-links.md": "68685a7fbdfd06ddbaafbbbbb6287670957631d9f5b130b851927aacf5345a23",
290
294
  "pipeline/multi-agent-refs/features/analysis-jira.md": "e5e88c656fad3f153d0a9ae6278e6f2c9060805029435f72cca64384c6bd6f50",
291
295
  "pipeline/multi-agent-refs/features/analysis-outline.md": "36a917343a7c07ae115aa1e89f825304e5878db931915aefef614d251b167e92",
292
296
  "pipeline/multi-agent-refs/features/analysis-sources.md": "12c8035e6aabf8e8a973b7264edc9a943e6758e79dbc53ae3e9b43c7f998000c",
@@ -306,6 +310,8 @@
306
310
  "pipeline/multi-agent-refs/features/external-context-injection.md": "be9a0e904efd52535fa18a254567c9d0c3fc2ed12fcbc7a116f7879048303df6",
307
311
  "pipeline/multi-agent-refs/features/free-models.md": "64afaba7e7a77575f4ed6a10905a01330a83f573907fb1a5d5356ae6c80999a0",
308
312
  "pipeline/multi-agent-refs/features/jira-context.md": "7d14802ed9ad1747e1a06dec26f22ff9e8959e03c47d7a018af45b8274aea47c",
313
+ "pipeline/multi-agent-refs/features/jira-family.md": "4be05f296e6a2050355c218ed1cd33b489cd8c89ab798e1e44c7ba45fb9517b8",
314
+ "pipeline/multi-agent-refs/features/localization-reuse.md": "1a5bf13898eb83b65197c77a64736583fca67dc96ebab5df02482263e1091415",
309
315
  "pipeline/multi-agent-refs/features/maturity-followup.md": "e663e5bcf0b3b4d4d2a67f4516dbb9fb12520dfbdedb47a9c5f57c13a9a0633e",
310
316
  "pipeline/multi-agent-refs/features/model-fallback.md": "5647b4dbeed6fea21d264f03a85796727a83a001710a8bcbb3932c5a3914d6c5",
311
317
  "pipeline/multi-agent-refs/features/mutation-probe.md": "e6d622ab061f6cdcc16da40311e8e7aeae3e6f3c1d4b76d3849859a48a8ae31a",
@@ -333,14 +339,14 @@
333
339
  "pipeline/multi-agent-refs/features/stack-skill-routing.md": "1989f7f64be6c5ee0a42d8e9962aead7cd7472d795915ab953d89d9382f317e6",
334
340
  "pipeline/multi-agent-refs/features/unattended-gates.md": "46b516cac81a4eacf5d58bc3b1613e2266c26f1559be8dac060d1dc6b7d7ca01",
335
341
  "pipeline/multi-agent-refs/features/unattended-security.md": "f0f05ed17bbf26a50fa0f88d890f7ac3ccb8f78f169b9f759e997299fdeb5cac",
336
- "pipeline/multi-agent-refs/features/url-enrichment.md": "72e01a799d9fa54b56c762ba404a9f9236adbbf98320e395a96f6b0f5917e76b",
342
+ "pipeline/multi-agent-refs/features/url-enrichment.md": "14c6fcadd31cecf85011d936021a2103d87d37f618a0aab07c693be63aeae210",
337
343
  "pipeline/multi-agent-refs/features/usage-reporting.md": "12e8b4ee6170431ea980da829415beeb8dce9381a658b5d70a569ece98799438",
338
344
  "pipeline/multi-agent-refs/features/valven.md": "13b1fb8a3815330f6f970181506ac117e0d1c42761e5a83454edbd0b383ee1a7",
339
345
  "pipeline/multi-agent-refs/features/verify-by-test.md": "b0735adaa7ead797167b8d9ea48a10851a138083c6e638738cc96c66b02a1e37",
340
346
  "pipeline/multi-agent-refs/features/verify.md": "1a6db5e7239eac01e51100353013abd16bf785a7fce88b40139fca27f4166be4",
341
- "pipeline/multi-agent-refs/features/visual-evidence.md": "2b6aa2e4ff05c7a1fbe9e0fedfa4b28b9ad01c93a64f1ca6f6cd3e02293866aa",
347
+ "pipeline/multi-agent-refs/features/visual-evidence.md": "b7154dfe41f5069ad74883c73d04a4f7e5431c7e654151ab041b2981cd4ab134",
342
348
  "pipeline/multi-agent-refs/features/worktree-finalize.md": "628f627b94927a9c4a5b0b261fed1f0ffa42d4155390d57b5e56566a26ed8193",
343
- "pipeline/multi-agent-refs/generate-issue.md": "7a57f920ad72078fe9d75f561b5dac9aa3b504eb0c539a4598cb7080dc6bdbd7",
349
+ "pipeline/multi-agent-refs/generate-issue.md": "3e5182b9d6848e852ee3c7f397687f45c05e0861360cb77185c0a27d503a685c",
344
350
  "pipeline/multi-agent-refs/help/en.md": "2164743d020630b650d4b3313113e323c3a879e773540475b59bcedc20cb4916",
345
351
  "pipeline/multi-agent-refs/help/tr.md": "2325b840682a9b5ca3d99361fedf165f0bfa8ab6dd4a2f33c19cce7fb5b9f95f",
346
352
  "pipeline/multi-agent-refs/issue-jira-triad.md": "a12f4e3b75badf8a466e0c3531a5f0e12e44a1dd7799522fb03ff11068ce391d",
@@ -354,18 +360,18 @@
354
360
  "pipeline/multi-agent-refs/orchestrator/skill-loading.md": "6827d45f067d3db66fe7a6043308164aaf8a3da7620d018d7ed6459e4356f476",
355
361
  "pipeline/multi-agent-refs/outside-the-pipeline.md": "f62960921b2fbebd54914cec7503bfb5e3c3024f30fb3e0ead7e08e36a8139aa",
356
362
  "pipeline/multi-agent-refs/payload-contracts.md": "77b10f1d616c20b96c8f83185f9b507c9764fdc69eae1795bff9127ecbc6f37e",
357
- "pipeline/multi-agent-refs/phases.md": "730d598b27b8df4776adece9487f51e4835dbdb5a7d33c097e272f3360cbe844",
363
+ "pipeline/multi-agent-refs/phases.md": "77d04389edaa7aaf4e3a0faffebb2d2228b9e635fcb1e91f48b3f7d351f8aff4",
358
364
  "pipeline/multi-agent-refs/phases/log-format.md": "62d51e57cca8445ab40f3c0dc29615e4b5c8e4743286bf9ef0173610e81397aa",
359
365
  "pipeline/multi-agent-refs/phases/modes.md": "0733e20dce458c09f30343db9149fc93bc5a4c9531670b93952f223811dcb1aa",
360
366
  "pipeline/multi-agent-refs/phases/operations.md": "9506a26684abfff1e332d92c2321e840544fd4f049aff9f118731e198dabca94",
361
- "pipeline/multi-agent-refs/phases/phase-0-init.md": "fe67c915e16adc477c45861b4e0b51f0a4c80189f41f3388883296952cd6acf0",
367
+ "pipeline/multi-agent-refs/phases/phase-0-init.md": "3817e3be71adbf30a082713895531ef0e7fed29a32b77ce351103f1dfcd8669c",
362
368
  "pipeline/multi-agent-refs/phases/phase-1-plan.md": "de3f3dc16ae8853740540caa5497d2f18f016dcb7ea0bfc280ca5c136259a078",
363
- "pipeline/multi-agent-refs/phases/phase-2-dev.md": "7a87dcf07fc36d877eea92a34c1137dba8cd1f7865c8de83959fb2929bd4c248",
369
+ "pipeline/multi-agent-refs/phases/phase-2-dev.md": "fd41c31112e7fd0b547b6210cb6134a383ceb44889cbafc39069fc97d05e5ce6",
364
370
  "pipeline/multi-agent-refs/phases/phase-3-review.md": "60d3bff0370e3a31cbc7824560bd8598c19da0c4025be71e1df60661202d2a38",
365
- "pipeline/multi-agent-refs/phases/phase-4-commit.md": "e0a4f3126f30fe8cee5a765a1220a3e5eaf67d344b0b4f03d0ced7cf1e451144",
366
- "pipeline/multi-agent-refs/phases/phase-5-report.md": "7b76189879b7c371cac9edf1dc87a9a5ce65ae6d1f08018724ab0e6e77bc92d8",
371
+ "pipeline/multi-agent-refs/phases/phase-4-commit.md": "49565e1d4bff37e60b6299787e77456d1b1707e42d03a1797612be0604bd0983",
372
+ "pipeline/multi-agent-refs/phases/phase-5-report.md": "293e5071c1465a441a0a54dd9bd8963f6c5d2a0158653f5dd8ff3bf0613ed8ae",
367
373
  "pipeline/multi-agent-refs/picker-contract.md": "c03970ad8ebb36ff8742b41cc05b615a907d0cbd363e714a3da687f4aed25bba",
368
- "pipeline/multi-agent-refs/platform-parity.md": "5ff185f06cd99fa99cbbc32841512090a23c128f0a6adccfc4fc430e75caf46b",
374
+ "pipeline/multi-agent-refs/platform-parity.md": "1fa6189ad94ecd3e8a9f15980f19174dc86468050a6de3afff7aa30de60aa689",
369
375
  "pipeline/multi-agent-refs/progress-contract.md": "d1dc3c117aeb880cd44b3439062e9fe7d5e2042ba00c49fd495f70a6bdc1addc",
370
376
  "pipeline/multi-agent-refs/prompt-assembly.md": "5be25fe3e91ab4f997735907b53c8284fad289c60960e71445e0e8632d2704d1",
371
377
  "pipeline/multi-agent-refs/readiness-review.md": "1413e47dc97a54c0a2bd597f996203f24ee8a356f3d5d8690b42b2dad47ddc40",
@@ -395,7 +401,7 @@
395
401
  "pipeline/multi-agent-refs/sync/dev-toolkit.md": "b23817e65f3e386bc9b5937995f57394cb00e24147292a461888fb52f80a27e6",
396
402
  "pipeline/multi-agent-refs/sync/stack-plugins.md": "07cba6d08f60c6ef6eecd90f373ec35db1bf6f98013cf12fe51155a77e76c748",
397
403
  "pipeline/multi-agent-refs/threat-model.md": "3628881538b846f94decd78e389b34b473ba6f91b6e6dcf5c927d307ed264bea",
398
- "pipeline/multi-agent-refs/tracker-contract.md": "87a68491247494d08947658c78af4ec72f2f021e22cc7a0d9f16661dc5cc670d",
404
+ "pipeline/multi-agent-refs/tracker-contract.md": "938c05104143a9db45fe393636c5d81625dc65d2cb065945efad3bf885eff4c4",
399
405
  "pipeline/multi-agent-refs/unattended-contract.md": "554eeeda1469f405eaf8d59ef11a62efbb6919f06bd9950dc856b0be891e702b",
400
406
  "pipeline/multi-agent-refs/web-guide.md": "714cba0d92fa45bf71fbff21bb2f09c88534ebf785b3a2ea96d18037e2e7f7f9",
401
407
  "pipeline/multi-agent-refs/website-deploy.md": "ce819c8b1ef8e8ec3257611379aaf0ab4678e08e0b58bd88c936e98cb8ead609",
@@ -415,7 +421,7 @@
415
421
  "pipeline/rules/swiftui-qa.md": "8c4afe9e72413e7bdab655f3d17588469e80ac34cb7ad2a690901fc5b6534818",
416
422
  "pipeline/rules/tdd.md": "4c1b3114506aa9794c9bb1e1aee1b1bbb4a993d192342e5697cc00bc2f6ea4a2",
417
423
  "pipeline/rules/testing.md": "695be5520b65451f0aa300a9643df2c05e607ff6ad372201ea34798dc5998bd5",
418
- "pipeline/schemas/agent-state.schema.json": "a53f8ae0e827034cc44df05fb5a42bd04f6d3ef27a3bda782e9511f0efddc096",
424
+ "pipeline/schemas/agent-state.schema.json": "96c8a9d57b4ab14332c81a098a9da20828128f5dc1c1924a1bde17d65752087b",
419
425
  "pipeline/schemas/analysis-output.schema.json": "41826f4bf7c96778f8cdbcc68531e984087897d438b7b49ac5a93fc29db47916",
420
426
  "pipeline/schemas/analysis-spec.schema.json": "43770223266be1c94e2cdea585efb6783043353bc5a374613b554596f46e1bcd",
421
427
  "pipeline/schemas/answer-request.schema.json": "29d4211a2a05a230e0707b171b73341d2e56f6b83edb178b731905211aab4e23",
@@ -469,7 +475,7 @@
469
475
  "pipeline/schemas/plan-todos.schema.json": "be4374b7eeb513fb8a7663374defa5b35ae084f72e112faa41b07c46532c50de",
470
476
  "pipeline/schemas/planning-output.schema.json": "6aea9b5b8bbf7f9a227215c29cc30a5b642981a02fe2a81eaf9e8a113f7c3947",
471
477
  "pipeline/schemas/pr-request.schema.json": "ae75c4856349d62834802b1189af516bb6fb3d36646831b7ff2fa61d938afcd0",
472
- "pipeline/schemas/prefs.schema.json": "82b1442c6ebc89f1ae518dce1e61a44c90e76e62a1118af25a1e7cc97ca90741",
478
+ "pipeline/schemas/prefs.schema.json": "776ea725896456f4853cf7959cab9fdbd3dc34bdaa8e0eaf74b61e93c11710ff",
473
479
  "pipeline/schemas/repo-profile.schema.json": "1a74ef8330da9a26a5a70955f6f9cbb20eda54a8615efaf86c7993d420a7f04e",
474
480
  "pipeline/schemas/repos.schema.json": "a9bf56f25c66201c170912e3389bd73e4a3f61922410f83e31a6c6ba47aee861",
475
481
  "pipeline/schemas/research-output.schema.json": "54e3ba1b04fdc20fbaa84333b943a8ab95d1395c7b0e0aedc67929184cb49523",
@@ -495,7 +501,7 @@
495
501
  "pipeline/schemas/token-budget.schema.json": "126292faf6a49db0929d1bcb01be888ef7de4a3938cb7d88a0cf7ee786ffb297",
496
502
  "pipeline/schemas/triage-corpus.schema.json": "b919fe3d69443d78e55d875f54717c745320ff94d34c516b0ca32f358ebec2e5",
497
503
  "pipeline/schemas/triage-output.schema.json": "60e329a22cea0f0ed9fa1e8e78f9b512ef283277346b08a194ad491e0bad0995",
498
- "pipeline/schemas/unattended-policy.json": "64ca8d36c29766af2f9e94435f017650799ee62a8ad04c5d5cf802b75550073b",
504
+ "pipeline/schemas/unattended-policy.json": "423f5d79663fea92dc4035b9e7480acb0ee732a7d89a094ab2bcd252d0f819d3",
499
505
  "pipeline/schemas/unattended-policy.schema.json": "d1aab1b49541ca77c3ca5ee69158878b61ea47a5bfdfe06cd548c3315ffd09c4",
500
506
  "pipeline/schemas/unattended-profile.json": "25ca36388640a22b47b08f01f515b192ee4210eb820c85fd3d0485e0247afd8c",
501
507
  "pipeline/schemas/unattended-profile.schema.json": "a9c0979f0d0742826e410fdbfe1ae1c4a56b05b4e638eec42d4c276d6f48f701",
@@ -518,6 +524,7 @@
518
524
  "pipeline/scripts/_redact.mjs": "9d4fb3fa72c45cf14dc3dc9e950969f688c0d34f71c9e39efca0f68dbed15b54",
519
525
  "pipeline/scripts/_retrieval.mjs": "c887d90701b610cdc25ad49090c3e2786de4135e73b8d423dc01aa56336edf2f",
520
526
  "pipeline/scripts/_run-paths.mjs": "186266e09ffaf793525c0b25572006c9f37cdd2c6ce35abaacb172802476f573",
527
+ "pipeline/scripts/_sibling-root.mjs": "1acd7c997256a44aae19dc38788dda28e0245e9750b851af38ad0c307464e936",
521
528
  "pipeline/scripts/_smoke-root.sh": "dad129959a4e37a0cd0f4f6c04f6d66c5a43752b2bf33989db9c002eb106b832",
522
529
  "pipeline/scripts/_stack-adapter.mjs": "a754c042d237cd03abf11c6909099a7a3ea798cdd13d49b03787797fd3496cd7",
523
530
  "pipeline/scripts/_stack-routing.mjs": "d1f804d457295e5cc8ad7039e8c29431f0e9f52f4396cc54c1305eb82b9b61e9",
@@ -591,7 +598,7 @@
591
598
  "pipeline/scripts/gc-refs.sh": "04e91087885bac10ee692cc24914342a459bcfc5533574894e40e43587cec325",
592
599
  "pipeline/scripts/gc-tmp.sh": "e833f742b9ca54fde78c58c3d473593a3a093ce35d6e30631e662a84a6ad6efe",
593
600
  "pipeline/scripts/gc-worktrees.sh": "06d0a53b9293531f4b8501618648440b668ba1ef60c121576c55b0e203dcfc62",
594
- "pipeline/scripts/gen-facts.mjs": "6ba70f7db881c3e3577a5ce3dcbfda09aa240f728ee577b019f2176d8051fd67",
601
+ "pipeline/scripts/gen-facts.mjs": "9e3cffc52882d44c32b60f9ab8eb47a912227ab094f6e896055d2a9c403b3ad1",
595
602
  "pipeline/scripts/gen-mode-dispatch.mjs": "c6fd6772888bd928a9e8ac1bddd4effca5f6e7e51d07cee4c7264d48b5a96fac",
596
603
  "pipeline/scripts/gen-skills-index.mjs": "64606fb3165786ed1488cc368dcbe8f53d2e9402f02578823a31838b9730180d",
597
604
  "pipeline/scripts/git-path.mjs": "e82e0da227fe30f48a50f352556b1769b68e7647f13540d0ab265cbde8a77735",
@@ -606,8 +613,9 @@
606
613
  "pipeline/scripts/host-hooks.mjs": "19fa3afc4c5caead2905144fe7727eacaa7c8e1fee5db20cfdfb8879e5aa7704",
607
614
  "pipeline/scripts/issues.mjs": "66c787f1d6be924a61cb8b1504354dd7fb0de89a2afee744aa31435b834ef383",
608
615
  "pipeline/scripts/jira-attach.sh": "300b6eb76ae2179324f70a2131388c0f56ca8bf49397cc858937b4d7f47372db",
616
+ "pipeline/scripts/jira-family.mjs": "b5860c5702ec8c03d0a9ac222fe9728c147445eab32c72173fa077ef82dcf632",
609
617
  "pipeline/scripts/jira-search.sh": "afa2e552eec83bf7ab8bc1aa43b99c7480a82bfbfc808ce22c89df1b57e90563",
610
- "pipeline/scripts/jira-wiki-escape.mjs": "79f5444e4684aaf09afc272e0c99df22c4976d3a9028dc901c9905dbf8861ecf",
618
+ "pipeline/scripts/jira-wiki-escape.mjs": "655a170c1ea0d366a7eac9eb25fbf80ddcd19d1d3315bbf75b210908d14237f9",
611
619
  "pipeline/scripts/keychain-save.sh": "7cc4d81acd88d84d710fa733d5c9604a0acb3d924738216ac7d34040bad7ae29",
612
620
  "pipeline/scripts/keychain.py": "727f55c6e2b87c6078d4a54cc9470b16fc4610abb3a24c60fdd226ae0bf10391",
613
621
  "pipeline/scripts/launch-request.mjs": "826c5ec100cd7def4d55c94894582959c1ce325ffc9527e4b3fe43c89fdd8b10",
@@ -637,6 +645,7 @@
637
645
  "pipeline/scripts/plan-complexity.mjs": "ac8e4ad857cabc80fe4051bec84490bb91bfdf75d61cfdad93e315d0965f04b8",
638
646
  "pipeline/scripts/plan-coverage-gate.mjs": "1a83bc52584438a9bd5cba96d2ddefed92a6a317d30ee695e67ef6c00b93e5a8",
639
647
  "pipeline/scripts/plan-critique-gate.mjs": "b139394e5f16d11e4997d0bb0b08529f439dbd7fad39781ef4c2475247d8fa97",
648
+ "pipeline/scripts/plan-remote-links.mjs": "81673a25b9b9f19edd15ebd1e198552b658a7ec6d138658ec4e6e5b58213bb3a",
640
649
  "pipeline/scripts/plugin-refresh.sh": "687a33199ad963616ab537e32210ec8c967e76ecc42f494ee8a1dc9fe947fc30",
641
650
  "pipeline/scripts/pr-request.mjs": "e6f4ded2366c6599bb345b3011ecc771e13b8a1561afa4c9a50bca4edff17456",
642
651
  "pipeline/scripts/pr-timeline.mjs": "6a12df12a72f3440796569d3264edb0b3e105be6e4f2e26e958a5a0da340d05c",
@@ -651,6 +660,8 @@
651
660
  "pipeline/scripts/release-notes.mjs": "05430926cf679534978bcc79c160a6787aaf04831b8b8489d8bbc9fa343a14af",
652
661
  "pipeline/scripts/render-agent-log-cost.sh": "6c58c1f5754ff5754485a0c1b66f4cd713575d2e8ebb1630aedf2f87fe34ef4d",
653
662
  "pipeline/scripts/render-cost-summary.sh": "ce9647332ab9a3e518af98f52a6fc70baab9fd3c09ec5f9e85bae2d67078a5e3",
663
+ "pipeline/scripts/render-flow-run.mjs": "817ee3b73c41e088e9fb439e5c90970f7697b963f6c895a994c4774d30f8bab2",
664
+ "pipeline/scripts/render-jira-evidence.mjs": "a7bb663ef688ef9bb6e85995089c10b9faa5a9a621c5430ff7925d761571f3cb",
654
665
  "pipeline/scripts/render-work-summary.sh": "ee4db04ebc145cc2fc7fa9a533d42b7da4da191710ef67c883502ca83b2aa67c",
655
666
  "pipeline/scripts/repo-map.mjs": "175dcaeb548e8a018ad36cf661f3bdcb9340d32439fd4d92918fd6b3ab175730",
656
667
  "pipeline/scripts/repo-profile.mjs": "5f0cf90c59accdb0bb763fab9512e271e3cc4c8bc930ece137d94baa5c8e08d9",
@@ -724,7 +735,7 @@
724
735
  "pipeline/scripts/worktrees.mjs": "90dfd09b70fffe9b56c331a4ae2692cc248f4898f4ee6aee4239ef0b20888a90",
725
736
  "pipeline/scripts/write-state.mjs": "e1198bf970eace07d3eff22b394808a526e473df65d3d58aa2d5a12cfdac8b49",
726
737
  "pipeline/scripts/write-store-config.mjs": "b994a061f6febb2ca3d396074d8b51d2c1c1f991d3072d321703380da3639a56",
727
- "pipeline/skills/.skill-manifest.json": "62b0ff370385c7299a9cb13bb36234bbd618a10fcd3d33e28490816741e526cd",
738
+ "pipeline/skills/.skill-manifest.json": "a69acae761b7293cac14475e0f403f5d2c39a15e767018e473eb3ecbe4b61cce",
728
739
  "pipeline/skills/.skills-index.json": "bfb04a72333aec2c25e21c8edce4a76e2128e5e7f1e88b0cd780e7f1cc6bf370",
729
740
  "pipeline/skills/shared/README.md": "47f5c77556bf1676857fe6a803fc5c85da5cd32e1b0332a6f3728b6da610cc58",
730
741
  "pipeline/skills/shared/core/apple-archive-compliance/SKILL.md": "7239fef717ea45b79276bfcc2c3903acd57950b6e00dd6a2a66399c4b09cbd51",
@@ -740,9 +751,9 @@
740
751
  "pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md": "a9731771fbc1f45260f214f069b976eff16e7b25e2f1375b0d9a213575271bc6",
741
752
  "pipeline/skills/shared/core/multi-agent-bug-bash/SKILL.md": "a44ad2520ef24444b68d9040519f82498abda3ebb6467890bb6b5e1460299400",
742
753
  "pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md": "8534891d1198597a0893d131e6b944d15443f62b24cb5584c486a235845fd281",
743
- "pipeline/skills/shared/core/multi-agent-channels/SKILL.md": "03f7c648e1938f3d6d7c48d4c1c01f2bd734cdce873ec5203120b5be3ae761db",
754
+ "pipeline/skills/shared/core/multi-agent-channels/SKILL.md": "b55e8461a1bcdc1b4b88c42e086f599fccda2a89d7f56a29ac11e5ebc12a3623",
744
755
  "pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md": "dd30708491303902aa8629130809e9601c2096dc12aa9fc671f798142cea3485",
745
- "pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md": "5aad0d841e9e5b7140bb441e07819209ca64c5b6fc209d6ad586b5fbb353e377",
756
+ "pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md": "15efd1a0c661f848c2afa427015cd6c31e9f6680900111a4ab1a2e34ad705e81",
746
757
  "pipeline/skills/shared/core/multi-agent-design-check/SKILL.md": "8888744fa52e935f53db9a1068e1b18c636b6c9d55b084dabfc19b9ae68bf6f8",
747
758
  "pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md": "e0ccaabe77d242f26aca9fa3010e02adc4edd07eeb55230396300caefffe91d2",
748
759
  "pipeline/skills/shared/core/multi-agent-doctor/SKILL.md": "2f6222cdef9c6b2b4e2e330ba0acee33ab0fb797029bb16c50bbb244be5fcbe6",
@@ -796,7 +807,7 @@
796
807
  "pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md": "b6c360c330ef0094cd7e7d9624e89624446b048951e43a180766bbe67d1b725c",
797
808
  "pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md": "9dccf78ffc2fb014d83f67d683d395f56f4fad8b5a36b9aa84e6cbd075b58818",
798
809
  "pipeline/skills/shared/core/multi-agent-update/SKILL.md": "2f9e224e240e1c9053a59066678f869ae36f18c088482488f3bda8fd207148ea",
799
- "pipeline/skills/shared/core/multi-agent/SKILL.md": "b2435de3df518efb8ddf9ac89b3089449e46bf55f29220e07a3aa95dfc8cd083",
810
+ "pipeline/skills/shared/core/multi-agent/SKILL.md": "079b49a1981c63d90798089a343b7f324571c4f7cc6ad3fb757e82719c35eb0a",
800
811
  "pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md": "400842e4653f038fad22509fe3f3d152151120758f5f9b170e6dba59afaf4a48",
801
812
  "pipeline/skills/shared/external/NOTICE-dimillian-skills.md": "f9c3d783fd3563418c18291b90899251e890fd3fa8ee353c8c1fbbe61078526e",
802
813
  "pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md": "bca5fe8779df70fb0f234483d65ff3562c67521e719b69b22aac260803b75244",
@@ -1001,7 +1012,7 @@
1001
1012
  "pipeline/skills/shared/external/ios-iphone-duo/references/api-map.md": "ec7d0b3dab323db1951c2b5319691f611466012b970823333a233e33c2a338d4",
1002
1013
  "pipeline/skills/shared/external/ios-iphone-duo/references/fixed-assumptions.md": "4a3e52a72b48851adc43ec702c4dbbc9d9d313a7b56409553406885b5606fdab",
1003
1014
  "pipeline/skills/shared/external/ios-iphone-duo/references/poses-and-panes.md": "f06bd8689cf793c239125327f4ec74f234c49beda277467cdebc7366ff76909f",
1004
- "pipeline/skills/shared/external/ios-localization/SKILL.md": "3ee1a34bbf6c0b77e1e9f16cb7d8bc3d10f2ba7bf6d0b48e64126afcf9dbe2b6",
1015
+ "pipeline/skills/shared/external/ios-localization/SKILL.md": "eb1e0dc8f68d4d6c29af6562186060f265ce4fadad633638d18b9aee098bfe4a",
1005
1016
  "pipeline/skills/shared/external/ios-localization/evals/evals.json": "f80b7a9d9a4a262c6df824ba8c4bf1a762d98d0a12501bead04e8cd6a016cc6e",
1006
1017
  "pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md": "3b9aa4a911625a5b246c728d5afe6ec52701d362980de528c554b25b4801a3e8",
1007
1018
  "pipeline/skills/shared/external/ios-localization/references/string-catalogs.md": "6e103989d396c43ab3c0e4b2d5df6da34ba6b2d33fae649d84ec4f38f5811ace",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.25.1",
3
+ "version": "20.27.0",
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",
@@ -116,10 +116,10 @@
116
116
  "ajv": "^8.20.0",
117
117
  "ajv-formats": "^3.0.1",
118
118
  "c8": "^12.0.0",
119
- "eslint": "^10.10.0",
119
+ "eslint": "^10.12.0",
120
120
  "eslint-config-prettier": "^10.1.8",
121
- "eslint-plugin-n": "^18.3.0",
122
- "prettier": "^3.9.6",
123
- "publint": "0.3.24"
121
+ "eslint-plugin-n": "^18.4.1",
122
+ "prettier": "^3.9.10",
123
+ "publint": "0.3.25"
124
124
  }
125
125
  }
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  description: "Multi-channel reporter - Jira/Confluence/Wiki/PR description/Board status. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbucket PR PUT, GitHub Projects v2 board status move. Phase 5 delegates to this skill; users can invoke post-hoc by Jira ID / PR URL / branch."
3
3
  description-tr: "Çok kanallı raporlayıcı - Jira/Confluence/Wiki/PR açıklaması/Board durumu. Çoklu kanal + içerik seçimi, humanizer geçişi, reviewer'ı koruyan Bitbucket PR PUT, GitHub Projects v2 board durum taşıma. Faz 5 bu skill'e delege eder; Jira ID / PR URL / branch ile sonradan da çağrılabilir."
4
- argument-hint: '[Jira-id | PR-url | #N | Jira-url] [--channels pr,jira,confluence,wiki,board] [--content normal,technical,test,auto-diff,note] [--message "..."] [--message-file path] [--board-status <key>] [--dry-run] [--append] [--ready]'
5
- parameters: [{"name":"target","kind":"text"},{"name":"--channels","kind":"enum","repeat":true,"enum":["pr","jira","confluence","wiki","board"]},{"name":"--content","kind":"enum","repeat":true,"enum":["normal","technical","test","auto-diff","note"]},{"name":"--message","kind":"text"},{"name":"--message-file","kind":"path"},{"name":"--board-status","kind":"text"},{"name":"--dry-run","kind":"flag"},{"name":"--append","kind":"flag"},{"name":"--ready","kind":"flag"}]
4
+ argument-hint: '[Jira-id | PR-url | #N | Jira-url] [--channels pr,jira,confluence,wiki,board] [--content normal,technical,test,auto-diff,note,test-run] [--flow-run <runId>] [--message "..."] [--message-file path] [--board-status <key>] [--dry-run] [--append] [--ready]'
5
+ parameters: [{"name":"target","kind":"text"},{"name":"--channels","kind":"enum","repeat":true,"enum":["pr","jira","confluence","wiki","board"]},{"name":"--content","kind":"enum","repeat":true,"enum":["normal","technical","test","auto-diff","note","test-run"]},{"name":"--flow-run","kind":"text"},{"name":"--message","kind":"text"},{"name":"--message-file","kind":"path"},{"name":"--board-status","kind":"text"},{"name":"--dry-run","kind":"flag"},{"name":"--append","kind":"flag"},{"name":"--ready","kind":"flag"}]
6
6
  gui: form
7
7
  destructive: false
8
8
  confirm: none
@@ -11,7 +11,7 @@ allowed-tools: Read, Write, Edit, Bash, Grep, WebFetch, AskUserQuestion
11
11
 
12
12
  # /multi-agent channels - Multi-Channel Reporter
13
13
 
14
- > **TLDR** - Single entry point for posting task reports to external channels. Supports Jira, Confluence, Wiki (component-only), and PR description updates. Multi-select channels × multi-select content sources. Phase 5 of the pipeline delegates to this command; users can also invoke it post-hoc by Jira ID / PR URL / branch.
14
+ > **TLDR** - Single entry point for posting task reports to external channels. Jira, Confluence, Wiki (component-only), PR description. Multi-select channels × content. Phase 5 of the pipeline delegates to this command; users can also invoke it post-hoc by Jira ID / PR URL / branch.
15
15
 
16
16
  **Claude Code invocation:** `/multi-agent:channels <target>`
17
17
  **Copilot CLI invocation:** `multi-agent-channels <target>` (top-level command, dash-separated per Copilot no-namespace convention)
@@ -97,7 +97,7 @@ When the preview renders:
97
97
  When the preview does NOT render (no state, or pref explicitly off at global level with no override):
98
98
  - Skip 3a silently, go straight to the channels picker. The workSummary row in 3b stays at its pref default (`false`).
99
99
 
100
- After the preview prints, 3b renders the two pickers: **Channels** (PR description, Jira comment, Confluence page, Wiki, Board; each unavailable one greyed with its reason) and **Content** (normal analysis, technical analysis, test scenarios, PR auto-diff, manual note, cost summary, work summary).
100
+ After the preview prints, 3b renders the two pickers: **Channels** (PR description, Jira comment, Confluence page, Wiki, Board; each unavailable one greyed with its reason) and **Content** (normal analysis, technical analysis, test scenarios, test run, PR auto-diff, manual note, cost summary, work summary).
101
101
 
102
102
  **Why auto-tick:** the user just saw the summary and is most likely sending it; the explicit pref still wins.
103
103
 
@@ -111,7 +111,7 @@ After the preview prints, 3b renders the two pickers: **Channels** (PR descripti
111
111
  - "Normal analiz" + "Test senaryoları" unselectable if no pipeline log found. Reason: `"(no pipeline log for PROJ-12345)"`.
112
112
  - "Teknik analiz" unselectable if no Phase 1 planning log AND no PR diff available. Reason: `"(no technical source - need Phase 1 plan or PR diff)"`.
113
113
  - "Auto-diff" unselectable if no PR found. Reason: `"(no PR linked to this target)"`.
114
- - "Manuel not" always available.
114
+ - "Manuel not" always available. "Test Koşumu (Xray)": `channels/test-run.md`.
115
115
  - "Cost özeti" unselectable if `phase-tracker.sh cost total` prints `-` (no priced token tallies; there is no `status` action) AND no `otel-spans.jsonl` exists for the task. Reason: `"(no tracker data - set MULTI_AGENT_OTEL_SPANS=1 or enable token tracking)"`.
116
116
  - "Yapılan iş özeti" unselectable if no `agent-state.json` exists for the task (post-hoc call with `--branch` + `--base-branch` flags restores partial availability). Reason: `"(no agent-state.json for {taskId})"`. **Auto-ticked** when Step 3a preview was shown - user can still uncheck before confirming the menu.
117
117
 
@@ -137,10 +137,8 @@ For each selected **content** source, produce one section body. Each section run
137
137
  ticket and by whoever tests it, so its comment carries the four sections
138
138
  `channels/jira.md` fixes - `summary` (`Geliştirme Özeti`), `test_scenarios`
139
139
  (`Test Senaryoları`), `impact` (`Etki Analizi`) and `context_refs`
140
- (`Bağlantılar`) - and nothing else. Technical sections go to the PR and to
141
- Confluence, where the reader is a code reviewer. A shipped Jira comment once
142
- explained a hash-table mutation across three paragraphs of class names; it was
143
- correct, and it was the wrong document. When `jira` is a selected channel, drop
140
+ (`Bağlantılar`), plus `test_run` when selected - and nothing else. Technical sections go to the PR and to
141
+ Confluence, where the reader is a code reviewer. When `jira` is a selected channel, drop
144
142
  the technical sections from its body rather than converting them: the PR link on
145
143
  line 1 is how a Jira reader reaches the detail.
146
144
 
@@ -154,6 +152,7 @@ lead reads before deciding how wide to test.
154
152
  | Normal analiz | `### Analysis` - impact summary from Phase 1, risks from Phase 4 (pipeline-log source, high-level only) |
155
153
  | Teknik analiz | `### Technical Details` - Changes (what/why per file group), Architecture (structural decisions, pattern changes), Dependencies (new imports/frameworks/packages). Source: Phase 1 planning + Phase 2 dev log + `git diff --stat`. **PR and Confluence only** - never rendered into a Jira comment. |
156
154
  | Test senaryoları | `### Test Scenarios` - precondition / steps / expected table (4-8 rows), user perspective |
155
+ | Test Koşumu (Xray) | `### Test Koşumu` - Xray Test Execution of the task's UI scenario run (`channels/test-run.md`) |
157
156
  | Auto-diff | Old enrich Output Template verbatim - Root Cause / Solution / Changed Files / Test Scenarios |
158
157
  | Manuel not | `### Notes` - user-provided paragraph, or LLM-split into subsections if `--message` is plain text and long |
159
158
  | Cost özeti | `### Cost Summary` - per-phase token tally + est. USD table. Source: `phase-tracker.sh` phase status + optional OTel spans. See "Cost summary generation" below. |
@@ -161,7 +160,7 @@ lead reads before deciding how wide to test.
161
160
 
162
161
  **The content options are sources, not the body's shape.** Which sections a PR
163
162
  body carries and in what order is fixed by `channels/pr.md` (`summary` →
164
- `technical` → `architecture` → `impact` → `test_scenarios` → `visuals` → `risk`
163
+ `technical` → `architecture` → `impact` → `test_scenarios` → `test_run` → `visuals` → `risk`
165
164
  → `dependencies` → `build` → `related`); the options below choose what gets
166
165
  gathered to fill them. A content option left unselected means a section has no
167
166
  source, not that the section may be reordered or renamed.
@@ -202,6 +201,8 @@ source, not that the section may be reordered or renamed.
202
201
  1. {step}
203
202
  2. **Expected:** {what should still behave as before}
204
203
 
204
+ ### Test Koşumu ← if "Test Koşumu (Xray)" selected
205
+
205
206
  ### Notes ← if "Manuel not" selected
206
207
  {user message}
207
208
 
@@ -241,7 +242,7 @@ If no cached report exists, skip silently - this is augmentation, not a gate.
241
242
 
242
243
  **Work summary generation:**
243
244
 
244
- Emitted only when `reportContent.workSummary === true` and at least one of (`agent-state.json`, `--branch` flag) is available. The shell adapter is `$HOME/.claude/scripts/render-work-summary.sh <taskId>`, and that script's own header is the spec for what it emits - task header, scope delivered, changed files, review outcome, phase strip - including the caps and the hidden-when-empty rules. Re-stating those five steps here gave the pipeline two specifications of one script, and the prose one is the copy that rots. Exit 2 means the state was unreadable: skip the section, do not substitute a hand-written one.
245
+ Emitted only when `reportContent.workSummary === true` and at least one of (`agent-state.json`, `--branch` flag) is available. The shell adapter is `$HOME/.claude/scripts/render-work-summary.sh <taskId>`, and that script's own header is the spec for what it emits - task header, scope delivered, changed files, review outcome, phase strip - including the caps and the hidden-when-empty rules. Exit 2 means the state was unreadable: skip the section, do not substitute a hand-written one.
245
246
 
246
247
  **Output template:**
247
248
 
@@ -303,11 +304,11 @@ Skipped in exactly two cases:
303
304
  | Case | Why |
304
305
  |---|---|
305
306
  | Autopilot (`state.autopilot === true` or `MULTI_AGENT_AUTOPILOT=1`), attended | Explicit consent for side-effect creation: posts directly with prefs/flag selections |
306
- | `--dry-run` | Already prints without posting; a question would be redundant |
307
+ | `--dry-run` | Prints without posting |
307
308
 
308
309
  **Preview render** (one block per selected channel, final body after humanizer - shown in readable Markdown, channel-specific markup conversion happens after approval).
309
310
 
310
- Conversion is per-channel and two of the four channels have none. Do not reach for "the" conversion table - there is no single one:
311
+ Conversion is per-channel; two channels have none:
311
312
 
312
313
  | Channel | Conversion after approval | Table |
313
314
  |---|---|---|
@@ -316,7 +317,7 @@ Conversion is per-channel and two of the four channels have none. Do not reach f
316
317
  | Jira comment | markdown → Jira wiki markup | `channels/jira.md` "Wiki markup conversion" |
317
318
  | Confluence page | markdown → storage format | `channels/confluence.md` "Body conversion" |
318
319
 
319
- Applying the Jira table to the PR body is the recurring failure of this step: it is the only *text* markup table in the doc set, so it reads as the default. It is not. A PR body containing `h2.`, `{{code}}`, or `#`-numbered lists shipped raw wiki markup to a Markdown surface.
320
+ The Jira table is the only *text* markup table in the doc set and never applies to the PR body: `h2.`, `{{code}}` or `#`-numbered lists render there as raw wiki markup.
320
321
 
321
322
  ```
322
323
  ── PR description ({repoName} #{prNumber}, replace) ─────────
@@ -327,7 +328,7 @@ Applying the Jira table to the PR body is the recurring failure of this step: it
327
328
  {body}
328
329
  ```
329
330
 
330
- Secondary artifacts ride along as one-line intents at the bottom of the preview: Wiki page list, wiki → Jira triad comment (when Wiki is selected and the triad is active per `$HOME/.claude/multi-agent-refs/issue-jira-triad.md`), Board status move (`{from} → {to}`), GitHub issue comment + Progress-flag sync (Phase 5 Step 1.5 - same gate, see `$HOME/.claude/multi-agent-refs/phases/phase-5-report.md`).
331
+ Secondary artifacts ride along as one-line intents at the bottom of the preview: Wiki page list, wiki → Jira triad comment (when Wiki is selected and the triad is active per `$HOME/.claude/multi-agent-refs/issue-jira-triad.md`), Board status move (`{from} → {to}`), GitHub issue comment + Progress-flag sync (Phase 5 Step 1.5 - same gate, see `$HOME/.claude/multi-agent-refs/phases/phase-5-report.md`), test-run candidates to untick (`channels/test-run.md`), the Jira body's `--measure` (`render-jira-evidence.mjs`).
331
332
 
332
333
  **Then a single AskUserQuestion** (`picker-contract.md`; `question`/`label`/`description` in `outputLanguage`, `header` English):
333
334
 
@@ -352,7 +353,7 @@ Aggregated Markdown from Step 5 → PR description. GitHub uses `gh pr edit --bo
352
353
  Full contract: [`$HOME/.claude/multi-agent-refs/channels/pr.md`]($HOME/.claude/multi-agent-refs/channels/pr.md) - Bitbucket payload assembly snippet, version-mismatch retry, `--ready` promotion, multi-repo cross-link block.
353
354
 
354
355
  #### Adapter: Jira comment
355
- Sections: `summary` + `test_scenarios` + `impact` + `context_refs` only - the technical ones go to the PR and Confluence (`channels/jira.md` fixes the order). The PR URL goes on line 1, above the first heading. The wiki-markup conversion table lives in that same ref and only there: the four-row summary that used to sit here mapped `### ...` to `*...*`, which is italic, not a heading - a shrunken copy of a table is a second answer, and it was the wrong one.
356
+ Sections: `summary` + `test_scenarios` + `impact` + `context_refs` only - the technical ones go to the PR and Confluence (`channels/jira.md` fixes the order). The PR URL goes on line 1, above the first heading. The wiki-markup conversion table lives in that same ref and only there.
356
357
 
357
358
  Then post it - do not assemble the request:
358
359
 
@@ -360,10 +361,12 @@ Then post it - do not assemble the request:
360
361
  bash "$HOME/.claude/lib/jira-publish.sh" --issue "$JIRA_ID" --body-file "$F" --target comment
361
362
  ```
362
363
 
363
- The publisher escapes every body (Jira renders `:)` `(x)` `(!)` `(/)` as emoticon images, and a Swift selector like `login(source:input:)` ends in `:)`) and resolves the token from `keychainMapping.jira` without putting it on argv. The hand-rolled `jq`+`curl` this replaced kept the escape as a separate step, and a shipped comment turned `hash(into:)` into a smiley.
364
+ The publisher escapes every body (Jira renders `:)` `(x)` `(!)` `(/)` as emoticon images, and a Swift selector like `login(source:input:)` ends in `:)`) and resolves the token from `keychainMapping.jira` without putting it on argv.
364
365
 
365
366
  Full contract: [`$HOME/.claude/multi-agent-refs/channels/jira.md`]($HOME/.claude/multi-agent-refs/channels/jira.md) - full conversion table, multi-repo PR-list prepend, Wiki→Jira triad interaction.
366
367
 
368
+ **Issue family** (`state.jiraFamily` set): instead, `bash $HOME/.claude/lib/jira-family-write.sh plan --state "$STATE_FILE" --dev-body "$F"`, the Step 6 preview as one multi-select under `plan.confirm`, then `apply --state "$STATE_FILE"`: `$HOME/.claude/multi-agent-refs/features/jira-family.md`.
369
+
367
370
  #### Adapter: Confluence page
368
371
  Token from `keychainMapping.confluence`; missing/expired triggers the inline Save Flow from `setup.md`. Parent page picked from `prefs.projects[<project>].confluenceUrls` recents (LRU, max 5) or paste new URL. Auto-suggest title `"{jiraId} - {taskTitle}"`. Body converted to Confluence storage format (`<h3>`, `<table>`, `<ac:structured-macro>` code blocks). POST `/rest/api/content`; URL saved back to recents.
369
372
 
@@ -404,7 +407,8 @@ Persist selections to `prefs.global.reportChannels` + `prefs.global.reportConten
404
407
  | Flag | Effect |
405
408
  |------|--------|
406
409
  | `--channels pr,jira,confluence,wiki` | Non-interactive channel selection (comma list). Skips channel menu. |
407
- | `--content normal,technical,test,auto-diff,note` | Non-interactive content selection. Skips content menu. |
410
+ | `--content normal,technical,test,auto-diff,note,test-run` | Non-interactive content selection. Skips content menu. |
411
+ | `--flow-run <runId>[,<runId>...]` | Runs for the test run block (`channels/test-run.md`). |
408
412
  | `--message "..."` | Manual mode - use user text as source, no diff read. Forces `content=note`. |
409
413
  | `--message-file path` | Manual mode, long message from file. |
410
414
  | `--append` | PR description: append instead of replace. |
@@ -446,7 +450,7 @@ Phase 5 invokes this command internally instead of running its own inline Jira/C
446
450
  | Phase 5 | Progress tracker (sub-steps 1-3), agent-log finalization (step 4), knowledge+memory capture (step 5), telemetry emission |
447
451
  | `channels` | All external delivery: PR description update, Jira comment, Confluence page, Wiki pages |
448
452
 
449
- Phase 5 passes a runtime state bundle: `{jiraId, prUrl, remoteType, taskType, figmaConfig, agentState, pipelineLogPath}`. `channels` reads these directly, skips target-resolution Step 1.
453
+ Phase 5 passes a runtime state bundle: `{jiraId, prUrl, remoteType, taskType, figmaConfig, agentState, pipelineLogPath, flowRuns}`. `channels` reads these directly, skips target-resolution Step 1.
450
454
 
451
455
  **Autopilot contract:** Phase 5 ALWAYS pauses at the channels menu (breaks generic autopilot zero-interaction). 30-min timeout → session ends cleanly, task resumable via `/multi-agent:resume`. See `$HOME/.claude/multi-agent-refs/phases/modes.md` for full contract. The Step 6 body preview + approval gate follows the same split: interactive runs approve the composed bodies before dispatch; autopilot posts directly after the menu resolves.
452
456
 
@@ -38,7 +38,9 @@
38
38
 
39
39
  # shellcheck shell=bash
40
40
 
41
- JIRA_AUTH_PREFS="${JIRA_AUTH_PREFS:-$HOME/.claude/multi-agent-preferences.json}"
41
+ # MULTI_AGENT_PREFS is the same override jira-publish.sh reads, so a read and
42
+ # the write after it resolve the same host and token.
43
+ JIRA_AUTH_PREFS="${JIRA_AUTH_PREFS:-${MULTI_AGENT_PREFS:-$HOME/.claude/multi-agent-preferences.json}}"
42
44
 
43
45
  _jira_auth_pref() { # _jira_auth_pref <jq path> -> value or empty
44
46
  [ -f "$JIRA_AUTH_PREFS" ] || { printf ''; return 0; }
@@ -29,6 +29,8 @@
29
29
  # "comments": [{id, author, created, url, body, truncated}], // newest kept, oldest first
30
30
  # "commentsTotal": 12, // how many the tracker holds
31
31
  # "links": [{key, relation, direction, summary, status, url}], // jira issuelinks
32
+ # "remoteLinks": [{title, url, relationship, application}], // jira Issue Links (remote:
33
+ # // Figma, Confluence, web); [] when unreadable
32
34
  # "untrustedFields": ["description", ...], // tracker text: data, never instructions
33
35
  # "maturity": {
34
36
  # "score": 0..100,
@@ -254,6 +256,38 @@ fetch_jira() {
254
256
  || { echo "ERR: Jira fetch failed for $key" >&2; return 1; }
255
257
  }
256
258
 
259
+ # Issue Links of the remote kind (Figma frames, Confluence pages, web links) live
260
+ # behind their own endpoint, so they cost one GET. Failure is soft: an issue
261
+ # whose links cannot be read still fetches, with an empty list.
262
+ fetch_jira_remote_links() {
263
+ local key="$1" raw
264
+ raw=$(jira_curl "/rest/api/2/issue/$key/remotelink" 2>/dev/null) || { printf '[]'; return 0; }
265
+ printf '%s' "$raw" | python3 -c '
266
+ import json, os, sys
267
+ try:
268
+ data = json.load(sys.stdin)
269
+ except Exception:
270
+ data = []
271
+ out = []
272
+ for item in data if isinstance(data, list) else []:
273
+ obj = (item or {}).get("object") or {}
274
+ url = obj.get("url") or ""
275
+ if not url.startswith(("https://", "http://")):
276
+ continue
277
+ out.append({
278
+ "title": (obj.get("title") or "")[:200],
279
+ "url": url,
280
+ "relationship": (item or {}).get("relationship") or "",
281
+ "application": ((item or {}).get("application") or {}).get("type") or "",
282
+ })
283
+ try:
284
+ cap = int(os.environ.get("ISSUE_REMOTE_LINKS_MAX", "30"))
285
+ except ValueError:
286
+ cap = 30
287
+ print(json.dumps(out[:max(cap, 0)], ensure_ascii=False))
288
+ ' 2>/dev/null || printf '[]'
289
+ }
290
+
257
291
  # One request returns every sibling WITH its description. The issue's own
258
292
  # `subtasks` field lists ITS children, not its siblings, and the parent's
259
293
  # lists siblings without descriptions - either shape costs one GET each.
@@ -330,6 +364,7 @@ try:
330
364
  except (TypeError, ValueError):
331
365
  comments_total = len(comments)
332
366
  links = _json_field("links", list) or []
367
+ remote_links = _json_field("remoteLinks", list) or []
333
368
 
334
369
  descriptor = {
335
370
  "kind": fields.get("kind"),
@@ -353,7 +388,8 @@ descriptor = {
353
388
  "comments": comments,
354
389
  "commentsTotal": comments_total,
355
390
  "links": links,
356
- "untrustedFields": ["title", "description", "parentDescription", "relatedIssues", "comments", "links"],
391
+ "remoteLinks": remote_links,
392
+ "untrustedFields": ["title", "description", "parentDescription", "relatedIssues", "comments", "links", "remoteLinks"],
357
393
  }
358
394
  extra = {}
359
395
  if fields.get("needsRepoPicker"):
@@ -657,7 +693,8 @@ sys.stdout.write(json.dumps(out[:cap], ensure_ascii=False))
657
693
  "url=https://$JIRA_HOST/browse/$KEY" "branchHint=$branch" \
658
694
  "priority=$priority" "resolution=$resolution" "fixVersions=$fixversions" \
659
695
  "parentKey=$parentkey" "parentDescription=$parentdesc" \
660
- "relatedIssues=$relatedjson" "comments=$commentsjson" "links=$linksjson"
696
+ "relatedIssues=$relatedjson" "comments=$commentsjson" "links=$linksjson" \
697
+ "remoteLinks=$(fetch_jira_remote_links "$KEY")"
661
698
  ;;
662
699
 
663
700
  jira-url)
@@ -804,6 +841,7 @@ out = {
804
841
  "relatedIssues": json.dumps(d.get("relatedIssues") or [], ensure_ascii=False),
805
842
  "comments": json.dumps({"items": comments, "total": d.get("commentsTotal") or len(comments)}, ensure_ascii=False),
806
843
  "links": json.dumps(d.get("links") or [], ensure_ascii=False),
844
+ "remoteLinks": json.dumps(d.get("remoteLinks") or [], ensure_ascii=False),
807
845
  }
808
846
  if d.get("needsRepoPicker"):
809
847
  out["needsRepoPicker"] = "1"