@iloom/cli 0.9.2 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +160 -41
  3. package/dist/{BranchNamingService-K6XNWQ6C.js → BranchNamingService-25KSZAEM.js} +2 -2
  4. package/dist/ClaudeContextManager-66GR4BGM.js +14 -0
  5. package/dist/ClaudeService-7KM5NA5Z.js +13 -0
  6. package/dist/{GitHubService-TGWJN4V4.js → GitHubService-MEHKHUQP.js} +4 -4
  7. package/dist/IssueTrackerFactory-NG53YX5S.js +14 -0
  8. package/dist/{LoomLauncher-73NXL2CL.js → LoomLauncher-TDLZSYG2.js} +9 -9
  9. package/dist/{MetadataManager-W3C54UYT.js → MetadataManager-5QZSTKNN.js} +2 -2
  10. package/dist/{ProjectCapabilityDetector-N5L7T4IY.js → ProjectCapabilityDetector-5KSYUTBJ.js} +3 -3
  11. package/dist/{PromptTemplateManager-36YLQRHP.js → PromptTemplateManager-YOE2SIPG.js} +2 -2
  12. package/dist/README.md +160 -41
  13. package/dist/{SettingsManager-AW3JTJHD.js → SettingsManager-FNKCOZMQ.js} +4 -2
  14. package/dist/agents/iloom-artifact-reviewer.md +11 -0
  15. package/dist/agents/iloom-code-reviewer.md +14 -0
  16. package/dist/agents/iloom-issue-analyze-and-plan.md +55 -12
  17. package/dist/agents/iloom-issue-analyzer.md +49 -6
  18. package/dist/agents/iloom-issue-complexity-evaluator.md +47 -6
  19. package/dist/agents/iloom-issue-enhancer.md +86 -7
  20. package/dist/agents/iloom-issue-implementer.md +48 -7
  21. package/dist/agents/iloom-issue-planner.md +115 -62
  22. package/dist/{build-THZI572G.js → build-VHGEMXBA.js} +9 -9
  23. package/dist/chunk-4232AHNQ.js +35 -0
  24. package/dist/chunk-4232AHNQ.js.map +1 -0
  25. package/dist/chunk-4E7LCFUG.js +24 -0
  26. package/dist/chunk-4E7LCFUG.js.map +1 -0
  27. package/dist/{chunk-AR5QKYNE.js → chunk-4FGEGQW4.js} +4 -4
  28. package/dist/{chunk-R4YWBGY6.js → chunk-5FJWO4IT.js} +67 -22
  29. package/dist/chunk-5FJWO4IT.js.map +1 -0
  30. package/dist/{chunk-VPTAX5TR.js → chunk-5RPBYK5Q.js} +35 -30
  31. package/dist/chunk-5RPBYK5Q.js.map +1 -0
  32. package/dist/{chunk-YKFCCV6S.js → chunk-63QWFWH3.js} +7 -7
  33. package/dist/chunk-63QWFWH3.js.map +1 -0
  34. package/dist/{chunk-RI2YL6TK.js → chunk-7VHJNVLF.js} +80 -23
  35. package/dist/chunk-7VHJNVLF.js.map +1 -0
  36. package/dist/{chunk-B7U6OKUR.js → chunk-C6HNNJIV.js} +11 -3
  37. package/dist/chunk-C6HNNJIV.js.map +1 -0
  38. package/dist/{chunk-A7NJF73J.js → chunk-CVCTIDDK.js} +4 -4
  39. package/dist/{chunk-Z2TWEXR7.js → chunk-E6KOWMKA.js} +6 -6
  40. package/dist/chunk-E6KOWMKA.js.map +1 -0
  41. package/dist/{chunk-3I4ONZRT.js → chunk-EVPZFV3K.js} +10 -10
  42. package/dist/chunk-EVPZFV3K.js.map +1 -0
  43. package/dist/{chunk-IZIYLYPK.js → chunk-G5V75JD5.js} +2 -2
  44. package/dist/chunk-GRISNU6G.js +651 -0
  45. package/dist/chunk-GRISNU6G.js.map +1 -0
  46. package/dist/chunk-HEXKPKCK.js +1396 -0
  47. package/dist/chunk-HEXKPKCK.js.map +1 -0
  48. package/dist/{chunk-TC7APDKU.js → chunk-I5T677EA.js} +2 -2
  49. package/dist/{chunk-KBEIQP4G.js → chunk-KB64WNBZ.js} +43 -3
  50. package/dist/chunk-KB64WNBZ.js.map +1 -0
  51. package/dist/{chunk-NWMORW3U.js → chunk-KIK2ZFAL.js} +2 -2
  52. package/dist/{chunk-CWRI4JC3.js → chunk-KKV5WH5M.js} +30 -31
  53. package/dist/chunk-KKV5WH5M.js.map +1 -0
  54. package/dist/{chunk-DGG2VY7B.js → chunk-KVHIAWVT.js} +9 -9
  55. package/dist/chunk-KVHIAWVT.js.map +1 -0
  56. package/dist/{chunk-OFDN5NKS.js → chunk-KXDRI47U.js} +69 -12
  57. package/dist/chunk-KXDRI47U.js.map +1 -0
  58. package/dist/{chunk-NUACL52E.js → chunk-LLHXQS3C.js} +2 -2
  59. package/dist/chunk-LUKXJSRI.js +73 -0
  60. package/dist/chunk-LUKXJSRI.js.map +1 -0
  61. package/dist/{chunk-TL72BGP6.js → chunk-MORRVYPT.js} +2 -2
  62. package/dist/chunk-OTGH2HRS.js +1427 -0
  63. package/dist/chunk-OTGH2HRS.js.map +1 -0
  64. package/dist/{chunk-7ZEHSSUP.js → chunk-P4O6EH46.js} +4 -4
  65. package/dist/{chunk-KAYXR544.js → chunk-QVLPWNE3.js} +2 -2
  66. package/dist/chunk-QZWEJVWV.js +207 -0
  67. package/dist/chunk-QZWEJVWV.js.map +1 -0
  68. package/dist/chunk-RJ3VBUFK.js +781 -0
  69. package/dist/chunk-RJ3VBUFK.js.map +1 -0
  70. package/dist/chunk-RSYT7MVI.js +202 -0
  71. package/dist/chunk-RSYT7MVI.js.map +1 -0
  72. package/dist/{chunk-6IIL5M2L.js → chunk-S7PZA6IV.js} +10 -8
  73. package/dist/{chunk-6IIL5M2L.js.map → chunk-S7PZA6IV.js.map} +1 -1
  74. package/dist/chunk-SKSYYBCU.js +229 -0
  75. package/dist/chunk-SKSYYBCU.js.map +1 -0
  76. package/dist/{chunk-ULSWCPQG.js → chunk-SWSJWA2S.js} +476 -5
  77. package/dist/chunk-SWSJWA2S.js.map +1 -0
  78. package/dist/{chunk-KXGQYLFZ.js → chunk-UKBAJ2QQ.js} +61 -7
  79. package/dist/chunk-UKBAJ2QQ.js.map +1 -0
  80. package/dist/{chunk-FO5GGFOV.js → chunk-UR5DGNUO.js} +71 -9
  81. package/dist/chunk-UR5DGNUO.js.map +1 -0
  82. package/dist/{chunk-QN47QVBX.js → chunk-UUEW5KWB.js} +1 -1
  83. package/dist/chunk-UUEW5KWB.js.map +1 -0
  84. package/dist/{chunk-4CO6KG5S.js → chunk-VG45TUYK.js} +53 -7
  85. package/dist/{chunk-4CO6KG5S.js.map → chunk-VG45TUYK.js.map} +1 -1
  86. package/dist/{chunk-4LKGCFGG.js → chunk-WWKOVDWC.js} +2 -2
  87. package/dist/{chunk-KJTVU3HZ.js → chunk-WXIM2WS7.js} +8 -8
  88. package/dist/chunk-WXIM2WS7.js.map +1 -0
  89. package/dist/{chunk-VOGGLPG5.js → chunk-YQ57ORTV.js} +14 -1
  90. package/dist/chunk-YQ57ORTV.js.map +1 -0
  91. package/dist/{chunk-SOSQILHO.js → chunk-ZNMPGMHY.js} +44 -797
  92. package/dist/chunk-ZNMPGMHY.js.map +1 -0
  93. package/dist/{claude-TP2QO3BU.js → claude-7GGEWVEM.js} +2 -2
  94. package/dist/{cleanup-PJRIFFU4.js → cleanup-6PVAC4NI.js} +85 -34
  95. package/dist/cleanup-6PVAC4NI.js.map +1 -0
  96. package/dist/cli.js +630 -801
  97. package/dist/cli.js.map +1 -1
  98. package/dist/{commit-IVP3M4HG.js → commit-FZR5XDQG.js} +26 -23
  99. package/dist/commit-FZR5XDQG.js.map +1 -0
  100. package/dist/{compile-R2J65HBQ.js → compile-7ALJHZ4N.js} +9 -9
  101. package/dist/{contribute-VDZXHK5Y.js → contribute-5GKLK3BQ.js} +14 -6
  102. package/dist/contribute-5GKLK3BQ.js.map +1 -0
  103. package/dist/{dev-server-7F622OEO.js → dev-server-7SMIB7OF.js} +29 -15
  104. package/dist/dev-server-7SMIB7OF.js.map +1 -0
  105. package/dist/{feedback-E7VET7CL.js → feedback-G2GJFN2F.js} +18 -16
  106. package/dist/{feedback-E7VET7CL.js.map → feedback-G2GJFN2F.js.map} +1 -1
  107. package/dist/{git-2QDQ2X2S.js → git-GTLKAZRJ.js} +4 -4
  108. package/dist/hooks/iloom-hook.js +15 -0
  109. package/dist/ignite-H2O5Y5A2.js +34 -0
  110. package/dist/ignite-H2O5Y5A2.js.map +1 -0
  111. package/dist/index.d.ts +482 -58
  112. package/dist/index.js +1340 -44
  113. package/dist/index.js.map +1 -1
  114. package/dist/{init-676DHF6R.js → init-32YOKXRL.js} +57 -21
  115. package/dist/init-32YOKXRL.js.map +1 -0
  116. package/dist/{issues-PJSOLOBJ.js → issues-4UUAQ5K6.js} +61 -20
  117. package/dist/issues-4UUAQ5K6.js.map +1 -0
  118. package/dist/{lint-CJM7BAIM.js → lint-AAN2NZWG.js} +9 -9
  119. package/dist/mcp/harness-server.js +140 -0
  120. package/dist/mcp/harness-server.js.map +1 -0
  121. package/dist/mcp/issue-management-server.js +2599 -262
  122. package/dist/mcp/issue-management-server.js.map +1 -1
  123. package/dist/mcp/recap-server.js +144 -21
  124. package/dist/mcp/recap-server.js.map +1 -1
  125. package/dist/{neon-helpers-VVFFTLXE.js → neon-helpers-CQN2PB4S.js} +3 -3
  126. package/dist/neon-helpers-CQN2PB4S.js.map +1 -0
  127. package/dist/{open-544H7JF5.js → open-FXWW3VI4.js} +15 -15
  128. package/dist/open-FXWW3VI4.js.map +1 -0
  129. package/dist/{plan-Q7ELXDLC.js → plan-RQ5FPIGF.js} +358 -40
  130. package/dist/plan-RQ5FPIGF.js.map +1 -0
  131. package/dist/{projects-LH362JZQ.js → projects-2UOXFLNZ.js} +4 -4
  132. package/dist/prompts/CLAUDE.md +62 -0
  133. package/dist/prompts/init-prompt.txt +430 -34
  134. package/dist/prompts/issue-prompt.txt +473 -54
  135. package/dist/prompts/plan-prompt.txt +140 -19
  136. package/dist/prompts/pr-prompt.txt +44 -1
  137. package/dist/prompts/regular-prompt.txt +42 -1
  138. package/dist/prompts/session-summary-prompt.txt +14 -0
  139. package/dist/prompts/swarm-orchestrator-prompt.txt +464 -0
  140. package/dist/{rebase-YND35CIE.js → rebase-6NVLX5V7.js} +21 -12
  141. package/dist/rebase-6NVLX5V7.js.map +1 -0
  142. package/dist/{recap-3W7COH7D.js → recap-OMBOKJST.js} +47 -19
  143. package/dist/recap-OMBOKJST.js.map +1 -0
  144. package/dist/{run-QUXJKDQQ.js → run-BBXLRIZB.js} +15 -15
  145. package/dist/run-BBXLRIZB.js.map +1 -0
  146. package/dist/schema/package-iloom.schema.json +58 -0
  147. package/dist/schema/settings.schema.json +149 -15
  148. package/dist/{shell-QGECBLST.js → shell-RF7LTND5.js} +14 -7
  149. package/dist/shell-RF7LTND5.js.map +1 -0
  150. package/dist/{summary-G2T4452H.js → summary-WTQZ7XG2.js} +27 -25
  151. package/dist/summary-WTQZ7XG2.js.map +1 -0
  152. package/dist/{test-EA5NQFDC.js → test-SGO6I5Z7.js} +9 -9
  153. package/dist/{test-git-M7LSLEFL.js → test-git-XM4TM65W.js} +4 -4
  154. package/dist/test-jira-LDTOYFSD.js +96 -0
  155. package/dist/test-jira-LDTOYFSD.js.map +1 -0
  156. package/dist/{test-prefix-64NAAUON.js → test-prefix-GBO37XCN.js} +4 -4
  157. package/dist/{test-webserver-OK6Z5FJM.js → test-webserver-NZ3JTVLL.js} +6 -6
  158. package/dist/{vscode-AR5NNXXI.js → vscode-6XUGHJKL.js} +7 -7
  159. package/package.json +5 -1
  160. package/dist/ClaudeContextManager-HR5JQKAI.js +0 -14
  161. package/dist/ClaudeService-TK7FMC2X.js +0 -13
  162. package/dist/chunk-3I4ONZRT.js.map +0 -1
  163. package/dist/chunk-B7U6OKUR.js.map +0 -1
  164. package/dist/chunk-CWRI4JC3.js.map +0 -1
  165. package/dist/chunk-DGG2VY7B.js.map +0 -1
  166. package/dist/chunk-FJDRTVJX.js +0 -520
  167. package/dist/chunk-FJDRTVJX.js.map +0 -1
  168. package/dist/chunk-FO5GGFOV.js.map +0 -1
  169. package/dist/chunk-KBEIQP4G.js.map +0 -1
  170. package/dist/chunk-KJTVU3HZ.js.map +0 -1
  171. package/dist/chunk-KXGQYLFZ.js.map +0 -1
  172. package/dist/chunk-OFDN5NKS.js.map +0 -1
  173. package/dist/chunk-QN47QVBX.js.map +0 -1
  174. package/dist/chunk-R4YWBGY6.js.map +0 -1
  175. package/dist/chunk-RI2YL6TK.js.map +0 -1
  176. package/dist/chunk-SOSQILHO.js.map +0 -1
  177. package/dist/chunk-ULSWCPQG.js.map +0 -1
  178. package/dist/chunk-VOGGLPG5.js.map +0 -1
  179. package/dist/chunk-VPTAX5TR.js.map +0 -1
  180. package/dist/chunk-W6DP5RVR.js +0 -101
  181. package/dist/chunk-W6DP5RVR.js.map +0 -1
  182. package/dist/chunk-WHI5KEOX.js +0 -121
  183. package/dist/chunk-WHI5KEOX.js.map +0 -1
  184. package/dist/chunk-YKFCCV6S.js.map +0 -1
  185. package/dist/chunk-Z2TWEXR7.js.map +0 -1
  186. package/dist/cleanup-PJRIFFU4.js.map +0 -1
  187. package/dist/commit-IVP3M4HG.js.map +0 -1
  188. package/dist/contribute-VDZXHK5Y.js.map +0 -1
  189. package/dist/dev-server-7F622OEO.js.map +0 -1
  190. package/dist/ignite-IW35CDBD.js +0 -784
  191. package/dist/ignite-IW35CDBD.js.map +0 -1
  192. package/dist/init-676DHF6R.js.map +0 -1
  193. package/dist/issues-PJSOLOBJ.js.map +0 -1
  194. package/dist/open-544H7JF5.js.map +0 -1
  195. package/dist/plan-Q7ELXDLC.js.map +0 -1
  196. package/dist/rebase-YND35CIE.js.map +0 -1
  197. package/dist/recap-3W7COH7D.js.map +0 -1
  198. package/dist/run-QUXJKDQQ.js.map +0 -1
  199. package/dist/shell-QGECBLST.js.map +0 -1
  200. package/dist/summary-G2T4452H.js.map +0 -1
  201. /package/dist/{BranchNamingService-K6XNWQ6C.js.map → BranchNamingService-25KSZAEM.js.map} +0 -0
  202. /package/dist/{ClaudeContextManager-HR5JQKAI.js.map → ClaudeContextManager-66GR4BGM.js.map} +0 -0
  203. /package/dist/{ClaudeService-TK7FMC2X.js.map → ClaudeService-7KM5NA5Z.js.map} +0 -0
  204. /package/dist/{GitHubService-TGWJN4V4.js.map → GitHubService-MEHKHUQP.js.map} +0 -0
  205. /package/dist/{MetadataManager-W3C54UYT.js.map → IssueTrackerFactory-NG53YX5S.js.map} +0 -0
  206. /package/dist/{LoomLauncher-73NXL2CL.js.map → LoomLauncher-TDLZSYG2.js.map} +0 -0
  207. /package/dist/{ProjectCapabilityDetector-N5L7T4IY.js.map → MetadataManager-5QZSTKNN.js.map} +0 -0
  208. /package/dist/{PromptTemplateManager-36YLQRHP.js.map → ProjectCapabilityDetector-5KSYUTBJ.js.map} +0 -0
  209. /package/dist/{SettingsManager-AW3JTJHD.js.map → PromptTemplateManager-YOE2SIPG.js.map} +0 -0
  210. /package/dist/{claude-TP2QO3BU.js.map → SettingsManager-FNKCOZMQ.js.map} +0 -0
  211. /package/dist/{build-THZI572G.js.map → build-VHGEMXBA.js.map} +0 -0
  212. /package/dist/{chunk-AR5QKYNE.js.map → chunk-4FGEGQW4.js.map} +0 -0
  213. /package/dist/{chunk-A7NJF73J.js.map → chunk-CVCTIDDK.js.map} +0 -0
  214. /package/dist/{chunk-IZIYLYPK.js.map → chunk-G5V75JD5.js.map} +0 -0
  215. /package/dist/{chunk-TC7APDKU.js.map → chunk-I5T677EA.js.map} +0 -0
  216. /package/dist/{chunk-NWMORW3U.js.map → chunk-KIK2ZFAL.js.map} +0 -0
  217. /package/dist/{chunk-NUACL52E.js.map → chunk-LLHXQS3C.js.map} +0 -0
  218. /package/dist/{chunk-TL72BGP6.js.map → chunk-MORRVYPT.js.map} +0 -0
  219. /package/dist/{chunk-7ZEHSSUP.js.map → chunk-P4O6EH46.js.map} +0 -0
  220. /package/dist/{chunk-KAYXR544.js.map → chunk-QVLPWNE3.js.map} +0 -0
  221. /package/dist/{chunk-4LKGCFGG.js.map → chunk-WWKOVDWC.js.map} +0 -0
  222. /package/dist/{git-2QDQ2X2S.js.map → claude-7GGEWVEM.js.map} +0 -0
  223. /package/dist/{compile-R2J65HBQ.js.map → compile-7ALJHZ4N.js.map} +0 -0
  224. /package/dist/{neon-helpers-VVFFTLXE.js.map → git-GTLKAZRJ.js.map} +0 -0
  225. /package/dist/{lint-CJM7BAIM.js.map → lint-AAN2NZWG.js.map} +0 -0
  226. /package/dist/{projects-LH362JZQ.js.map → projects-2UOXFLNZ.js.map} +0 -0
  227. /package/dist/{test-EA5NQFDC.js.map → test-SGO6I5Z7.js.map} +0 -0
  228. /package/dist/{test-git-M7LSLEFL.js.map → test-git-XM4TM65W.js.map} +0 -0
  229. /package/dist/{test-prefix-64NAAUON.js.map → test-prefix-GBO37XCN.js.map} +0 -0
  230. /package/dist/{test-webserver-OK6Z5FJM.js.map → test-webserver-NZ3JTVLL.js.map} +0 -0
  231. /package/dist/{vscode-AR5NNXXI.js.map → vscode-6XUGHJKL.js.map} +0 -0
@@ -79,6 +79,7 @@ After the subagent completes, include its context summary when sending the plan
79
79
 
80
80
  {{#if USE_GEMINI_REVIEWER}}
81
81
  **Reviewer: Gemini** - Use available Gemini MCP tools (look for tools with "gemini" in the name) to review your plan. Ask for feedback on:
82
+ - **Complexity sizing** (each child issue should target SIMPLE: <5 files, <200 LOC, no cross-cutting changes, no architectural signals)
82
83
  - Proper scoping (1 issue = 1 loom = 1 PR)
83
84
  - Dependency identification and sequencing
84
85
  - Technical architecture and design decisions
@@ -92,6 +93,7 @@ After the subagent completes, include its context summary when sending the plan
92
93
  {{/if}}
93
94
  {{#if USE_CODEX_REVIEWER}}
94
95
  **Reviewer: Codex** - Use available Codex MCP tools (look for tools with "codex" in the name) to review your plan. Ask for feedback on:
96
+ - **Complexity sizing** (each child issue should target SIMPLE: <5 files, <200 LOC, no cross-cutting changes, no architectural signals)
95
97
  - Proper scoping (1 issue = 1 loom = 1 PR)
96
98
  - Dependency identification and sequencing
97
99
  - Technical architecture and design decisions
@@ -105,6 +107,7 @@ After the subagent completes, include its context summary when sending the plan
105
107
  {{/if}}
106
108
  {{#unless USE_GEMINI_REVIEWER}}{{#unless USE_CODEX_REVIEWER}}
107
109
  **Reviewer: Claude** - Review the plan yourself, considering:
110
+ - **Complexity sizing** (each child issue should target SIMPLE: <5 files, <200 LOC, no cross-cutting changes, no architectural signals)
108
111
  - Proper scoping (1 issue = 1 loom = 1 PR)
109
112
  - Dependency identification and sequencing
110
113
  - Technical architecture and design decisions
@@ -118,11 +121,19 @@ After the subagent completes, include its context summary when sending the plan
118
121
 
119
122
  ---
120
123
 
124
+ ## Formatting Rules
125
+
126
+ **Always write in standard GitHub-flavored Markdown.** The MCP issue management tools handle any necessary format conversion automatically (e.g., Markdown to ADF for Jira). This means:
127
+ - Use standard Markdown: `##` headings, `**bold**`, `| tables |`, `` ``` `` code blocks, `- bullet lists`
128
+ - Use `<details><summary>` tags for collapsed/expandable sections — the converter handles these
129
+ - Do NOT use platform-specific markup (e.g., Jira wiki syntax like `h2.`, `||header||`, `{code}`)
130
+
131
+ ---
132
+
121
133
  ## Core Principles
122
134
 
123
135
  **1 Child Issue = 1 Loom = 1 PR**
124
136
  Each issue you help create should represent a single, focused unit of work that:
125
- - Can be completed in a single development session
126
137
  - Results in one pull request when finished
127
138
  - Has clear acceptance criteria
128
139
  - Is independently testable
@@ -195,18 +206,79 @@ AskUserQuestion(
195
206
 
196
207
  ### Phase 3: Issue Decomposition (Writing Plans)
197
208
 
198
- Break the work into granular, actionable tasks. Each task should be:
199
- - Completable in approximately 2-30 minutes of focused work
209
+ **Step 1: Identify work units, define shared contracts, and design the DAG.**
210
+
211
+ Start by listing the work units at a high level (title + one sentence each). Then, before writing full issue descriptions, design the dependency graph:
212
+
213
+ 1. **Assume all issues run in parallel.** This is your starting point — not something you optimize toward later.
214
+ 2. **Define shared contracts to keep them parallel.** When Issue B needs an API, module, or type that Issue A is building, do NOT make A block B. Instead, define the shared contract (interface, function signature, module API) explicitly, and specify it in both issue descriptions. Both agents implement against the agreed contract simultaneously — a later integration step catches any mismatches.
215
+ 3. **Only add blocking dependencies you truly cannot eliminate with a contract.** Hard blockers are rare — they apply when Issue B literally modifies files that Issue A creates from scratch (not just imports them), or when Issue B requires a database migration from Issue A.
216
+ 4. **Check the shape.** Ask: "What is the widest, shallowest DAG I can create?" If the graph is mostly linear (A → B → C → D), rethink the decomposition. The shape of the graph matters as much as the content of individual issues, because a narrow graph kills swarm throughput.
217
+
218
+ **Example:** If Issue A creates a `UserService` class and Issue B needs to call `UserService.getById()`, don't block B on A. Instead, specify the contract in both issues: "`UserService` exposes a `getById(id)` method that returns a user object." Both agents implement against this contract simultaneously.
219
+
220
+ **Compilation errors are expected and OK.** When issues run in parallel against shared contracts, individual branches will have build errors — Issue B imports a module that Issue A hasn't merged yet. This is normal. The errors resolve when branches merge into the epic branch. Agents should not block on or try to fix compilation errors caused by missing contract implementations from parallel issues.
221
+
222
+ **Step 2: Write full issue descriptions.** Now flesh out each node in your DAG. Each issue should be:
200
223
  - Self-contained with clear inputs and outputs
201
- - Ordered by dependencies (what must come first)
224
+ - Connected to other issues via shared contracts (already defined in Step 1) rather than blocking dependencies
225
+
226
+ **Right-size your issues.** Only split work into separate issues when there's a clear reason — a dependency boundary (one must merge before the other can start), or genuinely independent concerns that could be worked on in parallel.
227
+
228
+ A sign that issues should be consolidated: several small issues share the same dependencies, touch overlapping files, or have similar scope. For example, "add field X to the schema," "add field X to the API," and "add field X to the UI" are likely one issue if they all depend on the same prior work and would naturally be done together. When the boundaries feel artificial, combine them.
229
+
230
+ **Target SIMPLE complexity for each child issue.** Every child issue should be scoped so that an implementing agent can classify it as SIMPLE (or TRIVIAL). This means each child issue should meet ALL of these criteria:
231
+
232
+ | Metric | Target |
233
+ |--------|--------|
234
+ | Files affected | < 5 (excluding test files) |
235
+ | Lines of code | < 200 (new + modified, excluding tests) |
236
+ | Breaking changes | None |
237
+ | Database migrations | None |
238
+ | Cross-cutting changes | None — avoid issues that pass parameters/config through 3+ architectural layers |
239
+ | Architectural complexity signals | None — no deep architectural decisions required to implement it |
240
+ | Risk level | Low or Medium |
241
+ | File quality | All modified files < 500 LOC, or well-architected if larger |
242
+
243
+ **When an issue would naturally be COMPLEX, decompose further.** If a piece of work would touch 5+ files, require 200+ LOC, or involve cross-cutting parameter threading, split it into smaller issues that each stay within SIMPLE bounds. Common decomposition strategies:
244
+
245
+ - **Layer by layer**: Instead of one issue that threads a new option from CLI → Manager → Service → Utility, create separate issues for each layer boundary (e.g., "Add option to CLI interface" then "Wire option through to Service layer")
246
+ - **Vertical slices**: Instead of one issue that adds a full feature, split into "Add core logic" then "Add UI/CLI surface" then "Add tests and validation"
247
+ - **New pattern then apply**: If a new pattern is needed, create one issue to establish the pattern in a single location, then a follow-up to apply it elsewhere
248
+
249
+ **Resist the urge to create COMPLEX child issues.** A common mistake is creating child issues that are individually large and complex. The goal is many small, focused issues — not a few big ones. If you find yourself writing a child issue that requires architectural decisions, coordinating multiple systems, or modifying large poorly-structured files, it's a signal to split further.
250
+
251
+ **But don't over-split into TRIVIAL busywork either.** Each child issue should represent a meaningful, coherent unit of work — not a single function rename or a one-line config change. Signs you've split too far:
252
+ - Multiple child issues touch the same file for closely related changes
253
+ - A child issue has no meaningful acceptance criteria beyond "change X to Y"
254
+ - The dependency chain is long and linear with no parallelism (A → B → C → D → E), where each step is tiny
255
+ - You're creating issues that an engineer would naturally do as part of a larger change (e.g., "update imports" as its own issue)
256
+
257
+ **The sweet spot is SIMPLE, not TRIVIAL.** Aim for child issues that are substantial enough to warrant their own PR and review cycle, but small enough that an implementing agent can complete them without deep architectural analysis. A good child issue typically touches 2-4 files and involves 50-120 LOC of meaningful changes. When you're on the fence about whether to split, lean toward splitting — smaller issues enable more parallelism and are easier for agents to get right on the first attempt.
258
+
259
+ **CRITICAL: Issue bodies must NOT contain implementation details.** The implementing agent will discover the *how* through its own codebase research. Baking implementation instructions into the issue body causes agents to skip their research phase and treat your instructions as ground truth, which produces brittle implementations based on potentially stale assumptions.
260
+
261
+ Implementation details include:
262
+ - **Code snippets or pseudocode** — exact TypeScript interfaces, function bodies, logic sequences
263
+ - **File paths** — `src/types/telemetry.ts`, `src/commands/plan.ts`, etc.
264
+ - **Step-by-step implementation instructions** — "Add X to file Y, then call Z"
265
+ - **Pre-written content** — exact documentation text, config blocks, or error messages to paste in
266
+ - **Internal behavior descriptions** — conditional logic, specific APIs to call, error handling patterns
267
+
268
+ A contract describes an *interface boundary* (what a function accepts and returns). Implementation detail describes *how* something works internally. Contracts belong in the issue body. Implementation detail does NOT.
269
+
270
+ **The test:** For every sentence in the issue body, ask: "Does this tell the implementing agent *what* to build, or *how* to build it?" If it's how — remove it.
202
271
 
203
272
  **Issue Structure:**
204
- Each child issue should include:
273
+ Each child issue should include ONLY these sections:
205
274
  1. **Summary**: One-sentence description of what this issue accomplishes
206
275
  2. **Context**: Why this issue exists (relationship to parent feature)
207
- 3. **Acceptance Criteria**: Clear, testable conditions for "done"
208
- 4. **Dependencies**: Which issues must be completed first (if any)
209
- 5. **Scope Boundaries**: What is explicitly NOT included
276
+ 3. **Acceptance Criteria**: Clear, testable, outcome-focused conditions for "done" — describe the desired result, not the implementation mechanism (e.g., "auto-swarm pipeline events are observable" not "tracking calls fire at pipeline start and end")
277
+ 4. **Shared Contracts**: Specify the exact contracts defined in Step 1 that this issue produces or consumes (function signatures, types, module exports). A contract is an interface boundary — what one issue exposes for another to consume. Example: `PlanCommand.execute()` gains an optional `autoSwarm?: boolean` 7th parameter. NOT an implementation: do not describe what happens internally when `autoSwarm` is true — that is implementation detail, not a contract.
278
+ 5. **Hard Blocking Dependencies** *(minimize these)*: Which issues must be completed first, if any — each one should have been validated in Step 1 as not replaceable by a contract
279
+ 6. **Scope Boundaries**: What is explicitly NOT included
280
+
281
+ Do NOT add "Implementation Details", "Technical Approach", or similar sections — these violate the rule above.
210
282
 
211
283
  ---
212
284
 
@@ -232,6 +304,19 @@ At the end of the planning session, you have MCP tools to create issues:
232
304
  - `mcp__issue_management__remove_dependency`: Remove a dependency between issues
233
305
  - Parameters: `blockingIssue`, `blockedIssue`
234
306
 
307
+ {{#if AUTO_SWARM_MODE}}
308
+ **Harness Signal Tool:**
309
+ - `mcp__harness__signal`: Signal the auto-swarm harness when planning is complete
310
+ - Call this after all child issues and dependencies have been created
311
+ - Parameters: `type` ("done"), `data` (`{ "epicIssueNumber": "<parent issue number>", "childIssues": [<list of child issue numbers>] }`)
312
+ {{/if}}
313
+
314
+ **Validation Gate — Check Before Presenting Your Plan:**
315
+ Before presenting the plan to the user, audit it against these questions:
316
+ 1. **For each blocking dependency:** "Can I replace this with a shared contract so both issues run in parallel?" If yes, rewrite the issues with an explicit contract and remove the dependency.
317
+ 2. **DAG shape check:** Is the graph wide and shallow, or narrow and linear? If your longest chain is more than 2 deep, re-examine whether intermediate dependencies are truly hard blockers.
318
+ 3. **Contract completeness:** Does every issue that produces or consumes a shared API specify the exact contract (function signatures, types, module exports) in its description?
319
+
235
320
  **Before Creating Issues:**
236
321
  1. Summarize the proposed issues and their relationships
237
322
  2. Ask for explicit confirmation: "Ready to create these issues?"
@@ -283,16 +368,16 @@ Wait for the subagent to complete, then present its summary to the user for plan
283
368
  - Do NOT create a new parent epic - use the existing issue #{{PARENT_ISSUE_NUMBER}}
284
369
  2. **Set up blocking dependencies between children**
285
370
  - Use `create_dependency` to define execution order
286
- - If Issue B depends on work from Issue A, create a dependency where A blocks B
371
+ - Only create a blocking dependency (A blocks B) when B truly cannot start without A's output prefer contract-based parallelism over blocking dependencies (see "Maximize Parallel Execution" above)
287
372
  3. **Post Architectural Decision Record (ADR) as comment on parent issue**
288
373
  - Use `create_comment` with `number: "{{PARENT_ISSUE_NUMBER}}"`, `type: "issue"`
289
374
  - Include: Design rationale, key decisions, trade-offs, recommended execution order
290
375
  4. **Output next steps to the user**
291
376
  - Tell them what was created: "Created N child issues for #{{PARENT_ISSUE_NUMBER}}."
292
377
  {{#if IS_VSCODE_MODE}}
293
- - Recommend where to start: "Exit this session, then use the iloom explorer panel to create a new loom for issue Z to begin with [first task title]."
378
+ - Recommend: "In the iloom explorer panel, add a loom for issue #{{PARENT_ISSUE_NUMBER}} it will detect the child issues and launch the swarm workflow automatically."
294
379
  {{else}}
295
- - Recommend where to start: "Exit this session and run `il start Z` to begin with [first task title]."
380
+ - Recommend: "Run `il start {{PARENT_ISSUE_NUMBER}}` it will detect the child issues and launch the swarm workflow automatically."
296
381
  {{/if}}
297
382
  {{else}}
298
383
  **Fresh Planning Mode - Issue Creation Order:**
@@ -304,16 +389,16 @@ Wait for the subagent to complete, then present its summary to the user for plan
304
389
  - Each child represents one focused unit of work (1 loom = 1 PR)
305
390
  3. **Set up blocking dependencies between children**
306
391
  - Use `create_dependency` to define execution order
307
- - If Issue B depends on work from Issue A, create a dependency where A blocks B
392
+ - Only create a blocking dependency (A blocks B) when B truly cannot start without A's output prefer contract-based parallelism over blocking dependencies (see "Maximize Parallel Execution" above)
308
393
  4. **Post Architectural Decision Record (ADR) as first comment on parent epic**
309
394
  - Use `create_comment` with `number: <parent epic number>`, `type: "issue"`
310
395
  - Include: Design rationale, key decisions, trade-offs, recommended execution order
311
396
  5. **Output next steps to the user**
312
397
  - Tell them what was created: "Created Epic #X with Y child issues."
313
398
  {{#if IS_VSCODE_MODE}}
314
- - Recommend where to start: "Exit this session, then use the iloom explorer panel to create a new loom for issue Z to begin with [first task title]."
399
+ - Recommend: "In the iloom explorer panel, add a loom for Epic #X it will detect the child issues and launch the swarm workflow automatically."
315
400
  {{else}}
316
- - Recommend where to start: "Exit this session and run `il start Z` to begin with [first task title]."
401
+ - Recommend: "Run `il start X` it will detect the child issues and launch the swarm workflow automatically."
317
402
  {{/if}}
318
403
  {{/if}}
319
404
 
@@ -326,9 +411,9 @@ Use clear, action-oriented titles:
326
411
  **Summary Comment with Dependency Diagram:**
327
412
  After creating all child issues and dependencies, post a summary comment on the parent epic that includes:
328
413
  1. A list of the child issues created with their numbers and titles
329
- 2. A Mermaid diagram visualizing the dependency DAG
414
+ 2. A dependency diagram visualizing the DAG
330
415
 
331
- The Mermaid diagram should:
416
+ **For GitHub and Linear**, use a Mermaid diagram. The Mermaid diagram should:
332
417
  - Use `graph TD` (top-down) format
333
418
  - Include each child issue as a node with format: `ISSUE_ID[Short Title]`
334
419
  - Use the appropriate issue ID format for the tracker:
@@ -384,6 +469,27 @@ graph TD
384
469
  ```
385
470
  ```
386
471
 
472
+ **For Jira**, use ASCII art diagrams instead of Mermaid:
473
+ - Jira does not render Mermaid diagrams — they appear as raw text. Use simple ASCII box-and-arrow diagrams instead.
474
+ - **Write in standard Markdown, NOT Jira wiki markup.** The MCP tools automatically convert Markdown to Atlassian Document Format (ADF) before sending to Jira. If you write Jira wiki markup (e.g., `h2.`, `||header||`, `{code}`), it will be treated as literal text and displayed raw. Use standard Markdown headings (`##`), tables (`| col |`), code blocks (`` ``` ``), etc.
475
+
476
+ Example summary comment format (Jira):
477
+ ```
478
+ ## Child Issues Created
479
+
480
+ | Issue | Title | Dependencies |
481
+ |-------|-------|--------------|
482
+ | PROJ-101 | Bootstrap plan command | None |
483
+ | PROJ-102 | Add dependency management | None |
484
+ | PROJ-103 | Implement creation flow | PROJ-101, PROJ-102 |
485
+
486
+ ## Dependency Graph
487
+
488
+ PROJ-101 [Bootstrap plan command] ──┐
489
+ ├──> PROJ-103 [Implement creation flow]
490
+ PROJ-102 [Add dependency management] ──┘
491
+ ```
492
+
387
493
  Use `mcp__issue_management__create_comment` to post this summary to the parent epic after all issues and dependencies are created.
388
494
 
389
495
  ---
@@ -395,6 +501,7 @@ Use `mcp__issue_management__create_comment` to post this summary to the parent e
395
501
  - Create issues without user confirmation
396
502
  - Over-engineer the decomposition (keep it pragmatic)
397
503
  - Assume requirements that weren't explicitly stated
504
+ - Include implementation details in issue bodies (code snippets, file paths, step-by-step instructions, pre-written content)
398
505
 
399
506
  **Do:**
400
507
  - Use the conversation to refine understanding iteratively
@@ -420,14 +527,28 @@ Use `mcp__issue_management__create_comment` to post this summary to the parent e
420
527
 
421
528
  After creating issues successfully, you MUST end with a clear next steps message.
422
529
 
530
+ {{#if AUTO_SWARM_MODE}}
531
+ ## Auto-Swarm Completion
532
+
533
+ After creating all child issues and setting up dependencies:
534
+
535
+ 1. **Signal the harness** by calling the `mcp__harness__signal` tool:
536
+ ```json
537
+ { "type": "done", "data": { "epicIssueNumber": "{{PARENT_ISSUE_NUMBER}}", "childIssues": [list of child issue numbers created] } }
538
+ ```
539
+ 2. **Relay the harness response** to the user — the harness will respond with an instruction or acknowledgment. Display the content of the response to the user.
540
+ 3. **Do NOT** instruct the user to run `il start` or use the iloom explorer panel — the pipeline handles this automatically.
541
+
542
+ {{else}}
423
543
  Direct the user to **open the epic issue** - this is the parent issue that contains all the child issues you just created. The epic provides an overview of the work and shows the dependency graph, making it the best starting point for understanding and tracking the implementation.
424
544
 
425
545
  {{#if IS_VSCODE_MODE}}
426
546
  **Next Steps Message (VS Code Mode):**
427
- End your summary with: "Exit this session and open the epic at [EPIC_URL] to review the plan and child issues. When ready to begin implementation, run `il start` on your first chosen issue."
547
+ End your summary with: "Review the epic and child issues at [EPIC_URL]. When ready to begin implementation, add a loom for issue #[EPIC_NUMBER] in the iloom explorer panel it will detect the child issues and launch the swarm workflow automatically."
428
548
  {{else}}
429
549
  **Next Steps Message (CLI Mode):**
430
- End your summary with: "Exit this session and open the epic at [EPIC_URL] to review the plan and child issues. When ready to begin implementation, run `il start` on your first chosen issue."
550
+ End your summary with: "Review the epic and child issues at [EPIC_URL]. When ready to begin implementation, run `il start [EPIC_NUMBER]` it will detect the child issues and launch the swarm workflow automatically."
431
551
  {{/if}}
432
552
 
433
- Replace `[EPIC_URL]` with the actual URL of the epic issue you created.
553
+ Replace `[EPIC_URL]` and `[EPIC_NUMBER]` with actual values from the epic issue you created.
554
+ {{/if}}
@@ -56,6 +56,7 @@ Use these Recap MCP tools:
56
56
  ## Comment Routing: PR Mode
57
57
 
58
58
  - **Read PR details** using `mcp__issue_management__get_pr` with `{ number: "{{PR_NUMBER}}", includeComments: true }`
59
+ - **Read inline code review comments** using `mcp__issue_management__get_review_comments` with `{ number: "{{PR_NUMBER}}" }`
59
60
  - **Write comments** to PR #{{PR_NUMBER}} using `type: "pr"`
60
61
 
61
62
  When calling `mcp__issue_management__create_comment`:
@@ -67,6 +68,16 @@ When calling `mcp__issue_management__create_comment`:
67
68
  }
68
69
  ```
69
70
 
71
+ When calling `mcp__issue_management__update_comment`:
72
+ ```
73
+ {
74
+ commentId: "COMMENT_ID",
75
+ number: "{{PR_NUMBER}}",
76
+ body: "updated comment content",
77
+ type: "pr"
78
+ }
79
+ ```
80
+
70
81
  This ensures PR comments always go to GitHub regardless of the configured issue tracker.
71
82
 
72
83
  ---
@@ -82,6 +93,14 @@ This will give you:
82
93
  - Commit history (commits) and changed files (files)
83
94
  - Current state and branch metadata (headRefName, baseRefName)
84
95
 
96
+ To read inline code review comments (comments on specific files and lines), use:
97
+ `mcp__issue_management__get_review_comments` with `{ number: "{{PR_NUMBER}}" }`
98
+
99
+ This returns:
100
+ - Inline comments on specific files and lines (path, line number, diff side)
101
+ - Review comment threads and replies (inReplyToId)
102
+ - Optionally filter by review ID: `{ number: "{{PR_NUMBER}}", reviewId: "REVIEW_ID" }`
103
+
85
104
  Also check if the branch name contains an issue number (like issue-123) and if so, read that issue for context:
86
105
  `mcp__issue_management__get_issue` with `{ number: "{{ISSUE_NUMBER}}", includeComments: true }`
87
106
 
@@ -117,12 +136,17 @@ When the user requests help, **prefer subagents** to preserve your context windo
117
136
  | Deep questions (how/why something works) | `@agent-iloom-issue-analyzer` |
118
137
  | Code review request | `@agent-iloom-code-reviewer` (foreground) |
119
138
  | Out-of-scope requests | Ask user: help anyway, create new issue, or skip |
139
+ | Epic decomposition / large task breakdown | Recommend `il plan <epic-number>` then `il start <epic-number>` (see below) |
120
140
  | Ready to wrap up | Show Wrapping Up Instructions (see below) |
121
141
 
122
142
  After handling each request, summarize what was done and confirm you're still available.
123
143
 
124
144
  Use `recap.add_entry` to capture decisions, risks, insights, or assumptions discovered during help sessions. Do not log status updates or task completions.
125
145
 
146
+ ### Epic Decomposition
147
+
148
+ When an epic issue is created or the user wants to break a large task into child issues, recommend they run `il plan <epic-number>` to decompose the epic into child issues with dependency analysis, then `il start <epic-number>` to launch swarm mode for parallel implementation. These are interactive CLI commands — do NOT run them via subagents or Bash. Do NOT create child issues manually or via subagents — unless explicitly asked.
149
+
126
150
  {{#if ARTIFACT_REVIEW_ENABLED}}
127
151
  ---
128
152
 
@@ -245,6 +269,24 @@ This is NOT optional - if the reviewer requests Claude Local Review, it must be
245
269
 
246
270
  When the user says they're done or ready to wrap up, provide these instructions:
247
271
 
272
+ {{#if IS_VSCODE_MODE}}
273
+ "## Wrapping Up
274
+
275
+ To complete the workflow and merge your changes:
276
+
277
+ 1. In the iloom Explorer panel, click the **Finish** flag on this loom
278
+
279
+ This will automatically detect the current PR and:
280
+ - Stop any running web servers for this PR
281
+ - Merge your changes back to the main branch
282
+ - Clean up the worktree
283
+ - Delete the database branch (if applicable)
284
+ - Remove the workspace
285
+
286
+ Alternatively, you can exit this Claude session (type `/exit`) and run `iloom finish` from the terminal.
287
+
288
+ 2. Once the finish process completes, you can close any IDE windows that were opened specifically for this PR"
289
+ {{else}}
248
290
  "## Wrapping Up
249
291
 
250
292
  To complete the workflow and merge your changes:
@@ -262,4 +304,5 @@ This will automatically detect the current PR and:
262
304
  - Delete the database branch (if applicable)
263
305
  - Remove the workspace
264
306
 
265
- 3. Once the finish command completes, you can close any terminal or IDE windows that were opened specifically for this PR"
307
+ 3. Once the finish command completes, you can close any terminal or IDE windows that were opened specifically for this PR"
308
+ {{/if}}
@@ -80,6 +80,16 @@ When calling `mcp__issue_management__create_comment`:
80
80
  }
81
81
  ```
82
82
 
83
+ When calling `mcp__issue_management__update_comment`:
84
+ ```
85
+ {
86
+ commentId: "COMMENT_ID",
87
+ number: "{{DRAFT_PR_NUMBER}}",
88
+ body: "updated comment content",
89
+ type: "pr"
90
+ }
91
+ ```
92
+
83
93
  This keeps all AI workflow comments on the draft PR for visibility and traceability.
84
94
  {{/if}}
85
95
  {{#if STANDARD_BRANCH_MODE}}
@@ -768,18 +778,48 @@ When the user requests help, **prefer subagents** to preserve your context windo
768
778
  | New features / complex changes | `@agent-iloom-issue-analyze-and-plan` → if approved, `@agent-iloom-issue-implementer` |
769
779
  | Deep questions (how/why something works) | `@agent-iloom-issue-analyzer` |
770
780
  | Out-of-scope requests | Ask user: help anyway, create new issue, or skip |
781
+ | Epic decomposition / large task breakdown | Recommend `il plan <epic-number>` then `il start <epic-number>` (see below) |
771
782
  | Ready to wrap up | Show Wrapping Up Instructions (see below) |
772
783
 
773
784
  After handling each request, summarize what was done and confirm you're still available.
774
785
 
775
786
  Use `recap.add_entry` to capture decisions, risks, insights, or assumptions discovered during help sessions. Do not log status updates or task completions.
776
787
 
788
+ ### Epic Decomposition
789
+
790
+ When an epic issue is created or the user wants to break a large task into child issues, recommend they run `il plan <epic-number>` to decompose the epic into child issues with dependency analysis, then `il start <epic-number>` to launch swarm mode for parallel implementation. These are interactive CLI commands — do NOT run them via subagents or Bash. Do NOT create child issues manually or via subagents — unless explicitly asked.
791
+
777
792
  ---
778
793
 
779
794
  ## Wrapping Up Instructions
780
795
 
781
796
  When the user says they're done or ready to wrap up, provide these instructions:
782
797
 
798
+ {{#if IS_VSCODE_MODE}}
799
+ "## Wrapping Up
800
+
801
+ Your changes have been implemented in the current branch.
802
+
803
+ **Note: This was branch mode - no GitHub issue is associated with this work. Context from this session is ephemeral and not persisted.**
804
+
805
+ If you want to track this work formally:
806
+ - Create a GitHub issue to document the changes
807
+ - Or create a pull request directly from this branch
808
+
809
+ To finish and merge this branch:
810
+ 1. In the iloom Explorer panel, click the **Finish** flag on this loom
811
+
812
+ This will automatically:
813
+ - Stop any running web servers
814
+ - Merge your changes back to the main branch
815
+ - Clean up the worktree
816
+ - Delete the database branch (if applicable)
817
+ - Remove the workspace
818
+
819
+ Alternatively, you can exit this Claude session (type `/exit`) and run `iloom finish` from the terminal.
820
+
821
+ 2. Once the finish process completes, you can close any IDE windows that were opened for this branch"
822
+ {{else}}
783
823
  "## Wrapping Up
784
824
 
785
825
  Your changes have been implemented in the current branch.
@@ -802,4 +842,5 @@ This will automatically:
802
842
  - Merge your changes back to the main branch
803
843
  - Clean up the worktree
804
844
  - Delete the database branch (if applicable)
805
- - Remove the workspace"
845
+ - Remove the workspace"
846
+ {{/if}}
@@ -89,6 +89,20 @@ The reader doesn't care about your internal process. They care about:
89
89
  - Any explanation of what you're doing
90
90
  - Any text after the closing `</details>` tag
91
91
 
92
+ **CRITICAL FORMAT REQUIREMENT:**
93
+ All comment content MUST use **GitHub-Flavored Markdown** syntax.
94
+ NEVER use Jira Wiki format - it will corrupt the output when converted.
95
+
96
+ | Do NOT use (Jira Wiki) | Use instead (Markdown) |
97
+ |------------------------|------------------------|
98
+ | `{code}...{code}` | ` ``` ` code blocks |
99
+ | `h1. Title` | `# Title` |
100
+ | `*bold*` | `**bold**` |
101
+ | `_italic_` | `*italic*` |
102
+ | `{quote}...{quote}` | `> ` blockquotes |
103
+ | `[link text\|url]` | `[link text](url)` |
104
+ | `-` or `*` at line start | `- ` (with space) for lists |
105
+
92
106
  **Output ONLY the markdown content below, starting with `## iloom Session Summary` and ending with `</details>`.**
93
107
 
94
108
  Structure it with key themes visible at the top, then detailed sections wrapped in collapsible tags: