@mindfoldhq/trellis 0.4.0 → 0.5.0-beta.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 (394) hide show
  1. package/dist/cli/index.js +0 -1
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/commands/init.d.ts +0 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +2 -4
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/update.d.ts +5 -0
  8. package/dist/commands/update.d.ts.map +1 -1
  9. package/dist/commands/update.js +83 -22
  10. package/dist/commands/update.js.map +1 -1
  11. package/dist/configurators/antigravity.d.ts +3 -4
  12. package/dist/configurators/antigravity.d.ts.map +1 -1
  13. package/dist/configurators/antigravity.js +17 -10
  14. package/dist/configurators/antigravity.js.map +1 -1
  15. package/dist/configurators/claude.d.ts +5 -28
  16. package/dist/configurators/claude.d.ts.map +1 -1
  17. package/dist/configurators/claude.js +30 -51
  18. package/dist/configurators/claude.js.map +1 -1
  19. package/dist/configurators/codebuddy.d.ts +6 -7
  20. package/dist/configurators/codebuddy.d.ts.map +1 -1
  21. package/dist/configurators/codebuddy.js +23 -51
  22. package/dist/configurators/codebuddy.js.map +1 -1
  23. package/dist/configurators/codex.d.ts +3 -6
  24. package/dist/configurators/codex.d.ts.map +1 -1
  25. package/dist/configurators/codex.js +29 -12
  26. package/dist/configurators/codex.js.map +1 -1
  27. package/dist/configurators/copilot.d.ts +6 -5
  28. package/dist/configurators/copilot.d.ts.map +1 -1
  29. package/dist/configurators/copilot.js +42 -13
  30. package/dist/configurators/copilot.js.map +1 -1
  31. package/dist/configurators/cursor.d.ts +6 -1
  32. package/dist/configurators/cursor.d.ts.map +1 -1
  33. package/dist/configurators/cursor.js +22 -45
  34. package/dist/configurators/cursor.js.map +1 -1
  35. package/dist/configurators/droid.d.ts +6 -1
  36. package/dist/configurators/droid.d.ts.map +1 -1
  37. package/dist/configurators/droid.js +23 -41
  38. package/dist/configurators/droid.js.map +1 -1
  39. package/dist/configurators/gemini.d.ts +8 -4
  40. package/dist/configurators/gemini.d.ts.map +1 -1
  41. package/dist/configurators/gemini.js +28 -47
  42. package/dist/configurators/gemini.js.map +1 -1
  43. package/dist/configurators/index.d.ts +1 -1
  44. package/dist/configurators/index.d.ts.map +1 -1
  45. package/dist/configurators/index.js +142 -98
  46. package/dist/configurators/index.js.map +1 -1
  47. package/dist/configurators/kilo.d.ts +3 -4
  48. package/dist/configurators/kilo.d.ts.map +1 -1
  49. package/dist/configurators/kilo.js +19 -46
  50. package/dist/configurators/kilo.js.map +1 -1
  51. package/dist/configurators/kiro.d.ts +4 -4
  52. package/dist/configurators/kiro.d.ts.map +1 -1
  53. package/dist/configurators/kiro.js +18 -14
  54. package/dist/configurators/kiro.js.map +1 -1
  55. package/dist/configurators/opencode.d.ts +3 -28
  56. package/dist/configurators/opencode.d.ts.map +1 -1
  57. package/dist/configurators/opencode.js +23 -48
  58. package/dist/configurators/opencode.js.map +1 -1
  59. package/dist/configurators/qoder.d.ts +6 -4
  60. package/dist/configurators/qoder.d.ts.map +1 -1
  61. package/dist/configurators/qoder.js +20 -47
  62. package/dist/configurators/qoder.js.map +1 -1
  63. package/dist/configurators/shared.d.ts +66 -3
  64. package/dist/configurators/shared.d.ts.map +1 -1
  65. package/dist/configurators/shared.js +251 -3
  66. package/dist/configurators/shared.js.map +1 -1
  67. package/dist/configurators/windsurf.d.ts +3 -4
  68. package/dist/configurators/windsurf.d.ts.map +1 -1
  69. package/dist/configurators/windsurf.js +17 -10
  70. package/dist/configurators/windsurf.js.map +1 -1
  71. package/dist/configurators/workflow.d.ts +0 -3
  72. package/dist/configurators/workflow.d.ts.map +1 -1
  73. package/dist/configurators/workflow.js +1 -7
  74. package/dist/configurators/workflow.js.map +1 -1
  75. package/dist/migrations/manifests/0.4.0.json +1 -1
  76. package/dist/migrations/manifests/0.5.0-beta.0.json +1644 -0
  77. package/dist/templates/claude/agents/check.md +2 -29
  78. package/dist/templates/claude/agents/research.md +70 -52
  79. package/dist/templates/claude/index.d.ts +5 -37
  80. package/dist/templates/claude/index.d.ts.map +1 -1
  81. package/dist/templates/claude/index.js +3 -42
  82. package/dist/templates/claude/index.js.map +1 -1
  83. package/dist/templates/claude/settings.json +3 -4
  84. package/dist/templates/{iflow → codebuddy}/agents/check.md +3 -30
  85. package/dist/templates/{iflow → codebuddy}/agents/implement.md +1 -1
  86. package/dist/templates/codebuddy/agents/research.md +138 -0
  87. package/dist/templates/codebuddy/index.d.ts +6 -16
  88. package/dist/templates/codebuddy/index.d.ts.map +1 -1
  89. package/dist/templates/codebuddy/index.js +6 -36
  90. package/dist/templates/codebuddy/index.js.map +1 -1
  91. package/dist/templates/codebuddy/settings.json +59 -0
  92. package/dist/templates/codex/agents/research.toml +50 -16
  93. package/dist/templates/codex/config.toml +10 -0
  94. package/dist/templates/codex/hooks/session-start.py +65 -29
  95. package/dist/templates/codex/hooks.json +11 -0
  96. package/dist/templates/codex/index.d.ts +0 -1
  97. package/dist/templates/codex/index.d.ts.map +1 -1
  98. package/dist/templates/codex/index.js +1 -8
  99. package/dist/templates/codex/index.js.map +1 -1
  100. package/dist/templates/common/commands/continue.md +51 -0
  101. package/dist/templates/common/commands/finish-work.md +32 -0
  102. package/dist/templates/common/commands/start.md +56 -0
  103. package/dist/templates/common/index.d.ts +28 -0
  104. package/dist/templates/common/index.d.ts.map +1 -0
  105. package/dist/templates/common/index.js +55 -0
  106. package/dist/templates/common/index.js.map +1 -0
  107. package/dist/templates/{codebuddy/commands/trellis → common/skills}/brainstorm.md +4 -4
  108. package/dist/templates/{opencode/commands/trellis → common/skills}/break-loop.md +4 -4
  109. package/dist/templates/common/skills/check.md +87 -0
  110. package/dist/templates/{codebuddy/commands/trellis → common/skills}/update-spec.md +18 -21
  111. package/dist/templates/copilot/hooks/session-start.py +65 -29
  112. package/dist/templates/copilot/hooks.json +8 -0
  113. package/dist/templates/cursor/agents/check.md +95 -0
  114. package/dist/templates/cursor/agents/implement.md +95 -0
  115. package/dist/templates/cursor/agents/research.md +138 -0
  116. package/dist/templates/cursor/hooks.json +24 -0
  117. package/dist/templates/cursor/index.d.ts +6 -17
  118. package/dist/templates/cursor/index.d.ts.map +1 -1
  119. package/dist/templates/cursor/index.js +6 -37
  120. package/dist/templates/cursor/index.js.map +1 -1
  121. package/dist/templates/droid/droids/check.md +95 -0
  122. package/dist/templates/droid/droids/implement.md +95 -0
  123. package/dist/templates/droid/droids/research.md +138 -0
  124. package/dist/templates/droid/index.d.ts +7 -19
  125. package/dist/templates/droid/index.d.ts.map +1 -1
  126. package/dist/templates/droid/index.js +7 -39
  127. package/dist/templates/droid/index.js.map +1 -1
  128. package/dist/templates/droid/settings.json +59 -0
  129. package/dist/templates/extract.d.ts +7 -193
  130. package/dist/templates/extract.d.ts.map +1 -1
  131. package/dist/templates/extract.js +7 -310
  132. package/dist/templates/extract.js.map +1 -1
  133. package/dist/templates/gemini/agents/check.md +95 -0
  134. package/dist/templates/gemini/agents/implement.md +95 -0
  135. package/dist/templates/gemini/agents/research.md +138 -0
  136. package/dist/templates/gemini/index.d.ts +6 -14
  137. package/dist/templates/gemini/index.d.ts.map +1 -1
  138. package/dist/templates/gemini/index.js +6 -37
  139. package/dist/templates/gemini/index.js.map +1 -1
  140. package/dist/templates/gemini/settings.json +28 -0
  141. package/dist/templates/kiro/agents/check.json +13 -0
  142. package/dist/templates/kiro/agents/implement.json +13 -0
  143. package/dist/templates/kiro/agents/research.json +21 -0
  144. package/dist/templates/kiro/index.d.ts +11 -11
  145. package/dist/templates/kiro/index.d.ts.map +1 -1
  146. package/dist/templates/kiro/index.js +11 -33
  147. package/dist/templates/kiro/index.js.map +1 -1
  148. package/dist/templates/opencode/agents/check.md +3 -30
  149. package/dist/templates/opencode/agents/implement.md +1 -1
  150. package/dist/templates/opencode/agents/research.md +1 -2
  151. package/dist/templates/opencode/plugins/inject-subagent-context.js +9 -183
  152. package/dist/templates/opencode/plugins/inject-workflow-state.js +160 -0
  153. package/dist/templates/opencode/plugins/session-start.js +71 -32
  154. package/dist/templates/qoder/agents/check.md +95 -0
  155. package/dist/templates/qoder/agents/implement.md +95 -0
  156. package/dist/templates/qoder/agents/research.md +138 -0
  157. package/dist/templates/qoder/index.d.ts +7 -10
  158. package/dist/templates/qoder/index.d.ts.map +1 -1
  159. package/dist/templates/qoder/index.js +7 -32
  160. package/dist/templates/qoder/index.js.map +1 -1
  161. package/dist/templates/qoder/settings.json +47 -0
  162. package/dist/templates/shared-hooks/index.d.ts +19 -0
  163. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  164. package/dist/templates/shared-hooks/index.js +30 -0
  165. package/dist/templates/shared-hooks/index.js.map +1 -0
  166. package/dist/templates/{iflow/hooks → shared-hooks}/inject-subagent-context.py +74 -263
  167. package/dist/templates/shared-hooks/inject-workflow-state.py +231 -0
  168. package/dist/templates/{claude/hooks → shared-hooks}/session-start.py +162 -55
  169. package/dist/templates/template-utils.d.ts +26 -0
  170. package/dist/templates/template-utils.d.ts.map +1 -0
  171. package/dist/templates/template-utils.js +60 -0
  172. package/dist/templates/template-utils.js.map +1 -0
  173. package/dist/templates/trellis/index.d.ts +1 -14
  174. package/dist/templates/trellis/index.d.ts.map +1 -1
  175. package/dist/templates/trellis/index.js +2 -27
  176. package/dist/templates/trellis/index.js.map +1 -1
  177. package/dist/templates/trellis/scripts/common/cli_adapter.py +2 -2
  178. package/dist/templates/trellis/scripts/common/config.py +126 -1
  179. package/dist/templates/trellis/scripts/common/git_context.py +25 -2
  180. package/dist/templates/trellis/scripts/common/task_context.py +3 -23
  181. package/dist/templates/trellis/scripts/common/task_store.py +0 -12
  182. package/dist/templates/trellis/scripts/common/workflow_phase.py +176 -0
  183. package/dist/templates/trellis/scripts/task.py +6 -35
  184. package/dist/templates/trellis/workflow.md +274 -297
  185. package/dist/types/ai-tools.d.ts +21 -3
  186. package/dist/types/ai-tools.d.ts.map +1 -1
  187. package/dist/types/ai-tools.js +106 -15
  188. package/dist/types/ai-tools.js.map +1 -1
  189. package/dist/types/migration.d.ts +8 -1
  190. package/dist/types/migration.d.ts.map +1 -1
  191. package/package.json +3 -2
  192. package/dist/configurators/iflow.d.ts +0 -33
  193. package/dist/configurators/iflow.d.ts.map +0 -1
  194. package/dist/configurators/iflow.js +0 -99
  195. package/dist/configurators/iflow.js.map +0 -1
  196. package/dist/templates/antigravity/index.d.ts +0 -12
  197. package/dist/templates/antigravity/index.d.ts.map +0 -1
  198. package/dist/templates/antigravity/index.js +0 -29
  199. package/dist/templates/antigravity/index.js.map +0 -1
  200. package/dist/templates/claude/agents/debug.md +0 -106
  201. package/dist/templates/claude/agents/dispatch.md +0 -213
  202. package/dist/templates/claude/agents/plan.md +0 -396
  203. package/dist/templates/claude/commands/trellis/brainstorm.md +0 -487
  204. package/dist/templates/claude/commands/trellis/break-loop.md +0 -125
  205. package/dist/templates/claude/commands/trellis/check-cross-layer.md +0 -153
  206. package/dist/templates/claude/commands/trellis/check.md +0 -25
  207. package/dist/templates/claude/commands/trellis/create-command.md +0 -154
  208. package/dist/templates/claude/commands/trellis/finish-work.md +0 -153
  209. package/dist/templates/claude/commands/trellis/integrate-skill.md +0 -219
  210. package/dist/templates/claude/commands/trellis/onboard.md +0 -358
  211. package/dist/templates/claude/commands/trellis/parallel.md +0 -192
  212. package/dist/templates/claude/commands/trellis/record-session.md +0 -62
  213. package/dist/templates/claude/commands/trellis/start.md +0 -393
  214. package/dist/templates/claude/commands/trellis/update-spec.md +0 -354
  215. package/dist/templates/claude/hooks/inject-subagent-context.py +0 -803
  216. package/dist/templates/claude/hooks/ralph-loop.py +0 -396
  217. package/dist/templates/codebuddy/commands/trellis/before-dev.md +0 -29
  218. package/dist/templates/codebuddy/commands/trellis/break-loop.md +0 -107
  219. package/dist/templates/codebuddy/commands/trellis/check-cross-layer.md +0 -153
  220. package/dist/templates/codebuddy/commands/trellis/check.md +0 -25
  221. package/dist/templates/codebuddy/commands/trellis/create-command.md +0 -154
  222. package/dist/templates/codebuddy/commands/trellis/finish-work.md +0 -143
  223. package/dist/templates/codebuddy/commands/trellis/integrate-skill.md +0 -219
  224. package/dist/templates/codebuddy/commands/trellis/onboard.md +0 -358
  225. package/dist/templates/codebuddy/commands/trellis/record-session.md +0 -61
  226. package/dist/templates/codebuddy/commands/trellis/start.md +0 -373
  227. package/dist/templates/codex/codex-skills/parallel/SKILL.md +0 -194
  228. package/dist/templates/cursor/commands/trellis-before-dev.md +0 -29
  229. package/dist/templates/cursor/commands/trellis-brainstorm.md +0 -487
  230. package/dist/templates/cursor/commands/trellis-break-loop.md +0 -107
  231. package/dist/templates/cursor/commands/trellis-check-cross-layer.md +0 -153
  232. package/dist/templates/cursor/commands/trellis-check.md +0 -25
  233. package/dist/templates/cursor/commands/trellis-create-command.md +0 -154
  234. package/dist/templates/cursor/commands/trellis-finish-work.md +0 -143
  235. package/dist/templates/cursor/commands/trellis-integrate-skill.md +0 -219
  236. package/dist/templates/cursor/commands/trellis-onboard.md +0 -358
  237. package/dist/templates/cursor/commands/trellis-record-session.md +0 -62
  238. package/dist/templates/cursor/commands/trellis-start.md +0 -373
  239. package/dist/templates/cursor/commands/trellis-update-spec.md +0 -354
  240. package/dist/templates/droid/commands/trellis/before-dev.md +0 -33
  241. package/dist/templates/droid/commands/trellis/brainstorm.md +0 -491
  242. package/dist/templates/droid/commands/trellis/break-loop.md +0 -111
  243. package/dist/templates/droid/commands/trellis/check-cross-layer.md +0 -157
  244. package/dist/templates/droid/commands/trellis/check.md +0 -29
  245. package/dist/templates/droid/commands/trellis/create-command.md +0 -158
  246. package/dist/templates/droid/commands/trellis/finish-work.md +0 -147
  247. package/dist/templates/droid/commands/trellis/integrate-skill.md +0 -223
  248. package/dist/templates/droid/commands/trellis/onboard.md +0 -362
  249. package/dist/templates/droid/commands/trellis/record-session.md +0 -66
  250. package/dist/templates/droid/commands/trellis/start.md +0 -377
  251. package/dist/templates/droid/commands/trellis/update-spec.md +0 -358
  252. package/dist/templates/gemini/commands/trellis/before-dev.toml +0 -33
  253. package/dist/templates/gemini/commands/trellis/brainstorm.toml +0 -435
  254. package/dist/templates/gemini/commands/trellis/break-loop.toml +0 -129
  255. package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +0 -147
  256. package/dist/templates/gemini/commands/trellis/check.toml +0 -29
  257. package/dist/templates/gemini/commands/trellis/create-command.toml +0 -119
  258. package/dist/templates/gemini/commands/trellis/finish-work.toml +0 -133
  259. package/dist/templates/gemini/commands/trellis/integrate-skill.toml +0 -104
  260. package/dist/templates/gemini/commands/trellis/onboard.toml +0 -111
  261. package/dist/templates/gemini/commands/trellis/record-session.toml +0 -66
  262. package/dist/templates/gemini/commands/trellis/start.toml +0 -354
  263. package/dist/templates/gemini/commands/trellis/update-spec.toml +0 -132
  264. package/dist/templates/iflow/agents/debug.md +0 -106
  265. package/dist/templates/iflow/agents/dispatch.md +0 -213
  266. package/dist/templates/iflow/agents/plan.md +0 -396
  267. package/dist/templates/iflow/agents/research.md +0 -120
  268. package/dist/templates/iflow/commands/trellis/before-dev.md +0 -29
  269. package/dist/templates/iflow/commands/trellis/brainstorm.md +0 -487
  270. package/dist/templates/iflow/commands/trellis/break-loop.md +0 -125
  271. package/dist/templates/iflow/commands/trellis/check-cross-layer.md +0 -153
  272. package/dist/templates/iflow/commands/trellis/check.md +0 -25
  273. package/dist/templates/iflow/commands/trellis/create-command.md +0 -152
  274. package/dist/templates/iflow/commands/trellis/finish-work.md +0 -153
  275. package/dist/templates/iflow/commands/trellis/integrate-skill.md +0 -219
  276. package/dist/templates/iflow/commands/trellis/onboard.md +0 -358
  277. package/dist/templates/iflow/commands/trellis/parallel.md +0 -192
  278. package/dist/templates/iflow/commands/trellis/record-session.md +0 -62
  279. package/dist/templates/iflow/commands/trellis/start.md +0 -393
  280. package/dist/templates/iflow/commands/trellis/update-spec.md +0 -354
  281. package/dist/templates/iflow/hooks/ralph-loop.py +0 -395
  282. package/dist/templates/iflow/hooks/session-start.py +0 -403
  283. package/dist/templates/iflow/index.d.ts +0 -54
  284. package/dist/templates/iflow/index.d.ts.map +0 -1
  285. package/dist/templates/iflow/index.js +0 -85
  286. package/dist/templates/iflow/index.js.map +0 -1
  287. package/dist/templates/iflow/settings.json +0 -60
  288. package/dist/templates/kilo/index.d.ts +0 -16
  289. package/dist/templates/kilo/index.d.ts.map +0 -1
  290. package/dist/templates/kilo/index.js +0 -39
  291. package/dist/templates/kilo/index.js.map +0 -1
  292. package/dist/templates/kilo/workflows/before-dev.md +0 -29
  293. package/dist/templates/kilo/workflows/brainstorm.md +0 -487
  294. package/dist/templates/kilo/workflows/break-loop.md +0 -125
  295. package/dist/templates/kilo/workflows/check-cross-layer.md +0 -153
  296. package/dist/templates/kilo/workflows/check.md +0 -25
  297. package/dist/templates/kilo/workflows/create-command.md +0 -152
  298. package/dist/templates/kilo/workflows/finish-work.md +0 -129
  299. package/dist/templates/kilo/workflows/integrate-skill.md +0 -219
  300. package/dist/templates/kilo/workflows/onboard.md +0 -358
  301. package/dist/templates/kilo/workflows/parallel.md +0 -193
  302. package/dist/templates/kilo/workflows/record-session.md +0 -62
  303. package/dist/templates/kilo/workflows/start.md +0 -387
  304. package/dist/templates/kilo/workflows/update-spec.md +0 -285
  305. package/dist/templates/kiro/skills/before-dev/SKILL.md +0 -34
  306. package/dist/templates/kiro/skills/brainstorm/SKILL.md +0 -492
  307. package/dist/templates/kiro/skills/break-loop/SKILL.md +0 -130
  308. package/dist/templates/kiro/skills/check/SKILL.md +0 -30
  309. package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +0 -158
  310. package/dist/templates/kiro/skills/create-command/SKILL.md +0 -101
  311. package/dist/templates/kiro/skills/finish-work/SKILL.md +0 -148
  312. package/dist/templates/kiro/skills/integrate-skill/SKILL.md +0 -221
  313. package/dist/templates/kiro/skills/onboard/SKILL.md +0 -363
  314. package/dist/templates/kiro/skills/record-session/SKILL.md +0 -67
  315. package/dist/templates/kiro/skills/start/SKILL.md +0 -351
  316. package/dist/templates/kiro/skills/update-spec/SKILL.md +0 -335
  317. package/dist/templates/opencode/agents/debug.md +0 -129
  318. package/dist/templates/opencode/agents/dispatch.md +0 -223
  319. package/dist/templates/opencode/agents/trellis-plan.md +0 -427
  320. package/dist/templates/opencode/commands/trellis/before-dev.md +0 -29
  321. package/dist/templates/opencode/commands/trellis/brainstorm.md +0 -487
  322. package/dist/templates/opencode/commands/trellis/check-cross-layer.md +0 -153
  323. package/dist/templates/opencode/commands/trellis/check.md +0 -25
  324. package/dist/templates/opencode/commands/trellis/create-command.md +0 -154
  325. package/dist/templates/opencode/commands/trellis/finish-work.md +0 -144
  326. package/dist/templates/opencode/commands/trellis/integrate-skill.md +0 -219
  327. package/dist/templates/opencode/commands/trellis/migrate-specs.md +0 -0
  328. package/dist/templates/opencode/commands/trellis/onboard.md +0 -358
  329. package/dist/templates/opencode/commands/trellis/parallel.md +0 -193
  330. package/dist/templates/opencode/commands/trellis/record-session.md +0 -62
  331. package/dist/templates/opencode/commands/trellis/start.md +0 -351
  332. package/dist/templates/opencode/commands/trellis/update-spec.md +0 -354
  333. package/dist/templates/qoder/skills/before-dev/SKILL.md +0 -34
  334. package/dist/templates/qoder/skills/brainstorm/SKILL.md +0 -492
  335. package/dist/templates/qoder/skills/break-loop/SKILL.md +0 -130
  336. package/dist/templates/qoder/skills/check/SKILL.md +0 -30
  337. package/dist/templates/qoder/skills/check-cross-layer/SKILL.md +0 -158
  338. package/dist/templates/qoder/skills/create-command/SKILL.md +0 -101
  339. package/dist/templates/qoder/skills/finish-work/SKILL.md +0 -134
  340. package/dist/templates/qoder/skills/integrate-skill/SKILL.md +0 -221
  341. package/dist/templates/qoder/skills/onboard/SKILL.md +0 -363
  342. package/dist/templates/qoder/skills/record-session/SKILL.md +0 -67
  343. package/dist/templates/qoder/skills/start/SKILL.md +0 -388
  344. package/dist/templates/qoder/skills/update-spec/SKILL.md +0 -290
  345. package/dist/templates/trellis/scripts/common/phase.py +0 -254
  346. package/dist/templates/trellis/scripts/common/registry.py +0 -335
  347. package/dist/templates/trellis/scripts/common/worktree.py +0 -305
  348. package/dist/templates/trellis/scripts/multi_agent/__init__.py +0 -5
  349. package/dist/templates/trellis/scripts/multi_agent/_bootstrap.py +0 -17
  350. package/dist/templates/trellis/scripts/multi_agent/cleanup.py +0 -398
  351. package/dist/templates/trellis/scripts/multi_agent/create_pr.py +0 -620
  352. package/dist/templates/trellis/scripts/multi_agent/plan.py +0 -213
  353. package/dist/templates/trellis/scripts/multi_agent/start.py +0 -539
  354. package/dist/templates/trellis/scripts/multi_agent/status.py +0 -76
  355. package/dist/templates/trellis/scripts/multi_agent/status_display.py +0 -542
  356. package/dist/templates/trellis/scripts/multi_agent/status_monitor.py +0 -225
  357. package/dist/templates/trellis/scripts-shell-archive/add-session.sh +0 -384
  358. package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +0 -129
  359. package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +0 -263
  360. package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +0 -208
  361. package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +0 -150
  362. package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +0 -247
  363. package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +0 -142
  364. package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +0 -151
  365. package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +0 -128
  366. package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +0 -299
  367. package/dist/templates/trellis/scripts-shell-archive/get-context.sh +0 -7
  368. package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +0 -15
  369. package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +0 -34
  370. package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +0 -396
  371. package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +0 -241
  372. package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +0 -207
  373. package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +0 -317
  374. package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +0 -828
  375. package/dist/templates/trellis/scripts-shell-archive/task.sh +0 -1204
  376. package/dist/templates/trellis/worktree.yaml +0 -47
  377. package/dist/templates/windsurf/index.d.ts +0 -21
  378. package/dist/templates/windsurf/index.d.ts.map +0 -1
  379. package/dist/templates/windsurf/index.js +0 -44
  380. package/dist/templates/windsurf/index.js.map +0 -1
  381. package/dist/templates/windsurf/workflows/trellis-before-dev.md +0 -31
  382. package/dist/templates/windsurf/workflows/trellis-brainstorm.md +0 -491
  383. package/dist/templates/windsurf/workflows/trellis-break-loop.md +0 -111
  384. package/dist/templates/windsurf/workflows/trellis-check-cross-layer.md +0 -157
  385. package/dist/templates/windsurf/workflows/trellis-check.md +0 -27
  386. package/dist/templates/windsurf/workflows/trellis-create-command.md +0 -154
  387. package/dist/templates/windsurf/workflows/trellis-finish-work.md +0 -147
  388. package/dist/templates/windsurf/workflows/trellis-integrate-skill.md +0 -220
  389. package/dist/templates/windsurf/workflows/trellis-onboard.md +0 -362
  390. package/dist/templates/windsurf/workflows/trellis-record-session.md +0 -66
  391. package/dist/templates/windsurf/workflows/trellis-start.md +0 -373
  392. package/dist/templates/windsurf/workflows/trellis-update-spec.md +0 -358
  393. /package/dist/templates/{claude/commands/trellis → common/skills}/before-dev.md +0 -0
  394. /package/dist/templates/{claude/hooks → shared-hooks}/statusline.py +0 -0
@@ -1,396 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- Ralph Loop - SubagentStop Hook for Check Agent Loop Control
5
-
6
- Based on the Ralph Wiggum technique for autonomous agent loops.
7
- Uses completion promises to control when the check agent can stop.
8
-
9
- Mechanism:
10
- - Intercepts when check subagent tries to stop (SubagentStop event)
11
- - If verify commands configured in worktree.yaml, runs them to verify
12
- - Otherwise, reads check.jsonl to get dynamic completion markers ({reason}_FINISH)
13
- - Blocks stopping until verification passes or all markers found
14
- - Has max iterations as safety limit
15
-
16
- State file: .trellis/.ralph-state.json
17
- - Tracks current iteration count per session
18
- - Resets when task changes
19
- """
20
-
21
- # IMPORTANT: Suppress all warnings FIRST
22
- import warnings
23
- warnings.filterwarnings("ignore")
24
-
25
- import json
26
- import os
27
- import subprocess
28
- import sys
29
- from datetime import datetime
30
- from pathlib import Path
31
-
32
- # IMPORTANT: Force stdout to use UTF-8 on Windows
33
- # This fixes UnicodeEncodeError when outputting non-ASCII characters
34
- if sys.platform == "win32":
35
- import io as _io
36
- if hasattr(sys.stdout, "reconfigure"):
37
- sys.stdout.reconfigure(encoding="utf-8", errors="replace") # type: ignore[union-attr]
38
- elif hasattr(sys.stdout, "detach"):
39
- sys.stdout = _io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8", errors="replace") # type: ignore[union-attr]
40
-
41
- # =============================================================================
42
- # Configuration
43
- # =============================================================================
44
-
45
- MAX_ITERATIONS = 5 # Safety limit to prevent infinite loops
46
- STATE_TIMEOUT_MINUTES = 30 # Reset state if older than this
47
- STATE_FILE = ".trellis/.ralph-state.json"
48
- WORKTREE_YAML = ".trellis/worktree.yaml"
49
- DIR_WORKFLOW = ".trellis"
50
- FILE_CURRENT_TASK = ".current-task"
51
-
52
- # Only control loop for check agent
53
- TARGET_AGENT = "check"
54
-
55
-
56
- def find_repo_root(start_path: str) -> str | None:
57
- """Find git repo root from start_path upwards"""
58
- current = Path(start_path).resolve()
59
- while current != current.parent:
60
- if (current / ".git").exists():
61
- return str(current)
62
- current = current.parent
63
- return None
64
-
65
-
66
- def get_current_task(repo_root: str) -> str | None:
67
- """Read current task directory path"""
68
- current_task_file = os.path.join(repo_root, DIR_WORKFLOW, FILE_CURRENT_TASK)
69
- if not os.path.exists(current_task_file):
70
- return None
71
-
72
- try:
73
- with open(current_task_file, "r", encoding="utf-8") as f:
74
- content = f.read().strip()
75
- if not content:
76
- return None
77
- normalized = content.replace("\\", "/")
78
- while normalized.startswith("./"):
79
- normalized = normalized[2:]
80
- if normalized.startswith("tasks/"):
81
- normalized = f".trellis/{normalized}"
82
- return normalized
83
- except Exception:
84
- return None
85
-
86
-
87
- def get_verify_commands(repo_root: str) -> list[str]:
88
- """
89
- Read verify commands from worktree.yaml.
90
-
91
- Returns list of commands to run, or empty list if not configured.
92
- Uses simple YAML parsing without external dependencies.
93
- """
94
- yaml_path = os.path.join(repo_root, WORKTREE_YAML)
95
- if not os.path.exists(yaml_path):
96
- return []
97
-
98
- try:
99
- with open(yaml_path, "r", encoding="utf-8") as f:
100
- content = f.read()
101
-
102
- # Simple YAML parsing for verify section
103
- # Look for "verify:" followed by list items
104
- lines = content.split("\n")
105
- in_verify_section = False
106
- commands = []
107
-
108
- for line in lines:
109
- stripped = line.strip()
110
-
111
- # Check for section start
112
- if stripped.startswith("verify:"):
113
- in_verify_section = True
114
- continue
115
-
116
- # Check for new section (not indented, ends with :)
117
- if (
118
- not line.startswith(" ")
119
- and not line.startswith("\t")
120
- and stripped.endswith(":")
121
- and stripped != ""
122
- ):
123
- in_verify_section = False
124
- continue
125
-
126
- # If in verify section, look for list items
127
- if in_verify_section:
128
- # Skip comments and empty lines
129
- if stripped.startswith("#") or stripped == "":
130
- continue
131
- # Parse list item (- command)
132
- if stripped.startswith("- "):
133
- cmd = stripped[2:].strip()
134
- if cmd:
135
- commands.append(cmd)
136
-
137
- return commands
138
- except Exception:
139
- return []
140
-
141
-
142
- def run_verify_commands(repo_root: str, commands: list[str]) -> tuple[bool, str]:
143
- """
144
- Run verify commands and return (success, message).
145
-
146
- All commands must pass for success.
147
- """
148
- for cmd in commands:
149
- try:
150
- result = subprocess.run(
151
- cmd,
152
- shell=True,
153
- cwd=repo_root,
154
- capture_output=True,
155
- timeout=120, # 2 minute timeout per command
156
- )
157
- if result.returncode != 0:
158
- stderr = result.stderr.decode("utf-8", errors="replace")
159
- stdout = result.stdout.decode("utf-8", errors="replace")
160
- error_output = stderr or stdout
161
- # Truncate long output
162
- if len(error_output) > 500:
163
- error_output = error_output[:500] + "..."
164
- return False, f"Command failed: {cmd}\n{error_output}"
165
- except subprocess.TimeoutExpired:
166
- return False, f"Command timed out: {cmd}"
167
- except Exception as e:
168
- return False, f"Command error: {cmd} - {str(e)}"
169
-
170
- return True, "All verify commands passed"
171
-
172
-
173
- def get_completion_markers(repo_root: str, task_dir: str) -> list[str]:
174
- """
175
- Read check.jsonl and generate completion markers from reasons.
176
-
177
- Each entry's "reason" field becomes {REASON}_FINISH marker.
178
- Example: {"file": "...", "reason": "TypeCheck"} -> "TYPECHECK_FINISH"
179
- """
180
- check_jsonl_path = os.path.join(repo_root, task_dir, "check.jsonl")
181
- markers = []
182
-
183
- if not os.path.exists(check_jsonl_path):
184
- # Fallback: if no check.jsonl, use default marker
185
- return ["ALL_CHECKS_FINISH"]
186
-
187
- try:
188
- with open(check_jsonl_path, "r", encoding="utf-8") as f:
189
- for line in f:
190
- line = line.strip()
191
- if not line:
192
- continue
193
- try:
194
- item = json.loads(line)
195
- reason = item.get("reason", "")
196
- if reason:
197
- # Convert to uppercase and add _FINISH suffix
198
- marker = f"{reason.upper().replace(' ', '_')}_FINISH"
199
- if marker not in markers:
200
- markers.append(marker)
201
- except json.JSONDecodeError:
202
- continue
203
- except Exception:
204
- pass
205
-
206
- # If no markers found, use default
207
- if not markers:
208
- markers = ["ALL_CHECKS_FINISH"]
209
-
210
- return markers
211
-
212
-
213
- def load_state(repo_root: str) -> dict:
214
- """Load Ralph Loop state from file"""
215
- state_path = os.path.join(repo_root, STATE_FILE)
216
- if not os.path.exists(state_path):
217
- return {"task": None, "iteration": 0, "started_at": None}
218
-
219
- try:
220
- with open(state_path, "r", encoding="utf-8") as f:
221
- return json.load(f)
222
- except Exception:
223
- return {"task": None, "iteration": 0, "started_at": None}
224
-
225
-
226
- def save_state(repo_root: str, state: dict) -> None:
227
- """Save Ralph Loop state to file"""
228
- state_path = os.path.join(repo_root, STATE_FILE)
229
- try:
230
- # Ensure directory exists
231
- os.makedirs(os.path.dirname(state_path), exist_ok=True)
232
- with open(state_path, "w", encoding="utf-8") as f:
233
- json.dump(state, f, indent=2, ensure_ascii=False)
234
- except Exception:
235
- pass
236
-
237
-
238
- def check_completion(agent_output: str, markers: list[str]) -> tuple[bool, list[str]]:
239
- """
240
- Check if all completion markers are present in agent output.
241
-
242
- Returns:
243
- (all_complete, missing_markers)
244
- """
245
- missing = []
246
- for marker in markers:
247
- if marker not in agent_output:
248
- missing.append(marker)
249
-
250
- return len(missing) == 0, missing
251
-
252
-
253
- def main():
254
- try:
255
- input_data = json.load(sys.stdin)
256
- except json.JSONDecodeError:
257
- # If can't parse input, allow stop
258
- sys.exit(0)
259
-
260
- # Get event info
261
- hook_event = input_data.get("hook_event_name", "")
262
-
263
- # Only handle SubagentStop event
264
- if hook_event != "SubagentStop":
265
- sys.exit(0)
266
-
267
- # Get subagent info
268
- # Field names per Claude Code SubagentStop event schema:
269
- # agent_type, last_assistant_message, agent_id, agent_transcript_path, cwd
270
- # The event does NOT carry a `prompt` field, so finish-phase detection
271
- # based on a `[finish]` marker in the user prompt is no longer possible
272
- # here; finish-phase skip logic should be reintroduced via task.json
273
- # state (e.g. current_phase) in a follow-up.
274
- agent_type = input_data.get("agent_type", "")
275
- last_assistant_message = input_data.get("last_assistant_message", "")
276
- cwd = input_data.get("cwd", os.getcwd())
277
-
278
- # Only control check agent
279
- if agent_type != TARGET_AGENT:
280
- sys.exit(0)
281
-
282
- # Find repo root
283
- repo_root = find_repo_root(cwd)
284
- if not repo_root:
285
- sys.exit(0)
286
-
287
- # Get current task
288
- task_dir = get_current_task(repo_root)
289
- if not task_dir:
290
- sys.exit(0)
291
-
292
- # Load state
293
- state = load_state(repo_root)
294
-
295
- # Reset state if task changed or state is too old
296
- should_reset = False
297
- if state.get("task") != task_dir:
298
- should_reset = True
299
- elif state.get("started_at"):
300
- try:
301
- started = datetime.fromisoformat(state["started_at"])
302
- if (datetime.now() - started).total_seconds() > STATE_TIMEOUT_MINUTES * 60:
303
- should_reset = True
304
- except (ValueError, TypeError):
305
- should_reset = True
306
-
307
- if should_reset:
308
- state = {
309
- "task": task_dir,
310
- "iteration": 0,
311
- "started_at": datetime.now().isoformat(),
312
- }
313
-
314
- # Increment iteration
315
- state["iteration"] = state.get("iteration", 0) + 1
316
- current_iteration = state["iteration"]
317
-
318
- # Save state
319
- save_state(repo_root, state)
320
-
321
- # Safety check: max iterations
322
- if current_iteration >= MAX_ITERATIONS:
323
- # Allow stop, reset state for next run
324
- state["iteration"] = 0
325
- save_state(repo_root, state)
326
- output = {
327
- "decision": "allow",
328
- "reason": f"Max iterations ({MAX_ITERATIONS}) reached. Stopping to prevent infinite loop.",
329
- }
330
- print(json.dumps(output, ensure_ascii=False))
331
- sys.exit(0)
332
-
333
- # Check if verify commands are configured
334
- verify_commands = get_verify_commands(repo_root)
335
-
336
- if verify_commands:
337
- # Use programmatic verification
338
- passed, message = run_verify_commands(repo_root, verify_commands)
339
-
340
- if passed:
341
- # All verify commands passed, allow stop
342
- state["iteration"] = 0
343
- save_state(repo_root, state)
344
- output = {
345
- "decision": "allow",
346
- "reason": "All verify commands passed. Check phase complete.",
347
- }
348
- print(json.dumps(output, ensure_ascii=False))
349
- sys.exit(0)
350
- else:
351
- # Verification failed, block stop
352
- output = {
353
- "decision": "block",
354
- "reason": f"Iteration {current_iteration}/{MAX_ITERATIONS}. Verification failed:\n{message}\n\nPlease fix the issues and try again.",
355
- }
356
- print(json.dumps(output, ensure_ascii=False))
357
- sys.exit(0)
358
- else:
359
- # No verify commands, fall back to completion markers
360
- markers = get_completion_markers(repo_root, task_dir)
361
- all_complete, missing = check_completion(last_assistant_message, markers)
362
-
363
- if all_complete:
364
- # All checks complete, allow stop
365
- state["iteration"] = 0
366
- save_state(repo_root, state)
367
- output = {
368
- "decision": "allow",
369
- "reason": "All completion markers found. Check phase complete.",
370
- }
371
- print(json.dumps(output, ensure_ascii=False))
372
- sys.exit(0)
373
- else:
374
- # Missing markers, block stop and continue
375
- output = {
376
- "decision": "block",
377
- "reason": f"""Iteration {current_iteration}/{MAX_ITERATIONS}. Missing completion markers: {", ".join(missing)}.
378
-
379
- IMPORTANT: You must ACTUALLY run the checks, not just output the markers.
380
- - Did you run lint? What was the output?
381
- - Did you run typecheck? What was the output?
382
- - Did they actually pass with zero errors?
383
-
384
- Only output a marker (e.g., LINT_FINISH) AFTER:
385
- 1. You have executed the corresponding command
386
- 2. The command completed with zero errors
387
- 3. You have shown the command output in your response
388
-
389
- Do NOT output markers just to escape the loop. The loop exists to ensure quality.""",
390
- }
391
- print(json.dumps(output, ensure_ascii=False))
392
- sys.exit(0)
393
-
394
-
395
- if __name__ == "__main__":
396
- main()
@@ -1,29 +0,0 @@
1
- Read the relevant development guidelines before starting your task.
2
-
3
- Execute these steps:
4
-
5
- 1. **Discover packages and their spec layers**:
6
- ```bash
7
- python3 ./.trellis/scripts/get_context.py --mode packages
8
- ```
9
-
10
- 2. **Identify which specs apply** to your task based on:
11
- - Which package you're modifying (e.g., `cli/`, `docs-site/`)
12
- - What type of work (backend, frontend, unit-test, docs, etc.)
13
-
14
- 3. **Read the spec index** for each relevant module:
15
- ```bash
16
- cat .trellis/spec/<package>/<layer>/index.md
17
- ```
18
- Follow the **"Pre-Development Checklist"** section in the index.
19
-
20
- 4. **Read the specific guideline files** listed in the Pre-Development Checklist that are relevant to your task. The index is NOT the goal — it points you to the actual guideline files (e.g., `error-handling.md`, `conventions.md`, `mock-strategies.md`). Read those files to understand the coding standards and patterns.
21
-
22
- 5. **Always read shared guides**:
23
- ```bash
24
- cat .trellis/spec/guides/index.md
25
- ```
26
-
27
- 6. Understand the coding standards and patterns you need to follow, then proceed with your development plan.
28
-
29
- This step is **mandatory** before writing any code.
@@ -1,107 +0,0 @@
1
- # Break the Loop - Deep Bug Analysis
2
-
3
- When debug is complete, use this command for deep analysis to break the "fix bug -> forget -> repeat" cycle.
4
-
5
- ---
6
-
7
- ## Analysis Framework
8
-
9
- Analyze the bug you just fixed from these 5 dimensions:
10
-
11
- ### 1. Root Cause Category
12
-
13
- Which category does this bug belong to?
14
-
15
- | Category | Characteristics | Example |
16
- |----------|-----------------|---------|
17
- | **A. Missing Spec** | No documentation on how to do it | New feature without checklist |
18
- | **B. Cross-Layer Contract** | Interface between layers unclear | API returns different format than expected |
19
- | **C. Change Propagation Failure** | Changed one place, missed others | Changed function signature, missed call sites |
20
- | **D. Test Coverage Gap** | Unit test passes, integration fails | Works alone, breaks when combined |
21
- | **E. Implicit Assumption** | Code relies on undocumented assumption | Timestamp seconds vs milliseconds |
22
-
23
- ### 2. Why Fixes Failed (if applicable)
24
-
25
- If you tried multiple fixes before succeeding, analyze each failure:
26
-
27
- - **Surface Fix**: Fixed symptom, not root cause
28
- - **Incomplete Scope**: Found root cause, didn't cover all cases
29
- - **Tool Limitation**: grep missed it, type check wasn't strict
30
- - **Mental Model**: Kept looking in same layer, didn't think cross-layer
31
-
32
- ### 3. Prevention Mechanisms
33
-
34
- What mechanisms would prevent this from happening again?
35
-
36
- | Type | Description | Example |
37
- |------|-------------|---------|
38
- | **Documentation** | Write it down so people know | Update thinking guide |
39
- | **Architecture** | Make the error impossible structurally | Type-safe wrappers |
40
- | **Compile-time** | TypeScript strict, no any | Signature change causes compile error |
41
- | **Runtime** | Monitoring, alerts, scans | Detect orphan entities |
42
- | **Test Coverage** | E2E tests, integration tests | Verify full flow |
43
- | **Code Review** | Checklist, PR template | "Did you check X?" |
44
-
45
- ### 4. Systematic Expansion
46
-
47
- What broader problems does this bug reveal?
48
-
49
- - **Similar Issues**: Where else might this problem exist?
50
- - **Design Flaw**: Is there a fundamental architecture issue?
51
- - **Process Flaw**: Is there a development process improvement?
52
- - **Knowledge Gap**: Is the team missing some understanding?
53
-
54
- ### 5. Knowledge Capture
55
-
56
- Solidify insights into the system:
57
-
58
- - [ ] Update `.trellis/spec/guides/` thinking guides
59
- - [ ] Update `.trellis/spec/backend/` or `frontend/` docs
60
- - [ ] Create issue record (if applicable)
61
- - [ ] Create feature ticket for root fix
62
- - [ ] Update check commands if needed
63
-
64
- ---
65
-
66
- ## Output Format
67
-
68
- Please output analysis in this format:
69
-
70
- ```markdown
71
- ## Bug Analysis: [Short Description]
72
-
73
- ### 1. Root Cause Category
74
- - **Category**: [A/B/C/D/E] - [Category Name]
75
- - **Specific Cause**: [Detailed description]
76
-
77
- ### 2. Why Fixes Failed (if applicable)
78
- 1. [First attempt]: [Why it failed]
79
- 2. [Second attempt]: [Why it failed]
80
- ...
81
-
82
- ### 3. Prevention Mechanisms
83
- | Priority | Mechanism | Specific Action | Status |
84
- |----------|-----------|-----------------|--------|
85
- | P0 | ... | ... | TODO/DONE |
86
-
87
- ### 4. Systematic Expansion
88
- - **Similar Issues**: [List places with similar problems]
89
- - **Design Improvement**: [Architecture-level suggestions]
90
- - **Process Improvement**: [Development process suggestions]
91
-
92
- ### 5. Knowledge Capture
93
- - [ ] [Documents to update / tickets to create]
94
- ```
95
-
96
- ---
97
-
98
- ## Core Philosophy
99
-
100
- > **The value of debugging is not in fixing the bug, but in making this class of bugs never happen again.**
101
-
102
- Three levels of insight:
103
- 1. **Tactical**: How to fix THIS bug
104
- 2. **Strategic**: How to prevent THIS CLASS of bugs
105
- 3. **Philosophical**: How to expand thinking patterns
106
-
107
- 30 minutes of analysis saves 30 hours of future debugging.
@@ -1,153 +0,0 @@
1
- # Cross-Layer Check
2
-
3
- Check if your changes considered all dimensions. Most bugs come from "didn't think of it", not lack of technical skill.
4
-
5
- > **Note**: This is a **post-implementation** safety net. Ideally, read the [Pre-Implementation Checklist](.trellis/spec/guides/pre-implementation-checklist.md) **before** writing code.
6
-
7
- ---
8
-
9
- ## Related Documents
10
-
11
- | Document | Purpose | Timing |
12
- |----------|---------|--------|
13
- | [Pre-Implementation Checklist](.trellis/spec/guides/pre-implementation-checklist.md) | Questions before coding | **Before** writing code |
14
- | [Code Reuse Thinking Guide](.trellis/spec/guides/code-reuse-thinking-guide.md) | Pattern recognition | During implementation |
15
- | **`/trellis:check-cross-layer`** (this) | Verification check | **After** implementation |
16
-
17
- ---
18
-
19
- ## Execution Steps
20
-
21
- ### 1. Identify Change Scope
22
-
23
- ```bash
24
- git status
25
- git diff --name-only
26
- ```
27
-
28
- ### 2. Select Applicable Check Dimensions
29
-
30
- Based on your change type, execute relevant checks below:
31
-
32
- ---
33
-
34
- ## Dimension A: Cross-Layer Data Flow (Required when 3+ layers)
35
-
36
- **Trigger**: Changes involve 3 or more layers
37
-
38
- | Layer | Common Locations |
39
- |-------|------------------|
40
- | API/Routes | `routes/`, `api/`, `handlers/`, `controllers/` |
41
- | Service/Business Logic | `services/`, `lib/`, `core/`, `domain/` |
42
- | Database/Storage | `db/`, `models/`, `repositories/`, `schema/` |
43
- | UI/Presentation | `components/`, `views/`, `templates/`, `pages/` |
44
- | Utility | `utils/`, `helpers/`, `common/` |
45
-
46
- **Checklist**:
47
- - [ ] Read flow: Database -> Service -> API -> UI
48
- - [ ] Write flow: UI -> API -> Service -> Database
49
- - [ ] Types/schemas correctly passed between layers?
50
- - [ ] Errors properly propagated to caller?
51
- - [ ] Loading/pending states handled at each layer?
52
-
53
- **Detailed Guide**: `.trellis/spec/guides/cross-layer-thinking-guide.md`
54
-
55
- ---
56
-
57
- ## Dimension B: Code Reuse (Required when modifying constants/config)
58
-
59
- **Trigger**:
60
- - Modifying UI constants (label, icon, color)
61
- - Modifying any hardcoded value
62
- - Seeing similar code in multiple places
63
- - Creating a new utility/helper function
64
- - Just finished batch modifications across files
65
-
66
- **Checklist**:
67
- - [ ] Search first: How many places define this value?
68
- ```bash
69
- # Search in source files (adjust extensions for your project)
70
- grep -r "value-to-change" src/
71
- ```
72
- - [ ] If 2+ places define same value -> Should extract to shared constant
73
- - [ ] After modification, all usage sites updated?
74
- - [ ] If creating utility: Does similar utility already exist?
75
-
76
- **Detailed Guide**: `.trellis/spec/guides/code-reuse-thinking-guide.md`
77
-
78
- ---
79
-
80
- ## Dimension B2: New Utility Functions
81
-
82
- **Trigger**: About to create a new utility/helper function
83
-
84
- **Checklist**:
85
- - [ ] Search for existing similar utilities first
86
- ```bash
87
- grep -r "functionNamePattern" src/
88
- ```
89
- - [ ] If similar exists, can you extend it instead?
90
- - [ ] If creating new, is it in the right location (shared vs domain-specific)?
91
-
92
- ---
93
-
94
- ## Dimension B3: After Batch Modifications
95
-
96
- **Trigger**: Just modified similar patterns in multiple files
97
-
98
- **Checklist**:
99
- - [ ] Did you check ALL files with similar patterns?
100
- ```bash
101
- grep -r "patternYouChanged" src/
102
- ```
103
- - [ ] Any files missed that should also be updated?
104
- - [ ] Should this pattern be abstracted to prevent future duplication?
105
-
106
- ---
107
-
108
- ## Dimension C: Import/Dependency Paths (Required when creating new files)
109
-
110
- **Trigger**: Creating new source files
111
-
112
- **Checklist**:
113
- - [ ] Using correct import paths (relative vs absolute)?
114
- - [ ] No circular dependencies?
115
- - [ ] Consistent with project's module organization?
116
-
117
- ---
118
-
119
- ## Dimension D: Same-Layer Consistency
120
-
121
- **Trigger**:
122
- - Modifying display logic or formatting
123
- - Same domain concept used in multiple places
124
-
125
- **Checklist**:
126
- - [ ] Search for other places using same concept
127
- ```bash
128
- grep -r "ConceptName" src/
129
- ```
130
- - [ ] Are these usages consistent?
131
- - [ ] Should they share configuration/constants?
132
-
133
- ---
134
-
135
- ## Common Issues Quick Reference
136
-
137
- | Issue | Root Cause | Prevention |
138
- |-------|------------|------------|
139
- | Changed one place, missed others | Didn't search impact scope | `grep` before changing |
140
- | Data lost at some layer | Didn't check data flow | Trace data source to destination |
141
- | Type/schema mismatch | Cross-layer types inconsistent | Use shared type definitions |
142
- | UI/output inconsistent | Same concept in multiple places | Extract shared constants |
143
- | Similar utility exists | Didn't search first | Search before creating |
144
- | Batch fix incomplete | Didn't verify all occurrences | grep after fixing |
145
-
146
- ---
147
-
148
- ## Output
149
-
150
- Report:
151
- 1. Which dimensions your changes involve
152
- 2. Check results for each dimension
153
- 3. Issues found and fix suggestions