@garygentry/feature-forge 0.2.12 → 0.2.14

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 (393) hide show
  1. package/adapters/GENERATION-REPORT.md +1 -0
  2. package/adapters/claude/.feature-forge-bundle.json +1 -1
  3. package/adapters/claude/references/epic-manifest-schema.json +5 -0
  4. package/adapters/claude/references/forge-config-schema.json +5 -0
  5. package/adapters/claude/references/shared-conventions.md +12 -0
  6. package/adapters/claude/references/stacks/_generic.md +21 -0
  7. package/adapters/claude/references/stacks/go.md +19 -0
  8. package/adapters/claude/references/stacks/python.md +21 -0
  9. package/adapters/claude/references/stacks/rust.md +19 -0
  10. package/adapters/claude/references/stacks/typescript.md +23 -0
  11. package/adapters/claude/scripts/epic-manifest.py +284 -5
  12. package/adapters/claude/scripts/forge-bootstrap.py +1 -0
  13. package/adapters/claude/scripts/forge-init.sh +2 -0
  14. package/adapters/claude/scripts/forge-root.sh +55 -11
  15. package/adapters/claude/scripts/forge-session.py +38 -1
  16. package/adapters/claude/skills/forge/SKILL.md +9 -1
  17. package/adapters/claude/skills/forge/references/pipeline-state-schema.json +191 -0
  18. package/adapters/claude/skills/forge/references/process-overview.md +143 -0
  19. package/adapters/claude/skills/forge/references/shared-conventions.md +295 -0
  20. package/adapters/claude/skills/forge/references/stage-exit-protocol.md +258 -0
  21. package/adapters/claude/skills/forge-0-epic/references/epic-manifest-subcommands.md +11 -0
  22. package/adapters/claude/skills/forge-0-epic/references/pipeline-state-schema.json +191 -0
  23. package/adapters/claude/skills/forge-0-epic/references/portable-root.md +71 -0
  24. package/adapters/claude/skills/forge-0-epic/references/shared-conventions.md +295 -0
  25. package/adapters/claude/skills/forge-0-epic/references/stage-exit-protocol.md +258 -0
  26. package/adapters/claude/skills/forge-1-prd/SKILL.md +2 -0
  27. package/adapters/claude/skills/forge-1-prd/references/pipeline-state-schema.json +191 -0
  28. package/adapters/claude/skills/forge-1-prd/references/shared-conventions.md +295 -0
  29. package/adapters/claude/skills/forge-1-prd/references/stage-exit-protocol.md +258 -0
  30. package/adapters/claude/skills/forge-2-tech/SKILL.md +3 -1
  31. package/adapters/claude/skills/forge-2-tech/references/pipeline-state-schema.json +191 -0
  32. package/adapters/claude/skills/forge-2-tech/references/shared-conventions.md +295 -0
  33. package/adapters/claude/skills/forge-2-tech/references/stack-resolution.md +54 -0
  34. package/adapters/claude/skills/forge-2-tech/references/stacks/_generic.md +111 -0
  35. package/adapters/claude/skills/forge-2-tech/references/stacks/go.md +157 -0
  36. package/adapters/claude/skills/forge-2-tech/references/stacks/python.md +184 -0
  37. package/adapters/claude/skills/forge-2-tech/references/stacks/rust.md +170 -0
  38. package/adapters/claude/skills/forge-2-tech/references/stacks/typescript.md +134 -0
  39. package/adapters/claude/skills/forge-2-tech/references/stage-exit-protocol.md +258 -0
  40. package/adapters/claude/skills/forge-3-specs/SKILL.md +2 -0
  41. package/adapters/claude/skills/forge-3-specs/references/pipeline-state-schema.json +191 -0
  42. package/adapters/claude/skills/forge-3-specs/references/shared-conventions.md +295 -0
  43. package/adapters/claude/skills/forge-3-specs/references/stacks/_generic.md +111 -0
  44. package/adapters/claude/skills/forge-3-specs/references/stacks/go.md +157 -0
  45. package/adapters/claude/skills/forge-3-specs/references/stacks/python.md +184 -0
  46. package/adapters/claude/skills/forge-3-specs/references/stacks/rust.md +170 -0
  47. package/adapters/claude/skills/forge-3-specs/references/stacks/typescript.md +134 -0
  48. package/adapters/claude/skills/forge-3-specs/references/stage-exit-protocol.md +258 -0
  49. package/adapters/claude/skills/forge-4-backlog/SKILL.md +5 -0
  50. package/adapters/claude/skills/forge-4-backlog/references/forge-config-schema.json +236 -0
  51. package/adapters/claude/skills/forge-4-backlog/references/pipeline-state-schema.json +191 -0
  52. package/adapters/claude/skills/forge-4-backlog/references/shared-conventions.md +295 -0
  53. package/adapters/claude/skills/forge-4-backlog/references/stage-exit-protocol.md +258 -0
  54. package/adapters/claude/skills/forge-5-loop/SKILL.md +7 -9
  55. package/adapters/claude/skills/forge-5-loop/references/forge-config-schema.json +236 -0
  56. package/adapters/claude/skills/forge-5-loop/references/ralph-loop-contract.md +221 -0
  57. package/adapters/claude/skills/forge-5-loop/references/runner-contract.md +41 -0
  58. package/adapters/claude/skills/forge-5-loop/references/shared-conventions.md +295 -0
  59. package/adapters/claude/skills/forge-5-loop/references/stage-exit-protocol.md +258 -0
  60. package/adapters/claude/skills/forge-6-docs/SKILL.md +4 -1
  61. package/adapters/claude/skills/forge-6-docs/references/pipeline-state-schema.json +191 -0
  62. package/adapters/claude/skills/forge-6-docs/references/shared-conventions.md +295 -0
  63. package/adapters/claude/skills/forge-fix/references/shared-conventions.md +295 -0
  64. package/adapters/claude/skills/forge-fix/references/stage-exit-protocol.md +258 -0
  65. package/adapters/claude/skills/forge-guide/references/forge-config-schema.json +236 -0
  66. package/adapters/claude/skills/forge-guide/references/process-overview.md +143 -0
  67. package/adapters/claude/skills/forge-guide/references/ralph-loop-contract.md +221 -0
  68. package/adapters/claude/skills/forge-guide/references/shared-conventions.md +295 -0
  69. package/adapters/claude/skills/forge-guide/references/stack-resolution.md +54 -0
  70. package/adapters/claude/skills/forge-guide/references/stacks/_generic.md +111 -0
  71. package/adapters/claude/skills/forge-guide/references/stacks/go.md +157 -0
  72. package/adapters/claude/skills/forge-guide/references/stacks/python.md +184 -0
  73. package/adapters/claude/skills/forge-guide/references/stacks/rust.md +170 -0
  74. package/adapters/claude/skills/forge-guide/references/stacks/typescript.md +134 -0
  75. package/adapters/claude/skills/forge-init/SKILL.md +1 -0
  76. package/adapters/claude/skills/forge-verify/SKILL.md +5 -4
  77. package/adapters/claude/skills/forge-verify/references/pipeline-state-schema.json +191 -0
  78. package/adapters/claude/skills/forge-verify/references/shared-conventions.md +295 -0
  79. package/adapters/claude/skills/forge-verify/references/verification-checklists.md +88 -2
  80. package/adapters/codex/.feature-forge-bundle.json +1 -1
  81. package/adapters/codex/references/epic-manifest-schema.json +5 -0
  82. package/adapters/codex/references/forge-config-schema.json +5 -0
  83. package/adapters/codex/references/shared-conventions.md +12 -0
  84. package/adapters/codex/references/stacks/_generic.md +21 -0
  85. package/adapters/codex/references/stacks/go.md +19 -0
  86. package/adapters/codex/references/stacks/python.md +21 -0
  87. package/adapters/codex/references/stacks/rust.md +19 -0
  88. package/adapters/codex/references/stacks/typescript.md +23 -0
  89. package/adapters/codex/scripts/epic-manifest.py +284 -5
  90. package/adapters/codex/scripts/forge-bootstrap.py +1 -0
  91. package/adapters/codex/scripts/forge-init.sh +2 -0
  92. package/adapters/codex/scripts/forge-root.sh +55 -11
  93. package/adapters/codex/scripts/forge-session.py +38 -1
  94. package/adapters/codex/skills/forge/SKILL.md +9 -1
  95. package/adapters/codex/skills/forge/references/pipeline-state-schema.json +191 -0
  96. package/adapters/codex/skills/forge/references/process-overview.md +143 -0
  97. package/adapters/codex/skills/forge/references/shared-conventions.md +295 -0
  98. package/adapters/codex/skills/forge/references/stage-exit-protocol.md +258 -0
  99. package/adapters/codex/skills/forge-0-epic/references/epic-manifest-subcommands.md +11 -0
  100. package/adapters/codex/skills/forge-0-epic/references/pipeline-state-schema.json +191 -0
  101. package/adapters/codex/skills/forge-0-epic/references/portable-root.md +71 -0
  102. package/adapters/codex/skills/forge-0-epic/references/shared-conventions.md +295 -0
  103. package/adapters/codex/skills/forge-0-epic/references/stage-exit-protocol.md +258 -0
  104. package/adapters/codex/skills/forge-1-prd/SKILL.md +2 -0
  105. package/adapters/codex/skills/forge-1-prd/references/pipeline-state-schema.json +191 -0
  106. package/adapters/codex/skills/forge-1-prd/references/shared-conventions.md +295 -0
  107. package/adapters/codex/skills/forge-1-prd/references/stage-exit-protocol.md +258 -0
  108. package/adapters/codex/skills/forge-2-tech/SKILL.md +3 -1
  109. package/adapters/codex/skills/forge-2-tech/references/pipeline-state-schema.json +191 -0
  110. package/adapters/codex/skills/forge-2-tech/references/shared-conventions.md +295 -0
  111. package/adapters/codex/skills/forge-2-tech/references/stack-resolution.md +54 -0
  112. package/adapters/codex/skills/forge-2-tech/references/stacks/_generic.md +111 -0
  113. package/adapters/codex/skills/forge-2-tech/references/stacks/go.md +157 -0
  114. package/adapters/codex/skills/forge-2-tech/references/stacks/python.md +184 -0
  115. package/adapters/codex/skills/forge-2-tech/references/stacks/rust.md +170 -0
  116. package/adapters/codex/skills/forge-2-tech/references/stacks/typescript.md +134 -0
  117. package/adapters/codex/skills/forge-2-tech/references/stage-exit-protocol.md +258 -0
  118. package/adapters/codex/skills/forge-3-specs/SKILL.md +2 -0
  119. package/adapters/codex/skills/forge-3-specs/references/pipeline-state-schema.json +191 -0
  120. package/adapters/codex/skills/forge-3-specs/references/shared-conventions.md +295 -0
  121. package/adapters/codex/skills/forge-3-specs/references/stacks/_generic.md +111 -0
  122. package/adapters/codex/skills/forge-3-specs/references/stacks/go.md +157 -0
  123. package/adapters/codex/skills/forge-3-specs/references/stacks/python.md +184 -0
  124. package/adapters/codex/skills/forge-3-specs/references/stacks/rust.md +170 -0
  125. package/adapters/codex/skills/forge-3-specs/references/stacks/typescript.md +134 -0
  126. package/adapters/codex/skills/forge-3-specs/references/stage-exit-protocol.md +258 -0
  127. package/adapters/codex/skills/forge-4-backlog/SKILL.md +5 -0
  128. package/adapters/codex/skills/forge-4-backlog/references/forge-config-schema.json +236 -0
  129. package/adapters/codex/skills/forge-4-backlog/references/pipeline-state-schema.json +191 -0
  130. package/adapters/codex/skills/forge-4-backlog/references/shared-conventions.md +295 -0
  131. package/adapters/codex/skills/forge-4-backlog/references/stage-exit-protocol.md +258 -0
  132. package/adapters/codex/skills/forge-5-loop/SKILL.md +7 -9
  133. package/adapters/codex/skills/forge-5-loop/references/forge-config-schema.json +236 -0
  134. package/adapters/codex/skills/forge-5-loop/references/ralph-loop-contract.md +221 -0
  135. package/adapters/codex/skills/forge-5-loop/references/runner-contract.md +41 -0
  136. package/adapters/codex/skills/forge-5-loop/references/shared-conventions.md +295 -0
  137. package/adapters/codex/skills/forge-5-loop/references/stage-exit-protocol.md +258 -0
  138. package/adapters/codex/skills/forge-6-docs/SKILL.md +4 -1
  139. package/adapters/codex/skills/forge-6-docs/references/pipeline-state-schema.json +191 -0
  140. package/adapters/codex/skills/forge-6-docs/references/shared-conventions.md +295 -0
  141. package/adapters/codex/skills/forge-fix/references/shared-conventions.md +295 -0
  142. package/adapters/codex/skills/forge-fix/references/stage-exit-protocol.md +258 -0
  143. package/adapters/codex/skills/forge-guide/references/forge-config-schema.json +236 -0
  144. package/adapters/codex/skills/forge-guide/references/process-overview.md +143 -0
  145. package/adapters/codex/skills/forge-guide/references/ralph-loop-contract.md +221 -0
  146. package/adapters/codex/skills/forge-guide/references/shared-conventions.md +295 -0
  147. package/adapters/codex/skills/forge-guide/references/stack-resolution.md +54 -0
  148. package/adapters/codex/skills/forge-guide/references/stacks/_generic.md +111 -0
  149. package/adapters/codex/skills/forge-guide/references/stacks/go.md +157 -0
  150. package/adapters/codex/skills/forge-guide/references/stacks/python.md +184 -0
  151. package/adapters/codex/skills/forge-guide/references/stacks/rust.md +170 -0
  152. package/adapters/codex/skills/forge-guide/references/stacks/typescript.md +134 -0
  153. package/adapters/codex/skills/forge-init/SKILL.md +1 -0
  154. package/adapters/codex/skills/forge-verify/SKILL.md +5 -4
  155. package/adapters/codex/skills/forge-verify/references/pipeline-state-schema.json +191 -0
  156. package/adapters/codex/skills/forge-verify/references/shared-conventions.md +295 -0
  157. package/adapters/codex/skills/forge-verify/references/verification-checklists.md +88 -2
  158. package/adapters/copilot/.feature-forge-bundle.json +1 -1
  159. package/adapters/copilot/references/epic-manifest-schema.json +5 -0
  160. package/adapters/copilot/references/forge-config-schema.json +5 -0
  161. package/adapters/copilot/references/shared-conventions.md +12 -0
  162. package/adapters/copilot/references/stacks/_generic.md +21 -0
  163. package/adapters/copilot/references/stacks/go.md +19 -0
  164. package/adapters/copilot/references/stacks/python.md +21 -0
  165. package/adapters/copilot/references/stacks/rust.md +19 -0
  166. package/adapters/copilot/references/stacks/typescript.md +23 -0
  167. package/adapters/copilot/scripts/epic-manifest.py +284 -5
  168. package/adapters/copilot/scripts/forge-bootstrap.py +1 -0
  169. package/adapters/copilot/scripts/forge-init.sh +2 -0
  170. package/adapters/copilot/scripts/forge-root.sh +55 -11
  171. package/adapters/copilot/scripts/forge-session.py +38 -1
  172. package/adapters/copilot/skills/forge/forge.md +9 -1
  173. package/adapters/copilot/skills/forge/references/pipeline-state-schema.json +191 -0
  174. package/adapters/copilot/skills/forge/references/process-overview.md +143 -0
  175. package/adapters/copilot/skills/forge/references/shared-conventions.md +295 -0
  176. package/adapters/copilot/skills/forge/references/stage-exit-protocol.md +258 -0
  177. package/adapters/copilot/skills/forge-0-epic/references/epic-manifest-subcommands.md +11 -0
  178. package/adapters/copilot/skills/forge-0-epic/references/pipeline-state-schema.json +191 -0
  179. package/adapters/copilot/skills/forge-0-epic/references/portable-root.md +71 -0
  180. package/adapters/copilot/skills/forge-0-epic/references/shared-conventions.md +295 -0
  181. package/adapters/copilot/skills/forge-0-epic/references/stage-exit-protocol.md +258 -0
  182. package/adapters/copilot/skills/forge-1-prd/forge-1-prd.md +2 -0
  183. package/adapters/copilot/skills/forge-1-prd/references/pipeline-state-schema.json +191 -0
  184. package/adapters/copilot/skills/forge-1-prd/references/shared-conventions.md +295 -0
  185. package/adapters/copilot/skills/forge-1-prd/references/stage-exit-protocol.md +258 -0
  186. package/adapters/copilot/skills/forge-2-tech/forge-2-tech.md +3 -1
  187. package/adapters/copilot/skills/forge-2-tech/references/pipeline-state-schema.json +191 -0
  188. package/adapters/copilot/skills/forge-2-tech/references/shared-conventions.md +295 -0
  189. package/adapters/copilot/skills/forge-2-tech/references/stack-resolution.md +54 -0
  190. package/adapters/copilot/skills/forge-2-tech/references/stacks/_generic.md +111 -0
  191. package/adapters/copilot/skills/forge-2-tech/references/stacks/go.md +157 -0
  192. package/adapters/copilot/skills/forge-2-tech/references/stacks/python.md +184 -0
  193. package/adapters/copilot/skills/forge-2-tech/references/stacks/rust.md +170 -0
  194. package/adapters/copilot/skills/forge-2-tech/references/stacks/typescript.md +134 -0
  195. package/adapters/copilot/skills/forge-2-tech/references/stage-exit-protocol.md +258 -0
  196. package/adapters/copilot/skills/forge-3-specs/forge-3-specs.md +2 -0
  197. package/adapters/copilot/skills/forge-3-specs/references/pipeline-state-schema.json +191 -0
  198. package/adapters/copilot/skills/forge-3-specs/references/shared-conventions.md +295 -0
  199. package/adapters/copilot/skills/forge-3-specs/references/stacks/_generic.md +111 -0
  200. package/adapters/copilot/skills/forge-3-specs/references/stacks/go.md +157 -0
  201. package/adapters/copilot/skills/forge-3-specs/references/stacks/python.md +184 -0
  202. package/adapters/copilot/skills/forge-3-specs/references/stacks/rust.md +170 -0
  203. package/adapters/copilot/skills/forge-3-specs/references/stacks/typescript.md +134 -0
  204. package/adapters/copilot/skills/forge-3-specs/references/stage-exit-protocol.md +258 -0
  205. package/adapters/copilot/skills/forge-4-backlog/forge-4-backlog.md +5 -0
  206. package/adapters/copilot/skills/forge-4-backlog/references/forge-config-schema.json +236 -0
  207. package/adapters/copilot/skills/forge-4-backlog/references/pipeline-state-schema.json +191 -0
  208. package/adapters/copilot/skills/forge-4-backlog/references/shared-conventions.md +295 -0
  209. package/adapters/copilot/skills/forge-4-backlog/references/stage-exit-protocol.md +258 -0
  210. package/adapters/copilot/skills/forge-5-loop/forge-5-loop.md +7 -9
  211. package/adapters/copilot/skills/forge-5-loop/references/forge-config-schema.json +236 -0
  212. package/adapters/copilot/skills/forge-5-loop/references/ralph-loop-contract.md +221 -0
  213. package/adapters/copilot/skills/forge-5-loop/references/runner-contract.md +41 -0
  214. package/adapters/copilot/skills/forge-5-loop/references/shared-conventions.md +295 -0
  215. package/adapters/copilot/skills/forge-5-loop/references/stage-exit-protocol.md +258 -0
  216. package/adapters/copilot/skills/forge-6-docs/forge-6-docs.md +4 -1
  217. package/adapters/copilot/skills/forge-6-docs/references/pipeline-state-schema.json +191 -0
  218. package/adapters/copilot/skills/forge-6-docs/references/shared-conventions.md +295 -0
  219. package/adapters/copilot/skills/forge-fix/references/shared-conventions.md +295 -0
  220. package/adapters/copilot/skills/forge-fix/references/stage-exit-protocol.md +258 -0
  221. package/adapters/copilot/skills/forge-guide/references/forge-config-schema.json +236 -0
  222. package/adapters/copilot/skills/forge-guide/references/process-overview.md +143 -0
  223. package/adapters/copilot/skills/forge-guide/references/ralph-loop-contract.md +221 -0
  224. package/adapters/copilot/skills/forge-guide/references/shared-conventions.md +295 -0
  225. package/adapters/copilot/skills/forge-guide/references/stack-resolution.md +54 -0
  226. package/adapters/copilot/skills/forge-guide/references/stacks/_generic.md +111 -0
  227. package/adapters/copilot/skills/forge-guide/references/stacks/go.md +157 -0
  228. package/adapters/copilot/skills/forge-guide/references/stacks/python.md +184 -0
  229. package/adapters/copilot/skills/forge-guide/references/stacks/rust.md +170 -0
  230. package/adapters/copilot/skills/forge-guide/references/stacks/typescript.md +134 -0
  231. package/adapters/copilot/skills/forge-init/forge-init.md +1 -0
  232. package/adapters/copilot/skills/forge-verify/forge-verify.md +5 -4
  233. package/adapters/copilot/skills/forge-verify/references/pipeline-state-schema.json +191 -0
  234. package/adapters/copilot/skills/forge-verify/references/shared-conventions.md +295 -0
  235. package/adapters/copilot/skills/forge-verify/references/verification-checklists.md +88 -2
  236. package/adapters/cursor/.feature-forge-bundle.json +1 -1
  237. package/adapters/cursor/references/epic-manifest-schema.json +5 -0
  238. package/adapters/cursor/references/forge-config-schema.json +5 -0
  239. package/adapters/cursor/references/shared-conventions.md +12 -0
  240. package/adapters/cursor/references/stacks/_generic.md +21 -0
  241. package/adapters/cursor/references/stacks/go.md +19 -0
  242. package/adapters/cursor/references/stacks/python.md +21 -0
  243. package/adapters/cursor/references/stacks/rust.md +19 -0
  244. package/adapters/cursor/references/stacks/typescript.md +23 -0
  245. package/adapters/cursor/scripts/epic-manifest.py +284 -5
  246. package/adapters/cursor/scripts/forge-bootstrap.py +1 -0
  247. package/adapters/cursor/scripts/forge-init.sh +2 -0
  248. package/adapters/cursor/scripts/forge-root.sh +55 -11
  249. package/adapters/cursor/scripts/forge-session.py +38 -1
  250. package/adapters/cursor/skills/forge/forge.mdc +9 -1
  251. package/adapters/cursor/skills/forge/references/pipeline-state-schema.json +191 -0
  252. package/adapters/cursor/skills/forge/references/process-overview.md +143 -0
  253. package/adapters/cursor/skills/forge/references/shared-conventions.md +295 -0
  254. package/adapters/cursor/skills/forge/references/stage-exit-protocol.md +258 -0
  255. package/adapters/cursor/skills/forge-0-epic/references/epic-manifest-subcommands.md +11 -0
  256. package/adapters/cursor/skills/forge-0-epic/references/pipeline-state-schema.json +191 -0
  257. package/adapters/cursor/skills/forge-0-epic/references/portable-root.md +71 -0
  258. package/adapters/cursor/skills/forge-0-epic/references/shared-conventions.md +295 -0
  259. package/adapters/cursor/skills/forge-0-epic/references/stage-exit-protocol.md +258 -0
  260. package/adapters/cursor/skills/forge-1-prd/forge-1-prd.mdc +2 -0
  261. package/adapters/cursor/skills/forge-1-prd/references/pipeline-state-schema.json +191 -0
  262. package/adapters/cursor/skills/forge-1-prd/references/shared-conventions.md +295 -0
  263. package/adapters/cursor/skills/forge-1-prd/references/stage-exit-protocol.md +258 -0
  264. package/adapters/cursor/skills/forge-2-tech/forge-2-tech.mdc +3 -1
  265. package/adapters/cursor/skills/forge-2-tech/references/pipeline-state-schema.json +191 -0
  266. package/adapters/cursor/skills/forge-2-tech/references/shared-conventions.md +295 -0
  267. package/adapters/cursor/skills/forge-2-tech/references/stack-resolution.md +54 -0
  268. package/adapters/cursor/skills/forge-2-tech/references/stacks/_generic.md +111 -0
  269. package/adapters/cursor/skills/forge-2-tech/references/stacks/go.md +157 -0
  270. package/adapters/cursor/skills/forge-2-tech/references/stacks/python.md +184 -0
  271. package/adapters/cursor/skills/forge-2-tech/references/stacks/rust.md +170 -0
  272. package/adapters/cursor/skills/forge-2-tech/references/stacks/typescript.md +134 -0
  273. package/adapters/cursor/skills/forge-2-tech/references/stage-exit-protocol.md +258 -0
  274. package/adapters/cursor/skills/forge-3-specs/forge-3-specs.mdc +2 -0
  275. package/adapters/cursor/skills/forge-3-specs/references/pipeline-state-schema.json +191 -0
  276. package/adapters/cursor/skills/forge-3-specs/references/shared-conventions.md +295 -0
  277. package/adapters/cursor/skills/forge-3-specs/references/stacks/_generic.md +111 -0
  278. package/adapters/cursor/skills/forge-3-specs/references/stacks/go.md +157 -0
  279. package/adapters/cursor/skills/forge-3-specs/references/stacks/python.md +184 -0
  280. package/adapters/cursor/skills/forge-3-specs/references/stacks/rust.md +170 -0
  281. package/adapters/cursor/skills/forge-3-specs/references/stacks/typescript.md +134 -0
  282. package/adapters/cursor/skills/forge-3-specs/references/stage-exit-protocol.md +258 -0
  283. package/adapters/cursor/skills/forge-4-backlog/forge-4-backlog.mdc +5 -0
  284. package/adapters/cursor/skills/forge-4-backlog/references/forge-config-schema.json +236 -0
  285. package/adapters/cursor/skills/forge-4-backlog/references/pipeline-state-schema.json +191 -0
  286. package/adapters/cursor/skills/forge-4-backlog/references/shared-conventions.md +295 -0
  287. package/adapters/cursor/skills/forge-4-backlog/references/stage-exit-protocol.md +258 -0
  288. package/adapters/cursor/skills/forge-5-loop/forge-5-loop.mdc +7 -9
  289. package/adapters/cursor/skills/forge-5-loop/references/forge-config-schema.json +236 -0
  290. package/adapters/cursor/skills/forge-5-loop/references/ralph-loop-contract.md +221 -0
  291. package/adapters/cursor/skills/forge-5-loop/references/runner-contract.md +41 -0
  292. package/adapters/cursor/skills/forge-5-loop/references/shared-conventions.md +295 -0
  293. package/adapters/cursor/skills/forge-5-loop/references/stage-exit-protocol.md +258 -0
  294. package/adapters/cursor/skills/forge-6-docs/forge-6-docs.mdc +4 -1
  295. package/adapters/cursor/skills/forge-6-docs/references/pipeline-state-schema.json +191 -0
  296. package/adapters/cursor/skills/forge-6-docs/references/shared-conventions.md +295 -0
  297. package/adapters/cursor/skills/forge-fix/references/shared-conventions.md +295 -0
  298. package/adapters/cursor/skills/forge-fix/references/stage-exit-protocol.md +258 -0
  299. package/adapters/cursor/skills/forge-guide/references/forge-config-schema.json +236 -0
  300. package/adapters/cursor/skills/forge-guide/references/process-overview.md +143 -0
  301. package/adapters/cursor/skills/forge-guide/references/ralph-loop-contract.md +221 -0
  302. package/adapters/cursor/skills/forge-guide/references/shared-conventions.md +295 -0
  303. package/adapters/cursor/skills/forge-guide/references/stack-resolution.md +54 -0
  304. package/adapters/cursor/skills/forge-guide/references/stacks/_generic.md +111 -0
  305. package/adapters/cursor/skills/forge-guide/references/stacks/go.md +157 -0
  306. package/adapters/cursor/skills/forge-guide/references/stacks/python.md +184 -0
  307. package/adapters/cursor/skills/forge-guide/references/stacks/rust.md +170 -0
  308. package/adapters/cursor/skills/forge-guide/references/stacks/typescript.md +134 -0
  309. package/adapters/cursor/skills/forge-init/forge-init.mdc +1 -0
  310. package/adapters/cursor/skills/forge-verify/forge-verify.mdc +5 -4
  311. package/adapters/cursor/skills/forge-verify/references/pipeline-state-schema.json +191 -0
  312. package/adapters/cursor/skills/forge-verify/references/shared-conventions.md +295 -0
  313. package/adapters/cursor/skills/forge-verify/references/verification-checklists.md +88 -2
  314. package/adapters/gemini/.feature-forge-bundle.json +1 -1
  315. package/adapters/gemini/gemini-extension.json +1 -1
  316. package/adapters/gemini/references/epic-manifest-schema.json +5 -0
  317. package/adapters/gemini/references/forge-config-schema.json +5 -0
  318. package/adapters/gemini/references/shared-conventions.md +12 -0
  319. package/adapters/gemini/references/stacks/_generic.md +21 -0
  320. package/adapters/gemini/references/stacks/go.md +19 -0
  321. package/adapters/gemini/references/stacks/python.md +21 -0
  322. package/adapters/gemini/references/stacks/rust.md +19 -0
  323. package/adapters/gemini/references/stacks/typescript.md +23 -0
  324. package/adapters/gemini/scripts/epic-manifest.py +284 -5
  325. package/adapters/gemini/scripts/forge-bootstrap.py +1 -0
  326. package/adapters/gemini/scripts/forge-init.sh +2 -0
  327. package/adapters/gemini/scripts/forge-root.sh +55 -11
  328. package/adapters/gemini/scripts/forge-session.py +38 -1
  329. package/adapters/gemini/skills/forge/forge.md +9 -1
  330. package/adapters/gemini/skills/forge/references/pipeline-state-schema.json +191 -0
  331. package/adapters/gemini/skills/forge/references/process-overview.md +143 -0
  332. package/adapters/gemini/skills/forge/references/shared-conventions.md +295 -0
  333. package/adapters/gemini/skills/forge/references/stage-exit-protocol.md +258 -0
  334. package/adapters/gemini/skills/forge-0-epic/references/epic-manifest-subcommands.md +11 -0
  335. package/adapters/gemini/skills/forge-0-epic/references/pipeline-state-schema.json +191 -0
  336. package/adapters/gemini/skills/forge-0-epic/references/portable-root.md +71 -0
  337. package/adapters/gemini/skills/forge-0-epic/references/shared-conventions.md +295 -0
  338. package/adapters/gemini/skills/forge-0-epic/references/stage-exit-protocol.md +258 -0
  339. package/adapters/gemini/skills/forge-1-prd/forge-1-prd.md +2 -0
  340. package/adapters/gemini/skills/forge-1-prd/references/pipeline-state-schema.json +191 -0
  341. package/adapters/gemini/skills/forge-1-prd/references/shared-conventions.md +295 -0
  342. package/adapters/gemini/skills/forge-1-prd/references/stage-exit-protocol.md +258 -0
  343. package/adapters/gemini/skills/forge-2-tech/forge-2-tech.md +3 -1
  344. package/adapters/gemini/skills/forge-2-tech/references/pipeline-state-schema.json +191 -0
  345. package/adapters/gemini/skills/forge-2-tech/references/shared-conventions.md +295 -0
  346. package/adapters/gemini/skills/forge-2-tech/references/stack-resolution.md +54 -0
  347. package/adapters/gemini/skills/forge-2-tech/references/stacks/_generic.md +111 -0
  348. package/adapters/gemini/skills/forge-2-tech/references/stacks/go.md +157 -0
  349. package/adapters/gemini/skills/forge-2-tech/references/stacks/python.md +184 -0
  350. package/adapters/gemini/skills/forge-2-tech/references/stacks/rust.md +170 -0
  351. package/adapters/gemini/skills/forge-2-tech/references/stacks/typescript.md +134 -0
  352. package/adapters/gemini/skills/forge-2-tech/references/stage-exit-protocol.md +258 -0
  353. package/adapters/gemini/skills/forge-3-specs/forge-3-specs.md +2 -0
  354. package/adapters/gemini/skills/forge-3-specs/references/pipeline-state-schema.json +191 -0
  355. package/adapters/gemini/skills/forge-3-specs/references/shared-conventions.md +295 -0
  356. package/adapters/gemini/skills/forge-3-specs/references/stacks/_generic.md +111 -0
  357. package/adapters/gemini/skills/forge-3-specs/references/stacks/go.md +157 -0
  358. package/adapters/gemini/skills/forge-3-specs/references/stacks/python.md +184 -0
  359. package/adapters/gemini/skills/forge-3-specs/references/stacks/rust.md +170 -0
  360. package/adapters/gemini/skills/forge-3-specs/references/stacks/typescript.md +134 -0
  361. package/adapters/gemini/skills/forge-3-specs/references/stage-exit-protocol.md +258 -0
  362. package/adapters/gemini/skills/forge-4-backlog/forge-4-backlog.md +5 -0
  363. package/adapters/gemini/skills/forge-4-backlog/references/forge-config-schema.json +236 -0
  364. package/adapters/gemini/skills/forge-4-backlog/references/pipeline-state-schema.json +191 -0
  365. package/adapters/gemini/skills/forge-4-backlog/references/shared-conventions.md +295 -0
  366. package/adapters/gemini/skills/forge-4-backlog/references/stage-exit-protocol.md +258 -0
  367. package/adapters/gemini/skills/forge-5-loop/forge-5-loop.md +7 -9
  368. package/adapters/gemini/skills/forge-5-loop/references/forge-config-schema.json +236 -0
  369. package/adapters/gemini/skills/forge-5-loop/references/ralph-loop-contract.md +221 -0
  370. package/adapters/gemini/skills/forge-5-loop/references/runner-contract.md +41 -0
  371. package/adapters/gemini/skills/forge-5-loop/references/shared-conventions.md +295 -0
  372. package/adapters/gemini/skills/forge-5-loop/references/stage-exit-protocol.md +258 -0
  373. package/adapters/gemini/skills/forge-6-docs/forge-6-docs.md +4 -1
  374. package/adapters/gemini/skills/forge-6-docs/references/pipeline-state-schema.json +191 -0
  375. package/adapters/gemini/skills/forge-6-docs/references/shared-conventions.md +295 -0
  376. package/adapters/gemini/skills/forge-fix/references/shared-conventions.md +295 -0
  377. package/adapters/gemini/skills/forge-fix/references/stage-exit-protocol.md +258 -0
  378. package/adapters/gemini/skills/forge-guide/references/forge-config-schema.json +236 -0
  379. package/adapters/gemini/skills/forge-guide/references/process-overview.md +143 -0
  380. package/adapters/gemini/skills/forge-guide/references/ralph-loop-contract.md +221 -0
  381. package/adapters/gemini/skills/forge-guide/references/shared-conventions.md +295 -0
  382. package/adapters/gemini/skills/forge-guide/references/stack-resolution.md +54 -0
  383. package/adapters/gemini/skills/forge-guide/references/stacks/_generic.md +111 -0
  384. package/adapters/gemini/skills/forge-guide/references/stacks/go.md +157 -0
  385. package/adapters/gemini/skills/forge-guide/references/stacks/python.md +184 -0
  386. package/adapters/gemini/skills/forge-guide/references/stacks/rust.md +170 -0
  387. package/adapters/gemini/skills/forge-guide/references/stacks/typescript.md +134 -0
  388. package/adapters/gemini/skills/forge-init/forge-init.md +1 -0
  389. package/adapters/gemini/skills/forge-verify/forge-verify.md +5 -4
  390. package/adapters/gemini/skills/forge-verify/references/pipeline-state-schema.json +191 -0
  391. package/adapters/gemini/skills/forge-verify/references/shared-conventions.md +295 -0
  392. package/adapters/gemini/skills/forge-verify/references/verification-checklists.md +88 -2
  393. package/package.json +1 -1
@@ -0,0 +1,134 @@
1
+ # TypeScript Stack Profile
2
+
3
+ Stack-specific guidance for TypeScript projects (Node.js/Bun, monorepo or single-package).
4
+
5
+ ## Stack Identity
6
+
7
+ - **Language**: TypeScript
8
+ - **Runtime**: Node.js or Bun (check `package.json` `engines` field and lock files)
9
+ - **Package management**: npm, pnpm, yarn, or bun (check for respective lock files)
10
+ - **Common monorepo tools**: Turborepo (`turbo.json`), Nx (`nx.json`), Lerna (`lerna.json`)
11
+
12
+ ## Discovery Checklist
13
+
14
+ When examining a TypeScript project, check for:
15
+
16
+ - **Runtime**: Bun or Node.js (check `package.json` for which)
17
+ - **Package management**: Check for `bun.lockb`, `pnpm-lock.yaml`, `package-lock.json`, or `yarn.lock`
18
+ - **Monorepo**: Check for `turbo.json` (Turborepo), `nx.json` (Nx), or `lerna.json` (Lerna)
19
+ - **Framework**: Check existing packages for Hono, Express, Fastify, etc.
20
+ - **Frontend**: Check for React, Vue, Svelte, etc.
21
+ - **Routing**: Check for TanStack Router, React Router, Next.js, etc.
22
+ - **Database**: Check for Drizzle, Prisma, TypeORM, etc.
23
+ - **Validation**: Check for Zod, Yup, io-ts, etc.
24
+ - **UI Components**: Check for shadcn/ui, Radix, MUI, etc.
25
+ - **Styling**: Check for Tailwind (v3 or v4), CSS Modules, styled-components, etc.
26
+
27
+ ## Archetype Conventions
28
+
29
+ ### 00-core-definitions.md (TypeScript)
30
+
31
+ - **Type aliases and union types**: Use `type` declarations for unions, intersections, utility types
32
+ - **Core interfaces**: Define with `interface` keyword, JSDoc on every field
33
+ - **Error class hierarchy**: Base error class extending `Error` with `code: string` property; domain-specific subclasses with typed properties
34
+ - **Constants and enums**: Use `const` declarations and `as const` assertions; prefer string union types over `enum`
35
+ - **Utility types**: Generic helpers like `Result<T, E>`, `Optional<T>`, etc.
36
+ - **Barrel exports**: Export everything from `src/index.ts`
37
+
38
+ ### 01-architecture-layout.md (TypeScript)
39
+
40
+ - **Package.json**: `name`, `exports` map (subpath exports like `.`, `./server`, `./client`, `./react`), `dependencies`, `devDependencies`, `scripts`
41
+ - **tsconfig.json**: Key compiler options, extends root config
42
+ - **Barrel export structure**: What each `index.ts` re-exports
43
+ - **Build considerations**: Bundle vs unbundled, ESM vs CJS
44
+
45
+ ### Monorepo conventions
46
+
47
+ - **Package naming**: `@repo/{name}` for shared packages, `@starter/{name}` for app-specific (adapt to project convention)
48
+ - **Internal dependencies**: Reference as `@repo/{package}` in `package.json`
49
+ - **Workspace protocol**: `"@repo/config": "workspace:*"` in pnpm, `"@repo/config": "*"` in bun
50
+
51
+ ## Spec Quality Rules
52
+
53
+ - All TypeScript must be valid syntax — not pseudocode
54
+ - Include complete interfaces with generics where applicable
55
+ - Use discriminated unions for result types (e.g., `{ success: true; data: T } | { success: false; error: E }`)
56
+ - Every interface field must have JSDoc explaining its purpose
57
+ - Include explicit import paths in all code examples
58
+ - Use `async/await` for asynchronous operations (not raw Promises)
59
+
60
+ ## Verification Specifics
61
+
62
+ - **Type checking**: `bun run typecheck`, `tsc --noEmit`, or `npx tsc --noEmit`
63
+ - **Barrel export validation**: Every `index.ts` re-exports what the spec says
64
+ - **Cross-package type checks**: `bun run typecheck` (or equivalent) passes for both the feature package AND packages that depend on it
65
+ - **Import path validation**: All import paths resolve correctly per the `exports` map in `package.json`
66
+
67
+ ### Runtime Entrypoints & Bootstrap-Wiring Sites
68
+
69
+ Used by `CHECK-I22` (a runtime-required bootstrap needs a **non-test** caller on one of these) and
70
+ `CHECK-I23` (a heavy init wired into a **universal** bootstrap entry should move to a lazier site).
71
+
72
+ - **Runtime entrypoints (a legitimate non-test call site):** a `package.json` `bin` / CLI `main`; a
73
+ server entry that actually starts listening (`src/server.ts`, `src/index.ts` invoking `listen`); a
74
+ worker/consumer file; and for Next.js — `middleware.ts`, `app/**/route.ts` route handlers,
75
+ `app/**/{page,layout,template}.tsx`, server actions, and `instrumentation.ts`. Express/Hono/Fastify:
76
+ the file that constructs the app and calls `.listen()`.
77
+ - **Universal bootstrap entries (run on every startup — the `CHECK-I23` risk site):** Next.js
78
+ `instrumentation.ts` / `instrumentation.js` (its `register()` runs once per server process before
79
+ any request), an app-server preload/`register`/`--import` hook, a root `app/layout.tsx` that
80
+ eagerly imports server singletons, and global test setup (`vitest.setup.ts`, `jest.setup.ts`) if it
81
+ bootstraps production graphs. Wiring a heavy init here loads it on **every** cold start (and, under
82
+ the dev server, on every module re-evaluation).
83
+ - **Heavy server-only import markers (what makes an init "heavy" for `CHECK-I23`):** DB/ORM clients
84
+ (`drizzle-orm`, `@prisma/client`, `pg`, `mongoose`, `kysely`), queue/worker libs (`bullmq`, `bull`,
85
+ `kafkajs`, `ioredis`), telemetry/observability SDKs (`@opentelemetry/*`, `@sentry/node`), and a
86
+ whole-service-layer barrel (`import * as services from "@repo/services"`). An init that pulls any of
87
+ these into a universal bootstrap entry is the CHECK-I23 pattern — recommend lazy init at the first
88
+ route/handler/worker that needs it.
89
+
90
+ ## Testing
91
+
92
+ - **Framework**: Vitest (most common in modern TS), Jest, or testing-library
93
+ - **Test file location**: Co-located (`*.test.ts` next to source) or in `__tests__/` directories
94
+ - **Fixture patterns**: Factory functions, test builders
95
+ - **Type testing**: `expectTypeOf` from vitest for type-level assertions
96
+
97
+ ## Common Frameworks
98
+
99
+ | Category | Options |
100
+ |----------|---------|
101
+ | Backend | Hono, Express, Fastify, Koa |
102
+ | Frontend | React, Vue, Svelte, Solid |
103
+ | Routing | TanStack Router, React Router, Next.js App Router |
104
+ | Database | Drizzle, Prisma, TypeORM, Kysely |
105
+ | Validation | Zod, Valibot, Yup, io-ts |
106
+ | UI Components | shadcn/ui, Radix, MUI, Mantine |
107
+ | Styling | Tailwind CSS, CSS Modules, styled-components, vanilla-extract |
108
+
109
+ ## Example: Project-Level Override
110
+
111
+ Create `.feature-forge/stack-decisions.md` (legacy alias: `.claude/references/stack-decisions.md`) in your project root:
112
+
113
+ ```markdown
114
+ # Stack Decisions
115
+
116
+ ## Runtime & Build
117
+ - Bun 1.x for runtime and package management
118
+ - Turborepo for monorepo orchestration
119
+
120
+ ## Backend
121
+ - Hono for HTTP framework
122
+ - Drizzle ORM with PostgreSQL
123
+ - Zod for runtime validation
124
+
125
+ ## Frontend
126
+ - React 19 with TanStack Router (SPA-first)
127
+ - shadcn/ui component library
128
+ - Tailwind CSS v4 with oklch color theming
129
+
130
+ ## Conventions
131
+ - Barrel exports from index.ts in every package
132
+ - Package naming: @repo/{name} for shared, @starter/{name} for app-specific
133
+ - Vitest for testing
134
+ ```
@@ -0,0 +1,258 @@
1
+ # Stage Exit Protocol
2
+
3
+ The single source of truth for how every forge **authoring** stage closes. It
4
+ replaces the old ad-hoc "Next steps:" bullet lists with one fixed, correctly-ordered
5
+ sequence: **verify (if missing or stale) → `/clear` → run the next command.**
6
+
7
+ Two principles this protocol encodes (do not relitigate — they are locked product
8
+ decisions):
9
+
10
+ 1. **Clearing is recommended on its own merits at every stage boundary** — a clean
11
+ start for the next stage — *not* as a proxy for a full context window. Window
12
+ fullness only changes *how emphatically* the clear is recommended, never *whether*
13
+ it is.
14
+ 2. **Verify happens before the clear, never after** — in the authoring session, whether
15
+ manual **or** auto. Verify's clean-room subagent is dispatched from the *current*
16
+ session, so the findings digest and any fix decision land where the context to act on
17
+ them still exists. This holds for auto-verify too: the stage skill dispatches the
18
+ clean-room verify (and any autoFix) at stage end, in-session, before the exit — it is
19
+ **not** deferred to the navigator, which runs *after* the `/clear` with none of the
20
+ authoring context. Clearing first throws that context away.
21
+
22
+ ## How this file is used
23
+
24
+ The five authoring stages (`forge-0-epic` … `forge-4-backlog`) close with the
25
+ **Scripted Stage Exit**: a short stamped block (below) that runs
26
+ `forge-session.py stage-exit`, obeys the DIRECTIVES it prints per the **directive
27
+ contract** in this file, and prints the script-emitted NEXT-STEPS block verbatim as the
28
+ absolute last output. All the conditional logic the old prose blocks asked the model to
29
+ compute (effective auto-verify, freshness collapse, gate selection, host wording) now
30
+ lives in the script, deterministically; only genuinely interactive work (clean-room
31
+ subagent dispatch, `AskUserQuestion` gates) remains prose — specified once here, not
32
+ per stage.
33
+
34
+ The loop (`forge-5-loop`) keeps its bespoke exits: it stamps the **standard block**
35
+ (step-6 epic-member handoff) and the **warm variant** (all-done closing) below,
36
+ verbatim. `forge-6-docs` is **terminal** — it stamps no exit block.
37
+
38
+ A drift-guard test (`tests/test_stage_exit_protocol.py`) asserts each stamp site still
39
+ contains its block, so an edit here must be mirrored into every stamp site (and
40
+ vice-versa).
41
+
42
+ ## Stamp sites
43
+
44
+ | Stamp site | Block |
45
+ |---|---|
46
+ | `forge-0-epic` … `forge-4-backlog` | scripted-stage-exit stamp |
47
+ | `forge-5-loop` (step-6 epic-member handoff) | standard |
48
+ | `forge-5-loop` (all-done closing → docs) | warm |
49
+
50
+ The scripted stamp fills one build-time slot, `{stage-exit-args}` — the per-stage
51
+ argument list (e.g. `--feature "{feature}" --stage forge-2-tech`; the epic stage passes
52
+ `--feature "{epic}" --stage forge-0-epic --next-feature "{first-actionable-feature}"`).
53
+ `{feature}` / `{epic}` / `{specsDir}` / `{first-actionable-feature}` remain runtime
54
+ placeholders the skill resolves before running the command, exactly as elsewhere.
55
+
56
+ <!-- BEGIN: scripted-stage-exit-stamp -->
57
+ **Close this stage with the Scripted Stage Exit** (contract: `references/stage-exit-protocol.md`; do not improvise a "Next steps" list). Run:
58
+
59
+ ```bash
60
+ 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')"
61
+ [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
62
+ python3 "$R/scripts/forge-session.py" stage-exit {stage-exit-args} --specs-dir "{specsDir}" --host claude
63
+ ```
64
+
65
+ Obey the DIRECTIVES it prints, in order, per the directive contract: `runInStageVerify: true` → dispatch the in-stage clean-room verify now (honoring `autoFixEligible`); `verifyGate: "standard"` → present the Standard Verify Gate; `verifyGate: "manual-print"` → print the `verifyCommand` for the user; non-empty `invalidAutoVerifyKeys` → print a one-line warning. Then **print the NEXT-STEPS block verbatim as your absolute last output — nothing after its sentinel line.**
66
+ <!-- END: scripted-stage-exit-stamp -->
67
+
68
+ ## Directive contract
69
+
70
+ `stage-exit` emits a DIRECTIVES object and a NEXT-STEPS block. The skill executes the
71
+ directives **in this order**; the script has already computed every conditional, so a
72
+ directive is an instruction, not a question to re-derive.
73
+
74
+ ### `invalidAutoVerifyKeys` (non-empty)
75
+
76
+ Print a one-line warning first (e.g. "⚠️ forge.config.json `autoVerifyStages` has
77
+ unknown keys: … — they are ignored; fix the typo").
78
+
79
+ ### `runInStageVerify: true` — in-stage auto-verify {stageNoun}
80
+
81
+ Auto-verify is effective for this stage and verification is outstanding — verify **now,
82
+ in this session** (principle #2 applied to auto-verify: the digest and any fix decision
83
+ land here, where the authoring context still exists — not deferred to a post-`/clear`
84
+ navigator):
85
+
86
+ 1. **Clean-room verify (require-clean).** Dispatch the clean-room `forge-verifier`
87
+ subagent from this session in require-clean mode — the same path the navigator uses
88
+ (`skills/forge-verify/SKILL.md`). Dispatch it **synchronously and await its digest
89
+ inline** — do **not** run it in the background or announce it as "still running";
90
+ the digest and any fix decision must land in this session. It inherits none of this
91
+ session's context, so no `/clear` is needed and only a compact digest returns.
92
+ **Clean-room unavailable** (no `Agent` tool, `forge-verifier` not dispatchable) **or
93
+ a non-answer returned** (the verifier returned a placeholder / "still running" /
94
+ delegation message instead of a findings block): do **not** run inline and do **not**
95
+ silently accept the non-answer as a pass — leave verify **pending** so the navigator
96
+ catch-up fires on a later Claude-host `/feature-forge:forge`, print the
97
+ `verifyCommand` for the user to run, and continue to the NEXT-STEPS block.
98
+ 2. **Verify passed / no findings** → the fresh verify state is recorded by the
99
+ clean-room run; continue to the NEXT-STEPS block.
100
+ 3. **Verify found findings** →
101
+ - **`autoFixEligible: true` AND the findings document has zero unresolved decision
102
+ points** → chain `feature-forge:forge-fix` in-session (it owns its own commit +
103
+ step tracking), then run a **mandatory re-verify** in require-clean mode. Continue
104
+ to the NEXT-STEPS block only if the re-verify passes. On any precondition miss, a
105
+ forge-fix early stop, or a red re-verify, fall through to the digest gate below —
106
+ never a silent partial mutation. (`autoFixEligible` already folds in the config
107
+ `autoFix` flag and the clean-tree precondition; a dirty tree or
108
+ `gitCommitAfterStage: false` arrives here as `false`.)
109
+ - **`autoFixEligible: false`, or unresolved decision points** → surface a **compact
110
+ findings digest** as text, then present the gate via `AskUserQuestion`: **Run
111
+ `forge-fix` now** *(recommended — you are in-context and the digest is right
112
+ here)* / **Clear + advance anyway** (leave the findings for later) / **Stop
113
+ here**. Do **not** hard-stop and do **not** silently walk past. Act on the choice,
114
+ then continue to the NEXT-STEPS block.
115
+
116
+ ### `verifyGate: "standard"` — the Standard Verify Gate
117
+
118
+ Auto-verify is off for this stage and verification is outstanding (`verifyState` is
119
+ `never`, `stale`, or `failing`). Verify **now, before clearing**, using
120
+ `AskUserQuestion` with exactly these three options — but only when the host has a
121
+ question mechanism **and** the clean-room path is available (the `Agent` tool plus a
122
+ dispatchable `forge-verifier` subagent); otherwise degrade exactly as `manual-print`
123
+ below:
124
+
125
+ - **Verify {stageNoun} now** *(recommended)* — dispatch the clean-room `forge-verifier`
126
+ subagent from this session in require-clean mode; the digest returns here so any fix
127
+ decision keeps its context. One-time — it does **not** change config.
128
+ - **Verify now + enable auto-verify going forward** — verify now **and** patch
129
+ `"autoVerify": true` into `forge.config.json` in place (preserve formatting and every
130
+ other key) so future stages verify automatically, no prompt. This complements the
131
+ `forge-init` opt-in. **Do not auto-commit this config change** — treat it like
132
+ `notes`: a user-facing edit the user commits on their own cadence, never folded into
133
+ a stage's artifact commit.
134
+ - **Skip for now** — go straight to the NEXT-STEPS block without verifying. Record this
135
+ stage's verify status as `"skipped"` in pipeline state (mirroring the existing skip
136
+ handling) **only** on an explicit skip — a skip does not go stale.
137
+
138
+ If verify runs and finds findings, handle them exactly as in the in-stage flow above
139
+ (digest + `AskUserQuestion` gate; `autoFixEligible` applies unchanged).
140
+
141
+ ### `verifyGate: "manual-print"`
142
+
143
+ Verification is outstanding but the host cannot present the gate or dispatch
144
+ clean-room. Do **not** run verify inline — print the `verifyCommand` for the user to
145
+ run (mirroring `autoInvokeNextStage`), offer the auto-verify enable as plain text only
146
+ if a config write is possible, and continue to the NEXT-STEPS block. Verify state stays
147
+ outstanding, so the navigator catch-up can fire later.
148
+
149
+ ### `verifyGate: "none"`
150
+
151
+ Verification is already resolved (fresh or explicitly skipped) or the in-stage run
152
+ above covers it. Say so in one line and continue to the NEXT-STEPS block.
153
+
154
+ ### `epicReconcile` (epic backflow — present only when there are open requests)
155
+
156
+ Emitted only when the exiting member carries `open` `epicChangeRequests` (recorded by
157
+ `forge-1-prd`/`forge-2-tech` when the epic *decomposition* itself must change — see
158
+ `references/pipeline-state-schema.json`). Absent on the common path and for standalone
159
+ features. The script has already folded the routing into the NEXT-STEPS block, so this
160
+ directive is informational — you do **not** re-derive the wording:
161
+
162
+ - `required: true` (at least one `blocksCurrent: true` request) — the NEXT-STEPS block's
163
+ fenced **primary** command is the epic reconcile command
164
+ (`/feature-forge:forge-0-epic {epic}`), and the normal next stage is demoted to a
165
+ follow-up line ("After reconciling, continue with …"). This is *reconcile-before-specs*:
166
+ proceeding would author artifacts against a decomposition that is about to change. It is
167
+ strongest when exiting `forge-2-tech` (next is `forge-3-specs`, the point of no cheap
168
+ return).
169
+ - `reminder: true` (only `blocksCurrent: false` requests) — normal next-stage routing is
170
+ unchanged; the block appends a non-blocking reminder line ("You also flagged N epic
171
+ change(s) to reconcile when convenient …"). This is *finish-then-edit*.
172
+
173
+ Either way the added lines are host-neutral (no literal `/clear`) and sit **above** the
174
+ sentinel; just print the NEXT-STEPS block verbatim as always.
175
+
176
+ ### Deferred decisions — do not solicit next-stage decisions at this exit
177
+
178
+ Each stage owns its own decisions. At a stage exit, do **not** pull a *later* stage's
179
+ decision forward — do not ask the user (or decide unilaterally) something that properly
180
+ belongs to the next stage's interview (e.g. at `forge-1-prd` exit, don't settle the
181
+ concrete cache backend that `forge-2-tech` will design). Soliciting it here guesses ahead
182
+ of the stage that owns the context, and the answer has nowhere durable to live.
183
+
184
+ Instead, when you notice a decision that belongs downstream, **record it structurally** as
185
+ a `deferredDecisions[]` entry on this feature's `.pipeline-state.json` (schema in
186
+ `references/pipeline-state-schema.json`; same direct-edit path as `notes` /
187
+ `epicChangeRequests[]`): `question` (phrased for the target stage), optional `rationale`
188
+ and `targetStage`, `raisedBy` (this stage), `raisedAt` (ISO-8601 UTC), `status: "open"`.
189
+ This keeps the exit focused on *this* stage's next-step routing while carrying the open
190
+ question forward for the owning stage to resolve (it flips `status` to `addressed` when it
191
+ does). Prefer a `deferredDecisions[]` entry over stuffing the same thing into the free-text
192
+ `notes` string. This is a recording affordance, not a gate: never block the exit on it.
193
+
194
+ ### The NEXT-STEPS block (always last)
195
+
196
+ Print the script's NEXT-STEPS block **verbatim as your absolute last output**. Nothing
197
+ follows its final sentinel line (`─ forge: end of stage ─`) — no caveats, no summary,
198
+ no sign-off. The block already carries the `/clear` recommendation (host-aware wording
199
+ via `--host`) and the exact next command, so trailing prose can only push the user's
200
+ next action out of view.
201
+
202
+ ---
203
+
204
+ ## Standard block
205
+
206
+ Stamped at the loop's step-6 epic-member handoff (finishing feature A → starting
207
+ feature B's PRD). It self-adapts: step 1's verify gate only fires when verification is
208
+ actually outstanding, so at a boundary where verify already ran (or was explicitly
209
+ skipped, or auto-verify is on) it silently collapses to just the `/clear` →
210
+ next-command steps.
211
+
212
+ Slots: `{stage}` (a lowercase noun phrase), `{verify-command}`, `{next-command}`.
213
+
214
+ <!-- BEGIN: standard-exit-block -->
215
+ **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:
216
+
217
+ 1. **Verify {stage} 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 `AskUserQuestion` with exactly these three options — but only when the host has a question mechanism **and** the clean-room path is available (the `Agent` tool plus a dispatchable `forge-verifier` subagent):
218
+ - **Verify {stage} 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.
219
+ - **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.
220
+ - **Skip for now** — go straight to `/clear` 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.
221
+
222
+ **Host / clean-room fallback (not a user-selectable option):** if the question mechanism, the `Agent` tool, or the `forge-verifier` subagent is unavailable, do **not** run clean-room — degrade to printing `{verify-command}` 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.
223
+ 2. **Then `/clear`.** 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` for you — you have to run it yourself.**
224
+ 3. **Then run the next command** in the fresh session — or re-run `/feature-forge:forge` to let the navigator resume from disk:
225
+
226
+ ```
227
+ {next-command}
228
+ ```
229
+ <!-- END: standard-exit-block -->
230
+
231
+ ---
232
+
233
+ ## Warm-acceptable variant
234
+
235
+ Stamp this only at the `forge-5-loop → forge-6-docs` boundary (the all-done result
236
+ report). Here clearing is **optional**: the docs stage benefits from the still-warm
237
+ context of what the loop actually did, and impl-verify is already offered interactively
238
+ by the loop itself, so this block defers rather than re-presenting a gate.
239
+
240
+ > **Note — no literal `/clear` here.** The warm block lives in `result-reporting.md`, a
241
+ > skill-*own* reference that the adapter build copies **verbatim** (unlike skill bodies,
242
+ > it is not host-term translated), so a literal `/clear` would reach non-Claude adapters
243
+ > undegraded. The warm variant says "clearing is optional" anyway, so it is phrased
244
+ > host-neutrally without the token on purpose — do not reintroduce `/clear` here. (The
245
+ > standard block *does* use `/clear`; that is fine because every standard stamp site is a
246
+ > skill **body**, where `scripts/build-adapters.py` degrades it.)
247
+
248
+ <!-- BEGIN: warm-exit-block -->
249
+ **The loop is complete — this is the one boundary where clearing before the next stage is optional.**
250
+
251
+ 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.
252
+ 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.
253
+ 3. **Then run the next command** — in this warm session, or a fresh one if you prefer:
254
+
255
+ ```
256
+ {next-command}
257
+ ```
258
+ <!-- END: warm-exit-block -->
@@ -116,6 +116,8 @@ do not reload everything. This keeps quality up under context pressure.
116
116
 
117
117
  ## Step 5: Cross-Reference Validation
118
118
 
119
+ Before writing `TRACEABILITY.md` or running the stage exit, invoke the **Stage-Completion Re-check** block in `references/shared-conventions.md` with `{stage}` = `forge-3-specs` — a resumed mid-stage continuation must not overwrite a committed `TRACEABILITY.md` or re-fire a finished exit.
120
+
119
121
  After writing all documents, verify:
120
122
 
121
123
  1. Every PRD requirement has coverage in at least one spec document
@@ -0,0 +1,191 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Feature Forge Pipeline State",
4
+ "description": "Tracks pipeline progress for a single feature across sessions. Lives at {specsDir}/{feature}/.pipeline-state.json",
5
+ "type": "object",
6
+ "required": ["feature", "createdAt", "updatedAt", "currentStage", "stages", "pipelineStatus"],
7
+ "properties": {
8
+ "pipelineStatus": {
9
+ "type": "string",
10
+ "enum": ["active", "paused", "abandoned"],
11
+ "default": "active"
12
+ },
13
+ "feature": {
14
+ "type": "string",
15
+ "description": "Feature name (matches directory name under specsDir)"
16
+ },
17
+ "epic": {
18
+ "type": "string",
19
+ "description": "Back-pointer to the owning epic's name. Absent for standalone features. The epic-manifest.json is canonical on conflict (REQ-STATE-01)."
20
+ },
21
+ "branch": {
22
+ "type": "string",
23
+ "description": "Git branch this feature's pipeline work is intended to land on, recorded by the Branch Setup block (shared-conventions.md) at the entry stage. Absent when the project isn't a git repo or branchPerFeature is false. Downstream stages and forge-5-loop compare the current branch against this to detect drift back onto the default branch before committing."
24
+ },
25
+ "createdAt": {
26
+ "type": "string",
27
+ "format": "date-time"
28
+ },
29
+ "updatedAt": {
30
+ "type": "string",
31
+ "format": "date-time"
32
+ },
33
+ "currentStage": {
34
+ "type": "string",
35
+ "enum": ["forge-1-prd", "forge-2-tech", "forge-3-specs", "forge-4-backlog", "forge-5-loop", "forge-6-docs", "complete", "forge-verify-prd", "forge-verify-tech", "forge-verify-specs", "forge-verify-backlog", "forge-verify-impl", "forge-0-epic", "forge-verify-epic"],
36
+ "description": "Where the pipeline IS: the most recently started stage — its `stages[<currentStage>].status` is `in-progress` while that stage is being authored, then `complete` once its artifacts are committed. A stage skill sets this to its own id when it starts. This is deliberately NOT 'the next stage to run': the next stage is DERIVED, never stored — it is the first production stage whose `stages[].status` is not `complete` (see `next_stage()` in forge-session.py, surfaced as the navigator/doctor `nextStage`). Consumers that need 'what runs next' compute it from `stages[].status`, not from this field. `complete` here means the whole pipeline is done. (Legacy/absent value: tools fall back to the derived next stage for display only — `build_rows` in forge-session.py.)"
37
+ },
38
+ "notes": {
39
+ "type": "string",
40
+ "description": "Free-form notes persisted between sessions (user can add context before stepping away)"
41
+ },
42
+ "epicChangeRequests": {
43
+ "type": "array",
44
+ "description": "Epic-level change requests raised by a member stage (forge-1-prd/forge-2-tech) when the epic DECOMPOSITION itself must change — distinct from the same-feature `notes` parking lot. Read by forge-0-epic edit mode (which applies them) and by forge-session stage-exit (which routes the exit on `blocksCurrent`). Absent/empty for standalone features. Additive/optional: legacy states without it validate unchanged.",
45
+ "items": {
46
+ "type": "object",
47
+ "required": ["kind", "target", "rationale", "blocksCurrent", "raisedBy", "raisedAt", "status"],
48
+ "additionalProperties": false,
49
+ "properties": {
50
+ "kind": {
51
+ "type": "string",
52
+ "enum": ["add-feature", "redep", "move-boundary", "split"],
53
+ "description": "The decomposition change. add-feature/redep map 1:1 onto edit-mode mutators; move-boundary/split are composite (applied guided-manual in v1)."
54
+ },
55
+ "target": {
56
+ "type": "string",
57
+ "description": "The sibling feature to add, or the feature/boundary affected."
58
+ },
59
+ "rationale": {
60
+ "type": "string",
61
+ "description": "Why the epic must change; seeds the edit-mode charter/prompt when applied."
62
+ },
63
+ "blocksCurrent": {
64
+ "type": "boolean",
65
+ "description": "true → the current feature's next stage would build on a soon-to-change decomposition (pause-now: reconcile before proceeding). false → a peer/downstream change (finish-then-edit). Drives stage-exit routing."
66
+ },
67
+ "raisedBy": {
68
+ "type": "string",
69
+ "enum": ["forge-1-prd", "forge-2-tech"],
70
+ "description": "The stage that detected the epic-level concern."
71
+ },
72
+ "raisedAt": { "type": "string", "format": "date-time" },
73
+ "status": {
74
+ "type": "string",
75
+ "enum": ["open", "applied", "dismissed"],
76
+ "default": "open",
77
+ "description": "Lifecycle: open → applied|dismissed. Only forge-0-epic edit mode flips open→applied/dismissed; recording stages only create open entries; navigator/verify only read."
78
+ }
79
+ }
80
+ }
81
+ },
82
+ "deferredDecisions": {
83
+ "type": "array",
84
+ "description": "Same-feature decisions deliberately postponed to a LATER stage of THIS feature — a structured alternative to burying them in the free-text `notes` string. Distinct from `notes` (unstructured scratch) and from `epicChangeRequests[]` (the epic DECOMPOSITION must change). Use this when a stage would otherwise be tempted to solicit a decision that properly belongs to a downstream stage (e.g. forge-1-prd deferring the concrete cache backend to forge-2-tech): record it here instead of asking now (see the deferred-decisions rule in `references/stage-exit-protocol.md`), and the target stage addresses it. Additive/optional: legacy states without it validate unchanged.",
85
+ "items": {
86
+ "type": "object",
87
+ "required": ["question", "raisedBy", "raisedAt", "status"],
88
+ "additionalProperties": false,
89
+ "properties": {
90
+ "question": {
91
+ "type": "string",
92
+ "description": "The decision being deferred, phrased as a concrete question for the target stage to answer."
93
+ },
94
+ "rationale": {
95
+ "type": "string",
96
+ "description": "Why it is deferred rather than decided now (e.g. depends on information the target stage produces)."
97
+ },
98
+ "targetStage": {
99
+ "type": "string",
100
+ "enum": ["forge-1-prd", "forge-2-tech", "forge-3-specs", "forge-4-backlog", "forge-5-loop", "forge-6-docs"],
101
+ "description": "The stage that should resolve this decision. Omit when unknown/any-later-stage."
102
+ },
103
+ "raisedBy": {
104
+ "type": "string",
105
+ "enum": ["forge-1-prd", "forge-2-tech", "forge-3-specs", "forge-4-backlog"],
106
+ "description": "The stage that deferred the decision."
107
+ },
108
+ "raisedAt": { "type": "string", "format": "date-time" },
109
+ "status": {
110
+ "type": "string",
111
+ "enum": ["open", "addressed", "dismissed"],
112
+ "default": "open",
113
+ "description": "Lifecycle: open → addressed|dismissed. The target stage flips open→addressed when it resolves the decision (or dismissed if it no longer applies); recording stages only create open entries."
114
+ }
115
+ }
116
+ }
117
+ },
118
+ "stages": {
119
+ "type": "object",
120
+ "properties": {
121
+ "forge-0-epic": { "$ref": "#/definitions/stageEntry" },
122
+ "forge-verify-epic": { "$ref": "#/definitions/verifyEntry" },
123
+ "forge-1-prd": { "$ref": "#/definitions/stageEntry" },
124
+ "forge-2-tech": { "$ref": "#/definitions/stageEntry" },
125
+ "forge-3-specs": { "$ref": "#/definitions/stageEntry" },
126
+ "forge-verify-specs": { "$ref": "#/definitions/verifyEntry" },
127
+ "forge-4-backlog": { "$ref": "#/definitions/stageEntry" },
128
+ "forge-verify-backlog": { "$ref": "#/definitions/verifyEntry" },
129
+ "forge-5-loop": { "$ref": "#/definitions/stageEntry" },
130
+ "forge-6-docs": { "$ref": "#/definitions/stageEntry" },
131
+ "forge-verify-impl": { "$ref": "#/definitions/verifyEntry" },
132
+ "forge-verify-prd": { "$ref": "#/definitions/verifyEntry" },
133
+ "forge-verify-tech": { "$ref": "#/definitions/verifyEntry" }
134
+ }
135
+ }
136
+ },
137
+ "definitions": {
138
+ "stageEntry": {
139
+ "type": "object",
140
+ "required": ["status"],
141
+ "properties": {
142
+ "status": {
143
+ "type": "string",
144
+ "enum": ["pending", "in-progress", "complete", "stale"]
145
+ },
146
+ "version": {
147
+ "type": "integer",
148
+ "description": "Incremented each time this stage's artifacts are revised"
149
+ },
150
+ "artifacts": {
151
+ "type": "array",
152
+ "items": { "type": "string" },
153
+ "description": "Relative paths to artifacts produced by this stage"
154
+ },
155
+ "startedAt": { "type": ["string", "null"], "format": "date-time" },
156
+ "completedAt": { "type": ["string", "null"], "format": "date-time" },
157
+ "commitHash": {
158
+ "type": ["string", "null"],
159
+ "description": "Git commit SHA of this stage's artifact commit (Commit 1 of the two-commit Git Commit Protocol in shared-conventions.md). Written by a small follow-up commit so it points at the artifact commit itself, never at an orphaned amend or the hash-recording commit. null until recorded (or when there was no new artifact commit)."
160
+ },
161
+ "basedOnVersions": {
162
+ "type": "object",
163
+ "description": "Upstream stage versions this artifact was built against",
164
+ "additionalProperties": { "type": "integer" }
165
+ }
166
+ }
167
+ },
168
+ "verifyEntry": {
169
+ "type": "object",
170
+ "required": ["status"],
171
+ "properties": {
172
+ "status": {
173
+ "type": "string",
174
+ "enum": ["pending", "passed", "findings-reported", "findings-applied", "skipped"]
175
+ },
176
+ "findingsFile": {
177
+ "type": ["string", "null"],
178
+ "description": "Path to the verification findings document"
179
+ },
180
+ "findingsCount": {
181
+ "type": ["integer", "null"],
182
+ "description": "Number of findings reported"
183
+ },
184
+ "verifiedAt": { "type": ["string", "null"], "format": "date-time" },
185
+ "fixedAt": { "type": ["string", "null"], "format": "date-time" },
186
+ "commitHash": { "type": ["string", "null"], "description": "Git commit SHA of the verify/fix artifact commit. Recorded via the two-commit Git Commit Protocol (shared-conventions.md) so it points at the artifact commit, never an orphaned amend." },
187
+ "verifiedStageVersion": { "type": ["integer", "null"], "description": "The production stage's `version` at the moment this verify was resolved. The navigator's freshness ledger compares it to the stage's current `version`: equal means the verify is fresh; a mismatch (artifact revised since) or an absent field (legacy state) means stale, so auto-verify re-fires. Recorded by forge-verify/forge-fix when writing a passed/findings-applied status." }
188
+ }
189
+ }
190
+ }
191
+ }