@entelligentsia/forgecli 0.21.0 → 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 (297) hide show
  1. package/CHANGELOG.md +21 -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/forge-artifact-tool.d.ts +6 -8
  23. package/dist/extensions/forgecli/forge-artifact-tool.js +80 -195
  24. package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
  25. package/dist/extensions/forgecli/forge-commands.js +57 -18
  26. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  27. package/dist/extensions/forgecli/forge-init/phase4-register.js +6 -7
  28. package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
  29. package/dist/extensions/forgecli/forge-init/run-phases.d.ts +4 -0
  30. package/dist/extensions/forgecli/forge-init/run-phases.js +304 -0
  31. package/dist/extensions/forgecli/forge-init/run-phases.js.map +1 -0
  32. package/dist/extensions/forgecli/forge-init/verifiers.d.ts +14 -5
  33. package/dist/extensions/forgecli/forge-init/verifiers.js +79 -62
  34. package/dist/extensions/forgecli/forge-init/verifiers.js.map +1 -1
  35. package/dist/extensions/forgecli/forge-init.js +131 -76
  36. package/dist/extensions/forgecli/forge-init.js.map +1 -1
  37. package/dist/extensions/forgecli/forge-subagent.d.ts +9 -0
  38. package/dist/extensions/forgecli/forge-subagent.js +11 -6
  39. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  40. package/dist/extensions/forgecli/forge-tools.d.ts +28 -4
  41. package/dist/extensions/forgecli/forge-tools.js +122 -73
  42. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  43. package/dist/extensions/forgecli/health-check.js +3 -3
  44. package/dist/extensions/forgecli/health-check.js.map +1 -1
  45. package/dist/extensions/forgecli/hook-dispatcher.d.ts +1 -1
  46. package/dist/extensions/forgecli/hooks/check-update.d.ts +8 -0
  47. package/dist/extensions/forgecli/hooks/check-update.js +29 -1
  48. package/dist/extensions/forgecli/hooks/check-update.js.map +1 -1
  49. package/dist/extensions/forgecli/hooks/post-init-hook.js +6 -6
  50. package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
  51. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +6 -6
  52. package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
  53. package/dist/extensions/forgecli/hooks/triage-error.js +1 -0
  54. package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -1
  55. package/dist/extensions/forgecli/implement.js +20 -2
  56. package/dist/extensions/forgecli/implement.js.map +1 -1
  57. package/dist/extensions/forgecli/index.js +39 -32
  58. package/dist/extensions/forgecli/index.js.map +1 -1
  59. package/dist/extensions/forgecli/lib/pipeline-guard.d.ts +41 -0
  60. package/dist/extensions/forgecli/lib/pipeline-guard.js +100 -0
  61. package/dist/extensions/forgecli/lib/pipeline-guard.js.map +1 -0
  62. package/dist/extensions/forgecli/loaders/persona-skill-loader.js +2 -2
  63. package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +1 -1
  64. package/dist/extensions/forgecli/migrate.d.ts +3 -0
  65. package/dist/extensions/forgecli/migrate.js +4 -2
  66. package/dist/extensions/forgecli/migrate.js.map +1 -1
  67. package/dist/extensions/forgecli/plan.js +21 -2
  68. package/dist/extensions/forgecli/plan.js.map +1 -1
  69. package/dist/extensions/forgecli/quiz-agent.js +7 -7
  70. package/dist/extensions/forgecli/quiz-agent.js.map +1 -1
  71. package/dist/extensions/forgecli/regenerate.js +49 -18
  72. package/dist/extensions/forgecli/regenerate.js.map +1 -1
  73. package/dist/extensions/forgecli/remove-command.js +1 -1
  74. package/dist/extensions/forgecli/remove-command.js.map +1 -1
  75. package/dist/extensions/forgecli/report-bug.js +1 -1
  76. package/dist/extensions/forgecli/report-bug.js.map +1 -1
  77. package/dist/extensions/forgecli/retrospective.js +9 -9
  78. package/dist/extensions/forgecli/retrospective.js.map +1 -1
  79. package/dist/extensions/forgecli/review-code.d.ts +13 -0
  80. package/dist/extensions/forgecli/review-code.js +62 -3
  81. package/dist/extensions/forgecli/review-code.js.map +1 -1
  82. package/dist/extensions/forgecli/review-plan.d.ts +13 -0
  83. package/dist/extensions/forgecli/review-plan.js +65 -3
  84. package/dist/extensions/forgecli/review-plan.js.map +1 -1
  85. package/dist/extensions/forgecli/skill-curator-subagent.d.ts +2 -1
  86. package/dist/extensions/forgecli/skill-curator-subagent.js +2 -1
  87. package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -1
  88. package/dist/extensions/forgecli/sprint-intake.js +6 -6
  89. package/dist/extensions/forgecli/sprint-intake.js.map +1 -1
  90. package/dist/extensions/forgecli/sprint-plan.js +9 -9
  91. package/dist/extensions/forgecli/sprint-plan.js.map +1 -1
  92. package/dist/extensions/forgecli/status-command.js +1 -1
  93. package/dist/extensions/forgecli/status-command.js.map +1 -1
  94. package/dist/extensions/forgecli/store-query.js +11 -11
  95. package/dist/extensions/forgecli/store-query.js.map +1 -1
  96. package/dist/extensions/forgecli/store-repair.js +7 -7
  97. package/dist/extensions/forgecli/store-repair.js.map +1 -1
  98. package/dist/extensions/forgecli/validate.js +17 -2
  99. package/dist/extensions/forgecli/validate.js.map +1 -1
  100. package/dist/forge-payload/.base-pack/commands/check-agent.md +22 -0
  101. package/dist/forge-payload/.base-pack/commands/new-sprint.md +22 -0
  102. package/dist/forge-payload/.base-pack/commands/plan-sprint.md +22 -0
  103. package/dist/forge-payload/.base-pack/commands/quiz-agent.md +2 -18
  104. package/dist/forge-payload/.base-pack/commands/retro.md +22 -0
  105. package/dist/forge-payload/.base-pack/commands/retrospective.md +2 -18
  106. package/dist/forge-payload/.base-pack/commands/sprint-intake.md +2 -18
  107. package/dist/forge-payload/.base-pack/commands/sprint-plan.md +2 -18
  108. package/dist/forge-payload/.base-pack/workflows/_fragments/friction-emit.md +2 -2
  109. package/dist/forge-payload/.base-pack/workflows/_fragments/generation-instructions.md +4 -4
  110. package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +1 -1
  111. package/dist/forge-payload/.base-pack/workflows/architect_approve.md +13 -1
  112. package/dist/forge-payload/.base-pack/workflows/commit_task.md +12 -1
  113. package/dist/forge-payload/.base-pack/workflows/enhance.md +6 -6
  114. package/dist/forge-payload/.base-pack/workflows/fix_bug.md +1 -1
  115. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +14 -2
  116. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +2 -2
  117. package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +20 -4
  118. package/dist/forge-payload/.base-pack/workflows/plan_task.md +14 -2
  119. package/dist/forge-payload/.base-pack/workflows/review_code.md +37 -7
  120. package/dist/forge-payload/.base-pack/workflows/review_plan.md +36 -6
  121. package/dist/forge-payload/.base-pack/workflows/run_sprint.md +2 -2
  122. package/dist/forge-payload/.base-pack/workflows/validate_task.md +37 -7
  123. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  124. package/dist/forge-payload/.schemas/config.schema.json +0 -5
  125. package/dist/forge-payload/.schemas/enum-catalog.json +9 -13
  126. package/dist/forge-payload/.schemas/migrations.json +54 -0
  127. package/dist/forge-payload/agents/tomoshibi.md +150 -6
  128. package/dist/forge-payload/commands/add-pipeline.md +1 -1
  129. package/dist/forge-payload/commands/add-task.md +1 -1
  130. package/dist/forge-payload/commands/calibrate.md +4 -350
  131. package/dist/forge-payload/commands/check-agent.md +38 -0
  132. package/dist/forge-payload/commands/config.md +3 -113
  133. package/dist/forge-payload/commands/enhance.md +5 -32
  134. package/dist/forge-payload/commands/health.md +155 -13
  135. package/dist/forge-payload/commands/init.md +25 -31
  136. package/dist/forge-payload/commands/migrate.md +6 -154
  137. package/dist/forge-payload/commands/quiz-agent.md +2 -34
  138. package/dist/forge-payload/commands/rebuild.md +664 -0
  139. package/dist/forge-payload/commands/regenerate.md +2 -774
  140. package/dist/forge-payload/commands/remove.md +10 -13
  141. package/dist/forge-payload/commands/repair.md +187 -0
  142. package/dist/forge-payload/commands/search.md +73 -0
  143. package/dist/forge-payload/commands/status.md +105 -0
  144. package/dist/forge-payload/commands/store-query.md +2 -69
  145. package/dist/forge-payload/commands/store-repair.md +2 -183
  146. package/dist/forge-payload/commands/update-tools.md +4 -50
  147. package/dist/forge-payload/commands/update.md +64 -58
  148. package/dist/forge-payload/hooks/check-update.cjs +1 -1
  149. package/dist/forge-payload/hooks/post-init.cjs +2 -2
  150. package/dist/forge-payload/hooks/post-sprint.cjs +2 -2
  151. package/dist/forge-payload/hooks/triage-error.cjs +11 -10
  152. package/dist/forge-payload/init/phases/phase-1-collect.md +138 -0
  153. package/dist/forge-payload/init/phases/phase-2-discover.md +127 -0
  154. package/dist/forge-payload/init/phases/phase-3-materialize.md +113 -0
  155. package/dist/forge-payload/init/phases/phase-4-register.md +159 -0
  156. package/dist/forge-payload/integrity.json +21 -24
  157. package/dist/forge-payload/meta/fragments/tool-discipline.md +22 -0
  158. package/dist/forge-payload/meta/templates/meta-retro.md +28 -0
  159. package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +2 -2
  160. package/dist/forge-payload/meta/workflows/_fragments/generation-instructions.md +4 -4
  161. package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +1 -1
  162. package/dist/forge-payload/meta/workflows/meta-approve.md +13 -1
  163. package/dist/forge-payload/meta/workflows/meta-check-agent.md +138 -0
  164. package/dist/forge-payload/meta/workflows/meta-commit.md +12 -1
  165. package/dist/forge-payload/meta/workflows/meta-enhance.md +5 -5
  166. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +1 -1
  167. package/dist/forge-payload/meta/workflows/meta-implement.md +13 -1
  168. package/dist/forge-payload/meta/workflows/meta-migrate.md +3 -3
  169. package/dist/forge-payload/meta/workflows/meta-new-sprint.md +84 -0
  170. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +20 -4
  171. package/dist/forge-payload/meta/workflows/meta-plan-sprint.md +152 -0
  172. package/dist/forge-payload/meta/workflows/meta-plan-task.md +13 -1
  173. package/dist/forge-payload/meta/workflows/meta-retro.md +73 -0
  174. package/dist/forge-payload/meta/workflows/meta-review-implementation.md +37 -7
  175. package/dist/forge-payload/meta/workflows/meta-review-plan.md +36 -6
  176. package/dist/forge-payload/meta/workflows/meta-validate.md +37 -7
  177. package/dist/forge-payload/schemas/config.schema.json +0 -5
  178. package/dist/forge-payload/schemas/enum-catalog.json +9 -13
  179. package/dist/forge-payload/schemas/structure-manifest.json +6 -8
  180. package/dist/forge-payload/tools/artifact.cjs +295 -0
  181. package/dist/forge-payload/tools/banners.cjs +3 -4
  182. package/dist/forge-payload/tools/build-context-pack.cjs +1 -1
  183. package/dist/forge-payload/tools/check-structure.cjs +8 -3
  184. package/dist/forge-payload/tools/store-cli.cjs +67 -7
  185. package/dist/forge-payload/tools/substitute-placeholders.cjs +1 -1
  186. package/dist/forge-payload/tools/verify-apply.cjs +75 -0
  187. package/dist/forge-payload/tools/verify-phase.cjs +259 -0
  188. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  189. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +0 -17
  190. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  191. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +21 -38
  192. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  193. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  194. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +5 -4
  195. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  196. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +2 -1
  197. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  198. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +5 -2
  199. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  200. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  201. package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +24 -1
  202. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.d.ts.map +1 -1
  203. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js +2 -3
  204. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js.map +1 -1
  205. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts +1 -0
  206. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts.map +1 -1
  207. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js +52 -22
  208. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js.map +1 -1
  209. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  210. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +16 -4
  211. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  212. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  213. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +45 -50
  214. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  215. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  216. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +43 -81
  217. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  218. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  219. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js +27 -12
  220. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js.map +1 -1
  221. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  222. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js +2 -3
  223. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  224. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  225. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js +3 -3
  226. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  227. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  228. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +5 -5
  229. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  230. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts +2 -0
  231. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
  232. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js +37 -0
  233. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
  234. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  235. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +9 -8
  236. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  237. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  238. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +20 -35
  239. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  240. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +3 -0
  241. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  242. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +64 -7
  243. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  244. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  245. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +15 -3
  246. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  247. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts +3 -1
  248. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
  249. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js +14 -8
  250. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
  251. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts +30 -0
  252. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts.map +1 -0
  253. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js +124 -0
  254. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js.map +1 -0
  255. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts +2 -0
  256. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts.map +1 -0
  257. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js +31 -0
  258. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js.map +1 -0
  259. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts +7 -27
  260. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
  261. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js +75 -115
  262. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
  263. package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +6 -0
  264. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
  265. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  266. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
  267. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
  268. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +12 -14
  269. package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -5
  270. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts +3 -0
  271. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -0
  272. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +53 -0
  273. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -0
  274. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  275. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +4 -1
  276. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  277. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +2 -0
  278. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  279. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +13 -1
  280. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  281. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
  282. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  283. package/node_modules/@earendil-works/pi-tui/package.json +2 -2
  284. package/package.json +6 -6
  285. package/dist/extensions/forgecli/forge-init/phase-descriptors.d.ts +0 -72
  286. package/dist/extensions/forgecli/forge-init/phase-descriptors.js +0 -359
  287. package/dist/extensions/forgecli/forge-init/phase-descriptors.js.map +0 -1
  288. package/dist/extensions/forgecli/forge-init/prompts.d.ts +0 -10
  289. package/dist/extensions/forgecli/forge-init/prompts.js +0 -91
  290. package/dist/extensions/forgecli/forge-init/prompts.js.map +0 -1
  291. package/dist/extensions/forgecli/lib/store-error-remediation.d.ts +0 -65
  292. package/dist/extensions/forgecli/lib/store-error-remediation.js +0 -298
  293. package/dist/extensions/forgecli/lib/store-error-remediation.js.map +0 -1
  294. package/dist/forge-payload/hooks/check-update.js +0 -378
  295. package/dist/forge-payload/hooks/forge-permissions.js +0 -164
  296. package/dist/forge-payload/hooks/triage-error.js +0 -77
  297. package/dist/forge-payload/hooks/validate-write.js +0 -250
@@ -19,10 +19,12 @@
19
19
  import * as fs from "node:fs";
20
20
  import * as path from "node:path";
21
21
  import { assertAudience } from "./audience-gate.js";
22
+ import { discoverForgeConfig } from "./forge-root.js";
22
23
  import { sendKickoff } from "./kickoff.js";
23
24
  // FORGE-S25-T16: extracted to lib modules (H-1, H-2). Re-exported here for
24
25
  // backward compatibility with existing test and consumer imports.
25
26
  import { extractPersonaNames } from "./lib/frontmatter-parser.js";
27
+ import { parseGuardArgs, runPipelineGuard } from "./lib/pipeline-guard.js";
26
28
  import { loadPersona, PersonaSkillLoaderError } from "./parsers/persona-skill-loader.js";
27
29
  import { loadWorkflow, WorkflowLoaderError } from "./parsers/workflow-loader.js";
28
30
  export { extractPersonaNames };
@@ -68,6 +70,19 @@ export function registerValidate(pi, options = {}) {
68
70
  async handler(args, ctx) {
69
71
  const cwd = options.cwd ?? process.cwd();
70
72
  const workflowPath = path.join(cwd, WORKFLOW_REL_PATH);
73
+ // Pipeline step guard (FORGE-S26-T11): check task state before dispatching.
74
+ const guardParsed = parseGuardArgs(args);
75
+ if (!guardParsed.force) {
76
+ const forgeConfig = discoverForgeConfig(cwd);
77
+ if (forgeConfig) {
78
+ const guard = runPipelineGuard("validate", guardParsed.taskIdHint, forgeConfig.forgeRoot, cwd);
79
+ if (guard.blocked) {
80
+ ctx.ui.notify(guard.message, "error");
81
+ return;
82
+ }
83
+ }
84
+ }
85
+ const effectiveArgs = guardParsed.cleanArgs;
71
86
  let workflowMd;
72
87
  let workflowAudience;
73
88
  try {
@@ -78,7 +93,7 @@ export function registerValidate(pi, options = {}) {
78
93
  catch (err) {
79
94
  if (err instanceof WorkflowLoaderError) {
80
95
  if (err.code === "missing_file") {
81
- ctx.ui.notify(`× forge:validate — workflow not found at ${WORKFLOW_REL_PATH}; run /forge:init or /forge:regenerate first.`, "error");
96
+ ctx.ui.notify(`× forge:validate — workflow not found at ${WORKFLOW_REL_PATH}; run /forge:init or /forge:rebuild first.`, "error");
82
97
  }
83
98
  else {
84
99
  ctx.ui.notify(`× forge:validate — workflow load failed (${err.code}): ${err.message}`, "error");
@@ -91,7 +106,7 @@ export function registerValidate(pi, options = {}) {
91
106
  }
92
107
  let parsed;
93
108
  try {
94
- parsed = parseValidateArgs(args, cwd);
109
+ parsed = parseValidateArgs(effectiveArgs, cwd);
95
110
  }
96
111
  catch (err) {
97
112
  const e = err;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: check-agent
3
+ description: Verify an agent has loaded and understood the project knowledge base
4
+ ---
5
+
6
+ # /{{PREFIX}}:check-agent
7
+
8
+ Read the check-agent workflow and follow it.
9
+
10
+ ## Locate the Forge plugin
11
+
12
+ ```
13
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
+ ```
15
+
16
+ ## Execute
17
+
18
+ Read `.forge/workflows/quiz_agent.md` and follow it.
19
+
20
+ ## Arguments
21
+
22
+ $ARGUMENTS
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: new-sprint
3
+ description: Elicit and structure requirements for a new sprint
4
+ ---
5
+
6
+ # /{{PREFIX}}:new-sprint
7
+
8
+ Read the new-sprint workflow and follow it.
9
+
10
+ ## Locate the Forge plugin
11
+
12
+ ```
13
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
+ ```
15
+
16
+ ## Execute
17
+
18
+ Read `.forge/workflows/architect_sprint_intake.md` and follow it.
19
+
20
+ ## Arguments
21
+
22
+ $ARGUMENTS
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: plan-sprint
3
+ description: Decompose sprint requirements into tasks with dependencies
4
+ ---
5
+
6
+ # /{{PREFIX}}:plan-sprint
7
+
8
+ Read the plan-sprint workflow and follow it.
9
+
10
+ ## Locate the Forge plugin
11
+
12
+ ```
13
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
+ ```
15
+
16
+ ## Execute
17
+
18
+ Read `.forge/workflows/architect_sprint_plan.md` and follow it.
19
+
20
+ ## Arguments
21
+
22
+ $ARGUMENTS
@@ -1,22 +1,6 @@
1
1
  ---
2
2
  name: quiz-agent
3
- description: Verify an agent has loaded and understood the project knowledge base
3
+ description: Renamed in v1.0 use /{{PREFIX}}:check-agent
4
4
  ---
5
5
 
6
- # /{{PREFIX}}:quiz-agent
7
-
8
- Read the quiz-agent workflow and follow it.
9
-
10
- ## Locate the Forge plugin
11
-
12
- ```
13
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
- ```
15
-
16
- ## Execute
17
-
18
- Read `.forge/workflows/quiz_agent.md` and follow it.
19
-
20
- ## Arguments
21
-
22
- $ARGUMENTS
6
+ × /{{PREFIX}}:quiz-agent was renamed to /{{PREFIX}}:check-agent in v1.0.
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: retro
3
+ description: Produce sprint retrospective and lessons-learned document
4
+ ---
5
+
6
+ # /{{PREFIX}}:retro
7
+
8
+ Read the retro workflow and follow it.
9
+
10
+ ## Locate the Forge plugin
11
+
12
+ ```
13
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
+ ```
15
+
16
+ ## Execute
17
+
18
+ Read `.forge/workflows/sprint_retrospective.md` and follow it.
19
+
20
+ ## Arguments
21
+
22
+ $ARGUMENTS
@@ -1,22 +1,6 @@
1
1
  ---
2
2
  name: retrospective
3
- description: Produce sprint retrospective and lessons-learned document
3
+ description: Renamed in v1.0 use /{{PREFIX}}:retro
4
4
  ---
5
5
 
6
- # /{{PREFIX}}:retrospective
7
-
8
- Read the retrospective workflow and follow it.
9
-
10
- ## Locate the Forge plugin
11
-
12
- ```
13
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
- ```
15
-
16
- ## Execute
17
-
18
- Read `.forge/workflows/sprint_retrospective.md` and follow it.
19
-
20
- ## Arguments
21
-
22
- $ARGUMENTS
6
+ × /{{PREFIX}}:retrospective was renamed to /{{PREFIX}}:retro in v1.0.
@@ -1,22 +1,6 @@
1
1
  ---
2
2
  name: sprint-intake
3
- description: Elicit and structure requirements for a new sprint
3
+ description: Renamed in v1.0 use /{{PREFIX}}:new-sprint
4
4
  ---
5
5
 
6
- # /{{PREFIX}}:sprint-intake
7
-
8
- Read the sprint-intake workflow and follow it.
9
-
10
- ## Locate the Forge plugin
11
-
12
- ```
13
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
- ```
15
-
16
- ## Execute
17
-
18
- Read `.forge/workflows/architect_sprint_intake.md` and follow it.
19
-
20
- ## Arguments
21
-
22
- $ARGUMENTS
6
+ × /{{PREFIX}}:sprint-intake was renamed to /{{PREFIX}}:new-sprint in v1.0.
@@ -1,22 +1,6 @@
1
1
  ---
2
2
  name: sprint-plan
3
- description: Decompose sprint requirements into tasks with dependencies
3
+ description: Renamed in v1.0 use /{{PREFIX}}:plan-sprint
4
4
  ---
5
5
 
6
- # /{{PREFIX}}:sprint-plan
7
-
8
- Read the sprint-plan workflow and follow it.
9
-
10
- ## Locate the Forge plugin
11
-
12
- ```
13
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
- ```
15
-
16
- ## Execute
17
-
18
- Read `.forge/workflows/architect_sprint_plan.md` and follow it.
19
-
20
- ## Arguments
21
-
22
- $ARGUMENTS
6
+ × /{{PREFIX}}:sprint-plan was renamed to /{{PREFIX}}:plan-sprint in v1.0.
@@ -1,6 +1,6 @@
1
1
  <!-- Canonical Friction Emit fragment.
2
2
  Referenced from meta-implement.md, meta-fix-bug.md, meta-validate.md,
3
- meta-plan-task.md, and meta-orchestrate.md. /forge:enhance --phase 2
3
+ meta-plan-task.md, and meta-orchestrate.md. /forge:rebuild --enrich (phase 2)
4
4
  greps generated workflows for `## Friction Emit` to discover the channel.
5
5
 
6
6
  PLAN-11 / SLICE-2 (2026-05-14): friction is now recorded via the
@@ -16,7 +16,7 @@ When the persona detects skill friction during the workflow — a referenced
16
16
  skill is unused, fails on invocation, is missing from the registry, has gone
17
17
  stale relative to current architecture, or is redundant with another skill —
18
18
  record a judgement-only friction signal. The orchestrator drains the
19
- signals and emits the corresponding events so `/forge:enhance --phase 2`
19
+ signals and emits the corresponding events so `/forge:rebuild --enrich` (phase 2)
20
20
  can act on them.
21
21
 
22
22
  ## Trigger conditions
@@ -33,8 +33,8 @@
33
33
  **`Persona Self-Load`** — *conditional*. Required when the generated workflow uses the
34
34
  Persona Self-Load pattern (the generated file must begin by reading a persona `.md` file
35
35
  before any other tool use). Specify the exact persona path. Used in: `meta-collate.md`,
36
- `meta-retrospective.md`, `meta-review-sprint-completion.md`, `meta-sprint-intake.md`,
37
- `meta-sprint-plan.md`. Omit for subagent-targeted workflows where the persona is loaded
36
+ `meta-retro.md`, `meta-review-sprint-completion.md`, `meta-new-sprint.md`,
37
+ `meta-plan-sprint.md`. Omit for subagent-targeted workflows where the persona is loaded
38
38
  by the orchestrator before dispatch.
39
39
 
40
40
  **`Workflow Structure`** — *required*. Names the generated file slug and asserts the
@@ -51,8 +51,8 @@ run inline, and mandates the `Agent` tool for sub-tasks.
51
51
  substitutions the generator must embed (stack commands, KB paths, template references,
52
52
  task ID format, etc.).
53
53
 
54
- **`Token Reporting`** — *required* (with one exception: `meta-quiz-agent.md` omits it
55
- because quiz-agent is an inline helper, not an orchestrated phase). Standard form: `See
54
+ **`Token Reporting`** — *required* (with one exception: `meta-check-agent.md` omits it
55
+ because check-agent is an inline helper, not an orchestrated phase). Standard form: `See
56
56
  \`_fragments/finalize.md\` — wire via \`file_ref:\`.` Expanded token-reporting prose is
57
57
  used in workflows where the generated file must mandate a specific sidecar-emit sequence
58
58
  (retrospective, sprint-intake, sprint-plan, review-sprint-completion) — in those cases,
@@ -52,7 +52,7 @@ into the standard three-bullet structure.
52
52
 
53
53
  Some workflows have no `## Iron Laws` section by design:
54
54
 
55
- - `meta-quiz-agent.md` — utility workflow; no store writes; no output contract.
55
+ - `meta-check-agent.md` — utility workflow; no store writes; no output contract.
56
56
  - `meta-review-sprint-completion.md` — read-only verification; no state transitions.
57
57
 
58
58
  Intentional omissions are documented with an inline comment before the `## Algorithm`
@@ -36,13 +36,25 @@ deps:
36
36
 
37
37
  ```
38
38
 
39
- 0. Pre-flight Gate Check:
39
+ 0a. Pre-flight Gate Check:
40
40
  - Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
41
41
  - **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
42
42
  - Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase approve --{entity_kind} {record_id}`
43
43
  - Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
44
44
  - Exit 2 (misconfiguration) → print stderr and HALT.
45
45
  - Exit 0 → continue.
46
+
47
+ 0b. Pipeline Step Guard (user-invoked state check):
48
+ - If `--force` is present in the invocation arguments, skip this step entirely.
49
+ - If `entity_kind == "bug"`, skip this step entirely (bug state is managed by meta-fix-bug.md).
50
+ - Read current task state:
51
+ `node "$FORGE_ROOT/tools/store-cli.cjs" read task {record_id} --json`
52
+ - Extract the `status` field from the JSON output.
53
+ - Allowed states for this phase: `review-approved`.
54
+ - If the current status is NOT in the allowed set:
55
+ Print the following and HALT (do not proceed):
56
+ `× Task {record_id} is in state '{status}' — /forge:review-code (or /forge:validate) must complete first. To run the full pipeline: /forge:run-task {record_id}`
57
+
46
58
  1. Load Context:
47
59
  - Read task prompt
48
60
  - Read final PLAN.md
@@ -36,7 +36,7 @@ deps:
36
36
 
37
37
  ```
38
38
 
39
- 0. Pre-flight Gate Check:
39
+ 0a. Pre-flight Gate Check:
40
40
  - Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
41
41
  - **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
42
42
  - Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase commit --{entity_kind} {record_id}`
@@ -44,6 +44,17 @@ deps:
44
44
  - Exit 2 (misconfiguration) → print stderr and HALT.
45
45
  - Exit 0 → continue.
46
46
 
47
+ 0b. Pipeline Step Guard (user-invoked state check):
48
+ - If `--force` is present in the invocation arguments, skip this step entirely.
49
+ - If `entity_kind == "bug"`, skip this step entirely (bug state is managed by meta-fix-bug.md).
50
+ - Read current task state:
51
+ `node "$FORGE_ROOT/tools/store-cli.cjs" read task {record_id} --json`
52
+ - Extract the `status` field from the JSON output.
53
+ - Allowed states for this phase: `approved`.
54
+ - If the current status is NOT in the allowed set:
55
+ Print the following and HALT (do not proceed):
56
+ `× Task {record_id} is in state '{status}' — /forge:approve must complete first. To run the full pipeline: /forge:run-task {record_id}`
57
+
47
58
  1. Load Context:
48
59
  - Read the record manifest (task or bug, per entity_kind).
49
60
  - Read ARCHITECT_APPROVAL.md from the record's artifact directory:
@@ -20,7 +20,7 @@ deps:
20
20
  ## Iron Laws
21
21
 
22
22
  - Orchestrator-only: this workflow runs with full tool access in the orchestrator session. NEVER delegate it to a subagent.
23
- - Read `.forge/personas/engineer.md` first; print the persona identity line to stdout before any other tool use.
23
+ - Read `.forge/personas/engineer.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
24
24
  - All store I/O via `forge_store` (or `node "$FORGE_ROOT/tools/store-cli.cjs"`). Never edit `.forge/store/*.json` directly.
25
25
  - Phase 1 only touches `{{KEY}}` token text; never rewrite persona prose, algorithm steps, or role definitions.
26
26
 
@@ -93,7 +93,7 @@ Receive the phase flag from the command invocation:
93
93
  |------|------|
94
94
  | `--phase 1` or `--auto` | Auto-apply: placeholder fills only — **use after** `/forge:init` completes to fill `{{KEY}}` placeholders from project signals |
95
95
  | `--phase 2` | Propose-diffs: sprint artifact + friction scan — **use after** a sprint completes to turn friction events into persona/skill enrichments |
96
- | `--phase 3` | Drift detection: full codebase vs structural-element comparison — **use on-demand** or after `/forge:calibrate` to detect stale references |
96
+ | `--phase 3` | Drift detection: full codebase vs structural-element comparison — **use on-demand** or after `/forge:health --fix` to detect stale references |
97
97
 
98
98
  Default to `--phase 3` if no phase flag is given.
99
99
 
@@ -115,7 +115,7 @@ Read `.forge/config.json`. Resolve:
115
115
 
116
116
  ### When to run
117
117
 
118
- Invoked by T09 post-init hook (`--auto`) or manually via `/forge:enhance --phase 1`.
118
+ Invoked by T09 post-init hook (`--auto`) or manually via `/forge:rebuild --enrich --phase 1`.
119
119
 
120
120
  ### Algorithm
121
121
 
@@ -196,7 +196,7 @@ Invoked by T09 post-init hook (`--auto`) or manually via `/forge:enhance --phase
196
196
 
197
197
  ### When to run
198
198
 
199
- Invoked by T09 post-sprint hook or manually via `/forge:enhance --phase 2`.
199
+ Invoked by T09 post-sprint hook or manually via `/forge:rebuild --enrich --phase 2`.
200
200
 
201
201
  ### Algorithm
202
202
 
@@ -584,8 +584,8 @@ Invoked by T09 post-sprint hook or manually via `/forge:enhance --phase 2`.
584
584
 
585
585
  ### When to run
586
586
 
587
- Invoked by `/forge:enhance --phase 3` (default when no phase given), or delegated by
588
- `/forge:calibrate` after its Step 4 drift categorization.
587
+ Invoked by `/forge:rebuild --enrich --phase 3` (default when no phase given), or delegated by
588
+ `/forge:health --fix` after its Step 4 drift categorization.
589
589
 
590
590
  ### Algorithm
591
591
 
@@ -424,7 +424,7 @@ When the Bug Fixer, Supervisor, Architect, Engineer, or Collator detects skill
424
424
  friction during fix-bug — a referenced skill is unused, fails on invocation,
425
425
  is missing from the registry, has gone stale relative to current architecture,
426
426
  or is redundant with another skill — emit a `friction` event so
427
- `/forge:enhance --phase 2` can act on the signal.
427
+ `/forge:rebuild --enrich` (phase 2) can act on the signal.
428
428
 
429
429
  **Trigger conditions** (set `issue` to the matching token):
430
430
 
@@ -26,13 +26,25 @@ deps:
26
26
 
27
27
  ```
28
28
 
29
- 0. Pre-flight Gate Check:
29
+ 0a. Pre-flight Gate Check:
30
30
  - Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
31
31
  - **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
32
32
  - Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase implement --{entity_kind} {record_id}`
33
33
  - Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
34
34
  - Exit 2 (misconfiguration) → print stderr and HALT.
35
35
  - Exit 0 → continue.
36
+
37
+ 0b. Pipeline Step Guard (user-invoked state check):
38
+ - If `--force` is present in the invocation arguments, skip this step entirely.
39
+ - If `entity_kind == "bug"`, skip this step entirely (bug state is managed by meta-fix-bug.md).
40
+ - Read current task state:
41
+ `node "$FORGE_ROOT/tools/store-cli.cjs" read task {record_id} --json`
42
+ - Extract the `status` field from the JSON output.
43
+ - Allowed states for this phase: `plan-approved`.
44
+ - If the current status is NOT in the allowed set:
45
+ Print the following and HALT (do not proceed):
46
+ `× Task {record_id} is in state '{status}' — /forge:review-plan must complete first. To run the full pipeline: /forge:run-task {record_id}`
47
+
36
48
  1. Load Context:
37
49
  - Read `.forge/personas/engineer.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
38
50
  - store-cli verbs: `read` | `list` | `write` | `emit` | `update-status` | `set-summary` | `describe` | `nlp` | `query` | `delete` — there is no `get`/`set`/`find`. See `_fragments/store-cli-verbs.md` for full notes; run `--help` before improvising.
@@ -89,7 +101,7 @@ deps:
89
101
  ## Iron Laws
90
102
 
91
103
  - Follow the Algorithm step by step. Execute the approved PLAN.md exactly; do not invent scope or skip steps without updating the plan first.
92
- - Read `.forge/personas/engineer.md` first; print the persona identity line to stdout before any other tool use.
104
+ - Read `.forge/personas/engineer.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
93
105
  - All store I/O via `forge_store` (or `node "$FORGE_ROOT/tools/store-cli.cjs"`). Never edit `.forge/store/*.json` directly.
94
106
  - Run the full test suite before declaring the task implemented. Silent continuation past test failures is never acceptable.
95
107
 
@@ -52,7 +52,7 @@ ls .forge/structure-versions.json 2>/dev/null && echo "EXISTS" || echo "ABSENT"
52
52
 
53
53
  - If `structure-versions.json` EXISTS: this is a post-T05 install. Warn the
54
54
  user that structural migration is not needed and offer to run the standard
55
- store-schema migration (Steps 1–7 of `/forge:migrate`) instead. Stop.
55
+ store-schema migration (Steps 1–7 of `/forge:init --migrate`) instead. Stop.
56
56
  - If ABSENT: proceed (pre-T05 install confirmed).
57
57
 
58
58
  **0c. Check for in-progress sentinel (idempotency).**
@@ -277,7 +277,7 @@ node "$FORGE_ROOT/tools/substitute-placeholders.cjs" \
277
277
  ```
278
278
 
279
279
  This overwrites `.forge/personas/`, `.forge/skills/`, `.forge/workflows/`,
280
- `.forge/templates/`, and `.claude/commands/forge/` with the freshly substituted
280
+ `.forge/templates/`, and `.claude/commands/<prefix>/` with the freshly substituted
281
281
  base-pack.
282
282
 
283
283
  If `substitute-placeholders.cjs` exits non-zero: halt, report the error to the
@@ -167,7 +167,7 @@ and what capabilities it has. Two modes are supported, selected by the
167
167
  | `reference` | Compact summary from `.forge/cache/persona-pack.json`, plus a file_ref pointer to the full persona/skill definitions. | ✅ |
168
168
  | `inline` | Legacy: inject the full verbatim persona and skill file contents. Kept for one version as a rollback path. | |
169
169
 
170
- The pack is built by `/forge:regenerate` and `/forge:materialize` via
170
+ The pack is built by `/forge:rebuild` via
171
171
  `forge/tools/build-persona-pack.cjs`. It compiles YAML frontmatter from
172
172
  `$FORGE_ROOT/meta/personas/meta-*.md` and `$FORGE_ROOT/meta/skills/meta-*.md`
173
173
  into `.forge/cache/persona-pack.json`.
@@ -194,7 +194,7 @@ def compose_role_block(persona_noun):
194
194
  # regeneration bug and should be reported via /forge:report-bug.
195
195
  raise OrchestratorError(
196
196
  f"persona '{persona_noun}' not in persona-pack. "
197
- "Run /forge:regenerate to rebuild the pack."
197
+ "Run /forge:rebuild to rebuild the pack."
198
198
  )
199
199
 
200
200
  lines = [
@@ -430,6 +430,20 @@ for each task in dependency_sorted(tasks):
430
430
  # --- Load finalize fragment (token reporting contract) ---
431
431
  finalize_fragment = read_file(f"{FORGE_ROOT}/meta/workflows/_fragments/finalize.md") if file_exists(f"{FORGE_ROOT}/meta/workflows/_fragments/finalize.md") else ""
432
432
 
433
+ # --- Compose review loop context block (review-role phases only) ---
434
+ # Injected between summary_block and role_block so reviewers know their
435
+ # position in the revision loop at the moment they are spawned.
436
+ # `iteration` is the current attempt number (pre-spawn, not post-increment).
437
+ # `phase.maxIterations` is the configured limit (default 3).
438
+ if phase.role in ("review-plan", "review-code", "validate"):
439
+ review_loop_context = (
440
+ f"### Review Loop Context\n"
441
+ f"- Iteration: {iteration} of {phase.maxIterations}\n"
442
+ f"- Is final iteration: {iteration >= phase.maxIterations}\n\n"
443
+ )
444
+ else:
445
+ review_loop_context = ""
446
+
433
447
  spawn_kwargs = dict(
434
448
  prompt=(
435
449
  f"Append progress entries to {progress_log_path} via store-cli "
@@ -437,6 +451,7 @@ for each task in dependency_sorted(tasks):
437
451
  f"---\n\n"
438
452
  f"{architecture_block}"
439
453
  f"{summary_block}"
454
+ f"{review_loop_context}"
440
455
  f"{role_block}\n\n"
441
456
  f"### Project Context\n"
442
457
  f"{overlay_md}\n\n"
@@ -485,6 +500,7 @@ for each task in dependency_sorted(tasks):
485
500
  f"- Banner key: {banner_name}\n\n"
486
501
  f"Append progress entries as you work.\n\n"
487
502
  f"---\n\n"
503
+ f"{review_loop_context}"
488
504
  f"{role_block}\n\n"
489
505
  f"### Current Working Context\n"
490
506
  f"- Sprint Root: {sprint_root_path}\n"
@@ -875,7 +891,7 @@ Refer subagents to `.forge/schemas/event.schema.json` instead.
875
891
  <!-- See _fragments/generation-instructions.md for Generation Instructions template (orchestrate uses orchestrator-special long-form prose — cannot be reduced to standard subsections) -->
876
892
  ## Friction Emit
877
893
 
878
- When the Orchestrator detects skill friction during orchestrate-task — a referenced skill is unused, fails on invocation, is missing from the registry, has gone stale relative to current architecture, or is redundant with another skill — emit a `friction` event so `/forge:enhance --phase 2` can act on the signal. This is the writer side of the channel whose reader landed in S13-T08; the reader is empty without these emits.
894
+ When the Orchestrator detects skill friction during orchestrate-task — a referenced skill is unused, fails on invocation, is missing from the registry, has gone stale relative to current architecture, or is redundant with another skill — emit a `friction` event so `/forge:rebuild --enrich` (phase 2) can act on the signal. This is the writer side of the channel whose reader landed in S13-T08; the reader is empty without these emits.
879
895
 
880
896
  **Trigger conditions** (set `issue` to the matching token):
881
897
 
@@ -915,4 +931,4 @@ experimental `^x_[a-z_]+$`. Emit one record per distinct friction signal
915
931
  — do not coalesce.
916
932
 
917
933
  The generated `orchestrate_task.md` MUST carry this section verbatim —
918
- `/forge:enhance --phase 2` greps for it.
934
+ `/forge:rebuild --enrich` (phase 2) greps for it.
@@ -26,13 +26,25 @@ deps:
26
26
 
27
27
  ```
28
28
 
29
- 0. Pre-flight Gate Check:
29
+ 0a. Pre-flight Gate Check:
30
30
  - Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
31
31
  - **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
32
32
  - Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase plan --{entity_kind} {record_id}`
33
33
  - Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
34
34
  - Exit 2 (misconfiguration) → print stderr and HALT.
35
35
  - Exit 0 → continue.
36
+
37
+ 0b. Pipeline Step Guard (user-invoked state check):
38
+ - If `--force` is present in the invocation arguments, skip this step entirely.
39
+ - If `entity_kind == "bug"`, skip this step entirely (bug state is managed by meta-fix-bug.md).
40
+ - Read current task state:
41
+ `node "$FORGE_ROOT/tools/store-cli.cjs" read task {record_id} --json`
42
+ - Extract the `status` field from the JSON output.
43
+ - Allowed states for this phase: `draft`, `planned`, `plan-revision-required`.
44
+ - If the current status is NOT in the allowed set:
45
+ Print the following and HALT (do not proceed):
46
+ `× Task {record_id} is in state '{status}' — /forge:plan cannot run from this state; a reset or reassignment must complete first. To run the full pipeline: /forge:run-task {record_id}`
47
+
36
48
  1. Load Context:
37
49
  - Read `.forge/personas/architect.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
38
50
  - store-cli verbs: `read` | `list` | `write` | `emit` | `update-status` | `set-summary` | `describe` | `nlp` | `query` | `delete` — there is no `get`/`set`/`find`. See `_fragments/store-cli-verbs.md` for full notes; run `--help` before improvising.
@@ -100,7 +112,7 @@ deps:
100
112
  ## Iron Laws
101
113
 
102
114
  - Follow the Algorithm step by step. No code, pseudocode, or implementation sketches in the plan.
103
- - Read `.forge/personas/architect.md` first; print the persona identity line to stdout before any other tool use.
115
+ - Read `.forge/personas/architect.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
104
116
  - All store I/O via `forge_store` (or `node "$FORGE_ROOT/tools/store-cli.cjs"`). Never edit `.forge/store/*.json` directly.
105
117
 
106
118
  ## Store-Write Verification