@garygentry/feature-forge 0.2.14 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/README.md +6 -3
  2. package/adapters/GENERATION-REPORT.md +20 -0
  3. package/adapters/claude/.feature-forge-bundle.json +1 -1
  4. package/adapters/claude/agents/forge-verifier.md +1 -1
  5. package/adapters/claude/references/forge-config-schema.json +2 -2
  6. package/adapters/claude/references/pipeline-state-schema.json +1 -1
  7. package/adapters/claude/references/shared-conventions.md +62 -12
  8. package/adapters/claude/references/stage-exit-protocol.md +14 -4
  9. package/adapters/claude/references/vendor-construct-inventory.md +1 -1
  10. package/adapters/claude/scripts/epic-manifest.py +49 -6
  11. package/adapters/claude/scripts/forge-root.sh +47 -3
  12. package/adapters/claude/scripts/forge-session.py +1179 -9
  13. package/adapters/claude/scripts/validate-traceability.py +6 -1
  14. package/adapters/claude/skills/forge/SKILL.md +11 -5
  15. package/adapters/claude/skills/forge/references/pipeline-state-schema.json +1 -1
  16. package/adapters/claude/skills/forge/references/shared-conventions.md +62 -12
  17. package/adapters/claude/skills/forge/references/stage-exit-protocol.md +14 -4
  18. package/adapters/claude/skills/forge-0-epic/SKILL.md +1 -1
  19. package/adapters/claude/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
  20. package/adapters/claude/skills/forge-0-epic/references/shared-conventions.md +62 -12
  21. package/adapters/claude/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
  22. package/adapters/claude/skills/forge-1-prd/SKILL.md +25 -8
  23. package/adapters/claude/skills/forge-1-prd/references/shared-conventions.md +62 -12
  24. package/adapters/claude/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
  25. package/adapters/claude/skills/forge-2-tech/SKILL.md +25 -7
  26. package/adapters/claude/skills/forge-2-tech/references/shared-conventions.md +62 -12
  27. package/adapters/claude/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
  28. package/adapters/claude/skills/forge-3-specs/SKILL.md +24 -7
  29. package/adapters/claude/skills/forge-3-specs/references/shared-conventions.md +62 -12
  30. package/adapters/claude/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
  31. package/adapters/claude/skills/forge-4-backlog/SKILL.md +23 -7
  32. package/adapters/claude/skills/forge-4-backlog/references/shared-conventions.md +62 -12
  33. package/adapters/claude/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
  34. package/adapters/claude/skills/forge-5-loop/SKILL.md +25 -25
  35. package/adapters/claude/skills/forge-5-loop/references/agent-selection.md +116 -0
  36. package/adapters/claude/skills/forge-5-loop/references/runner-contract.md +14 -107
  37. package/adapters/claude/skills/forge-5-loop/references/shared-conventions.md +62 -12
  38. package/adapters/claude/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
  39. package/adapters/claude/skills/forge-6-docs/SKILL.md +11 -5
  40. package/adapters/claude/skills/forge-6-docs/references/shared-conventions.md +62 -12
  41. package/adapters/claude/skills/forge-fix/references/shared-conventions.md +62 -12
  42. package/adapters/claude/skills/forge-fix/references/stage-exit-protocol.md +14 -4
  43. package/adapters/claude/skills/forge-guide/references/forge-config-schema.json +2 -2
  44. package/adapters/claude/skills/forge-guide/references/shared-conventions.md +62 -12
  45. package/adapters/claude/skills/forge-verify/SKILL.md +22 -12
  46. package/adapters/claude/skills/forge-verify/references/findings-template.md +157 -0
  47. package/adapters/claude/skills/forge-verify/references/pipeline-state-schema.json +1 -1
  48. package/adapters/claude/skills/forge-verify/references/shared-conventions.md +62 -12
  49. package/adapters/claude/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
  50. package/adapters/claude/skills/forge-verify/references/verification-checklists/epic.md +79 -0
  51. package/adapters/claude/skills/forge-verify/references/verification-checklists/impl.md +48 -0
  52. package/adapters/claude/skills/forge-verify/references/verification-checklists/prd.md +31 -0
  53. package/adapters/claude/skills/forge-verify/references/verification-checklists/specs.md +64 -0
  54. package/adapters/claude/skills/forge-verify/references/verification-checklists/tech.md +35 -0
  55. package/adapters/codex/.feature-forge-bundle.json +1 -1
  56. package/adapters/codex/agents/forge-verifier.toml +1 -1
  57. package/adapters/codex/references/forge-config-schema.json +2 -2
  58. package/adapters/codex/references/pipeline-state-schema.json +1 -1
  59. package/adapters/codex/references/shared-conventions.md +62 -12
  60. package/adapters/codex/references/stage-exit-protocol.md +14 -4
  61. package/adapters/codex/references/vendor-construct-inventory.md +1 -1
  62. package/adapters/codex/scripts/epic-manifest.py +49 -6
  63. package/adapters/codex/scripts/forge-root.sh +47 -3
  64. package/adapters/codex/scripts/forge-session.py +1179 -9
  65. package/adapters/codex/scripts/validate-traceability.py +6 -1
  66. package/adapters/codex/skills/forge/SKILL.md +11 -5
  67. package/adapters/codex/skills/forge/references/pipeline-state-schema.json +1 -1
  68. package/adapters/codex/skills/forge/references/shared-conventions.md +62 -12
  69. package/adapters/codex/skills/forge/references/stage-exit-protocol.md +14 -4
  70. package/adapters/codex/skills/forge-0-epic/SKILL.md +1 -1
  71. package/adapters/codex/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
  72. package/adapters/codex/skills/forge-0-epic/references/shared-conventions.md +62 -12
  73. package/adapters/codex/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
  74. package/adapters/codex/skills/forge-1-prd/SKILL.md +25 -8
  75. package/adapters/codex/skills/forge-1-prd/references/shared-conventions.md +62 -12
  76. package/adapters/codex/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
  77. package/adapters/codex/skills/forge-2-tech/SKILL.md +25 -7
  78. package/adapters/codex/skills/forge-2-tech/references/shared-conventions.md +62 -12
  79. package/adapters/codex/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
  80. package/adapters/codex/skills/forge-3-specs/SKILL.md +24 -7
  81. package/adapters/codex/skills/forge-3-specs/references/shared-conventions.md +62 -12
  82. package/adapters/codex/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
  83. package/adapters/codex/skills/forge-4-backlog/SKILL.md +23 -7
  84. package/adapters/codex/skills/forge-4-backlog/references/shared-conventions.md +62 -12
  85. package/adapters/codex/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
  86. package/adapters/codex/skills/forge-5-loop/SKILL.md +25 -25
  87. package/adapters/codex/skills/forge-5-loop/references/agent-selection.md +116 -0
  88. package/adapters/codex/skills/forge-5-loop/references/runner-contract.md +14 -107
  89. package/adapters/codex/skills/forge-5-loop/references/shared-conventions.md +62 -12
  90. package/adapters/codex/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
  91. package/adapters/codex/skills/forge-6-docs/SKILL.md +11 -5
  92. package/adapters/codex/skills/forge-6-docs/references/shared-conventions.md +62 -12
  93. package/adapters/codex/skills/forge-fix/references/shared-conventions.md +62 -12
  94. package/adapters/codex/skills/forge-fix/references/stage-exit-protocol.md +14 -4
  95. package/adapters/codex/skills/forge-guide/references/forge-config-schema.json +2 -2
  96. package/adapters/codex/skills/forge-guide/references/shared-conventions.md +62 -12
  97. package/adapters/codex/skills/forge-verify/SKILL.md +22 -12
  98. package/adapters/codex/skills/forge-verify/references/findings-template.md +157 -0
  99. package/adapters/codex/skills/forge-verify/references/pipeline-state-schema.json +1 -1
  100. package/adapters/codex/skills/forge-verify/references/shared-conventions.md +62 -12
  101. package/adapters/codex/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
  102. package/adapters/codex/skills/forge-verify/references/verification-checklists/epic.md +79 -0
  103. package/adapters/codex/skills/forge-verify/references/verification-checklists/impl.md +48 -0
  104. package/adapters/codex/skills/forge-verify/references/verification-checklists/prd.md +31 -0
  105. package/adapters/codex/skills/forge-verify/references/verification-checklists/specs.md +64 -0
  106. package/adapters/codex/skills/forge-verify/references/verification-checklists/tech.md +35 -0
  107. package/adapters/copilot/.feature-forge-bundle.json +1 -1
  108. package/adapters/copilot/agents/forge-verifier.md +1 -1
  109. package/adapters/copilot/references/forge-config-schema.json +2 -2
  110. package/adapters/copilot/references/pipeline-state-schema.json +1 -1
  111. package/adapters/copilot/references/shared-conventions.md +62 -12
  112. package/adapters/copilot/references/stage-exit-protocol.md +14 -4
  113. package/adapters/copilot/references/vendor-construct-inventory.md +1 -1
  114. package/adapters/copilot/scripts/epic-manifest.py +49 -6
  115. package/adapters/copilot/scripts/forge-root.sh +47 -3
  116. package/adapters/copilot/scripts/forge-session.py +1179 -9
  117. package/adapters/copilot/scripts/validate-traceability.py +6 -1
  118. package/adapters/copilot/skills/forge/forge.md +11 -5
  119. package/adapters/copilot/skills/forge/references/pipeline-state-schema.json +1 -1
  120. package/adapters/copilot/skills/forge/references/shared-conventions.md +62 -12
  121. package/adapters/copilot/skills/forge/references/stage-exit-protocol.md +14 -4
  122. package/adapters/copilot/skills/forge-0-epic/forge-0-epic.md +1 -1
  123. package/adapters/copilot/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
  124. package/adapters/copilot/skills/forge-0-epic/references/shared-conventions.md +62 -12
  125. package/adapters/copilot/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
  126. package/adapters/copilot/skills/forge-1-prd/forge-1-prd.md +25 -8
  127. package/adapters/copilot/skills/forge-1-prd/references/shared-conventions.md +62 -12
  128. package/adapters/copilot/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
  129. package/adapters/copilot/skills/forge-2-tech/forge-2-tech.md +25 -7
  130. package/adapters/copilot/skills/forge-2-tech/references/shared-conventions.md +62 -12
  131. package/adapters/copilot/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
  132. package/adapters/copilot/skills/forge-3-specs/forge-3-specs.md +24 -7
  133. package/adapters/copilot/skills/forge-3-specs/references/shared-conventions.md +62 -12
  134. package/adapters/copilot/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
  135. package/adapters/copilot/skills/forge-4-backlog/forge-4-backlog.md +23 -7
  136. package/adapters/copilot/skills/forge-4-backlog/references/shared-conventions.md +62 -12
  137. package/adapters/copilot/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
  138. package/adapters/copilot/skills/forge-5-loop/forge-5-loop.md +25 -25
  139. package/adapters/copilot/skills/forge-5-loop/references/agent-selection.md +116 -0
  140. package/adapters/copilot/skills/forge-5-loop/references/runner-contract.md +14 -107
  141. package/adapters/copilot/skills/forge-5-loop/references/shared-conventions.md +62 -12
  142. package/adapters/copilot/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
  143. package/adapters/copilot/skills/forge-6-docs/forge-6-docs.md +11 -5
  144. package/adapters/copilot/skills/forge-6-docs/references/shared-conventions.md +62 -12
  145. package/adapters/copilot/skills/forge-fix/references/shared-conventions.md +62 -12
  146. package/adapters/copilot/skills/forge-fix/references/stage-exit-protocol.md +14 -4
  147. package/adapters/copilot/skills/forge-guide/references/forge-config-schema.json +2 -2
  148. package/adapters/copilot/skills/forge-guide/references/shared-conventions.md +62 -12
  149. package/adapters/copilot/skills/forge-verify/forge-verify.md +22 -12
  150. package/adapters/copilot/skills/forge-verify/references/findings-template.md +157 -0
  151. package/adapters/copilot/skills/forge-verify/references/pipeline-state-schema.json +1 -1
  152. package/adapters/copilot/skills/forge-verify/references/shared-conventions.md +62 -12
  153. package/adapters/copilot/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
  154. package/adapters/copilot/skills/forge-verify/references/verification-checklists/epic.md +79 -0
  155. package/adapters/copilot/skills/forge-verify/references/verification-checklists/impl.md +48 -0
  156. package/adapters/copilot/skills/forge-verify/references/verification-checklists/prd.md +31 -0
  157. package/adapters/copilot/skills/forge-verify/references/verification-checklists/specs.md +64 -0
  158. package/adapters/copilot/skills/forge-verify/references/verification-checklists/tech.md +35 -0
  159. package/adapters/cursor/.feature-forge-bundle.json +1 -1
  160. package/adapters/cursor/agents/forge-verifier.mdc +1 -1
  161. package/adapters/cursor/references/forge-config-schema.json +2 -2
  162. package/adapters/cursor/references/pipeline-state-schema.json +1 -1
  163. package/adapters/cursor/references/shared-conventions.md +62 -12
  164. package/adapters/cursor/references/stage-exit-protocol.md +14 -4
  165. package/adapters/cursor/references/vendor-construct-inventory.md +1 -1
  166. package/adapters/cursor/scripts/epic-manifest.py +49 -6
  167. package/adapters/cursor/scripts/forge-root.sh +47 -3
  168. package/adapters/cursor/scripts/forge-session.py +1179 -9
  169. package/adapters/cursor/scripts/validate-traceability.py +6 -1
  170. package/adapters/cursor/skills/forge/forge.mdc +11 -5
  171. package/adapters/cursor/skills/forge/references/pipeline-state-schema.json +1 -1
  172. package/adapters/cursor/skills/forge/references/shared-conventions.md +62 -12
  173. package/adapters/cursor/skills/forge/references/stage-exit-protocol.md +14 -4
  174. package/adapters/cursor/skills/forge-0-epic/forge-0-epic.mdc +1 -1
  175. package/adapters/cursor/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
  176. package/adapters/cursor/skills/forge-0-epic/references/shared-conventions.md +62 -12
  177. package/adapters/cursor/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
  178. package/adapters/cursor/skills/forge-1-prd/forge-1-prd.mdc +25 -8
  179. package/adapters/cursor/skills/forge-1-prd/references/shared-conventions.md +62 -12
  180. package/adapters/cursor/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
  181. package/adapters/cursor/skills/forge-2-tech/forge-2-tech.mdc +25 -7
  182. package/adapters/cursor/skills/forge-2-tech/references/shared-conventions.md +62 -12
  183. package/adapters/cursor/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
  184. package/adapters/cursor/skills/forge-3-specs/forge-3-specs.mdc +24 -7
  185. package/adapters/cursor/skills/forge-3-specs/references/shared-conventions.md +62 -12
  186. package/adapters/cursor/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
  187. package/adapters/cursor/skills/forge-4-backlog/forge-4-backlog.mdc +23 -7
  188. package/adapters/cursor/skills/forge-4-backlog/references/shared-conventions.md +62 -12
  189. package/adapters/cursor/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
  190. package/adapters/cursor/skills/forge-5-loop/forge-5-loop.mdc +25 -25
  191. package/adapters/cursor/skills/forge-5-loop/references/agent-selection.md +116 -0
  192. package/adapters/cursor/skills/forge-5-loop/references/runner-contract.md +14 -107
  193. package/adapters/cursor/skills/forge-5-loop/references/shared-conventions.md +62 -12
  194. package/adapters/cursor/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
  195. package/adapters/cursor/skills/forge-6-docs/forge-6-docs.mdc +11 -5
  196. package/adapters/cursor/skills/forge-6-docs/references/shared-conventions.md +62 -12
  197. package/adapters/cursor/skills/forge-fix/references/shared-conventions.md +62 -12
  198. package/adapters/cursor/skills/forge-fix/references/stage-exit-protocol.md +14 -4
  199. package/adapters/cursor/skills/forge-guide/references/forge-config-schema.json +2 -2
  200. package/adapters/cursor/skills/forge-guide/references/shared-conventions.md +62 -12
  201. package/adapters/cursor/skills/forge-verify/forge-verify.mdc +22 -12
  202. package/adapters/cursor/skills/forge-verify/references/findings-template.md +157 -0
  203. package/adapters/cursor/skills/forge-verify/references/pipeline-state-schema.json +1 -1
  204. package/adapters/cursor/skills/forge-verify/references/shared-conventions.md +62 -12
  205. package/adapters/cursor/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
  206. package/adapters/cursor/skills/forge-verify/references/verification-checklists/epic.md +79 -0
  207. package/adapters/cursor/skills/forge-verify/references/verification-checklists/impl.md +48 -0
  208. package/adapters/cursor/skills/forge-verify/references/verification-checklists/prd.md +31 -0
  209. package/adapters/cursor/skills/forge-verify/references/verification-checklists/specs.md +64 -0
  210. package/adapters/cursor/skills/forge-verify/references/verification-checklists/tech.md +35 -0
  211. package/adapters/gemini/.feature-forge-bundle.json +1 -1
  212. package/adapters/gemini/agents/forge-verifier.md +1 -1
  213. package/adapters/gemini/gemini-extension.json +1 -1
  214. package/adapters/gemini/references/forge-config-schema.json +2 -2
  215. package/adapters/gemini/references/pipeline-state-schema.json +1 -1
  216. package/adapters/gemini/references/shared-conventions.md +62 -12
  217. package/adapters/gemini/references/stage-exit-protocol.md +14 -4
  218. package/adapters/gemini/references/vendor-construct-inventory.md +1 -1
  219. package/adapters/gemini/scripts/epic-manifest.py +49 -6
  220. package/adapters/gemini/scripts/forge-root.sh +47 -3
  221. package/adapters/gemini/scripts/forge-session.py +1179 -9
  222. package/adapters/gemini/scripts/validate-traceability.py +6 -1
  223. package/adapters/gemini/skills/forge/forge.md +11 -5
  224. package/adapters/gemini/skills/forge/references/pipeline-state-schema.json +1 -1
  225. package/adapters/gemini/skills/forge/references/shared-conventions.md +62 -12
  226. package/adapters/gemini/skills/forge/references/stage-exit-protocol.md +14 -4
  227. package/adapters/gemini/skills/forge-0-epic/forge-0-epic.md +1 -1
  228. package/adapters/gemini/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
  229. package/adapters/gemini/skills/forge-0-epic/references/shared-conventions.md +62 -12
  230. package/adapters/gemini/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
  231. package/adapters/gemini/skills/forge-1-prd/forge-1-prd.md +25 -8
  232. package/adapters/gemini/skills/forge-1-prd/references/shared-conventions.md +62 -12
  233. package/adapters/gemini/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
  234. package/adapters/gemini/skills/forge-2-tech/forge-2-tech.md +25 -7
  235. package/adapters/gemini/skills/forge-2-tech/references/shared-conventions.md +62 -12
  236. package/adapters/gemini/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
  237. package/adapters/gemini/skills/forge-3-specs/forge-3-specs.md +24 -7
  238. package/adapters/gemini/skills/forge-3-specs/references/shared-conventions.md +62 -12
  239. package/adapters/gemini/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
  240. package/adapters/gemini/skills/forge-4-backlog/forge-4-backlog.md +23 -7
  241. package/adapters/gemini/skills/forge-4-backlog/references/shared-conventions.md +62 -12
  242. package/adapters/gemini/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
  243. package/adapters/gemini/skills/forge-5-loop/forge-5-loop.md +25 -25
  244. package/adapters/gemini/skills/forge-5-loop/references/agent-selection.md +116 -0
  245. package/adapters/gemini/skills/forge-5-loop/references/runner-contract.md +14 -107
  246. package/adapters/gemini/skills/forge-5-loop/references/shared-conventions.md +62 -12
  247. package/adapters/gemini/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
  248. package/adapters/gemini/skills/forge-6-docs/forge-6-docs.md +11 -5
  249. package/adapters/gemini/skills/forge-6-docs/references/shared-conventions.md +62 -12
  250. package/adapters/gemini/skills/forge-fix/references/shared-conventions.md +62 -12
  251. package/adapters/gemini/skills/forge-fix/references/stage-exit-protocol.md +14 -4
  252. package/adapters/gemini/skills/forge-guide/references/forge-config-schema.json +2 -2
  253. package/adapters/gemini/skills/forge-guide/references/shared-conventions.md +62 -12
  254. package/adapters/gemini/skills/forge-verify/forge-verify.md +22 -12
  255. package/adapters/gemini/skills/forge-verify/references/findings-template.md +157 -0
  256. package/adapters/gemini/skills/forge-verify/references/pipeline-state-schema.json +1 -1
  257. package/adapters/gemini/skills/forge-verify/references/shared-conventions.md +62 -12
  258. package/adapters/gemini/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
  259. package/adapters/gemini/skills/forge-verify/references/verification-checklists/epic.md +79 -0
  260. package/adapters/gemini/skills/forge-verify/references/verification-checklists/impl.md +48 -0
  261. package/adapters/gemini/skills/forge-verify/references/verification-checklists/prd.md +31 -0
  262. package/adapters/gemini/skills/forge-verify/references/verification-checklists/specs.md +64 -0
  263. package/adapters/gemini/skills/forge-verify/references/verification-checklists/tech.md +35 -0
  264. package/adapters/pi/.feature-forge-bundle.json +6 -0
  265. package/adapters/pi/agents/forge-researcher.md +139 -0
  266. package/adapters/pi/agents/forge-spec-writer.md +116 -0
  267. package/adapters/pi/agents/forge-verifier.md +126 -0
  268. package/adapters/pi/extensions/ask-user-question/LICENSE +21 -0
  269. package/adapters/pi/extensions/ask-user-question/README.md +91 -0
  270. package/adapters/pi/extensions/ask-user-question/ask-user-question.ts +298 -0
  271. package/adapters/pi/extensions/ask-user-question/config.ts +78 -0
  272. package/adapters/pi/extensions/ask-user-question/events.ts +57 -0
  273. package/adapters/pi/extensions/ask-user-question/index.ts +61 -0
  274. package/adapters/pi/extensions/ask-user-question/locales/de.json +27 -0
  275. package/adapters/pi/extensions/ask-user-question/locales/en.json +27 -0
  276. package/adapters/pi/extensions/ask-user-question/locales/es.json +27 -0
  277. package/adapters/pi/extensions/ask-user-question/locales/fr.json +27 -0
  278. package/adapters/pi/extensions/ask-user-question/locales/pt-BR.json +27 -0
  279. package/adapters/pi/extensions/ask-user-question/locales/pt.json +27 -0
  280. package/adapters/pi/extensions/ask-user-question/locales/ru.json +27 -0
  281. package/adapters/pi/extensions/ask-user-question/locales/uk.json +27 -0
  282. package/adapters/pi/extensions/ask-user-question/locales/zh.json +29 -0
  283. package/adapters/pi/extensions/ask-user-question/reconcile.ts +49 -0
  284. package/adapters/pi/extensions/ask-user-question/rpc-fallback.ts +168 -0
  285. package/adapters/pi/extensions/ask-user-question/state/build-questionnaire.ts +302 -0
  286. package/adapters/pi/extensions/ask-user-question/state/i18n-bridge.ts +53 -0
  287. package/adapters/pi/extensions/ask-user-question/state/key-router.ts +277 -0
  288. package/adapters/pi/extensions/ask-user-question/state/questionnaire-session.ts +234 -0
  289. package/adapters/pi/extensions/ask-user-question/state/row-intent.ts +145 -0
  290. package/adapters/pi/extensions/ask-user-question/state/selectors/contract.ts +26 -0
  291. package/adapters/pi/extensions/ask-user-question/state/selectors/derivations.ts +42 -0
  292. package/adapters/pi/extensions/ask-user-question/state/selectors/focus.ts +19 -0
  293. package/adapters/pi/extensions/ask-user-question/state/selectors/projections.ts +101 -0
  294. package/adapters/pi/extensions/ask-user-question/state/state-reducer.ts +292 -0
  295. package/adapters/pi/extensions/ask-user-question/state/state.ts +55 -0
  296. package/adapters/pi/extensions/ask-user-question/tool/format-answer.ts +31 -0
  297. package/adapters/pi/extensions/ask-user-question/tool/response-envelope.ts +49 -0
  298. package/adapters/pi/extensions/ask-user-question/tool/types.ts +147 -0
  299. package/adapters/pi/extensions/ask-user-question/tool/validate-questionnaire.ts +58 -0
  300. package/adapters/pi/extensions/ask-user-question/vendor-config-shim.ts +65 -0
  301. package/adapters/pi/extensions/ask-user-question/view/component-binding.ts +47 -0
  302. package/adapters/pi/extensions/ask-user-question/view/components/inline-input.ts +98 -0
  303. package/adapters/pi/extensions/ask-user-question/view/components/multi-select-view.ts +193 -0
  304. package/adapters/pi/extensions/ask-user-question/view/components/option-list-view.ts +70 -0
  305. package/adapters/pi/extensions/ask-user-question/view/components/preview/markdown-content-cache.ts +79 -0
  306. package/adapters/pi/extensions/ask-user-question/view/components/preview/preview-block-renderer.ts +111 -0
  307. package/adapters/pi/extensions/ask-user-question/view/components/preview/preview-box-renderer.ts +88 -0
  308. package/adapters/pi/extensions/ask-user-question/view/components/preview/preview-layout-decider.ts +202 -0
  309. package/adapters/pi/extensions/ask-user-question/view/components/preview/preview-pane.ts +228 -0
  310. package/adapters/pi/extensions/ask-user-question/view/components/submit-picker.ts +67 -0
  311. package/adapters/pi/extensions/ask-user-question/view/components/tab-bar.ts +59 -0
  312. package/adapters/pi/extensions/ask-user-question/view/components/wrapping-select.ts +293 -0
  313. package/adapters/pi/extensions/ask-user-question/view/dialog-builder.ts +224 -0
  314. package/adapters/pi/extensions/ask-user-question/view/props-adapter.ts +125 -0
  315. package/adapters/pi/extensions/ask-user-question/view/stateful-view.ts +26 -0
  316. package/adapters/pi/extensions/ask-user-question/view/tab-components.ts +18 -0
  317. package/adapters/pi/extensions/ask-user-question/view/tab-content-strategy.ts +252 -0
  318. package/adapters/pi/package.json +26 -0
  319. package/adapters/pi/references/epic-manifest-schema.json +125 -0
  320. package/adapters/{claude/skills/forge-5-loop → pi}/references/forge-config-schema.json +4 -4
  321. package/adapters/{claude/skills/forge-1-prd → pi}/references/pipeline-state-schema.json +1 -1
  322. package/adapters/pi/references/portable-root.md +71 -0
  323. package/adapters/pi/references/process-overview.md +143 -0
  324. package/adapters/pi/references/ralph-loop-contract.md +221 -0
  325. package/adapters/pi/references/shared-conventions.md +345 -0
  326. package/adapters/pi/references/skill-frontmatter.schema.json +17 -0
  327. package/adapters/pi/references/stack-resolution.md +54 -0
  328. package/adapters/pi/references/stacks/_generic.md +111 -0
  329. package/adapters/pi/references/stacks/go.md +157 -0
  330. package/adapters/pi/references/stacks/python.md +184 -0
  331. package/adapters/pi/references/stacks/rust.md +170 -0
  332. package/adapters/pi/references/stacks/typescript.md +134 -0
  333. package/adapters/pi/references/stage-exit-protocol.md +268 -0
  334. package/adapters/pi/references/templates/specs-hygiene/AGENTS.md +32 -0
  335. package/adapters/pi/references/templates/specs-hygiene/CLAUDE.md +31 -0
  336. package/adapters/pi/references/vendor-construct-inventory.md +50 -0
  337. package/adapters/pi/scripts/epic-manifest.py +1737 -0
  338. package/adapters/pi/scripts/forge-bootstrap.py +1070 -0
  339. package/adapters/pi/scripts/forge-init.sh +58 -0
  340. package/adapters/pi/scripts/forge-root.sh +179 -0
  341. package/adapters/pi/scripts/forge-session.py +3036 -0
  342. package/adapters/pi/scripts/validate-traceability.py +155 -0
  343. package/adapters/pi/skills/forge/SKILL.md +249 -0
  344. package/adapters/{claude/skills/forge-4-backlog → pi/skills/forge}/references/pipeline-state-schema.json +1 -1
  345. package/adapters/pi/skills/forge/references/process-overview.md +143 -0
  346. package/adapters/pi/skills/forge/references/shared-conventions.md +345 -0
  347. package/adapters/pi/skills/forge/references/stage-exit-protocol.md +268 -0
  348. package/adapters/pi/skills/forge-0-epic/SKILL.md +308 -0
  349. package/adapters/pi/skills/forge-0-epic/references/edit-mode.md +266 -0
  350. package/adapters/pi/skills/forge-0-epic/references/epic-manifest-subcommands.md +75 -0
  351. package/adapters/{claude/skills/forge-2-tech → pi/skills/forge-0-epic}/references/pipeline-state-schema.json +1 -1
  352. package/adapters/pi/skills/forge-0-epic/references/portable-root.md +71 -0
  353. package/adapters/pi/skills/forge-0-epic/references/shared-conventions.md +345 -0
  354. package/adapters/pi/skills/forge-0-epic/references/stage-exit-protocol.md +268 -0
  355. package/adapters/pi/skills/forge-1-prd/SKILL.md +181 -0
  356. package/adapters/pi/skills/forge-1-prd/references/prd-template.md +106 -0
  357. package/adapters/pi/skills/forge-1-prd/references/shared-conventions.md +345 -0
  358. package/adapters/pi/skills/forge-1-prd/references/stage-exit-protocol.md +268 -0
  359. package/adapters/pi/skills/forge-2-tech/SKILL.md +243 -0
  360. package/adapters/pi/skills/forge-2-tech/references/shared-conventions.md +345 -0
  361. package/adapters/pi/skills/forge-2-tech/references/stack-discovery-checklist.md +95 -0
  362. package/adapters/pi/skills/forge-2-tech/references/stack-resolution.md +54 -0
  363. package/adapters/pi/skills/forge-2-tech/references/stacks/_generic.md +111 -0
  364. package/adapters/pi/skills/forge-2-tech/references/stacks/go.md +157 -0
  365. package/adapters/pi/skills/forge-2-tech/references/stacks/python.md +184 -0
  366. package/adapters/pi/skills/forge-2-tech/references/stacks/rust.md +170 -0
  367. package/adapters/pi/skills/forge-2-tech/references/stacks/typescript.md +134 -0
  368. package/adapters/pi/skills/forge-2-tech/references/stage-exit-protocol.md +268 -0
  369. package/adapters/pi/skills/forge-3-specs/SKILL.md +195 -0
  370. package/adapters/pi/skills/forge-3-specs/references/shared-conventions.md +345 -0
  371. package/adapters/pi/skills/forge-3-specs/references/spec-archetypes.md +106 -0
  372. package/adapters/pi/skills/forge-3-specs/references/spec-examples.md +71 -0
  373. package/adapters/pi/skills/forge-3-specs/references/stacks/_generic.md +111 -0
  374. package/adapters/pi/skills/forge-3-specs/references/stacks/go.md +157 -0
  375. package/adapters/pi/skills/forge-3-specs/references/stacks/python.md +184 -0
  376. package/adapters/pi/skills/forge-3-specs/references/stacks/rust.md +170 -0
  377. package/adapters/pi/skills/forge-3-specs/references/stacks/typescript.md +134 -0
  378. package/adapters/pi/skills/forge-3-specs/references/stage-exit-protocol.md +268 -0
  379. package/adapters/pi/skills/forge-4-backlog/SKILL.md +191 -0
  380. package/adapters/pi/skills/forge-4-backlog/references/shared-conventions.md +345 -0
  381. package/adapters/pi/skills/forge-4-backlog/references/stage-exit-protocol.md +268 -0
  382. package/adapters/pi/skills/forge-5-loop/SKILL.md +314 -0
  383. package/adapters/pi/skills/forge-5-loop/references/agent-selection.md +116 -0
  384. package/adapters/pi/skills/forge-5-loop/references/ralph-loop-contract.md +221 -0
  385. package/adapters/pi/skills/forge-5-loop/references/result-reporting.md +85 -0
  386. package/adapters/pi/skills/forge-5-loop/references/runner-contract.md +248 -0
  387. package/adapters/pi/skills/forge-5-loop/references/shared-conventions.md +345 -0
  388. package/adapters/pi/skills/forge-5-loop/references/stage-exit-protocol.md +268 -0
  389. package/adapters/pi/skills/forge-6-docs/SKILL.md +208 -0
  390. package/adapters/pi/skills/forge-6-docs/references/doc-conventions.md +126 -0
  391. package/adapters/pi/skills/forge-6-docs/references/shared-conventions.md +345 -0
  392. package/adapters/pi/skills/forge-bootstrap/SKILL.md +250 -0
  393. package/adapters/pi/skills/forge-bootstrap/references/templates/ci/github-actions.yml +12 -0
  394. package/adapters/pi/skills/forge-bootstrap/references/templates/generic/run.sh +3 -0
  395. package/adapters/pi/skills/forge-bootstrap/references/templates/generic/test.sh +13 -0
  396. package/adapters/pi/skills/forge-bootstrap/references/templates/go/go.mod +3 -0
  397. package/adapters/pi/skills/forge-bootstrap/references/templates/go/main.go +12 -0
  398. package/adapters/pi/skills/forge-bootstrap/references/templates/go/main_test.go +11 -0
  399. package/adapters/pi/skills/forge-bootstrap/references/templates/hygiene/AGENTS.md +35 -0
  400. package/adapters/pi/skills/forge-bootstrap/references/templates/hygiene/CLAUDE.md +36 -0
  401. package/adapters/pi/skills/forge-bootstrap/references/templates/hygiene/README.md +11 -0
  402. package/adapters/pi/skills/forge-bootstrap/references/templates/licenses/Apache-2.0/LICENSE +198 -0
  403. package/adapters/pi/skills/forge-bootstrap/references/templates/licenses/MIT/LICENSE +21 -0
  404. package/adapters/pi/skills/forge-bootstrap/references/templates/python/pyproject.toml +24 -0
  405. package/adapters/pi/skills/forge-bootstrap/references/templates/python/src/{{PKG}}/__init__.py +5 -0
  406. package/adapters/pi/skills/forge-bootstrap/references/templates/python/src/{{PKG}}/main.py +13 -0
  407. package/adapters/pi/skills/forge-bootstrap/references/templates/python/tests/test_smoke.py +8 -0
  408. package/adapters/pi/skills/forge-bootstrap/references/templates/rust/Cargo.toml +15 -0
  409. package/adapters/pi/skills/forge-bootstrap/references/templates/rust/src/lib.rs +7 -0
  410. package/adapters/pi/skills/forge-bootstrap/references/templates/rust/src/main.rs +5 -0
  411. package/adapters/pi/skills/forge-bootstrap/references/templates/rust/tests/smoke.rs +6 -0
  412. package/adapters/pi/skills/forge-bootstrap/references/templates/typescript/package.json +15 -0
  413. package/adapters/pi/skills/forge-bootstrap/references/templates/typescript/src/index.ts +4 -0
  414. package/adapters/pi/skills/forge-bootstrap/references/templates/typescript/test/smoke.test.ts +6 -0
  415. package/adapters/pi/skills/forge-bootstrap/references/templates/typescript/tsconfig.json +14 -0
  416. package/adapters/pi/skills/forge-fix/SKILL.md +98 -0
  417. package/adapters/pi/skills/forge-fix/references/shared-conventions.md +345 -0
  418. package/adapters/pi/skills/forge-fix/references/stage-exit-protocol.md +268 -0
  419. package/adapters/pi/skills/forge-guide/SKILL.md +192 -0
  420. package/adapters/{codex/skills/forge-4-backlog → pi/skills/forge-guide}/references/forge-config-schema.json +4 -4
  421. package/adapters/pi/skills/forge-guide/references/process-overview.md +143 -0
  422. package/adapters/pi/skills/forge-guide/references/ralph-loop-contract.md +221 -0
  423. package/adapters/pi/skills/forge-guide/references/shared-conventions.md +345 -0
  424. package/adapters/pi/skills/forge-guide/references/stack-resolution.md +54 -0
  425. package/adapters/pi/skills/forge-guide/references/stacks/_generic.md +111 -0
  426. package/adapters/pi/skills/forge-guide/references/stacks/go.md +157 -0
  427. package/adapters/pi/skills/forge-guide/references/stacks/python.md +184 -0
  428. package/adapters/pi/skills/forge-guide/references/stacks/rust.md +170 -0
  429. package/adapters/pi/skills/forge-guide/references/stacks/typescript.md +134 -0
  430. package/adapters/pi/skills/forge-init/SKILL.md +72 -0
  431. package/adapters/pi/skills/forge-verify/SKILL.md +283 -0
  432. package/adapters/pi/skills/forge-verify/references/findings-template.md +157 -0
  433. package/adapters/{claude/skills/forge-3-specs → pi/skills/forge-verify}/references/pipeline-state-schema.json +1 -1
  434. package/adapters/pi/skills/forge-verify/references/shared-conventions.md +345 -0
  435. package/adapters/pi/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
  436. package/adapters/pi/skills/forge-verify/references/verification-checklists/epic.md +79 -0
  437. package/adapters/pi/skills/forge-verify/references/verification-checklists/impl.md +48 -0
  438. package/adapters/pi/skills/forge-verify/references/verification-checklists/prd.md +31 -0
  439. package/adapters/pi/skills/forge-verify/references/verification-checklists/specs.md +64 -0
  440. package/adapters/pi/skills/forge-verify/references/verification-checklists/tech.md +35 -0
  441. package/dist/agent-targets.d.ts +1 -1
  442. package/dist/agent-targets.js +23 -3
  443. package/dist/detect.d.ts +1 -1
  444. package/dist/detect.js +2 -1
  445. package/dist/manifest.d.ts +1 -1
  446. package/dist/manifest.js +2 -2
  447. package/dist/placements.js +5 -1
  448. package/dist/rauf.d.ts +4 -4
  449. package/dist/rauf.js +3 -3
  450. package/dist/types.d.ts +31 -6
  451. package/dist/types.js +6 -3
  452. package/package.json +14 -3
  453. package/adapters/claude/skills/forge-4-backlog/references/forge-config-schema.json +0 -236
  454. package/adapters/claude/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
  455. package/adapters/claude/skills/forge-verify/references/verification-checklists.md +0 -477
  456. package/adapters/codex/skills/forge-1-prd/references/pipeline-state-schema.json +0 -191
  457. package/adapters/codex/skills/forge-2-tech/references/pipeline-state-schema.json +0 -191
  458. package/adapters/codex/skills/forge-3-specs/references/pipeline-state-schema.json +0 -191
  459. package/adapters/codex/skills/forge-4-backlog/references/pipeline-state-schema.json +0 -191
  460. package/adapters/codex/skills/forge-5-loop/references/forge-config-schema.json +0 -236
  461. package/adapters/codex/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
  462. package/adapters/codex/skills/forge-verify/references/verification-checklists.md +0 -477
  463. package/adapters/copilot/skills/forge-1-prd/references/pipeline-state-schema.json +0 -191
  464. package/adapters/copilot/skills/forge-2-tech/references/pipeline-state-schema.json +0 -191
  465. package/adapters/copilot/skills/forge-3-specs/references/pipeline-state-schema.json +0 -191
  466. package/adapters/copilot/skills/forge-4-backlog/references/forge-config-schema.json +0 -236
  467. package/adapters/copilot/skills/forge-4-backlog/references/pipeline-state-schema.json +0 -191
  468. package/adapters/copilot/skills/forge-5-loop/references/forge-config-schema.json +0 -236
  469. package/adapters/copilot/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
  470. package/adapters/copilot/skills/forge-verify/references/verification-checklists.md +0 -477
  471. package/adapters/cursor/skills/forge-1-prd/references/pipeline-state-schema.json +0 -191
  472. package/adapters/cursor/skills/forge-2-tech/references/pipeline-state-schema.json +0 -191
  473. package/adapters/cursor/skills/forge-3-specs/references/pipeline-state-schema.json +0 -191
  474. package/adapters/cursor/skills/forge-4-backlog/references/forge-config-schema.json +0 -236
  475. package/adapters/cursor/skills/forge-4-backlog/references/pipeline-state-schema.json +0 -191
  476. package/adapters/cursor/skills/forge-5-loop/references/forge-config-schema.json +0 -236
  477. package/adapters/cursor/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
  478. package/adapters/cursor/skills/forge-verify/references/verification-checklists.md +0 -477
  479. package/adapters/gemini/skills/forge-1-prd/references/pipeline-state-schema.json +0 -191
  480. package/adapters/gemini/skills/forge-2-tech/references/pipeline-state-schema.json +0 -191
  481. package/adapters/gemini/skills/forge-3-specs/references/pipeline-state-schema.json +0 -191
  482. package/adapters/gemini/skills/forge-4-backlog/references/forge-config-schema.json +0 -236
  483. package/adapters/gemini/skills/forge-4-backlog/references/pipeline-state-schema.json +0 -191
  484. package/adapters/gemini/skills/forge-5-loop/references/forge-config-schema.json +0 -236
  485. package/adapters/gemini/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
  486. package/adapters/gemini/skills/forge-verify/references/verification-checklists.md +0 -477
@@ -0,0 +1,116 @@
1
+ # forge-5-loop — Agent Selection (Step 2d, conditional)
2
+
3
+ The agent-selection surface, its Claude-only model-alias guard, and the optional-
4
+ flags catalog. Loaded ONLY when `loopRunner.agentArgument` is present (the Step 2d
5
+ capability gate); when the gate is off, Step 2d is byte-identical to today and this
6
+ file is never read.
7
+
8
+ ## Agent selection (Step 2d)
9
+
10
+ This section is **parallel** to `## Model selection precedence` in
11
+ `references/runner-contract.md`: it governs which **coding agent** rauf drives for the
12
+ run. The entire surface is
13
+ **presence-gated** on `loopRunner.agentArgument` — when that field is absent or
14
+ empty, there is no selector, no probe, and no `{agent}` substitution, and Step 2d /
15
+ Step 3c are byte-identical to today (capability gate;
16
+ `02-config-schema-and-gating.md`, REQ-PLUG-02). The rest assumes the gate is on.
17
+
18
+ **Precedence (highest wins):**
19
+
20
+ ```
21
+ item.provider > --agent (run selection) > loopRunner.defaultAgent (project) > runner default (claude-cli)
22
+ ```
23
+
24
+ **Run-layer mapping — why forge never re-implements rauf's resolver.** forge owns
25
+ **only** its run and project layers and collapses them into **one** value
26
+ (`resolve()`: `run_selection or defaultAgent or none`), which it emits as a single
27
+ `--agent {agent}` occupying rauf's **run layer only**. rauf alone resolves
28
+ item-vs-run via its own 5-layer resolver, sitting the per-item `BacklogItem.provider`
29
+ **above** forge's run layer — so a run selection can never clobber a deliberate
30
+ per-item agent. forge **never reads, writes, or overrides** `BacklogItem.provider`
31
+ (REQ-AGENT-05). When forge sends nothing (the default path), rauf applies its own
32
+ default `claude-cli`, byte-identical to today. Empty/whitespace selections are
33
+ treated as unset, and an explicit pick of the runner default id collapses to the
34
+ default path (append nothing, run no probe). See
35
+ `03-selection-resolution-observability.md §3–§4`.
36
+
37
+ **Availability pre-check + disambiguation.** For a **non-default** resolved id only,
38
+ forge runs `loopRunner.agentsProbeCommand` **once** (no retries) and classifies the
39
+ id by **membership** in the advertised set (`{ row.id for row in agents }`), then the
40
+ matching row's `available` flag — **never** by exit code, because `rauf agents
41
+ --json` always exits 0 (an unknown id is simply absent; a known-unavailable one is
42
+ present with `available: false`):
43
+
44
+ - **UNKNOWN** (`∉` advertised set): hard-reject **before any loop side-effect**,
45
+ listing the sorted valid ids; **no proceed-anyway**; the value never interpolates
46
+ into `{agent}` (the advertised set IS the allow-list — REQ-SEC-01).
47
+ - **UNAVAILABLE** (member, `available == False`): warn with the row's `detail`, then
48
+ offer **proceed-anyway OR choose-another** — never silent.
49
+ - **AVAILABLE** (member, `available == True`): proceed; the validated id fills
50
+ `{agent}`.
51
+ - **Probe failure** (non-zero exit / unparseable / wrong shape / empty `agents[]` /
52
+ row missing `id`): surface it and offer **choose-another OR abort**; never launch
53
+ the non-default agent unvalidated, never silently fall back to the default.
54
+
55
+ The default / `claude-cli` path runs **no** probe (zero extra cost). See
56
+ `04-availability-precheck.md` for the full pre-check, classification, and allow-list,
57
+ and `02-config-schema-and-gating.md` for the capability gate.
58
+
59
+ > **Probe false-negative for Claude Code installs (advisory).** `rauf agents` may
60
+ > report `claude-cli` **unavailable** (e.g. *"credentials file not found:
61
+ > ~/.config/claude-code/credentials.json"*) even when a working `claude` CLI
62
+ > authenticates elsewhere — the probe's credential heuristic doesn't cover every
63
+ > install. This is a rauf probe concern, not something forge-5-loop fixes. The
64
+ > **default-agent path skips the probe entirely**, so an ordinary default run is
65
+ > unaffected; only an **explicit** `--agent claude-cli` would be flagged UNAVAILABLE,
66
+ > and the existing **proceed-anyway** path (above) covers it. Do not attempt to
67
+ > patch rauf's probe from here.
68
+
69
+ ### Claude-only model-alias guard (Step 2d, sub-step d-model)
70
+
71
+ When the resolved agent is **non-default** (not the default / `claude-cli` path),
72
+ forge must guard against a backlog whose items pin **Claude-specific** model aliases.
73
+ forge-4-backlog (via the rauf author-backlog skill) writes Claude tier aliases
74
+ (`opus` / `sonnet`) into each item's `model`. Because rauf's precedence puts
75
+ `item.model` **above** `--agent`, the alias is forwarded verbatim to the selected
76
+ agent; a non-Claude agent (e.g. codex) then 400s — *"The 'sonnet' model is not
77
+ supported when using Codex with a ChatGPT account."* — so **every** spawn exits 1 and
78
+ rauf reports *"Circuit breaker: 3 consecutive infra failures — halting"* with no hint
79
+ of the real cause. forge-5-loop therefore detects Claude-specific `model` aliases in
80
+ the backlog (tier aliases `opus`/`sonnet`/`haiku` or `claude-*` ids) and, before
81
+ launch, **warns** and offers (via `AskUserQuestion`) to **strip `model` for this run**
82
+ (remove the key from each affected item so each spawn uses the agent's own default) or
83
+ **proceed as-is**. forge only ever touches the `model` field — never `provider`. The
84
+ default / `claude-cli` path skips this guard (the aliases are valid there).
85
+
86
+ > **Follow-up (out of scope here — rauf repo).** The durable fix would be for the
87
+ > rauf `author-backlog` skill to keep `model` **provider-neutral** by default (or to
88
+ > document that writing a tier alias binds the backlog to Claude agents). That lives
89
+ > in the separate rauf plugin/repo, not feature-forge; tracked as a follow-up.
90
+ >
91
+ > **Follow-up (out of scope here — rauf repo).** The durable fix for the root/sandbox
92
+ > refusal (see "Root/sandbox env guard" under
93
+ > `## Launch detail (Step 3b — background process)` in `references/runner-contract.md`)
94
+ > is for **rauf itself** to honor
95
+ > `IS_SANDBOX` when it launches `claude --dangerously-skip-permissions` as root (or to
96
+ > detect root+flag-refused and emit a clear error instead of an opaque circuit-break).
97
+ > feature-forge's launch-time export is the mitigation; the upstream fix lives in the
98
+ > rauf plugin/repo. Track as a follow-up.
99
+
100
+ ## Optional flags catalog (Step 2d, rauf)
101
+
102
+ These are the optional flags the user may add to the rendered run command. If the
103
+ user requests additional flags, append them to the rendered run command.
104
+
105
+ ```
106
+ --agent <id> Coding agent rauf drives this run (see `## Agent selection` above).
107
+ Only the runner's advertised ids are valid; an unknown id is
108
+ rejected before launch. Shown only when the runner advertises
109
+ an agent surface (loopRunner.agentArgument present).
110
+ --review Run a review pass after all iterations (extra agent session)
111
+ --model <model> Override the model (see `## Model selection precedence` in
112
+ `references/runner-contract.md`)
113
+ --timeout <min> Per-session timeout in minutes (default: 60)
114
+ --retry-blocked Unblock and retry previously blocked items
115
+ ```
116
+
@@ -0,0 +1,221 @@
1
+ # The Loop-Runner Contract (consumer side)
2
+
3
+ feature-forge's pipeline ends by handing a `backlog.json` to an autonomous
4
+ **loop runner** that implements each item. feature-forge does not embed any
5
+ runner's internals — it talks to the runner through one indirection point: the
6
+ **`loopRunner`** block in `forge.config.json`.
7
+
8
+ ## The seam
9
+
10
+ Every command feature-forge runs against the runner is a template in
11
+ `loopRunner`, with `{bin}`, `{backlogDir}`, `{specsDir}`, and `{iterations}`
12
+ substituted at call time. `forge-5-loop` (execution), `forge-4-backlog`
13
+ (validation), and `forge-verify` (backlog validation) all render their commands
14
+ from this block — there are no hardcoded `rauf …` commands in the skills, and
15
+ even the human log filename is tokenized via `{loopRunner.logFile}`.
16
+
17
+ When `forge.config.json` has no `loopRunner` block, feature-forge uses the
18
+ built-in defaults (see `references/forge-config-schema.json`) and announces
19
+ "defaulting to the rauf loop runner."
20
+
21
+ ## The contract a runner MUST satisfy
22
+
23
+ A conforming runner MUST implement the **backlog-tool / loop-runner contract**
24
+ defined authoritatively in rauf's
25
+ [`SPEC-BACKLOG-TOOL-CONTRACT.md`](https://github.com/garygentry/rauf/blob/main/docs/SPEC-BACKLOG-TOOL-CONTRACT.md)
26
+ (Part A). In summary, it must provide:
27
+
28
+ - **A backlog schema** with the published `$id` and an optional `schemaVersion`,
29
+ whose `type`/`status` vocabularies match the contract
30
+ (`type ∈ bug|bugfix|refactor|feature|chore|test`,
31
+ `status ∈ pending|in_progress|done|blocked`).
32
+ - **A `validate` verb** with exit codes `0` (valid) / `1` (findings) / `2`
33
+ (usage/IO) that emits `{ valid, findings[] }` under `--json`. This is the
34
+ single check feature-forge trusts — it never re-implements validation.
35
+ - **The signal protocol** (`RAUF_DONE` / `RAUF_BLOCKED` / `RAUF_NEEDS_HUMAN` /
36
+ `RAUF_REVIEW`). These are emitted by the *coding agent* into its stdout and
37
+ parsed by the runner — they are not runner-authored log lines, so consumers key
38
+ off the runner's parsed events (below), never the raw `RAUF_*` tokens (which can
39
+ also appear inside an agent's prose and produce false matches).
40
+ - **A machine-readable event stream** for live supervision (`loopRunner.eventStreamCommand`,
41
+ rauf: `loop run … --ndjson`): one JSON event per line with a stable `type`
42
+ vocabulary — `item_completed` / `item_blocked` / `needs_human` / `signal_parsed`
43
+ / `loop_completed` / `loop_error` / `loop_cancelled` / `llm_stuck_warning` (a
44
+ circuit-breaker halt surfaces as `loop_error`) — plus a
45
+ derived-status JSON (`loopRunner.statusJsonCommand`, rauf: `status … --json`) and
46
+ per-iteration telemetry with a `stuckWarning` flag (`loopRunner.watchCommand`,
47
+ rauf: `status … --json` — the `loop watch` verb was removed in v0.5.0). `forge-5-loop` supervises the run through these,
48
+ **not** by parsing the human log. `followCommand` / `logCommand` are
49
+ human-formatted streams for a person watching in a terminal, not machine surfaces.
50
+ - **The state-dir layout** (per-`--backlog` isolation under `loopRunner.stateDir`).
51
+ - **The CLI verbs** mapped by `loopRunner`: run (+ event-stream) / validate /
52
+ status (+ `--json`) / list / follow / log / version.
53
+ - **A `version` verb** (`{bin} version --json` → `{ version: <semver> }`) so
54
+ feature-forge can enforce `loopRunner.minRunnerVersion` before running.
55
+
56
+ > **The runner does not pause for human input.** When the coding agent signals
57
+ > `RAUF_NEEDS_HUMAN`/`RAUF_BLOCKED`/`RAUF_REVIEW`, a conforming runner sets that
58
+ > item aside and **keeps working other runnable items to completion** (rauf:
59
+ > `runner.ts` needs_human handler). So a supervising session can surface those
60
+ > events live (visibility) and cancel early, but it cannot inject an answer and
61
+ > resume the set-aside item mid-run — resolution is a follow-up retry pass. A
62
+ > first-class pause/resume-with-answer capability is a desirable runner
63
+ > enhancement (see `plans/rauf-enhancement-recommendations.md`).
64
+
65
+ ## rauf is the default and reference implementation
66
+
67
+ rauf owns the contract spec and is the runner feature-forge defaults to. The
68
+ authoring craft itself (how to decompose specs into well-scoped, verifiable
69
+ items) lives in rauf's **`author-backlog`** skill, which `forge-4-backlog`
70
+ delegates to — so the only thing binding feature-forge to a particular runner is
71
+ the schema + `validate` verb that this contract formalizes. A future runner swap
72
+ supplies its own `loopRunner` block (its own `bin`, schema, and `validate`
73
+ command) without touching any pipeline skill.
74
+
75
+ The coding-agent dimension this contract adds (below) is **additive and
76
+ presence-gated**: it exists only when the `loopRunner` block advertises it via
77
+ `agentArgument`. A runner that omits that field has no agent dimension at all —
78
+ the seam degrades to exactly today's behavior with no error, so default-to-rauf
79
+ and pluggability are unchanged. See `## Agent selection`.
80
+
81
+ ## Agent selection
82
+
83
+ This section is **contract-level**: it states what a conforming runner exposes
84
+ and what forge does with it, and defers every algorithm to the owning specs
85
+ (`02`/`03`/`04`/`05`).
86
+
87
+ ### What a conforming runner exposes (the consumed surface)
88
+
89
+ A runner that carries a coding-agent dimension exposes, in its `loopRunner`
90
+ block:
91
+
92
+ - an **`agentArgument`** template (rauf default `--agent {agent}`) — the
93
+ tokenized launch-time flag; its **presence** advertises the agent surface;
94
+ - an **`agentsProbeCommand`** (rauf default `{bin} agents --json`) emitting
95
+ `{ agents: [{ id, displayName, available, detail? }] }` and **always exiting
96
+ 0**;
97
+ - an optional **`defaultAgent`** project-default id.
98
+
99
+ These three fields are specified in full in `references/forge-config-schema.json`
100
+ and are the schema half of this contract. forge consumes rauf's existing
101
+ `--agent <id>` flag, `rauf agents` probe, `BacklogItem.provider`, and 5-layer
102
+ precedence — it conforms to them, it does not redesign them.
103
+
104
+ ### Precedence and the run-layer mapping
105
+
106
+ The agent-selection precedence is **`item > run > project > default`**,
107
+ deliberately parallel to the model-selection precedence (`item.model >
108
+ --model/options > project default > provider default`). It is realized as:
109
+
110
+ - **item** — `BacklogItem.provider`, applied by **rauf** from the backlog. forge
111
+ **never reads, writes, or overrides** it (pass-through), so a deliberate
112
+ per-item agent always wins.
113
+ - **run** — forge's per-run selector (`forge-5-loop` Step 2d).
114
+ - **project** — forge's `loopRunner.defaultAgent`.
115
+ - **default** — the runner's own default (`claude-cli` for rauf) when forge sends
116
+ nothing.
117
+
118
+ forge owns **only** the run and project layers. It collapses run-over-project
119
+ *inside itself* into the **single** `--agent {agent}` value it emits at the
120
+ **run layer**, and lets rauf apply the item override *above* that. forge **never
121
+ re-implements rauf's resolver**. The resolution algorithm itself lives in
122
+ `03-selection-resolution-observability.md`.
123
+
124
+ ### Availability probe + unknown/unavailable disambiguation
125
+
126
+ When the resolved agent is a **non-default** id, forge runs `agentsProbeCommand`
127
+ **once (no retries)** before any loop side-effect, parses the advertised
128
+ `agents[]`, and builds the advertised id set. Because the probe **always exits
129
+ 0**, an unknown id is distinguished from a known-but-unavailable one **only by
130
+ set membership**, not by exit code:
131
+
132
+ - **Unknown id** (not in the advertised set — a typo or unsupported agent):
133
+ **hard-reject before launch**, listing the valid ids. No proceed-anyway path.
134
+ No value is interpolated into `{agent}`.
135
+ - **Known but unavailable** (`available: false`): **warn** (showing the probe's
136
+ `detail`) and let the user **proceed-anyway or choose another** — never
137
+ silently abort, never silently proceed.
138
+ - **Available**: proceed.
139
+
140
+ The advertised id set is also the **allow-list**: the only value ever
141
+ interpolated into `{agent}` is a validated, advertised id. The **default /
142
+ claude path never reaches the probe** — it incurs no extra cost. The
143
+ `classify(...)` algorithm and the rejection-error text live in
144
+ `04-availability-precheck.md`.
145
+
146
+ ### Capability gate + version floor
147
+
148
+ Agent selection is **capability-gated** on the runner advertising
149
+ `agentArgument`: a runner whose `loopRunner` omits (or empties) that field
150
+ exposes no agent surface, so the per-run selector, the probe, and any `{agent}`
151
+ substitution **vanish entirely** and no agent argument is sent — byte-identical
152
+ to today. Degradation is **silent, not an error**, keeping alternate (non-rauf)
153
+ runners first-class. The gate condition is owned by
154
+ `02-config-schema-and-gating.md`.
155
+
156
+ Independently, the **version gate** floors at the runner version that ships the
157
+ agent surface. For rauf that is **0.6.0** (`loopRunner.minRunnerVersion`): the
158
+ `--agent` flag, the `agents` probe, and the preset agent registry are present in
159
+ rauf source at 0.6.0. A successful gate therefore guarantees those surfaces
160
+ exist before any run. See `## Version gating` and
161
+ `05-runner-discovery-version-gate.md`.
162
+
163
+ **This document — the `## Agent selection` section, the `## Per-stage agent
164
+ applicability` table, and the `## validate is agent-agnostic` note — together
165
+ with the augmented `loopRunner` schema block in
166
+ `references/forge-config-schema.json` constitute the `forge-loop-runner-contract`
167
+ expose, consumed by the `packaging-docs-ci` capstone as documentation input.**
168
+
169
+ ## Per-stage agent applicability
170
+
171
+ Every forge stage that invokes the loop runner is classified here. Only
172
+ `forge-5-loop` (execution) carries the coding-agent dimension; the two
173
+ validation-only stages are agent-agnostic.
174
+
175
+ | Stage | Runner verbs | Agent dimension |
176
+ |-------|-------------|-----------------|
177
+ | `forge-5-loop` | run / eventStream / status / version | **Full** — selector, probe, `--agent` |
178
+ | `forge-4-backlog` | `validate` | **None** — agent-agnostic |
179
+ | `forge-verify` | `validate` | **None** — agent-agnostic |
180
+
181
+ - **`forge-5-loop`** is the executor: it drives the run, so it renders the run /
182
+ event-stream / status / version verbs (and `list`) and carries the full agent
183
+ surface — the Step 2d selector, the availability probe, and the rendered
184
+ `agentArgument`.
185
+ - **`forge-4-backlog`** authors and then *validates* the backlog; its only runner
186
+ call is `validateCommand`. It also reads `versionCommand` for a graceful-degrade
187
+ check, but **passes no agent** and never runs `loop run`.
188
+ - **`forge-verify`** (backlog mode) re-runs the same `validateCommand` to surface
189
+ validation findings. It carries no agent dimension. This is **contract
190
+ coverage** of forge-verify (it is classified here), with an explicit agnostic
191
+ note (below) — **not** a new agent-driven run in forge-verify.
192
+
193
+ ### `validate` is agent-agnostic
194
+
195
+ The `validate` verb (`loopRunner.validateCommand`) checks a `backlog.json`
196
+ against the backlog schema and spec references. **It does not run a coding agent
197
+ and has no agent dimension.** No agent argument — `--agent`, the `{agent}` token,
198
+ or any agent id — may **ever** be passed to backlog validation, in **any** stage
199
+ (`forge-4-backlog`, `forge-verify`, or any future caller). Backlog validation is
200
+ a pure, deterministic check; the coding agent is irrelevant to it. A contributor
201
+ who later adds agent selection to a *new* stage MUST confirm that stage runs the
202
+ *execution* surface (like `forge-5-loop`), not `validate` — agent selection
203
+ belongs to execution only. If you find yourself adding `--agent` near a
204
+ `validateCommand` render, that is a bug.
205
+
206
+ ## Version gating
207
+
208
+ feature-forge requires a runner exposing `backlog validate` + backlog
209
+ `schemaVersion`, and the unified exit-code/status contract it reads. The floor is
210
+ now the **agent-surface floor**: the runner version that ships the `--agent`
211
+ flag, the `agents` probe, and the preset agent registry. For rauf that is
212
+ **0.6.0** (`loopRunner.minRunnerVersion`).
213
+ `forge-5-loop` runs `{bin} version --json`, semver-compares the reported version
214
+ against `minRunnerVersion`, and on a missing-or-too-old runner stops with
215
+ `loopRunner.installHint` (the CLI install/upgrade command) — **before** invoking
216
+ the loop. See `COMPATIBILITY.md` for the version matrix.
217
+
218
+ > **Two different "installs."** `installHint` obtains/upgrades the runner **CLI
219
+ > binary** (e.g. rauf's `install-binary.sh`). `setupHint` installs the runner's
220
+ > **per-project artifacts** (rauf: `rauf install .`). A failing version gate is
221
+ > always the former, never the latter.
@@ -0,0 +1,85 @@
1
+ # forge-5-loop — Step 4b Result-Report Templates
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.
6
+
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
+ ```
14
+
15
+ **The loop is complete — this is the one boundary where clearing before the next stage is optional.**
16
+
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:
20
+
21
+ ```
22
+ /skill:forge-6-docs {feature}
23
+ ```
24
+
25
+ **Runner review pass.** A review flag (e.g. rauf's `--review`) makes the runner run
26
+ a post-loop review that **auto-creates and implements fix items** rather than handing
27
+ findings to the user — distinct from `forge-verify impl` (a clean-context audit that
28
+ 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
30
+ happened":
31
+ ```
32
+ Runner review pass: {itemsCreated} fix item(s) created and implemented.
33
+ {summary}
34
+ ```
35
+ Omit this line when no `review_completed` event was emitted (no review flag passed).
36
+ The created items are already counted in the totals above.
37
+
38
+ **Some items need a human:**
39
+ ```
40
+ Loop completed for {feature}.
41
+ Completed: {done}/{total}
42
+ Needs human: {needsHuman} items (set aside during the run)
43
+
44
+ These items asked a question the loop couldn't answer:
45
+ - {id}: {title} — {reason}
46
+
47
+ Resolve, then retry:
48
+ - Answer the question(s) above, then re-run `/skill:forge-5-loop {feature}`
49
+ (add --retry-blocked to pick the set-aside items back up).
50
+ ```
51
+
52
+ **Some items blocked:**
53
+ ```
54
+ Loop completed for {feature}.
55
+ Completed: {done}/{total}
56
+ Blocked: {blocked} items
57
+
58
+ Blocked items:
59
+ - {id}: {title}
60
+ - {id}: {title}
61
+
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
66
+ ```
67
+
68
+ **Some items deferred (runner gave up after retries — "false blocks"):**
69
+ ```
70
+ Loop completed for {feature}.
71
+ Completed: {done}/{total}
72
+ Deferred: {deferred} items (no signal after retries — likely just need another pass)
73
+
74
+ Re-run `/skill:forge-5-loop {feature}` to retry deferred items.
75
+ ```
76
+
77
+ **Some items still pending (iteration limit reached):**
78
+ ```
79
+ Loop completed for {feature}.
80
+ Completed: {done}/{total}
81
+ Pending: {pending} items (iteration limit reached)
82
+ Blocked: {blocked} items
83
+
84
+ Re-run `/skill:forge-5-loop {feature}` to continue with remaining items.
85
+ ```