@garygentry/feature-forge 0.3.1 → 0.3.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 (314) hide show
  1. package/adapters/claude/.feature-forge-bundle.json +1 -1
  2. package/adapters/claude/references/epic-manifest-schema.json +6 -1
  3. package/adapters/claude/references/forge-config-schema.json +1 -1
  4. package/adapters/claude/references/pipeline-state-schema.json +4 -2
  5. package/adapters/claude/references/shared-conventions.md +63 -0
  6. package/adapters/claude/references/stage-exit-protocol.md +344 -140
  7. package/adapters/claude/scripts/epic-manifest.py +413 -87
  8. package/adapters/claude/scripts/forge-bootstrap.py +57 -5
  9. package/adapters/claude/scripts/forge-session.py +3136 -139
  10. package/adapters/claude/scripts/validate-traceability.py +86 -5
  11. package/adapters/claude/skills/forge/SKILL.md +7 -6
  12. package/adapters/claude/skills/forge/references/pipeline-state-schema.json +4 -2
  13. package/adapters/claude/skills/forge/references/shared-conventions.md +63 -0
  14. package/adapters/claude/skills/forge/references/stage-exit-protocol.md +344 -140
  15. package/adapters/claude/skills/forge-0-epic/SKILL.md +7 -2
  16. package/adapters/claude/skills/forge-0-epic/references/edit-mode.md +24 -24
  17. package/adapters/claude/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
  18. package/adapters/claude/skills/forge-0-epic/references/shared-conventions.md +63 -0
  19. package/adapters/claude/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
  20. package/adapters/claude/skills/forge-1-prd/SKILL.md +14 -3
  21. package/adapters/claude/skills/forge-1-prd/references/shared-conventions.md +63 -0
  22. package/adapters/claude/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
  23. package/adapters/claude/skills/forge-2-tech/SKILL.md +13 -3
  24. package/adapters/claude/skills/forge-2-tech/references/shared-conventions.md +63 -0
  25. package/adapters/claude/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
  26. package/adapters/claude/skills/forge-3-specs/SKILL.md +4 -2
  27. package/adapters/claude/skills/forge-3-specs/references/shared-conventions.md +63 -0
  28. package/adapters/claude/skills/forge-3-specs/references/spec-archetypes.md +9 -0
  29. package/adapters/claude/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
  30. package/adapters/claude/skills/forge-4-backlog/SKILL.md +16 -3
  31. package/adapters/claude/skills/forge-4-backlog/references/shared-conventions.md +63 -0
  32. package/adapters/claude/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
  33. package/adapters/claude/skills/forge-5-loop/SKILL.md +40 -42
  34. package/adapters/claude/skills/forge-5-loop/references/result-reporting.md +70 -31
  35. package/adapters/claude/skills/forge-5-loop/references/runner-contract.md +4 -2
  36. package/adapters/claude/skills/forge-5-loop/references/shared-conventions.md +63 -0
  37. package/adapters/claude/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
  38. package/adapters/claude/skills/forge-6-docs/SKILL.md +48 -4
  39. package/adapters/claude/skills/forge-6-docs/references/shared-conventions.md +63 -0
  40. package/adapters/claude/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
  41. package/adapters/claude/skills/forge-fix/SKILL.md +85 -33
  42. package/adapters/claude/skills/forge-fix/references/shared-conventions.md +63 -0
  43. package/adapters/claude/skills/forge-fix/references/stage-exit-protocol.md +344 -140
  44. package/adapters/claude/skills/forge-guide/references/forge-config-schema.json +1 -1
  45. package/adapters/claude/skills/forge-guide/references/shared-conventions.md +63 -0
  46. package/adapters/claude/skills/forge-verify/SKILL.md +73 -41
  47. package/adapters/claude/skills/forge-verify/references/findings-template.md +39 -49
  48. package/adapters/claude/skills/forge-verify/references/shared-conventions.md +63 -0
  49. package/adapters/claude/skills/forge-verify/references/stage-exit-protocol.md +472 -0
  50. package/adapters/claude/skills/forge-verify/references/verification-checklists/epic.md +4 -3
  51. package/adapters/claude/skills/forge-verify/references/verification-checklists/specs.md +2 -0
  52. package/adapters/codex/.feature-forge-bundle.json +1 -1
  53. package/adapters/codex/references/epic-manifest-schema.json +6 -1
  54. package/adapters/codex/references/forge-config-schema.json +1 -1
  55. package/adapters/codex/references/pipeline-state-schema.json +4 -2
  56. package/adapters/codex/references/shared-conventions.md +63 -0
  57. package/adapters/codex/references/stage-exit-protocol.md +344 -140
  58. package/adapters/codex/scripts/epic-manifest.py +413 -87
  59. package/adapters/codex/scripts/forge-bootstrap.py +57 -5
  60. package/adapters/codex/scripts/forge-session.py +3136 -139
  61. package/adapters/codex/scripts/validate-traceability.py +86 -5
  62. package/adapters/codex/skills/forge/SKILL.md +7 -6
  63. package/adapters/codex/skills/forge/references/pipeline-state-schema.json +4 -2
  64. package/adapters/codex/skills/forge/references/shared-conventions.md +63 -0
  65. package/adapters/codex/skills/forge/references/stage-exit-protocol.md +344 -140
  66. package/adapters/codex/skills/forge-0-epic/SKILL.md +7 -2
  67. package/adapters/codex/skills/forge-0-epic/references/edit-mode.md +24 -24
  68. package/adapters/codex/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
  69. package/adapters/codex/skills/forge-0-epic/references/shared-conventions.md +63 -0
  70. package/adapters/codex/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
  71. package/adapters/codex/skills/forge-1-prd/SKILL.md +14 -3
  72. package/adapters/codex/skills/forge-1-prd/references/shared-conventions.md +63 -0
  73. package/adapters/codex/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
  74. package/adapters/codex/skills/forge-2-tech/SKILL.md +13 -3
  75. package/adapters/codex/skills/forge-2-tech/references/shared-conventions.md +63 -0
  76. package/adapters/codex/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
  77. package/adapters/codex/skills/forge-3-specs/SKILL.md +4 -2
  78. package/adapters/codex/skills/forge-3-specs/references/shared-conventions.md +63 -0
  79. package/adapters/codex/skills/forge-3-specs/references/spec-archetypes.md +9 -0
  80. package/adapters/codex/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
  81. package/adapters/codex/skills/forge-4-backlog/SKILL.md +16 -3
  82. package/adapters/codex/skills/forge-4-backlog/references/shared-conventions.md +63 -0
  83. package/adapters/codex/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
  84. package/adapters/codex/skills/forge-5-loop/SKILL.md +40 -42
  85. package/adapters/codex/skills/forge-5-loop/references/result-reporting.md +70 -31
  86. package/adapters/codex/skills/forge-5-loop/references/runner-contract.md +4 -2
  87. package/adapters/codex/skills/forge-5-loop/references/shared-conventions.md +63 -0
  88. package/adapters/codex/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
  89. package/adapters/codex/skills/forge-6-docs/SKILL.md +48 -4
  90. package/adapters/codex/skills/forge-6-docs/references/shared-conventions.md +63 -0
  91. package/adapters/codex/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
  92. package/adapters/codex/skills/forge-fix/SKILL.md +84 -32
  93. package/adapters/codex/skills/forge-fix/references/shared-conventions.md +63 -0
  94. package/adapters/codex/skills/forge-fix/references/stage-exit-protocol.md +344 -140
  95. package/adapters/codex/skills/forge-guide/references/forge-config-schema.json +1 -1
  96. package/adapters/codex/skills/forge-guide/references/shared-conventions.md +63 -0
  97. package/adapters/codex/skills/forge-verify/SKILL.md +72 -40
  98. package/adapters/codex/skills/forge-verify/references/findings-template.md +39 -49
  99. package/adapters/codex/skills/forge-verify/references/shared-conventions.md +63 -0
  100. package/adapters/codex/skills/forge-verify/references/stage-exit-protocol.md +472 -0
  101. package/adapters/codex/skills/forge-verify/references/verification-checklists/epic.md +4 -3
  102. package/adapters/codex/skills/forge-verify/references/verification-checklists/specs.md +2 -0
  103. package/adapters/copilot/.feature-forge-bundle.json +1 -1
  104. package/adapters/copilot/references/epic-manifest-schema.json +6 -1
  105. package/adapters/copilot/references/forge-config-schema.json +1 -1
  106. package/adapters/copilot/references/pipeline-state-schema.json +4 -2
  107. package/adapters/copilot/references/shared-conventions.md +63 -0
  108. package/adapters/copilot/references/stage-exit-protocol.md +344 -140
  109. package/adapters/copilot/scripts/epic-manifest.py +413 -87
  110. package/adapters/copilot/scripts/forge-bootstrap.py +57 -5
  111. package/adapters/copilot/scripts/forge-session.py +3136 -139
  112. package/adapters/copilot/scripts/validate-traceability.py +86 -5
  113. package/adapters/copilot/skills/forge/forge.md +7 -6
  114. package/adapters/copilot/skills/forge/references/pipeline-state-schema.json +4 -2
  115. package/adapters/copilot/skills/forge/references/shared-conventions.md +63 -0
  116. package/adapters/copilot/skills/forge/references/stage-exit-protocol.md +344 -140
  117. package/adapters/copilot/skills/forge-0-epic/forge-0-epic.md +7 -2
  118. package/adapters/copilot/skills/forge-0-epic/references/edit-mode.md +24 -24
  119. package/adapters/copilot/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
  120. package/adapters/copilot/skills/forge-0-epic/references/shared-conventions.md +63 -0
  121. package/adapters/copilot/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
  122. package/adapters/copilot/skills/forge-1-prd/forge-1-prd.md +14 -3
  123. package/adapters/copilot/skills/forge-1-prd/references/shared-conventions.md +63 -0
  124. package/adapters/copilot/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
  125. package/adapters/copilot/skills/forge-2-tech/forge-2-tech.md +13 -3
  126. package/adapters/copilot/skills/forge-2-tech/references/shared-conventions.md +63 -0
  127. package/adapters/copilot/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
  128. package/adapters/copilot/skills/forge-3-specs/forge-3-specs.md +4 -2
  129. package/adapters/copilot/skills/forge-3-specs/references/shared-conventions.md +63 -0
  130. package/adapters/copilot/skills/forge-3-specs/references/spec-archetypes.md +9 -0
  131. package/adapters/copilot/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
  132. package/adapters/copilot/skills/forge-4-backlog/forge-4-backlog.md +16 -3
  133. package/adapters/copilot/skills/forge-4-backlog/references/shared-conventions.md +63 -0
  134. package/adapters/copilot/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
  135. package/adapters/copilot/skills/forge-5-loop/forge-5-loop.md +40 -42
  136. package/adapters/copilot/skills/forge-5-loop/references/result-reporting.md +70 -31
  137. package/adapters/copilot/skills/forge-5-loop/references/runner-contract.md +4 -2
  138. package/adapters/copilot/skills/forge-5-loop/references/shared-conventions.md +63 -0
  139. package/adapters/copilot/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
  140. package/adapters/copilot/skills/forge-6-docs/forge-6-docs.md +48 -4
  141. package/adapters/copilot/skills/forge-6-docs/references/shared-conventions.md +63 -0
  142. package/adapters/copilot/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
  143. package/adapters/copilot/skills/forge-fix/forge-fix.md +84 -32
  144. package/adapters/copilot/skills/forge-fix/references/shared-conventions.md +63 -0
  145. package/adapters/copilot/skills/forge-fix/references/stage-exit-protocol.md +344 -140
  146. package/adapters/copilot/skills/forge-guide/references/forge-config-schema.json +1 -1
  147. package/adapters/copilot/skills/forge-guide/references/shared-conventions.md +63 -0
  148. package/adapters/copilot/skills/forge-verify/forge-verify.md +72 -40
  149. package/adapters/copilot/skills/forge-verify/references/findings-template.md +39 -49
  150. package/adapters/copilot/skills/forge-verify/references/shared-conventions.md +63 -0
  151. package/adapters/copilot/skills/forge-verify/references/stage-exit-protocol.md +472 -0
  152. package/adapters/copilot/skills/forge-verify/references/verification-checklists/epic.md +4 -3
  153. package/adapters/copilot/skills/forge-verify/references/verification-checklists/specs.md +2 -0
  154. package/adapters/cursor/.feature-forge-bundle.json +1 -1
  155. package/adapters/cursor/references/epic-manifest-schema.json +6 -1
  156. package/adapters/cursor/references/forge-config-schema.json +1 -1
  157. package/adapters/cursor/references/pipeline-state-schema.json +4 -2
  158. package/adapters/cursor/references/shared-conventions.md +63 -0
  159. package/adapters/cursor/references/stage-exit-protocol.md +344 -140
  160. package/adapters/cursor/scripts/epic-manifest.py +413 -87
  161. package/adapters/cursor/scripts/forge-bootstrap.py +57 -5
  162. package/adapters/cursor/scripts/forge-session.py +3136 -139
  163. package/adapters/cursor/scripts/validate-traceability.py +86 -5
  164. package/adapters/cursor/skills/forge/forge.mdc +7 -6
  165. package/adapters/cursor/skills/forge/references/pipeline-state-schema.json +4 -2
  166. package/adapters/cursor/skills/forge/references/shared-conventions.md +63 -0
  167. package/adapters/cursor/skills/forge/references/stage-exit-protocol.md +344 -140
  168. package/adapters/cursor/skills/forge-0-epic/forge-0-epic.mdc +7 -2
  169. package/adapters/cursor/skills/forge-0-epic/references/edit-mode.md +24 -24
  170. package/adapters/cursor/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
  171. package/adapters/cursor/skills/forge-0-epic/references/shared-conventions.md +63 -0
  172. package/adapters/cursor/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
  173. package/adapters/cursor/skills/forge-1-prd/forge-1-prd.mdc +14 -3
  174. package/adapters/cursor/skills/forge-1-prd/references/shared-conventions.md +63 -0
  175. package/adapters/cursor/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
  176. package/adapters/cursor/skills/forge-2-tech/forge-2-tech.mdc +13 -3
  177. package/adapters/cursor/skills/forge-2-tech/references/shared-conventions.md +63 -0
  178. package/adapters/cursor/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
  179. package/adapters/cursor/skills/forge-3-specs/forge-3-specs.mdc +4 -2
  180. package/adapters/cursor/skills/forge-3-specs/references/shared-conventions.md +63 -0
  181. package/adapters/cursor/skills/forge-3-specs/references/spec-archetypes.md +9 -0
  182. package/adapters/cursor/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
  183. package/adapters/cursor/skills/forge-4-backlog/forge-4-backlog.mdc +16 -3
  184. package/adapters/cursor/skills/forge-4-backlog/references/shared-conventions.md +63 -0
  185. package/adapters/cursor/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
  186. package/adapters/cursor/skills/forge-5-loop/forge-5-loop.mdc +40 -42
  187. package/adapters/cursor/skills/forge-5-loop/references/result-reporting.md +70 -31
  188. package/adapters/cursor/skills/forge-5-loop/references/runner-contract.md +4 -2
  189. package/adapters/cursor/skills/forge-5-loop/references/shared-conventions.md +63 -0
  190. package/adapters/cursor/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
  191. package/adapters/cursor/skills/forge-6-docs/forge-6-docs.mdc +48 -4
  192. package/adapters/cursor/skills/forge-6-docs/references/shared-conventions.md +63 -0
  193. package/adapters/cursor/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
  194. package/adapters/cursor/skills/forge-fix/forge-fix.mdc +84 -32
  195. package/adapters/cursor/skills/forge-fix/references/shared-conventions.md +63 -0
  196. package/adapters/cursor/skills/forge-fix/references/stage-exit-protocol.md +344 -140
  197. package/adapters/cursor/skills/forge-guide/references/forge-config-schema.json +1 -1
  198. package/adapters/cursor/skills/forge-guide/references/shared-conventions.md +63 -0
  199. package/adapters/cursor/skills/forge-verify/forge-verify.mdc +72 -40
  200. package/adapters/cursor/skills/forge-verify/references/findings-template.md +39 -49
  201. package/adapters/cursor/skills/forge-verify/references/shared-conventions.md +63 -0
  202. package/adapters/cursor/skills/forge-verify/references/stage-exit-protocol.md +472 -0
  203. package/adapters/cursor/skills/forge-verify/references/verification-checklists/epic.md +4 -3
  204. package/adapters/cursor/skills/forge-verify/references/verification-checklists/specs.md +2 -0
  205. package/adapters/gemini/.feature-forge-bundle.json +1 -1
  206. package/adapters/gemini/gemini-extension.json +1 -1
  207. package/adapters/gemini/references/epic-manifest-schema.json +6 -1
  208. package/adapters/gemini/references/forge-config-schema.json +1 -1
  209. package/adapters/gemini/references/pipeline-state-schema.json +4 -2
  210. package/adapters/gemini/references/shared-conventions.md +63 -0
  211. package/adapters/gemini/references/stage-exit-protocol.md +344 -140
  212. package/adapters/gemini/scripts/epic-manifest.py +413 -87
  213. package/adapters/gemini/scripts/forge-bootstrap.py +57 -5
  214. package/adapters/gemini/scripts/forge-session.py +3136 -139
  215. package/adapters/gemini/scripts/validate-traceability.py +86 -5
  216. package/adapters/gemini/skills/forge/forge.md +7 -6
  217. package/adapters/gemini/skills/forge/references/pipeline-state-schema.json +4 -2
  218. package/adapters/gemini/skills/forge/references/shared-conventions.md +63 -0
  219. package/adapters/gemini/skills/forge/references/stage-exit-protocol.md +344 -140
  220. package/adapters/gemini/skills/forge-0-epic/forge-0-epic.md +7 -2
  221. package/adapters/gemini/skills/forge-0-epic/references/edit-mode.md +24 -24
  222. package/adapters/gemini/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
  223. package/adapters/gemini/skills/forge-0-epic/references/shared-conventions.md +63 -0
  224. package/adapters/gemini/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
  225. package/adapters/gemini/skills/forge-1-prd/forge-1-prd.md +14 -3
  226. package/adapters/gemini/skills/forge-1-prd/references/shared-conventions.md +63 -0
  227. package/adapters/gemini/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
  228. package/adapters/gemini/skills/forge-2-tech/forge-2-tech.md +13 -3
  229. package/adapters/gemini/skills/forge-2-tech/references/shared-conventions.md +63 -0
  230. package/adapters/gemini/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
  231. package/adapters/gemini/skills/forge-3-specs/forge-3-specs.md +4 -2
  232. package/adapters/gemini/skills/forge-3-specs/references/shared-conventions.md +63 -0
  233. package/adapters/gemini/skills/forge-3-specs/references/spec-archetypes.md +9 -0
  234. package/adapters/gemini/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
  235. package/adapters/gemini/skills/forge-4-backlog/forge-4-backlog.md +16 -3
  236. package/adapters/gemini/skills/forge-4-backlog/references/shared-conventions.md +63 -0
  237. package/adapters/gemini/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
  238. package/adapters/gemini/skills/forge-5-loop/forge-5-loop.md +40 -42
  239. package/adapters/gemini/skills/forge-5-loop/references/result-reporting.md +70 -31
  240. package/adapters/gemini/skills/forge-5-loop/references/runner-contract.md +4 -2
  241. package/adapters/gemini/skills/forge-5-loop/references/shared-conventions.md +63 -0
  242. package/adapters/gemini/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
  243. package/adapters/gemini/skills/forge-6-docs/forge-6-docs.md +48 -4
  244. package/adapters/gemini/skills/forge-6-docs/references/shared-conventions.md +63 -0
  245. package/adapters/gemini/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
  246. package/adapters/gemini/skills/forge-fix/forge-fix.md +84 -32
  247. package/adapters/gemini/skills/forge-fix/references/shared-conventions.md +63 -0
  248. package/adapters/gemini/skills/forge-fix/references/stage-exit-protocol.md +344 -140
  249. package/adapters/gemini/skills/forge-guide/references/forge-config-schema.json +1 -1
  250. package/adapters/gemini/skills/forge-guide/references/shared-conventions.md +63 -0
  251. package/adapters/gemini/skills/forge-verify/forge-verify.md +72 -40
  252. package/adapters/gemini/skills/forge-verify/references/findings-template.md +39 -49
  253. package/adapters/gemini/skills/forge-verify/references/shared-conventions.md +63 -0
  254. package/adapters/gemini/skills/forge-verify/references/stage-exit-protocol.md +472 -0
  255. package/adapters/gemini/skills/forge-verify/references/verification-checklists/epic.md +4 -3
  256. package/adapters/gemini/skills/forge-verify/references/verification-checklists/specs.md +2 -0
  257. package/adapters/pi/.feature-forge-bundle.json +1 -1
  258. package/adapters/pi/references/epic-manifest-schema.json +6 -1
  259. package/adapters/pi/references/forge-config-schema.json +1 -1
  260. package/adapters/pi/references/pipeline-state-schema.json +4 -2
  261. package/adapters/pi/references/shared-conventions.md +63 -0
  262. package/adapters/pi/references/stage-exit-protocol.md +344 -140
  263. package/adapters/pi/scripts/epic-manifest.py +413 -87
  264. package/adapters/pi/scripts/forge-bootstrap.py +57 -5
  265. package/adapters/pi/scripts/forge-session.py +3136 -139
  266. package/adapters/pi/scripts/validate-traceability.py +86 -5
  267. package/adapters/pi/skills/forge/SKILL.md +7 -6
  268. package/adapters/pi/skills/forge/references/pipeline-state-schema.json +4 -2
  269. package/adapters/pi/skills/forge/references/shared-conventions.md +63 -0
  270. package/adapters/pi/skills/forge/references/stage-exit-protocol.md +344 -140
  271. package/adapters/pi/skills/forge-0-epic/SKILL.md +7 -2
  272. package/adapters/pi/skills/forge-0-epic/references/edit-mode.md +24 -24
  273. package/adapters/pi/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
  274. package/adapters/pi/skills/forge-0-epic/references/shared-conventions.md +63 -0
  275. package/adapters/pi/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
  276. package/adapters/pi/skills/forge-1-prd/SKILL.md +14 -3
  277. package/adapters/pi/skills/forge-1-prd/references/shared-conventions.md +63 -0
  278. package/adapters/pi/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
  279. package/adapters/pi/skills/forge-2-tech/SKILL.md +13 -3
  280. package/adapters/pi/skills/forge-2-tech/references/shared-conventions.md +63 -0
  281. package/adapters/pi/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
  282. package/adapters/pi/skills/forge-3-specs/SKILL.md +4 -2
  283. package/adapters/pi/skills/forge-3-specs/references/shared-conventions.md +63 -0
  284. package/adapters/pi/skills/forge-3-specs/references/spec-archetypes.md +9 -0
  285. package/adapters/pi/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
  286. package/adapters/pi/skills/forge-4-backlog/SKILL.md +16 -3
  287. package/adapters/pi/skills/forge-4-backlog/references/shared-conventions.md +63 -0
  288. package/adapters/pi/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
  289. package/adapters/pi/skills/forge-5-loop/SKILL.md +40 -42
  290. package/adapters/pi/skills/forge-5-loop/references/result-reporting.md +70 -31
  291. package/adapters/pi/skills/forge-5-loop/references/runner-contract.md +4 -2
  292. package/adapters/pi/skills/forge-5-loop/references/shared-conventions.md +63 -0
  293. package/adapters/pi/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
  294. package/adapters/pi/skills/forge-6-docs/SKILL.md +48 -4
  295. package/adapters/pi/skills/forge-6-docs/references/shared-conventions.md +63 -0
  296. package/adapters/pi/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
  297. package/adapters/pi/skills/forge-fix/SKILL.md +84 -32
  298. package/adapters/pi/skills/forge-fix/references/shared-conventions.md +63 -0
  299. package/adapters/pi/skills/forge-fix/references/stage-exit-protocol.md +344 -140
  300. package/adapters/pi/skills/forge-guide/references/forge-config-schema.json +1 -1
  301. package/adapters/pi/skills/forge-guide/references/shared-conventions.md +63 -0
  302. package/adapters/pi/skills/forge-verify/SKILL.md +72 -40
  303. package/adapters/pi/skills/forge-verify/references/findings-template.md +39 -49
  304. package/adapters/pi/skills/forge-verify/references/shared-conventions.md +63 -0
  305. package/adapters/pi/skills/forge-verify/references/stage-exit-protocol.md +472 -0
  306. package/adapters/pi/skills/forge-verify/references/verification-checklists/epic.md +4 -3
  307. package/adapters/pi/skills/forge-verify/references/verification-checklists/specs.md +2 -0
  308. package/package.json +1 -1
  309. package/adapters/claude/skills/forge-verify/references/pipeline-state-schema.json +0 -191
  310. package/adapters/codex/skills/forge-verify/references/pipeline-state-schema.json +0 -191
  311. package/adapters/copilot/skills/forge-verify/references/pipeline-state-schema.json +0 -191
  312. package/adapters/cursor/skills/forge-verify/references/pipeline-state-schema.json +0 -191
  313. package/adapters/gemini/skills/forge-verify/references/pipeline-state-schema.json +0 -191
  314. package/adapters/pi/skills/forge-verify/references/pipeline-state-schema.json +0 -191
@@ -6,16 +6,9 @@ description: Execute the autonomous coding loop (rauf by default) against a forg
6
6
 
7
7
  # forge-5-loop — Autonomous Loop Executor
8
8
 
9
- Execute the autonomous coding loop against a forge feature's backlog. The loop
10
- spawns a fresh agent session per backlog item, implementing each task with full
11
- verification.
9
+ Execute the autonomous coding loop against a forge feature's backlog. The loop spawns a fresh agent session per backlog item, implementing each task with full verification.
12
10
 
13
- The loop **runner** is configured, not hardcoded. feature-forge talks to it
14
- through the `loopRunner` block in `forge.config.json`; rauf is the default and
15
- reference implementation (see `references/ralph-loop-contract.md`). Every command
16
- below is rendered from `loopRunner` with token substitution — there are no
17
- hardcoded `rauf …` commands in this skill, and even the human log filename is
18
- tokenized as `{loopRunner.logFile}`.
11
+ The loop **runner** is configured, not hardcoded. feature-forge talks to it through the `loopRunner` block in `forge.config.json`; rauf is the default and reference implementation (see `references/ralph-loop-contract.md`). Every command below is rendered from `loopRunner` with token substitution — there are no hardcoded `rauf …` commands in this skill, and even the human log filename is tokenized as `{loopRunner.logFile}`.
19
12
 
20
13
  ## Resolve the loop runner
21
14
 
@@ -34,8 +27,7 @@ Token substitution applies to every `*Command` string. Substitute:
34
27
  - `{specsDir}` → `specsDir` from config
35
28
  - `{iterations}` → the computed iteration count (Step 2a)
36
29
 
37
- Whenever this skill says "run the **run command**" / "**status command**" /
38
- etc., it means the corresponding substituted `loopRunner.*Command`.
30
+ Whenever this skill says "run the **run command**" / "**status command**" / etc., it means the corresponding substituted `loopRunner.*Command`.
39
31
 
40
32
  **Turn structure reminder:** Output analysis/context as text, then route ALL questions through the host's question mechanism. Never embed questions in text output — the user will not be prompted and the session will stall.
41
33
 
@@ -51,9 +43,14 @@ Read `{resolvedFeatureDir}/.pipeline-state.json`. If not in force mode, `stages.
51
43
 
52
44
  ### 1b. Verification Check
53
45
 
54
- Check if `stages.forge-verify-backlog` exists and has status `passed` or `findings-applied`. If not, use the host's question mechanism to warn with the cost of skipping:
46
+ Read `stages.forge-verify-backlog` and branch on its status — **four** cases, in this order (the pending case must be tested *before* the generic one, or owed-and-dropped debt gets reported as never-scheduled):
55
47
 
56
- "Backlog hasn't been verified yet. Recommended: run `/feature-forge:forge-verify {feature}` first — the loop implements items autonomously and commits as it goes, so a bad item (wrong scope, missing dependency, untestable acceptance criteria) is far cheaper to catch now than after several commits build on it. Continue anyway?" Offer **Verify first (recommended)** · **Continue without verifying**.
48
+ 1. **`passed`** — proceed with no prompt.
49
+ 2. **`findings-applied`** — fixes were applied but nothing re-verified them: this status deliberately clears freshness, so the backlog's verification is still outstanding, not silently satisfied. Use the host's question mechanism to offer: **Re-verify first (recommended)** (`/feature-forge:forge-verify {feature} backlog`) · **Continue without re-verifying** — an explicit deferral, persisted via `state-verify --status skipped` (never by hand; add `--epic "{epic}"` for members) before the loop starts, so it is a recorded decision and not a walked-past gate.
50
+ 3. **`auto-verify-pending`** — automatic verification *was* scheduled for the backlog stage and the debt *was* durably recorded; it simply has not run. Say exactly that, naming the served stage and the retry command: *"{feature}: automatic verification is still pending for forge-4-backlog; run `/feature-forge:forge-verify {feature} backlog` to resolve it."* Then use the host's question mechanism to offer the same two choices as case 4. Never report this as "hasn't been verified yet" — "nobody ever asked for this" and "this was owed and dropped" are different facts and the operator acts on them differently.
51
+ 4. **Anything else** (absent, `pending`, `skipped`, `findings-reported`) — use the host's question mechanism to warn with the cost of skipping: "Backlog hasn't been verified yet. Recommended: run `/feature-forge:forge-verify {feature}` first — the loop implements items autonomously and commits as it goes, so a bad item (wrong scope, missing dependency, untestable acceptance criteria) is far cheaper to catch now than after several commits build on it. Continue anyway?"
52
+
53
+ Cases 3 and 4 offer the same choices: **Verify first (recommended)** · **Continue without verifying**. The proceed-anyway path is unchanged.
57
54
 
58
55
  ### 1b-epic. Epic Dependency Gate
59
56
 
@@ -166,9 +163,7 @@ For the model-selection precedence (item.model > --model/options > project defau
166
163
  provider default), read references/runner-contract.md.
167
164
  ```
168
165
 
169
- **Run mode (gated on `loopRunner.name == "rauf"`).** When the runner is rauf, add a **"Run mode"** question to this same the host's question mechanism surface with these options **in this exact order** (do NOT improvise — deterministic ordering is the point): **(1) "Run with review pass (recommended)"** — append `--review`, and this is the default; **(2) "Run without review"** — the bare rendered command; **(3, only when 2a counted blocked items) "Review + retry blocked"** — append `--review --retry-blocked`. the host's question mechanism's built-in "Other" covers ad-hoc flags (`--model`/`--timeout`); add no separate open-ended option. The command line shown above renders `--review` (the recommended default). **When the runner is not rauf**, add NO Run-mode question — present the bare rendered command and let the user adjust via "Other" (byte-identical to today). Verbatim option labels: `## Run mode (Step 2d, rauf)` in `references/runner-contract.md`.
170
-
171
- For the full loop-runner contract — event-stream vs. log-fallback launch, the live-supervision/monitor rules, and the model-selection precedence — read `references/runner-contract.md`. Whichever Run-mode option (or "Other") the user picks, append its flags to the rendered run command before Step 3.
166
+ **Run mode and full loop-runner contract:** follow `## Run mode (Step 2d, rauf)` and the remaining sections in `references/runner-contract.md` verbatim.
172
167
 
173
168
  #### Agent selection (gated on `loopRunner.agentArgument`)
174
169
 
@@ -225,11 +220,7 @@ rules, read `references/runner-contract.md`.
225
220
 
226
221
  ### 3f. Reach completion
227
222
 
228
- Step 4 is reached when the backgrounded process exits (its completion notification is
229
- authoritative); the `loop_completed` / `loop_error` / `loop_cancelled` event is the live
230
- heads-up that it's imminent. Stop the Monitor (it ends on its own when `tail` sees the
231
- process-ended log, or via `TaskStop`) and proceed to Step 4. Do NOT foreground-sleep
232
- or poll — the harness drives both the Monitor events and the completion notification.
223
+ Step 4 is reached when the backgrounded process exits (its completion notification is authoritative); the `loop_completed` / `loop_error` / `loop_cancelled` event is the live heads-up that it's imminent. Stop the Monitor (it ends on its own when `tail` sees the process-ended log, or via `TaskStop`) and proceed to Step 4. Do NOT foreground-sleep or poll — the harness drives both the Monitor events and the completion notification.
233
224
 
234
225
  ## Step 4: Check Results
235
226
 
@@ -246,9 +237,7 @@ is not configured. You will already have most of this from the live tally in 3e.
246
237
  ### 4b. Report Results
247
238
 
248
239
  Present a summary to the user. Pick **every** branch that applies (a run can be both
249
- blocked and needs-human) and render its report. The five verbatim result-report
250
- output templates — **all-done**, **needs-human**, **blocked**, **deferred**, and
251
- **pending** (iteration limit reached) — are in `references/result-reporting.md`.
240
+ blocked and needs-human) and render its report. The five verbatim result-report output templates — **all-done**, **needs-human**, **blocked**, **deferred**, and **pending** (iteration limit reached) — are in `references/result-reporting.md`, together with the Step 7 `LoopOutcome` ladder these same counts feed. The reports are descriptive only: they carry no next command, and the run does not end here. If the authoritative counts cannot be obtained at all (4a failed or its output does not parse), follow **Operational failure before the counts are known** in that same file: surface the failure and its recovery, and close nothing — no outcome, no stage exit, no terminal block.
252
241
 
253
242
  ## Step 5: Update Pipeline State
254
243
 
@@ -264,33 +253,42 @@ python3 "$R/scripts/forge-session.py" state-complete --feature "{feature}" --sta
264
253
 
265
254
  ## Step 5b: Offer Impl-Verify (standalone path)
266
255
 
267
- **Gate:** run only if (a) the feature's `.pipeline-state.json` has **no** `epic` key **and** (b) Step 5 set `stages.forge-5-loop.status` to `complete`. Otherwise **skip** — partial runs end as today, and epic members get the equivalent offer in Step 6.1 (do **not** prompt twice). This standalone counterpart to Step 6.1 nudges verification interactively rather than via the easily-missed "Next steps" text. Use the host's question mechanism (NOT inline prose) to offer: *"{feature}'s loop is complete. Recommended: run `/feature-forge:forge-verify {feature} impl` to audit the implementation before generating docs. Run it now, or skip to forge-6-docs?"* On **run**, hand off to `/feature-forge:forge-verify {feature} impl`. On **skip**, record `stages.forge-verify-impl.status` as `"skipped"` (mirrors `forge-4-backlog`'s skip handling) and point the user at `/feature-forge:forge-6-docs {feature}` — the forge-6-docs backstop re-surfaces the skip.
256
+ **Gate:** run only if (a) the feature's `.pipeline-state.json` has **no** `epic` key **and** (b) Step 5 set `stages.forge-5-loop.status` to `complete`. Otherwise **skip** straight to Step 7 — a non-complete run has nothing to verify yet, and epic members get the equivalent offer in Step 6.1 (do **not** prompt twice). This standalone counterpart to Step 6.1 nudges verification interactively rather than via the easily-missed "Next steps" text. Use the host's question mechanism (NOT inline prose) to offer: *"{feature}'s loop is complete. Recommended: run `/feature-forge:forge-verify {feature} impl` to audit the implementation before generating docs. Run it now, or skip to forge-6-docs?"* On **run**, invoke `feature-forge:forge-verify {feature} impl` with the literal `owner: nested` token in the dispatching prompt — this dispatch happens inside the loop stage, so **you** remain the sole terminal owner and the branch skill returns its structured result and prints no terminal block of its own (see "Branch ownership: the `owner:` token" in `references/stage-exit-protocol.md`). On **skip**, persist the skip through `state-verify` using the fence below (mirrors `forge-4-backlog`'s skip handling) — the forge-6-docs backstop re-surfaces the skip. Either way, do **not** name a next command here: Step 7 routes, and it routes differently depending on what this step recorded.
257
+
258
+ **The skip is written by `state-verify`, never by hand.** Add `--epic "{epic}"` when this feature is an epic member — required, per the Pipeline State Protocol in `references/shared-conventions.md`. On exit 2, surface the plain `Error:` line verbatim and stop: the skip is not persisted, so Step 7 would route on state that is not on disk.
259
+
260
+ ```bash
261
+ R="$(bash -c 'for d in "${FEATURE_FORGE_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
262
+ [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
263
+ python3 "$R/scripts/forge-session.py" state-verify --feature "{feature}" --stage forge-5-loop --status skipped --specs-dir "{specsDir}"
264
+ ```
268
265
 
269
266
  ## Step 6: Epic Handoff
270
267
 
271
- **Gate:** only run this step if (a) the resolved feature's `.pipeline-state.json` has an `epic` key **and** (b) Step 5 set `stages.forge-5-loop.status` to `complete` (all backlog items done). If either is false, **skip** — standalone completed features are handled by Step 5b, and partial runs end as today (REQ-COMPAT-01).
268
+ **Gate:** only run this step if (a) the resolved feature's `.pipeline-state.json` has an `epic` key **and** (b) Step 5 set `stages.forge-5-loop.status` to `complete` (all backlog items done). If either is false, **skip** straight to Step 7 — standalone completed features are handled by Step 5b, and a non-complete run has no handoff to make (REQ-COMPAT-01).
272
269
 
273
- 1. **Offer impl-verify first (recommended, skippable).** Per the completion rule (`00-core-definitions.md §7`), a feature whose `forge-verify-impl.status == findings-reported` does **not** unblock dependents. Use the host's question mechanism (NOT inline prose) to offer: *"{feature}'s loop is done. Recommended: run `/feature-forge:forge-verify {feature} impl` before unblocking dependents. Run it now, or skip and continue the handoff?"* The user may skip (then completion is judged on the §7 rule with impl-verify absent).
270
+ 1. **Offer impl-verify first (recommended, skippable).** Per the completion rule (`00-core-definitions.md §7`), a feature whose `forge-verify-impl.status == findings-reported` does **not** unblock dependents. Use the host's question mechanism (NOT inline prose) to offer: *"{feature}'s loop is done. Recommended: run `/feature-forge:forge-verify {feature} impl` before unblocking dependents. Run it now, or skip and continue the handoff?"* On **run**, invoke `feature-forge:forge-verify {feature} impl` with the literal `owner: nested` token in the dispatching prompt — this dispatch happens inside the loop stage, so **you** remain the sole terminal owner and the branch skill returns its structured result and prints no terminal block of its own (see "Branch ownership: the `owner:` token" in `references/stage-exit-protocol.md`). On **skip**, persist the skip through `state-verify --status skipped` using Step 5b's fence (add `--epic "{epic}"` — required for members) so the Step 7 exit reads a recorded decision instead of re-asking the question the user just answered; completion is then judged on the §7 rule with impl-verify explicitly skipped.
274
271
  2. **Recompute and announce.** Run `render-status "{epic}" --specs-dir "{specsDir}" --json`. Announce the feature's completion and the epic rollup (e.g. "2/4 features complete") — derived live from disk, never re-computed in prose.
275
- 3. **Identify the next actionable feature(s).** Read `render-status`'s `actionable` set (every dependency now complete, not itself complete) and `nextCommand`. **None actionable:** say so — if `rollup.total > 0` **AND** `rollup.complete == rollup.total`, suggest `/feature-forge:forge-6-docs {feature}` and note the epic-level documentation offer (§10) (the `rollup.total > 0` guard prevents an **empty epic** `0 == 0` from reading as complete); otherwise list what is still blocked and on which dependencies, then end (do not prompt to start a feature that cannot start). **One or more actionable:** use the host's question mechanism presenting **each actionable feature** as an option (plus "stop here"). Execution is **serial** — the user picks exactly one (REQ-ORCH-03); do **not** autonomously chain into the next pipeline.
276
- 4. **Begin the chosen feature.** **PRD absent** (no `PRD.md`, or `stages.forge-1-prd` not complete): offer to author it now — "Start `/feature-forge:forge-1-prd {chosen}`?" (REQ-ORCH-02); on yes, hand off to forge-1-prd (which injects epic context per §5.1). **PRD present:** point the user at the chosen feature's `nextCommand` from render-status.
277
- 5. **Commit (REQ-OBS-01).** When `gitCommitAfterStage` is true, commit the Step 5 completion write (and any manifest `updatedAt` bump) via the shared-conventions **Git Commit Protocol**, staging the epic subtree so the member state change commits atomically: `git add {specsDir}/{epic}/` then `{commitPrefix}({feature}): complete loop`. If `gitCommitAfterStage` is false, skip the commit.
278
- 6. **Close the handoff with the Stage Exit Protocol.** Finishing feature `{feature}` → starting the picked feature `{chosen}`'s PRD is a **cold** stage boundary (single-sourced in `references/stage-exit-protocol.md`). Feature `{feature}`'s impl-verify was already offered in Step 6.1, so step 1's gate self-suppresses when it ran or was skipped — the block collapses to clear your session / start a fresh session → next-command. Present it only when the chosen feature's PRD is absent (a PRD-present pick just runs its `nextCommand`):
272
+ 3. **Announce what is actionable — do not route.** Read `render-status`'s `actionable` set (every dependency now complete, not itself complete) and say plainly which members can start now, or which are still blocked and on which dependencies. This is context for the user, not a handoff: the Step 7 exit consumes the same live payload and fences the one authoritative next command itself, so do **not** present a next-feature picker, offer to author a member's PRD, or repeat a member's `nextCommand` here. Two competing actions is exactly the ambiguity the scripted exit removes.
273
+ 4. **Commit (REQ-OBS-01).** When `gitCommitAfterStage` is true, commit the Step 5 completion write (and any manifest `updatedAt` bump) via the shared-conventions **Git Commit Protocol**, staging the epic subtree so the member state change commits atomically: `git add {specsDir}/{epic}/` then `{commitPrefix}({feature}): complete loop`. If `gitCommitAfterStage` is false, skip the commit. Then fall through to Step 7 — the epic handoff closes there, once, like every other path.
279
274
 
280
- **This stage is done — walk the user through the Stage Exit Protocol** before moving on. The order is fixed, and step 2 is something only the user can do:
275
+ ## Step 7: Close the Stage
281
276
 
282
- 1. **Verify feature {feature}'s loop first — if it isn't already verified.** If verify already ran in this session — via the in-stage auto-verify on the authoring stages, or the interactive impl-verify offered above on the loop — or is already fresh on record, or the stage was explicitly skipped, say so and go straight to step 2. Only when `autoVerify` is off for this stage **and** verify is **missing or stale** do you present the **Standard Verify Gate**: verify **now, before clearing**, using the host's question mechanism with exactly these three options — but only when the host has a question mechanism **and** the clean-room path is available (the host's subagent mechanism plus a dispatchable `forge-verifier` subagent):
283
- - **Verify feature {feature}'s loop now** *(recommended)* — dispatch the clean-room `forge-verifier` subagent from this session in require-clean mode; the digest returns here so any fix decision keeps its context. One-time — it does **not** change config.
284
- - **Verify now + enable auto-verify going forward** — verify now **and** patch `"autoVerify": true` into `forge.config.json` in place (preserve formatting and every other key) so future stages verify automatically, no prompt. This complements the `forge-init` opt-in. **Do not auto-commit this config change** — treat it like `notes`: a user-facing edit the user commits on their own cadence, never folded into a stage's artifact commit.
285
- - **Skip for now** — go straight to clear your session / start a fresh session and the next command without verifying. Record this stage's verify status as `"skipped"` in pipeline state (mirroring the existing skip handling) **only** on an explicit skip — a skip does not go stale.
277
+ Every loop run ends here, and ends here **exactly once** — standalone or epic member, complete or not.
286
278
 
287
- **Host / clean-room fallback (not a user-selectable option):** if the question mechanism, the host's subagent mechanism, or the `forge-verifier` subagent is unavailable, do **not** run clean-room — degrade to printing `/feature-forge:forge-verify {feature} impl` for the user to run inline/manually (mirroring `autoInvokeNextStage`), and offer the auto-verify enable as plain text only if a config write is possible.
288
- 2. **Then clear your session / start a fresh session.** Recommended **unconditionally** at this boundary for a clean start — independent of how full the context window is. Every artifact is on disk, so the work survives the clear. **I can't clear your session / start a fresh session for you — you have to run it yourself.**
289
- 3. **Then run the next command** in the fresh session — or re-run `/feature-forge:forge` to let the navigator resume from disk:
279
+ First select the single `LoopOutcome` with the ladder in `references/result-reporting.md` (`needs-human` → `blocked` → `deferred` → `partial` → `complete`, first match wins), reading it from Step 4a's authoritative counts and never from the runner's process exit code. If those counts were never obtained, follow that file's operational-failure rule instead: report the failure and its recovery and run no exit at all.
290
280
 
291
- ```
292
- /feature-forge:forge-1-prd {chosen}
293
- ```
281
+ **Close this stage with the Scripted Stage Exit** (contract: `references/stage-exit-protocol.md`; do not improvise a "Next steps" list). Run:
282
+
283
+ ```bash
284
+ R="$(bash -c 'for d in "${FEATURE_FORGE_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
285
+ [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
286
+ python3 "$R/scripts/forge-session.py" stage-exit --feature "{feature}" --stage forge-5-loop --outcome "{LoopOutcome}" --specs-dir "{specsDir}" --host generic --verify-capability "{verify-capability}"
287
+ ```
288
+
289
+ Obey the DIRECTIVES it prints, in the consumption order this protocol fixes: surface `invalidAutoVerifyKeys` and every `warnings` entry first; `runInStageVerify: true` → run the in-stage clean-room verify chain now (honoring `autoFixEligible`, and asking through the Standard Verify Gate first when you may not dispatch unsolicited); `verifyGate: "standard"` → present the Standard Verify Gate; `verifyGate: "manual-print"` → print the `verifyCommand` for the user and do **not** dispatch inline. Then, and only when `terminalOwnedBy` is `"self"`, **print the NEXT-STEPS block verbatim as your absolute last output — nothing after its sentinel line.** A `terminalOwnedBy: "outer"` payload carries `nextSteps: null`: return your structured result to the caller and print no terminal block at all.
290
+
291
+ Add `--epic "{epic}"` when this feature is an epic member — required, per the Pipeline State Protocol in `references/shared-conventions.md`. Determine `{verify-capability}` per the **Host and capability determination** section of `references/stage-exit-protocol.md`: `interactive` needs both a question mechanism and *permission* to dispatch the clean-room `forge-verifier`, and a session that merely needs consent first is still `interactive`. The script owns the routing for every outcome — the loop resume, the navigator recovery, the docs handoff, and the epic's live next member — so append nothing to its block: no retry line, no rollup restated, no "continue to docs". A non-`complete` outcome deliberately fences no downstream work, and re-adding one here would claim readiness the backlog does not support.
294
292
 
295
293
  ## Gotchas
296
294
 
@@ -1,32 +1,31 @@
1
- # forge-5-loop — Step 4b Result-Report Templates
1
+ # forge-5-loop — Result Reports and Loop-Outcome Selection
2
2
 
3
- These are the five verbatim result-report output templates for **Step 4b** of
4
- `forge-5-loop/SKILL.md`. Pick **every** branch that applies (a run can be both
5
- blocked and needs-human) and render its report.
3
+ This file carries two things for `forge-5-loop/SKILL.md`:
6
4
 
7
- **All items done.** Print the completion summary, then close with the **warm-acceptable
8
- variant** of the Stage Exit Protocol (single-sourced in
9
- `references/stage-exit-protocol.md`) — the `forge-5-loop → forge-6-docs` boundary is the
10
- one place where clearing before the next stage is optional:
11
- ```
12
- Loop completed for {feature}. All {N} items implemented successfully.
13
- ```
5
+ 1. the verbatim **result-report templates** for **Step 4b** — factual counts only; and
6
+ 2. the deterministic **`LoopOutcome` ladder** for **Step 7**, which picks the single
7
+ value the scripted stage exit is invoked with.
14
8
 
15
- **The loop is complete — this is the one boundary where clearing before the next stage is optional.**
9
+ The reports describe what the run did. They never carry a next command, a retry
10
+ command, or a "continue to docs" suggestion: routing is the scripted stage exit's
11
+ job, and a loop run emits exactly **one** `stage-exit` invocation and **one**
12
+ terminal block.
16
13
 
17
- 1. **Verify is already offered above.** Impl-verify is offered interactively right after this report (Step 5b for a standalone feature, Step 6.1 for an epic member) — run it there rather than as a second gate. It runs clean-room, so it needs no fresh session.
18
- 2. **Clearing is optional here — warm is fine.** `forge-6-docs` benefits from the still-warm context of what the loop actually did, so continuing in this same session is the easy default. A cold start also works — every artifact is on disk — but there is no need to force it.
19
- 3. **Then run the next command** — in this warm session, or a fresh one if you prefer:
14
+ ## Result reports (Step 4b)
20
15
 
21
- ```
22
- /feature-forge:forge-6-docs {feature}
23
- ```
16
+ Pick **every** branch that applies — a run can be both blocked and needs-human — and
17
+ render its report. These are descriptive; none of them ends the turn.
18
+
19
+ **All items done.**
20
+ ```
21
+ Loop completed for {feature}. All {N} items implemented successfully.
22
+ ```
24
23
 
25
24
  **Runner review pass.** A review flag (e.g. rauf's `--review`) makes the runner run
26
25
  a post-loop review that **auto-creates and implements fix items** rather than handing
27
26
  findings to the user — distinct from `forge-verify impl` (a clean-context audit that
28
27
  writes a findings doc). When Step 4a captured a `review_completed` event, add a line
29
- **above** "Next steps" so the pass's effect is visible and not mistaken for "nothing
28
+ below the counts so the pass's effect is visible and not mistaken for "nothing
30
29
  happened":
31
30
  ```
32
31
  Runner review pass: {itemsCreated} fix item(s) created and implemented.
@@ -43,10 +42,6 @@ Loop completed for {feature}.
43
42
 
44
43
  These items asked a question the loop couldn't answer:
45
44
  - {id}: {title} — {reason}
46
-
47
- Resolve, then retry:
48
- - Answer the question(s) above, then re-run `/feature-forge:forge-5-loop {feature}`
49
- (add --retry-blocked to pick the set-aside items back up).
50
45
  ```
51
46
 
52
47
  **Some items blocked:**
@@ -59,10 +54,7 @@ Blocked items:
59
54
  - {id}: {title}
60
55
  - {id}: {title}
61
56
 
62
- Options:
63
- - Re-run with --retry-blocked to retry blocked items
64
- - Review blocked items manually: {bin} backlog show . {id} --backlog {backlogDir}
65
- - Continue to docs if blocking items are non-critical
57
+ Inspect one with: {bin} backlog show . {id} --backlog {backlogDir}
66
58
  ```
67
59
 
68
60
  **Some items deferred (runner gave up after retries — "false blocks"):**
@@ -70,8 +62,6 @@ Options:
70
62
  Loop completed for {feature}.
71
63
  Completed: {done}/{total}
72
64
  Deferred: {deferred} items (no signal after retries — likely just need another pass)
73
-
74
- Re-run `/feature-forge:forge-5-loop {feature}` to retry deferred items.
75
65
  ```
76
66
 
77
67
  **Some items still pending (iteration limit reached):**
@@ -80,6 +70,55 @@ Loop completed for {feature}.
80
70
  Completed: {done}/{total}
81
71
  Pending: {pending} items (iteration limit reached)
82
72
  Blocked: {blocked} items
83
-
84
- Re-run `/feature-forge:forge-5-loop {feature}` to continue with remaining items.
85
73
  ```
74
+
75
+ ## Selecting the one `LoopOutcome` (Step 7)
76
+
77
+ After Step 5's `state-complete`, select exactly **one** `LoopOutcome` from Step 4a's
78
+ authoritative final counts. Walk this ladder in order and stop at the first match:
79
+
80
+ 1. **`needs-human`** — `needsHuman > 0`. This wins even when blocked items also
81
+ exist: a decision only a human can make outranks work that merely could not
82
+ proceed.
83
+ 2. **`blocked`** — otherwise, genuine `blocked > 0`.
84
+ 3. **`deferred`** — otherwise, runner-deferred items exist (the "false blocks" the
85
+ runner gave up on after retries).
86
+ 4. **`partial`** — otherwise, `pending`/`in_progress` items remain because the
87
+ iteration limit was reached.
88
+ 5. **`complete`** — otherwise, and **only** when every item is `done`.
89
+
90
+ This is a priority order, not a set. A run reporting both a needs-human and a blocked
91
+ count renders both reports above and still exits `needs-human`.
92
+
93
+ **The runner's process exit code is not the outcome.** A loop runner that exits 0 has
94
+ reported only that its process finished; the final backlog state decides. A clean
95
+ exit 0 that still leaves pending items is `partial`, never `complete` — and
96
+ `complete` is legitimate only when the counts show every item `done`.
97
+
98
+ **Retrying the non-complete outcomes.** `partial` and `deferred` fence the loop
99
+ resume; `blocked` and `needs-human` fence the navigator. Whichever you land on, the
100
+ runner's own retry flags still apply to the next run — e.g. rauf's `--retry-blocked`
101
+ picks the set-aside blocked and deferred items back up at Step 2d. Mention that as
102
+ plain prose in the report if it helps; never as a second command block.
103
+
104
+ ## Operational failure before the counts are known
105
+
106
+ If the run cannot produce authoritative counts at all — the status/list command fails,
107
+ its output does not parse, the state directory is gone, or the process died in a way
108
+ that leaves the backlog unreadable — **do not pick an outcome and do not close the
109
+ stage.** There is nothing to select from, and guessing one would record a pipeline
110
+ position that never happened.
111
+
112
+ Instead: say plainly what failed, show the command's own output, and name the
113
+ recovery (re-run the status command, or re-run the loop once the runner is healthy).
114
+ Emit no `stage-exit` invocation and no terminal block. The stage stays `in-progress`
115
+ on disk, which is exactly the state the navigator can resume from.
116
+
117
+ ## Closing the stage
118
+
119
+ Pass the selected value to the single scripted stage exit in **Step 7** of
120
+ `forge-5-loop/SKILL.md` as `--outcome {LoopOutcome}`, and print its NEXT-STEPS block
121
+ verbatim as the absolute last output. Append nothing after it — no summary, no retry
122
+ line, no docs suggestion. For a completed epic member, the exit consumes the epic's
123
+ live status itself, so announce the rollup **before** invoking it and add no
124
+ hand-authored handoff of your own afterwards.
@@ -19,8 +19,10 @@ item.model > --model / options > project default > provider default
19
19
 
20
20
  So a backlog item's own `model` field overrides a `--model` flag passed to the
21
21
  run, which overrides the project's configured default, which overrides the
22
- runner/provider default. Pass `--model <model>` (optional flag below) to override
23
- the project default for the whole run.
22
+ runner/provider default. Pass `--model <model>` to override the project default for
23
+ the whole run; it is catalogued with the run's other optional flags under
24
+ `## Optional flags catalog (Step 2d, rauf)` in `references/agent-selection.md` —
25
+ read that file only when Step 2d's `loopRunner.agentArgument` capability gate is on.
24
26
 
25
27
  ## Run mode (Step 2d, rauf)
26
28
 
@@ -191,6 +191,44 @@ Pipeline state is written by the `state-*` verbs of `scripts/forge-session.py`
191
191
 
192
192
  If a `state-*` verb exits 2, surface the plain `Error:` line from stderr verbatim, do **not** proceed to the next step of the surrounding protocol, and do **not** hand-author the JSON as a workaround. The stage remains resumable because the entry stamp is already on disk — re-run the verb once the cause is fixed.
193
193
 
194
+ **The eight `state-*` verbs.** `state-enter` (Stage-Entry Guard), `state-artifact` (incremental artifact tracking), `state-complete` (Git Commit Protocol), `state-branch` (Branch Setup and Branch Reconciliation), `state-note` (the Immediate Downstream Note below, and the optional completion note at stage closure), `state-decision` (deferred decisions), `state-ecr` (epic change requests), and `state-verify` (one `forge-verify-*` verification transition — below). The `--epic` member requirement and the exit-2 failure protocol above apply to **every** one of them, `state-verify` included; no verify entry is ever hand-authored.
195
+
196
+ ### `state-verify` — verification results and provenance
197
+
198
+ `state-verify` writes exactly one `stages.forge-verify-{token}` entry — the verification result for the production stage named by `--stage` — plus the top-level `updatedAt`, and nothing else. `--stage` takes the **served production stage** (`forge-0-epic` through `forge-5-loop`; `forge-6-docs` has no verification token and is rejected). Add `--epic "{epic}"` when the feature is an epic member — required, per the member rule above. Result mode passes `--status` (`auto-verify-pending`, `passed`, `findings-reported`, `findings-applied`, or `skipped`) with whatever `--findings-file`, `--findings-count`, and `--verified-stage-version` that status requires; contradictory metadata is refused before any write. `passed` may additionally carry `--findings-file` + `--findings-count` together for an **advisory-only** report (`inconsistency`/`improvement` findings only, per forge-verify's severity floor) — the stage resolves without a fix round and the report stays attached:
199
+
200
+ **`auto-verify-pending` is not a skill-facing status.** It is written by `stage-exit`'s scheduling boundary, which records the debt automatically when auto-verify is effective for a stage. The value is accepted on this CLI so the entry stays inspectable and repairable, not so a skill can hand-schedule verification: no skill body and no reference passes it, and none should. Every other status in the list is the recorded *result* of a verification that ran (or was explicitly skipped); this one records that one was *owed*.
201
+
202
+ ```bash
203
+ R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
204
+ [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
205
+ python3 "$R/scripts/forge-session.py" state-verify \
206
+ --feature "{feature}" --stage "{served-production-stage}" --status "<status>" \
207
+ --specs-dir "{specsDir}"
208
+ ```
209
+
210
+ Provenance follows the same two-commit sequence as `state-complete`: the result transition above writes `commitHash: null`, Commit 1 records the findings document and the state, and a second `state-verify` call records the full 40-hex hash of Commit 1 and touches nothing else (never `--amend`; an abbreviated hash is refused rather than expanded). Add `--epic "{epic}"` for an epic member — required, per the member rule above:
211
+
212
+ ```bash
213
+ R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
214
+ [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
215
+ python3 "$R/scripts/forge-session.py" state-verify \
216
+ --feature "{feature}" --stage "{served-production-stage}" \
217
+ --commit-hash "$(git rev-parse HEAD)" --specs-dir "{specsDir}"
218
+ ```
219
+
220
+ Epic-scoped verification is the single exception to the member rule: with `--stage forge-0-epic`, `--feature` names the **epic** and `--epic` must be absent or exactly equal to it. That call writes `{specsDir}/{epic}/.epic-state.json` and never a member's `.pipeline-state.json`, and its freshness version is the epic manifest's `revision`, never a member's stage version:
221
+
222
+ ```bash
223
+ R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
224
+ [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
225
+ python3 "$R/scripts/forge-session.py" state-verify \
226
+ --feature "{epic}" --stage forge-0-epic --status "<status>" \
227
+ --specs-dir "{specsDir}"
228
+ ```
229
+
230
+ On exit 2 the verification result is **not** recorded: surface the `Error:` line verbatim, name the feature (and epic), and do not claim the verification was persisted or advance past it.
231
+
194
232
  ### Staleness Detection (Read-Time)
195
233
 
196
234
  When loading upstream artifacts as prerequisites, check `basedOnVersions` in the pipeline state for this stage. If any upstream stage's current version is newer than the version recorded in `basedOnVersions`, warn the user before proceeding:
@@ -199,6 +237,31 @@ When loading upstream artifacts as prerequisites, check `basedOnVersions` in the
199
237
 
200
238
  Frame the choice with its cost: re-running re-derives this stage from the current upstream (safest, but discards any hand-edits to this stage's artifacts); proceeding stale is faster but risks baking outdated assumptions into everything downstream. Recommend re-running unless the user knows the upstream change doesn't affect this stage.
201
239
 
240
+ ## Immediate Downstream Note (Parking Lot)
241
+
242
+ When an interview raises a concern that belongs to a *later stage of this same feature*, acknowledge it and persist it **immediately, at the moment it is raised** — not at stage closure — by running `state-note` with a concise one-line statement of the concern. Add `--epic "{epic}"` when this feature is an epic member — required, per the Pipeline State Protocol above; omitting it for a member is an error and must never be allowed to fall back to a same-named flat feature.
243
+
244
+ ```bash
245
+ R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
246
+ [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
247
+ python3 "$R/scripts/forge-session.py" state-note \
248
+ --feature "{feature}" --note "<concise downstream concern>" \
249
+ --specs-dir "{specsDir}"
250
+ ```
251
+
252
+ `state-note` **overwrites** the single top-level `notes` string — it does not append. To preserve an earlier note, read the current `notes` value out of the feature's `.pipeline-state.json` first and pass one combined concise string in a single `--note`; never edit or round-trip the JSON by hand. This interview-time call is separate from the optional completion note offered at stage closure and must not be deferred until then — a session that ends before closure would otherwise lose the concern entirely.
253
+
254
+ On `UsageError`/exit 2, surface the `Error:` line verbatim together with the named feature (and epic) and the recovery instruction, and **stop claiming the concern was recorded** — it was not. Epic *decomposition* changes are not notes: they go through `state-ecr` into `epicChangeRequests`, never into `notes`.
255
+
256
+ ## Verify Capability
257
+
258
+ Skills that close a stage pass `--verify-capability interactive|manual` to `stage-exit`. The full determination rule, the Standard Verify Gate, and the recovery path live in `references/stage-exit-protocol.md`; the two facts that are most often gotten wrong:
259
+
260
+ - **Dispatch capability is *permitted* dispatch, not a listed tool.** The question is "**may I dispatch `forge-verifier` right now**", not "is a subagent-dispatch tool in my tool surface". A session can carry a standing host instruction against dispatching subagents unless the user asked; such instructions are injected by the harness, sit outside this project's control, and outrank skill prose. Classify on permission, up front.
261
+ - **A consent requirement is `interactive`, not `manual`.** When dispatch is barred only *unless the user asked* and a question mechanism is available, pass `interactive`: the gate's own affirmative choice supplies the missing user request. Pass `manual` only when there is **no** question mechanism **and** **no** permitted dispatch.
262
+
263
+ A bar on unsolicited dispatch is never grounds to skip verification, and never grounds to fence the production successor while verification is unresolved. On the `runInStageVerify: true` path the emitted `verifyGate` stays `none`: reuse the Standard Verify Gate block for consent with **choice 2 omitted** (auto-verify is already effective, so "enable auto-verify going forward" is a no-op), leaving exactly two choices: *Verify now* (recommended) and *Skip for now*. The clean-room `forge-verifier` is **dispatched on the affirmative choice**, never merely printed for the user to run later; *Skip for now* is persisted as an explicit `skipped` before any advancing block.
264
+
202
265
  ## Branch Setup
203
266
 
204
267
  Invoke this block at the **very start** of a pipeline entry point — `forge-1-prd` (standalone feature) and `forge-0-epic` (epic) — **before** any directory resolution or interview, so the rest of the run lands on the intended branch. `{label}` is the feature name (forge-1-prd) or epic name (forge-0-epic); `{scope}` is `feature` or `epic` correspondingly.