@entelligentsia/forgecli 0.20.3 → 1.0.2

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 (303) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +31 -33
  3. package/dist/CHANGELOG-forge-plugin.md +118 -0
  4. package/dist/CHANGELOG-pi.md +24 -1
  5. package/dist/bin/forgecli.d.ts +2 -0
  6. package/dist/bin/forgecli.js +6 -0
  7. package/dist/bin/forgecli.js.map +1 -0
  8. package/dist/extensions/forgecli/add-pipeline.js +1 -1
  9. package/dist/extensions/forgecli/add-pipeline.js.map +1 -1
  10. package/dist/extensions/forgecli/add-task.js +1 -1
  11. package/dist/extensions/forgecli/add-task.js.map +1 -1
  12. package/dist/extensions/forgecli/approve.js +17 -2
  13. package/dist/extensions/forgecli/approve.js.map +1 -1
  14. package/dist/extensions/forgecli/calibrate.js +11 -8
  15. package/dist/extensions/forgecli/calibrate.js.map +1 -1
  16. package/dist/extensions/forgecli/collate.js +1 -1
  17. package/dist/extensions/forgecli/collate.js.map +1 -1
  18. package/dist/extensions/forgecli/commit.js +17 -2
  19. package/dist/extensions/forgecli/commit.js.map +1 -1
  20. package/dist/extensions/forgecli/enhance.js +1 -1
  21. package/dist/extensions/forgecli/enhance.js.map +1 -1
  22. package/dist/extensions/forgecli/fix-bug.d.ts +1 -1
  23. package/dist/extensions/forgecli/fix-bug.js +14 -6
  24. package/dist/extensions/forgecli/fix-bug.js.map +1 -1
  25. package/dist/extensions/forgecli/forge-artifact-tool.d.ts +6 -8
  26. package/dist/extensions/forgecli/forge-artifact-tool.js +80 -195
  27. package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
  28. package/dist/extensions/forgecli/forge-commands.js +57 -18
  29. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  30. package/dist/extensions/forgecli/forge-init/phase4-register.js +6 -7
  31. package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
  32. package/dist/extensions/forgecli/forge-init/run-phases.d.ts +4 -0
  33. package/dist/extensions/forgecli/forge-init/run-phases.js +304 -0
  34. package/dist/extensions/forgecli/forge-init/run-phases.js.map +1 -0
  35. package/dist/extensions/forgecli/forge-init/verifiers.d.ts +14 -5
  36. package/dist/extensions/forgecli/forge-init/verifiers.js +79 -62
  37. package/dist/extensions/forgecli/forge-init/verifiers.js.map +1 -1
  38. package/dist/extensions/forgecli/forge-init.js +131 -76
  39. package/dist/extensions/forgecli/forge-init.js.map +1 -1
  40. package/dist/extensions/forgecli/forge-subagent.d.ts +9 -0
  41. package/dist/extensions/forgecli/forge-subagent.js +11 -6
  42. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  43. package/dist/extensions/forgecli/forge-tools.d.ts +28 -4
  44. package/dist/extensions/forgecli/forge-tools.js +122 -73
  45. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  46. package/dist/extensions/forgecli/health-check.js +3 -3
  47. package/dist/extensions/forgecli/health-check.js.map +1 -1
  48. package/dist/extensions/forgecli/hook-dispatcher.d.ts +1 -1
  49. package/dist/extensions/forgecli/hooks/check-update.d.ts +8 -0
  50. package/dist/extensions/forgecli/hooks/check-update.js +29 -1
  51. package/dist/extensions/forgecli/hooks/check-update.js.map +1 -1
  52. package/dist/extensions/forgecli/hooks/post-init-hook.js +6 -6
  53. package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
  54. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +6 -6
  55. package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
  56. package/dist/extensions/forgecli/hooks/triage-error.js +1 -0
  57. package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -1
  58. package/dist/extensions/forgecli/implement.js +20 -2
  59. package/dist/extensions/forgecli/implement.js.map +1 -1
  60. package/dist/extensions/forgecli/index.js +39 -32
  61. package/dist/extensions/forgecli/index.js.map +1 -1
  62. package/dist/extensions/forgecli/lib/pipeline-guard.d.ts +41 -0
  63. package/dist/extensions/forgecli/lib/pipeline-guard.js +100 -0
  64. package/dist/extensions/forgecli/lib/pipeline-guard.js.map +1 -0
  65. package/dist/extensions/forgecli/loaders/persona-skill-loader.js +2 -2
  66. package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +1 -1
  67. package/dist/extensions/forgecli/migrate.d.ts +3 -0
  68. package/dist/extensions/forgecli/migrate.js +4 -2
  69. package/dist/extensions/forgecli/migrate.js.map +1 -1
  70. package/dist/extensions/forgecli/plan.js +21 -2
  71. package/dist/extensions/forgecli/plan.js.map +1 -1
  72. package/dist/extensions/forgecli/quiz-agent.js +7 -7
  73. package/dist/extensions/forgecli/quiz-agent.js.map +1 -1
  74. package/dist/extensions/forgecli/regenerate.js +49 -18
  75. package/dist/extensions/forgecli/regenerate.js.map +1 -1
  76. package/dist/extensions/forgecli/remove-command.js +1 -1
  77. package/dist/extensions/forgecli/remove-command.js.map +1 -1
  78. package/dist/extensions/forgecli/report-bug.js +1 -1
  79. package/dist/extensions/forgecli/report-bug.js.map +1 -1
  80. package/dist/extensions/forgecli/retrospective.js +9 -9
  81. package/dist/extensions/forgecli/retrospective.js.map +1 -1
  82. package/dist/extensions/forgecli/review-code.d.ts +13 -0
  83. package/dist/extensions/forgecli/review-code.js +62 -3
  84. package/dist/extensions/forgecli/review-code.js.map +1 -1
  85. package/dist/extensions/forgecli/review-plan.d.ts +13 -0
  86. package/dist/extensions/forgecli/review-plan.js +65 -3
  87. package/dist/extensions/forgecli/review-plan.js.map +1 -1
  88. package/dist/extensions/forgecli/run-task.d.ts +2 -1
  89. package/dist/extensions/forgecli/run-task.js +48 -4
  90. package/dist/extensions/forgecli/run-task.js.map +1 -1
  91. package/dist/extensions/forgecli/skill-curator-subagent.d.ts +2 -1
  92. package/dist/extensions/forgecli/skill-curator-subagent.js +2 -1
  93. package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -1
  94. package/dist/extensions/forgecli/sprint-intake.js +6 -6
  95. package/dist/extensions/forgecli/sprint-intake.js.map +1 -1
  96. package/dist/extensions/forgecli/sprint-plan.js +9 -9
  97. package/dist/extensions/forgecli/sprint-plan.js.map +1 -1
  98. package/dist/extensions/forgecli/status-command.js +1 -1
  99. package/dist/extensions/forgecli/status-command.js.map +1 -1
  100. package/dist/extensions/forgecli/store-query.js +11 -11
  101. package/dist/extensions/forgecli/store-query.js.map +1 -1
  102. package/dist/extensions/forgecli/store-repair.js +7 -7
  103. package/dist/extensions/forgecli/store-repair.js.map +1 -1
  104. package/dist/extensions/forgecli/validate.js +17 -2
  105. package/dist/extensions/forgecli/validate.js.map +1 -1
  106. package/dist/forge-payload/.base-pack/commands/check-agent.md +22 -0
  107. package/dist/forge-payload/.base-pack/commands/new-sprint.md +22 -0
  108. package/dist/forge-payload/.base-pack/commands/plan-sprint.md +22 -0
  109. package/dist/forge-payload/.base-pack/commands/quiz-agent.md +2 -18
  110. package/dist/forge-payload/.base-pack/commands/retro.md +22 -0
  111. package/dist/forge-payload/.base-pack/commands/retrospective.md +2 -18
  112. package/dist/forge-payload/.base-pack/commands/sprint-intake.md +2 -18
  113. package/dist/forge-payload/.base-pack/commands/sprint-plan.md +2 -18
  114. package/dist/forge-payload/.base-pack/workflows/_fragments/friction-emit.md +2 -2
  115. package/dist/forge-payload/.base-pack/workflows/_fragments/generation-instructions.md +4 -4
  116. package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +1 -1
  117. package/dist/forge-payload/.base-pack/workflows/architect_approve.md +13 -1
  118. package/dist/forge-payload/.base-pack/workflows/commit_task.md +12 -1
  119. package/dist/forge-payload/.base-pack/workflows/enhance.md +40 -10
  120. package/dist/forge-payload/.base-pack/workflows/fix_bug.md +1 -1
  121. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +14 -2
  122. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +2 -2
  123. package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +20 -4
  124. package/dist/forge-payload/.base-pack/workflows/plan_task.md +14 -2
  125. package/dist/forge-payload/.base-pack/workflows/review_code.md +37 -7
  126. package/dist/forge-payload/.base-pack/workflows/review_plan.md +36 -6
  127. package/dist/forge-payload/.base-pack/workflows/run_sprint.md +2 -2
  128. package/dist/forge-payload/.base-pack/workflows/validate_task.md +37 -7
  129. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  130. package/dist/forge-payload/.schemas/config.schema.json +0 -5
  131. package/dist/forge-payload/.schemas/enum-catalog.json +9 -13
  132. package/dist/forge-payload/.schemas/migrations.json +65 -0
  133. package/dist/forge-payload/agents/tomoshibi.md +150 -6
  134. package/dist/forge-payload/commands/add-pipeline.md +1 -1
  135. package/dist/forge-payload/commands/add-task.md +1 -1
  136. package/dist/forge-payload/commands/calibrate.md +4 -350
  137. package/dist/forge-payload/commands/check-agent.md +38 -0
  138. package/dist/forge-payload/commands/config.md +3 -113
  139. package/dist/forge-payload/commands/enhance.md +5 -32
  140. package/dist/forge-payload/commands/health.md +155 -13
  141. package/dist/forge-payload/commands/init.md +25 -31
  142. package/dist/forge-payload/commands/migrate.md +6 -154
  143. package/dist/forge-payload/commands/quiz-agent.md +2 -34
  144. package/dist/forge-payload/commands/rebuild.md +664 -0
  145. package/dist/forge-payload/commands/regenerate.md +2 -774
  146. package/dist/forge-payload/commands/remove.md +10 -13
  147. package/dist/forge-payload/commands/repair.md +187 -0
  148. package/dist/forge-payload/commands/search.md +73 -0
  149. package/dist/forge-payload/commands/status.md +105 -0
  150. package/dist/forge-payload/commands/store-query.md +2 -69
  151. package/dist/forge-payload/commands/store-repair.md +2 -183
  152. package/dist/forge-payload/commands/update-tools.md +4 -50
  153. package/dist/forge-payload/commands/update.md +64 -58
  154. package/dist/forge-payload/hooks/check-update.cjs +1 -1
  155. package/dist/forge-payload/hooks/post-init.cjs +2 -2
  156. package/dist/forge-payload/hooks/post-sprint.cjs +2 -2
  157. package/dist/forge-payload/hooks/triage-error.cjs +11 -10
  158. package/dist/forge-payload/init/phases/phase-1-collect.md +138 -0
  159. package/dist/forge-payload/init/phases/phase-2-discover.md +127 -0
  160. package/dist/forge-payload/init/phases/phase-3-materialize.md +113 -0
  161. package/dist/forge-payload/init/phases/phase-4-register.md +159 -0
  162. package/dist/forge-payload/integrity.json +21 -24
  163. package/dist/forge-payload/meta/fragments/tool-discipline.md +22 -0
  164. package/dist/forge-payload/meta/templates/meta-retro.md +28 -0
  165. package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +2 -2
  166. package/dist/forge-payload/meta/workflows/_fragments/generation-instructions.md +4 -4
  167. package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +1 -1
  168. package/dist/forge-payload/meta/workflows/meta-approve.md +13 -1
  169. package/dist/forge-payload/meta/workflows/meta-check-agent.md +138 -0
  170. package/dist/forge-payload/meta/workflows/meta-commit.md +12 -1
  171. package/dist/forge-payload/meta/workflows/meta-enhance.md +39 -9
  172. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +1 -1
  173. package/dist/forge-payload/meta/workflows/meta-implement.md +13 -1
  174. package/dist/forge-payload/meta/workflows/meta-migrate.md +3 -3
  175. package/dist/forge-payload/meta/workflows/meta-new-sprint.md +84 -0
  176. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +20 -4
  177. package/dist/forge-payload/meta/workflows/meta-plan-sprint.md +152 -0
  178. package/dist/forge-payload/meta/workflows/meta-plan-task.md +13 -1
  179. package/dist/forge-payload/meta/workflows/meta-retro.md +73 -0
  180. package/dist/forge-payload/meta/workflows/meta-review-implementation.md +37 -7
  181. package/dist/forge-payload/meta/workflows/meta-review-plan.md +36 -6
  182. package/dist/forge-payload/meta/workflows/meta-validate.md +37 -7
  183. package/dist/forge-payload/schemas/config.schema.json +0 -5
  184. package/dist/forge-payload/schemas/enum-catalog.json +9 -13
  185. package/dist/forge-payload/schemas/structure-manifest.json +6 -8
  186. package/dist/forge-payload/tools/artifact.cjs +295 -0
  187. package/dist/forge-payload/tools/banners.cjs +3 -4
  188. package/dist/forge-payload/tools/build-context-pack.cjs +1 -1
  189. package/dist/forge-payload/tools/check-structure.cjs +8 -3
  190. package/dist/forge-payload/tools/store-cli.cjs +67 -7
  191. package/dist/forge-payload/tools/substitute-placeholders.cjs +1 -1
  192. package/dist/forge-payload/tools/verify-apply.cjs +75 -0
  193. package/dist/forge-payload/tools/verify-phase.cjs +259 -0
  194. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  195. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +0 -17
  196. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  197. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +21 -38
  198. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  199. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  200. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +5 -4
  201. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  202. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +2 -1
  203. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  204. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +5 -2
  205. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  206. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  207. package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +24 -1
  208. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.d.ts.map +1 -1
  209. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js +2 -3
  210. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js.map +1 -1
  211. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts +1 -0
  212. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts.map +1 -1
  213. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js +52 -22
  214. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js.map +1 -1
  215. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  216. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +16 -4
  217. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  218. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  219. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +45 -50
  220. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  221. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  222. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +43 -81
  223. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  224. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  225. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js +27 -12
  226. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js.map +1 -1
  227. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  228. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js +2 -3
  229. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  230. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  231. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js +3 -3
  232. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  233. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  234. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +5 -5
  235. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  236. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts +2 -0
  237. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
  238. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js +37 -0
  239. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
  240. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  241. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +9 -8
  242. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  243. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  244. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +20 -35
  245. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  246. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +3 -0
  247. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  248. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +64 -7
  249. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  250. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  251. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +15 -3
  252. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  253. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts +3 -1
  254. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
  255. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js +14 -8
  256. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
  257. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts +30 -0
  258. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts.map +1 -0
  259. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js +124 -0
  260. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js.map +1 -0
  261. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts +2 -0
  262. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts.map +1 -0
  263. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js +31 -0
  264. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js.map +1 -0
  265. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts +7 -27
  266. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
  267. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js +75 -115
  268. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
  269. package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +6 -0
  270. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
  271. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  272. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
  273. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
  274. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +12 -14
  275. package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -5
  276. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts +3 -0
  277. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -0
  278. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +53 -0
  279. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -0
  280. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  281. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +4 -1
  282. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  283. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +2 -0
  284. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  285. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +13 -1
  286. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  287. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
  288. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  289. package/node_modules/@earendil-works/pi-tui/package.json +2 -2
  290. package/package.json +6 -6
  291. package/dist/extensions/forgecli/forge-init/phase-descriptors.d.ts +0 -72
  292. package/dist/extensions/forgecli/forge-init/phase-descriptors.js +0 -359
  293. package/dist/extensions/forgecli/forge-init/phase-descriptors.js.map +0 -1
  294. package/dist/extensions/forgecli/forge-init/prompts.d.ts +0 -10
  295. package/dist/extensions/forgecli/forge-init/prompts.js +0 -91
  296. package/dist/extensions/forgecli/forge-init/prompts.js.map +0 -1
  297. package/dist/extensions/forgecli/lib/store-error-remediation.d.ts +0 -65
  298. package/dist/extensions/forgecli/lib/store-error-remediation.js +0 -298
  299. package/dist/extensions/forgecli/lib/store-error-remediation.js.map +0 -1
  300. package/dist/forge-payload/hooks/check-update.js +0 -378
  301. package/dist/forge-payload/hooks/forge-permissions.js +0 -164
  302. package/dist/forge-payload/hooks/triage-error.js +0 -77
  303. package/dist/forge-payload/hooks/validate-write.js +0 -250
@@ -0,0 +1,664 @@
1
+ ---
2
+ name: rebuild
3
+ description: Use when the engineering knowledge base has been enriched by sprints and you want to refresh the generated workflows, templates, tools, or knowledge-base docs. Use --enrich to run the enhancement agent (KB enrichment + drift detection).
4
+ ---
5
+
6
+ # /forge:rebuild
7
+
8
+ Re-run generation phases using the current state of the project. Use `--enrich` to run the enhancement agent (replaces the removed `forge:enhance` command).
9
+
10
+ ## Locate the Forge plugin
11
+
12
+ ```
13
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
+ ```
15
+
16
+ Read `.forge/config.json`. If it does not exist, stop and tell the user to run
17
+ `/forge:init` first.
18
+
19
+ Resolve tools from the plugin:
20
+ ```
21
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
22
+ ```
23
+
24
+ All tool invocations in this command use `node "$FORGE_ROOT/tools/<tool>.cjs"`.
25
+
26
+ ## Hero
27
+
28
+ Open the run with the forge hero + a one-line subtitle (parses
29
+ `$ARGUMENTS` to mention the target):
30
+
31
+ ```sh
32
+ node "$FORGE_ROOT/tools/banners.cjs" forge
33
+ node "$FORGE_ROOT/tools/banners.cjs" --subtitle "Re-running generation against current meta-definitions ($ARGUMENTS or full)"
34
+ ```
35
+
36
+ Each category section below opens with a `banners.cjs --badge {key}` call
37
+ before its "Generating ..." line. The badge map:
38
+
39
+ | Category | Banner key |
40
+ |----------|-----------|
41
+ | personas | `bloom` |
42
+ | skills | `tide` |
43
+ | templates | `drift` |
44
+ | workflows | `ember` |
45
+ | commands | `lumen` |
46
+ | knowledge-base | `oracle` |
47
+
48
+ `banners.cjs` strips ANSI in `NO_COLOR` / non-tty / `--plain` contexts.
49
+
50
+ ## Arguments
51
+
52
+ $ARGUMENTS
53
+
54
+ Parse the argument to identify the target category and optional sub-target.
55
+ Sub-targets may be passed either as a second positional argument or embedded
56
+ with a colon delimiter (both forms are equivalent).
57
+
58
+ > **Category scope enforcement**: If this workflow (or any subagent it spawns)
59
+ > calls `substitute-placeholders.cjs` directly to re-materialise base-pack
60
+ > files, it MUST pass `--category <parsed-category>` to restrict writes to the
61
+ > requested namespace. Without this flag the tool overwrites all five output
62
+ > directories (personas, skills, workflows, templates, commands), silently
63
+ > discarding any regenerated content in non-targeted categories.
64
+ >
65
+ > Example:
66
+ > ```sh
67
+ > node "$FORGE_ROOT/tools/substitute-placeholders.cjs" \
68
+ > --base-pack "$FORGE_ROOT/init/base-pack" \
69
+ > --config ".forge/config.json" \
70
+ > --category "personas" \
71
+ > --out "."
72
+ > ```
73
+
74
+ ```
75
+ /forge:rebuild # workflows + commands + templates + personas (default)
76
+ /forge:rebuild --enrich # run enhancement agent (KB enrichment + drift detection)
77
+ /forge:rebuild personas # .forge/personas/ — all persona files
78
+ /forge:rebuild personas engineer # single persona file only
79
+ /forge:rebuild personas:engineer # same — colon form (from migration entries)
80
+ /forge:rebuild skills # .forge/skills/ role-specific skills
81
+ /forge:rebuild skills engineer # single skill file only
82
+ /forge:rebuild skills:engineer # same — colon form (from migration entries)
83
+ /forge:rebuild workflows # full workflow rebuild
84
+ /forge:rebuild workflows plan_task # single workflow file only
85
+ /forge:rebuild workflows:plan_task # same — colon form (from migration entries)
86
+ /forge:rebuild workflows sprint_plan # single workflow file only
87
+ /forge:rebuild commands # .claude/commands/ slash command wrappers
88
+ /forge:rebuild templates # document templates only
89
+ /forge:rebuild templates PLAN_TEMPLATE # single template file only
90
+ /forge:rebuild templates:PLAN_TEMPLATE # same — colon form (from migration entries)
91
+ /forge:rebuild knowledge-base # all three sub-targets (merge mode)
92
+ /forge:rebuild knowledge-base architecture
93
+ /forge:rebuild knowledge-base:architecture # colon form (from migration entries)
94
+ /forge:rebuild knowledge-base business-domain
95
+ /forge:rebuild knowledge-base stack-checklist
96
+ ```
97
+
98
+ When parsing the argument, split on `:` first: if the argument is
99
+ `"workflows:plan_task"`, treat it as category=`workflows`,
100
+ sub-target=`plan_task`. If no `:` is present, the second positional word
101
+ (if any) is the sub-target. The sub-target is always optional.
102
+
103
+ ---
104
+
105
+ ## Category: `personas` — full rebuild or single file
106
+
107
+ Re-generate `.forge/personas/` from the meta-persona definitions and the current knowledge base.
108
+
109
+ **If a sub-target is provided** (e.g. `/forge:rebuild personas engineer`
110
+ or the colon form `personas:engineer`), regenerate only the single persona
111
+ file `.forge/personas/<sub-target>.md` from `$FORGE_ROOT/meta/personas/meta-<sub-target>.md`.
112
+
113
+ Before writing, check the file for manual modifications (mirrors the workflows
114
+ and templates pre-write guard — FORGE-BUG-037 / forge#106):
115
+ ```sh
116
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/personas/<sub-target>.md
117
+ ```
118
+ For exit 1 (modified): warn `△ .forge/personas/<sub-target>.md has been manually
119
+ modified (likely by /forge:enhance). Overwriting will discard your changes.
120
+ Proceed? (yes / no / show diff)`. Collect the answer before proceeding. On
121
+ `no` or `show diff` rejecting overwrite, skip this file and exit cleanly.
122
+ On exit 2 (untracked) or exit 3 (missing): proceed without prompting.
123
+
124
+ Then remove any existing manifest entry for this specific file (handles rename case):
125
+ ```sh
126
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/personas/<sub-target>.md 2>/dev/null || true
127
+ ```
128
+ Generate the single file (no fan-out needed for one file). All manifest and hash
129
+ steps below apply to that single file.
130
+
131
+ **If no sub-target** — full rebuild, fanned out in parallel:
132
+
133
+ 1. Build the project brief:
134
+ ```sh
135
+ node "$FORGE_ROOT/tools/build-init-context.cjs" \
136
+ --config .forge/config.json --personas .forge/personas \
137
+ --templates .forge/templates --kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
138
+ --out .forge/init-context.md --json-out .forge/init-context.json
139
+ ```
140
+ 2. Enumerate `$FORGE_ROOT/meta/personas/meta-*.md` (exclude README.md).
141
+ Let `M_total` = the enumerated count.
142
+
143
+ 3. Render the personas badge, then emit the count:
144
+ ```sh
145
+ node "$FORGE_ROOT/tools/banners.cjs" --badge bloom
146
+ ```
147
+ Then emit: `Generating personas (<N> files in parallel)...`
148
+ 4. Check each enumerated file for manual modifications
149
+ before any clearing or regeneration (mirrors the workflows + templates
150
+ pre-write guard — FORGE-BUG-037 / forge#106):
151
+ ```sh
152
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/personas/<role>.md
153
+ ```
154
+ For any exit 1 (modified): warn `△ .forge/personas/<role>.md has been manually
155
+ modified (likely by /forge:enhance). Overwriting will discard your changes.
156
+ Proceed? (yes / no / show diff)`. Collect answers before proceeding. Files
157
+ the user declines are removed from the regeneration set for this run. Exit
158
+ 2 (untracked) and exit 3 (missing) require no prompt.
159
+ 5. Clear stale entries:
160
+ ```sh
161
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/personas/
162
+ ```
163
+ 6. **Spawn the persona subagents in a SINGLE Agent tool message** using
164
+ `$FORGE_ROOT/init/generation/generate-persona.md` as the per-subagent rulebook
165
+ (same fan-out pattern as `/forge:init` Phase 4). Spawn one per entry.
166
+ 7. Collect results. For each `done:` result → emit ` 〇 <filename>.md`.
167
+ Retry failures once. Any still failing: surface the id list.
168
+ 8. **Replay user enhancements** (forge#107 / Approach A — layer 3 of the composition
169
+ contract declared at `manage-versions.cjs:13`). After fresh base-pack content
170
+ is written, restore any user-enhanced files captured by `/forge:enhance` Phase 2
171
+ snapshots:
172
+ ```sh
173
+ node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target personas
174
+ ```
175
+ The tool walks all snapshots in `.forge/structure-versions.json`, finds enhanced
176
+ elements whose normalized path starts with `personas/`, and copies them from
177
+ the archive back over the freshly-generated content. Later snapshots win on
178
+ file collision. Files not captured by any snapshot remain at the fresh
179
+ base-pack version.
180
+ 9. Re-record manifest hashes for the (now restored) files so subsequent
181
+ `generation-manifest check` calls reflect current on-disk content:
182
+ ```sh
183
+ for each <role> in the full set:
184
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/personas/<role>.md
185
+ ```
186
+ 10. Emit ` 〇 personas — <N> files written`.
187
+
188
+ ---
189
+
190
+ ## Category: `skills` — full rebuild or single file
191
+
192
+ Re-generate `.forge/skills/` from the meta-skill templates and project config.
193
+
194
+ **If a sub-target is provided** (e.g. `/forge:rebuild skills engineer`
195
+ or the colon form `skills:engineer`), regenerate only the single skill file
196
+ `.forge/skills/<sub-target>-skills.md` from
197
+ `$FORGE_ROOT/meta/skills/meta-<sub-target>-skills.md`.
198
+
199
+ Before writing, check the file for manual modifications (mirrors the workflows
200
+ and templates pre-write guard — FORGE-BUG-037 / forge#106):
201
+ ```sh
202
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/skills/<sub-target>-skills.md
203
+ ```
204
+ For exit 1 (modified): warn `△ .forge/skills/<sub-target>-skills.md has been
205
+ manually modified (likely by /forge:enhance). Overwriting will discard your
206
+ changes. Proceed? (yes / no / show diff)`. Collect the answer before
207
+ proceeding. On `no` or `show diff` rejecting overwrite, skip this file and
208
+ exit cleanly. On exit 2 (untracked) or exit 3 (missing): proceed without
209
+ prompting.
210
+
211
+ Then remove any existing manifest entry for this specific file:
212
+ ```sh
213
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/skills/<sub-target>-skills.md 2>/dev/null || true
214
+ ```
215
+ Generate the single file (no fan-out needed). All manifest and hash steps below
216
+ apply to that single file.
217
+
218
+ **If no sub-target** — full rebuild, fanned out in parallel:
219
+
220
+ 1. Build the project brief (same command as in `personas` above).
221
+ 2. Enumerate `$FORGE_ROOT/meta/skills/meta-*-skills.md`. Let `M_total` =
222
+ the enumerated count.
223
+
224
+ 3. Render the skills badge, then emit the count:
225
+ ```sh
226
+ node "$FORGE_ROOT/tools/banners.cjs" --badge tide
227
+ ```
228
+ Then emit: `Generating skills (<N> files in parallel)...`
229
+ 4. Check each enumerated file for manual modifications before any clearing
230
+ or regeneration (mirrors the workflows + templates pre-write guard —
231
+ FORGE-BUG-037 / forge#106):
232
+ ```sh
233
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/skills/<role>-skills.md
234
+ ```
235
+ For any exit 1 (modified): warn `△ .forge/skills/<role>-skills.md has been
236
+ manually modified (likely by /forge:enhance). Overwriting will discard your
237
+ changes. Proceed? (yes / no / show diff)`. Collect answers before proceeding.
238
+ Files the user declines are removed from the regeneration set for this run.
239
+ Exit 2 (untracked) and exit 3 (missing) require no prompt.
240
+ 5. Clear stale entries:
241
+ ```sh
242
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/skills/
243
+ ```
244
+ 6. **Spawn the skill subagents in a SINGLE Agent tool message** using
245
+ `$FORGE_ROOT/init/generation/generate-skill.md` as the per-subagent rulebook.
246
+ 7. Collect results. Retry failures once. Any still failing: surface the id list.
247
+ 8. **Replay user enhancements** (forge#107 / Approach A):
248
+ ```sh
249
+ node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target skills
250
+ ```
251
+ Walks snapshots; restores any enhanced `skills/<role>-skills.md` files from
252
+ the archive over the freshly-generated content. Later snapshots win on
253
+ collision.
254
+ 9. Re-record manifest hashes for the (now restored) files:
255
+ ```sh
256
+ for each <role> in the full set:
257
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/skills/<role>-skills.md
258
+ ```
259
+ 10. For each completed file, check manifest (warn on modified), emit ` 〇 <filename>.md`.
260
+
261
+ ---
262
+
263
+ ## Category: `workflows` — full rebuild or single file
264
+
265
+ Re-generate `.forge/workflows/` from the meta-workflow definitions and the
266
+ current knowledge base. Covers both atomic workflows and orchestration.
267
+
268
+ **If a sub-target is provided** (e.g. `/forge:rebuild workflows plan_task`
269
+ or the colon form `workflows:plan_task`), regenerate only the single workflow
270
+ file `.forge/workflows/<sub-target>.md`.
271
+
272
+ **Special case — `_fragments` sub-target (directory fan-out):**
273
+
274
+ `_fragments` is a directory in `$FORGE_ROOT/meta/workflows/_fragments/`, not a
275
+ single file. When the sub-target is `_fragments` (or when
276
+ `$FORGE_ROOT/meta/workflows/<sub-target>` resolves to a directory rather than a
277
+ file), use directory fan-out mode instead of single-file mode:
278
+
279
+ 1. Enumerate all `.md` files in `$FORGE_ROOT/meta/workflows/_fragments/`.
280
+ 2. Ensure `.forge/workflows/_fragments/` directory exists (create if absent).
281
+ 3. For each fragment file, copy verbatim (no placeholder substitution) to
282
+ `.forge/workflows/_fragments/<filename>`.
283
+ 4. Record a manifest hash for each copied file:
284
+ ```sh
285
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/workflows/_fragments/<filename>
286
+ ```
287
+ 5. Emit `〇 workflows:_fragments — N fragment files copied`.
288
+
289
+ > **Note:** When invoked as `/forge:rebuild workflows:_fragments`, this command
290
+ > fans out to copy all fragment files (currently four: `context-injection.md`,
291
+ > `progress-reporting.md`, `event-emission-schema.md`, `finalize.md`). Verify the
292
+ > result with `ls .forge/workflows/_fragments/`.
293
+
294
+ For all other sub-targets (non-directory), continue with the standard single-file
295
+ path below.
296
+
297
+ Before writing, remove any existing manifest entry for this specific file:
298
+ ```sh
299
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/workflows/<sub-target>.md 2>/dev/null || true
300
+ ```
301
+ Generate the single file (no fan-out needed). Check manifest (warn on modified),
302
+ write, record hash.
303
+
304
+ **If no sub-target** — full rebuild using the same parallel fan-out as `/forge:init` Phase 7:
305
+
306
+ 1. Build the project brief:
307
+ ```sh
308
+ node "$FORGE_ROOT/tools/build-init-context.cjs" \
309
+ --config .forge/config.json --personas .forge/personas \
310
+ --templates .forge/templates \
311
+ --kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
312
+ --out .forge/init-context.md --json-out .forge/init-context.json
313
+ ```
314
+ 2. Read `$FORGE_ROOT/init/workflow-gen-plan.json` (16-entry fan-out table).
315
+ Let `M_total` = the entry count.
316
+
317
+ 3. Render the workflows badge, then emit the count:
318
+ ```sh
319
+ node "$FORGE_ROOT/tools/banners.cjs" --badge ember
320
+ ```
321
+ Then emit: `Generating workflows (<N> atomic + orchestration, parallel)...`
322
+ 4. Check each file for manual modifications before any clearing:
323
+ ```sh
324
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/workflows/{filename}.md
325
+ ```
326
+ For any exit 1 (modified): warn `△ .forge/workflows/{filename}.md has been manually
327
+ modified. Overwriting may discard manual edits not captured in any /forge:enhance snapshot. Edits captured by snapshots will be restored automatically via `manage-versions replay` after regeneration. Proceed? (yes / no / show diff)`
328
+ Collect answers before proceeding.
329
+ 5. Clear stale entries:
330
+ ```sh
331
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/workflows/
332
+ ```
333
+ 6. **Spawn the atomic workflow subagents in a SINGLE Agent tool message** using
334
+ `$FORGE_ROOT/init/generation/generate-workflows.md` as the per-subagent rulebook
335
+ (same fan-out pattern as `/forge:init` Phase 7d). Spawn one per entry.
336
+ 7. Collect results. Retry failures once in a single Agent call.
337
+ 8. Spawn orchestration subagent:
338
+ ```
339
+ Read $FORGE_ROOT/init/generation/generate-orchestration.md and follow it.
340
+ FORGE_ROOT: {FORGE_ROOT}
341
+ Input: $FORGE_ROOT/meta/workflows/meta-orchestrate.md + .forge/workflows/
342
+ Output: .forge/workflows/orchestrate_task.md and .forge/workflows/run_sprint.md
343
+ ```
344
+ 9. **Replay user enhancements** (forge#107 / Approach A):
345
+ ```sh
346
+ node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target workflows
347
+ ```
348
+ Walks snapshots; restores enhanced `workflows/<name>.md` files. Later
349
+ snapshots win on collision.
350
+ 10. For each written file: record hash `node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/workflows/{filename}.md`
351
+ (this runs AFTER replay so the recorded hash reflects the restored content).
352
+ 11. Emit ` 〇 workflows — <N> files written`.
353
+
354
+ **Do NOT touch:** `.claude/commands/`, `.forge/config.json`, or any knowledge base file.
355
+
356
+ ---
357
+
358
+ ## Category: `commands` — full rebuild
359
+
360
+ Re-generate `.claude/commands/` slash command wrappers from the current
361
+ `.forge/workflows/`. This is a thin generation step — each command file
362
+ is just a wrapper that loads its workflow and passes arguments.
363
+
364
+ Run this when:
365
+ - Workflow files have been renamed (e.g. after a 0.5.0 upgrade)
366
+ - A new workflow was added and its command wrapper is missing
367
+ - A command wrapper is pointing at a workflow that no longer exists
368
+
369
+ 1. Read `.forge/config.json` for paths
370
+ 2. Enumerate `.forge/workflows/` to know what workflow files currently exist
371
+ 3. Render the commands badge, then emit the count:
372
+ ```sh
373
+ node "$FORGE_ROOT/tools/banners.cjs" --badge lumen
374
+ ```
375
+ Then emit: `Generating commands (<N> files)...`
376
+ 4. Clear stale entries for this namespace:
377
+ ```sh
378
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .claude/commands/
379
+ ```
380
+ 5. Re-generate `.claude/commands/` following
381
+ `$FORGE_ROOT/init/generation/generate-commands.md`
382
+ The idempotency check will overwrite any command that references a
383
+ missing or renamed workflow, and skip any that are already correct.
384
+ 6. For each file being written:
385
+ - Emit: ` ⋯ <filename>.md...`
386
+ - Write the file
387
+ - Record hash: `node "$FORGE_ROOT/tools/generation-manifest.cjs" record .claude/commands/{filename}.md`
388
+ - Emit: ` 〇 <filename>.md`
389
+
390
+ **DO NOT** touch any `.claude/commands/` file that is not in the output list
391
+ in `generate-commands.md`. Custom commands (`supervisor-code.md`, project-specific
392
+ wrappers, etc.) must never be written, overwritten, or deleted by this step.
393
+ Retired Forge command files (`engineer.md`, `supervisor.md`) are cleaned up
394
+ separately by Step 5b-pre in `/forge:update` — not here.
395
+
396
+ ---
397
+
398
+ ## Category: `templates` — full rebuild or single file
399
+
400
+ Re-generate `.forge/templates/` from the meta-template definitions and the
401
+ current knowledge base.
402
+
403
+ **If a sub-target is provided** (e.g. `/forge:rebuild templates PLAN_TEMPLATE`
404
+ or the colon form `templates:PLAN_TEMPLATE`), regenerate only the single template
405
+ file `.forge/templates/<sub-target>.md`. Determine the source meta file from
406
+ `$FORGE_ROOT/init/generation/generate-template.md`'s filename mapping (e.g.
407
+ `PLAN_TEMPLATE` → `meta-plan.md`).
408
+
409
+ Before writing, remove any existing manifest entry:
410
+ ```sh
411
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/templates/<sub-target>.md 2>/dev/null || true
412
+ ```
413
+ Generate the single file (no fan-out needed). Record hash after writing.
414
+
415
+ **If no sub-target** — full rebuild, fanned out in parallel:
416
+
417
+ 1. Build the project brief (same command as in `personas` above).
418
+ 2. Enumerate `$FORGE_ROOT/meta/templates/meta-*.md`. Let `M_total` =
419
+ the enumerated count.
420
+
421
+ 3. Render the templates badge, then emit the count:
422
+ ```sh
423
+ node "$FORGE_ROOT/tools/banners.cjs" --badge drift
424
+ ```
425
+ Then emit: `Generating templates (<N> files in parallel)...`
426
+ 4. Check each (filtered) file for manual modifications (warn on modified, same pattern as workflows).
427
+ 5. Clear stale entries:
428
+ ```sh
429
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/templates/
430
+ ```
431
+ 6. **Spawn the template subagents in a SINGLE Agent tool message** using
432
+ `$FORGE_ROOT/init/generation/generate-template.md` as the per-subagent rulebook.
433
+ 7. Collect results. Retry failures once. Any still failing: surface the id list.
434
+ 8. **Replay user enhancements** (forge#107 / Approach A):
435
+ ```sh
436
+ node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target templates
437
+ ```
438
+ Walks snapshots; restores enhanced `templates/<STEM>.md` files. Later
439
+ snapshots win on collision.
440
+ 9. For each written file: record hash, emit ` 〇 <filename>.md` (hash reflects
441
+ post-replay content).
442
+ 10. Re-record the one-shot init artifact not regenerated from a meta file:
443
+ ```sh
444
+ if [ -f ".forge/templates/CUSTOM_COMMAND_TEMPLATE.md" ]; then
445
+ node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/templates/CUSTOM_COMMAND_TEMPLATE.md
446
+ fi
447
+ ```
448
+ Emit `〇 templates — <N> files written`.
449
+
450
+ ---
451
+
452
+ ## Category: `knowledge-base` — merge mode
453
+
454
+ **This is not a full rebuild.** The knowledge base accumulates writeback from
455
+ every sprint. Overwriting it from scratch destroys that accumulated knowledge.
456
+
457
+ Render the knowledge-base badge, then emit the status line:
458
+
459
+ ```sh
460
+ node "$FORGE_ROOT/tools/banners.cjs" --badge oracle
461
+ ```
462
+
463
+ Then emit: `Generating knowledge-base...`
464
+
465
+ Instead: re-run the relevant discovery prompts scoped to what has changed,
466
+ compute a delta against the existing docs, and merge only new content in.
467
+
468
+ **Per sub-target, emit merge-level status lines (not per-file):**
469
+
470
+ ```
471
+ ⋯ merging <sub-target> docs...
472
+ 〇 <sub-target> — N additions
473
+ ```
474
+
475
+ **Merge rule (applies to all sub-targets):**
476
+ - Additive only — never remove or overwrite existing sections or entries.
477
+ - `[?]` markers from prior generation may be updated if the re-scan can now
478
+ confirm or correct them.
479
+ - If the re-scan detects something that contradicts existing content, flag it
480
+ as a `[CONFLICT]` comment for human review — do not resolve it silently.
481
+ - Show all proposed additions as a diff and prompt before writing.
482
+
483
+ ---
484
+
485
+ ### Sub-target: `architecture`
486
+
487
+ **Trigger:** new subsystems, services, or integrations have been added to the
488
+ codebase since the architecture docs were last written.
489
+
490
+ **Re-run discovery (in parallel):**
491
+ - `$FORGE_ROOT/init/discovery/discover-stack.md`
492
+ - `$FORGE_ROOT/init/discovery/discover-processes.md`
493
+ - `$FORGE_ROOT/init/discovery/discover-routing.md`
494
+
495
+ **Read existing docs:**
496
+ - `engineering/architecture/*.md`
497
+
498
+ **Merge into:**
499
+
500
+ | Discovery output | Target doc | Merge action |
501
+ |-----------------|-----------|-------------|
502
+ | New framework or runtime | `stack.md` | Append to technology inventory |
503
+ | New service or process | `processes.md` | Append new service section |
504
+ | New API route group | `routing.md` | Append route group |
505
+ | New deployment target | `deployment.md` | Append environment section |
506
+ | Any new sub-system with no existing doc | Create new sub-doc + link from `INDEX.md` |
507
+
508
+ ---
509
+
510
+ ### Sub-target: `business-domain`
511
+
512
+ **Trigger:** new ORM models, schema tables, or domain types have been added
513
+ to the codebase. `forge:health` will flag these as orphaned entities.
514
+
515
+ **Re-run discovery:**
516
+ - `$FORGE_ROOT/init/discovery/discover-database.md`
517
+
518
+ **Read existing doc:**
519
+ - `engineering/business-domain/entity-model.md`
520
+
521
+ **Merge into `entity-model.md`:**
522
+ - Entities present in discovery output but absent from the doc → append new
523
+ entity sections with fields and relationships.
524
+ - New fields on an existing entity → add within the existing entity section,
525
+ marked `[NEW]` for team review.
526
+ - Entities no longer found in the codebase → flag with `[NOT FOUND IN SCAN]`
527
+ comment but do not remove (may be soft-deleted, feature-flagged, or in a
528
+ migration).
529
+
530
+ ---
531
+
532
+ ### Sub-target: `stack-checklist`
533
+
534
+ **Trigger:** new libraries or frameworks have been adopted mid-project that
535
+ are not yet represented in review checklist items.
536
+
537
+ **Re-run discovery:**
538
+ - `$FORGE_ROOT/init/discovery/discover-stack.md`
539
+ - `$FORGE_ROOT/init/discovery/discover-testing.md`
540
+
541
+ **Read existing doc:**
542
+ - `engineering/stack-checklist.md`
543
+
544
+ **Merge into `stack-checklist.md`:**
545
+ - Libraries detected but not yet in the checklist → append new checklist items.
546
+ - Never remove or modify existing items (they encode accumulated review knowledge).
547
+
548
+ ---
549
+
550
+ ## Default (no argument)
551
+
552
+ Run all five categories respecting dependencies — with maximum parallelism:
553
+
554
+ 1. **Build brief** (once, synchronous):
555
+ ```sh
556
+ node "$FORGE_ROOT/tools/build-init-context.cjs" \
557
+ --config .forge/config.json --personas .forge/personas \
558
+ --templates .forge/templates \
559
+ --kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
560
+ --out .forge/init-context.md --json-out .forge/init-context.json
561
+ ```
562
+
563
+ 2. **Personas + Templates in parallel** (both need only KB, not each other):
564
+ Spawn persona fan-out and template fan-out in a **SINGLE Agent tool message**
565
+ (all persona subagents + all template subagents together). Wait for all to return.
566
+
567
+ 3. **Skills + Workflows in parallel** (skills need personas; workflows need personas + templates — both now ready):
568
+ Spawn skill fan-out and workflow fan-out (16 atomic) in a **SINGLE Agent tool message**.
569
+ Wait for all to return.
570
+
571
+ 4. **Orchestration + Commands in parallel** (both need workflows — now ready):
572
+ Spawn orchestration and commands subagents in a **SINGLE Agent tool message**.
573
+ Wait for both.
574
+
575
+ This runs in 4 serial steps instead of 5 sequential category passes, with all
576
+ fan-outs parallelised within each step.
577
+
578
+ ## Flag: `--enrich`
579
+
580
+ When `$ARGUMENTS` contains `--enrich`, run the enhancement workflow instead of regeneration.
581
+ This is the v1.0 replacement for the removed `/forge:enhance` command.
582
+
583
+ ```
584
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
585
+ ```
586
+
587
+ 1. Check that `$FORGE_ROOT/meta/workflows/meta-enhance.md` exists. If absent:
588
+
589
+ > △ meta-enhance.md not found — your installed Forge version may predate the enhancement agent. Run `/forge:update` to upgrade.
590
+
591
+ Exit.
592
+
593
+ 2. Pass `$ARGUMENTS` (minus the `--enrich` flag) through to the enhancement workflow so any phase flags (`--phase 1`, `--phase 2`, `--phase 3`, `--auto`) are forwarded:
594
+
595
+ Read `$FORGE_ROOT/meta/workflows/meta-enhance.md` and follow it with the forwarded arguments.
596
+
597
+ If no phase flag is provided with `--enrich`, the enhancement workflow defaults to `--phase 3` (drift detection).
598
+
599
+ 3. Do NOT run any regeneration steps from the categories above — `--enrich` is a standalone mode.
600
+
601
+ ---
602
+
603
+ ## On error
604
+
605
+ If any step above fails unexpectedly, describe what went wrong and ask:
606
+
607
+ > "This looks like a Forge bug. Would you like to file a report to help improve it? Run `/forge:report-bug` — I'll pre-fill the report from this conversation."
608
+
609
+ ---
610
+
611
+ ## Post-regeneration persona pack
612
+
613
+ Rebuild the compact persona/skill reference pack at
614
+ `.forge/cache/persona-pack.json`. This is consumed by `meta-orchestrate` and
615
+ `meta-fix-bug` to inject persona references (not verbatim prose) into
616
+ subagent prompts when `FORGE_PROMPT_MODE=reference` (the default).
617
+
618
+ The pack compiles YAML frontmatter from `$FORGE_ROOT/meta/personas/meta-*.md`
619
+ and `$FORGE_ROOT/meta/skills/meta-*.md`. It is safe to rebuild on every
620
+ regenerate run (cost: ~50ms, 16 files).
621
+
622
+ ```sh
623
+ node "$FORGE_ROOT/tools/build-persona-pack.cjs" \
624
+ --out .forge/cache/persona-pack.json
625
+ ```
626
+
627
+ - Exit 0: emit `〇 persona pack refreshed`
628
+ - Exit 1: surface the stderr message (it includes the offending file path
629
+ for missing-frontmatter or malformed-YAML errors) and advise the user
630
+ to file a bug if the error is unexpected.
631
+
632
+ ## Post-regeneration context pack
633
+
634
+ Rebuild the architecture context pack at `.forge/cache/context-pack.md` and
635
+ `.forge/cache/context-pack.json`. This is injected into subagent prompts by
636
+ `meta-orchestrate` and `meta-fix-bug` to reduce per-phase architecture doc reads.
637
+
638
+ The pack summarises `engineering/architecture/*.md` (skips `*.draft.md`). If
639
+ the existing pack has `manual: true` in its frontmatter, the builder skips
640
+ and leaves it intact.
641
+
642
+ ```sh
643
+ ENGINEERING=$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)
644
+ node "$FORGE_ROOT/tools/build-context-pack.cjs" \
645
+ --arch-dir "$ENGINEERING/architecture" \
646
+ --out-md .forge/cache/context-pack.md \
647
+ --out-json .forge/cache/context-pack.json
648
+ ```
649
+
650
+ - Exit 0: emit `〇 context pack refreshed`
651
+ - Exit 1: surface the stderr message — most likely the architecture directory
652
+ does not exist yet (run after the knowledge-base category is populated).
653
+ This is non-fatal for regenerate: emit a warning and continue.
654
+
655
+ ## Post-regeneration verification
656
+
657
+ After all requested targets have been regenerated, verify structural completeness:
658
+
659
+ ```sh
660
+ node "$FORGE_ROOT/tools/check-structure.cjs" --path .
661
+ ```
662
+
663
+ - If exit 0: emit `〇 All expected generated files are present.`
664
+ - If exit 1: list the missing files by namespace and suggest running `/forge:rebuild <namespace>` for the affected category or categories.