@opengsd/gsd-path 1.0.0 → 1.2.0

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 (498) hide show
  1. package/AGENTS.md +33 -13
  2. package/CHANGELOG.md +68 -0
  3. package/DOCS.md +75 -6
  4. package/FULL.md +12 -15
  5. package/HOOKS.md +18 -9
  6. package/QUICK.md +8 -6
  7. package/README.md +218 -14
  8. package/RUNTIME.md +16 -5
  9. package/UPDATE.md +30 -11
  10. package/WORKFLOW.md +35 -16
  11. package/package.json +23 -1
  12. package/platforms/claude/dispatch.md +4 -4
  13. package/platforms/copilot/dispatch.md +4 -4
  14. package/platforms/cursor/dispatch.md +5 -10
  15. package/platforms/grok/dispatch.md +4 -6
  16. package/platforms/kimi/dispatch.md +4 -4
  17. package/platforms/kiro/dispatch.md +4 -6
  18. package/platforms/opencode/dispatch.md +4 -4
  19. package/platforms/qwen/dispatch.md +4 -4
  20. package/platforms/shared-agents/dispatch.md +12 -19
  21. package/scripts/_common.py +5 -0
  22. package/scripts/archive_milestone.py +30 -124
  23. package/scripts/bootstrap_repository.py +33 -4
  24. package/scripts/build_recovery.py +292 -0
  25. package/scripts/build_state.py +2 -0
  26. package/scripts/check_docs_audit.py +7 -3
  27. package/scripts/check_handoffs.py +7 -1
  28. package/scripts/check_task_briefs.py +3 -0
  29. package/scripts/detect_project.py +22 -3
  30. package/scripts/discussion_records.py +3 -0
  31. package/scripts/discussion_validate.py +8 -3
  32. package/scripts/dispatch_driver.py +233 -22
  33. package/scripts/git_guard.py +14 -5
  34. package/scripts/guard_hook.py +11 -1
  35. package/scripts/install.mjs +54 -1448
  36. package/scripts/install.py +155 -188
  37. package/scripts/integration.py +54 -28
  38. package/scripts/isolation.py +24 -6
  39. package/scripts/jev_review.py +138 -0
  40. package/scripts/lean_verification.py +3 -1
  41. package/scripts/loop_run.py +2 -0
  42. package/scripts/model_policy.py +279 -0
  43. package/scripts/path_config.py +248 -0
  44. package/scripts/pipeline_diagnose.py +15 -3
  45. package/scripts/pipeline_git.py +3 -0
  46. package/scripts/pipeline_state.py +117 -186
  47. package/scripts/pipeline_undo.py +14 -7
  48. package/scripts/promote_lookahead.py +33 -162
  49. package/scripts/review_panel.py +11 -0
  50. package/scripts/roadmap.py +326 -0
  51. package/scripts/runtime_store.py +278 -0
  52. package/scripts/skill-resources.json +182 -4
  53. package/scripts/state_checkpoint.py +114 -72
  54. package/scripts/state_promote.py +47 -44
  55. package/scripts/status_runtime.py +92 -6
  56. package/scripts/task_context.py +73 -0
  57. package/scripts/token_budget.py +40 -1
  58. package/scripts/workflow_run.py +128 -8
  59. package/scripts/worktree_paths.py +94 -0
  60. package/skills/gsd-path/BUILD.md +54 -575
  61. package/skills/gsd-path/DECIDE.md +4 -6
  62. package/skills/gsd-path/DEFINE.md +23 -21
  63. package/skills/gsd-path/DOCS-AUDIT.md +2 -0
  64. package/skills/gsd-path/INSPECT.md +32 -8
  65. package/skills/gsd-path/PLAN.md +29 -19
  66. package/skills/gsd-path/RESEARCH.md +5 -6
  67. package/skills/gsd-path/ROADMAP.md +24 -58
  68. package/skills/gsd-path/SHIP.md +29 -17
  69. package/skills/gsd-path/SKILL.md +46 -22
  70. package/skills/gsd-path/references/build-abandon.md +33 -0
  71. package/skills/gsd-path/references/build-native.md +502 -0
  72. package/skills/gsd-path/references/build-recovery.md +78 -0
  73. package/skills/gsd-path/references/coder.md +8 -3
  74. package/skills/gsd-path/references/config.md +57 -0
  75. package/skills/gsd-path/references/dispatch.md +12 -19
  76. package/skills/gsd-path/references/docs-auditor.md +14 -0
  77. package/skills/gsd-path/references/jev-review.md +82 -0
  78. package/skills/gsd-path/references/model-policy.md +139 -0
  79. package/skills/gsd-path/references/reviewer-final.md +21 -0
  80. package/skills/gsd-path/references/reviewer-panel.md +17 -0
  81. package/skills/gsd-path/references/reviewer-skeptic.md +20 -0
  82. package/skills/gsd-path/references/reviewer-wave.md +89 -0
  83. package/skills/gsd-path/references/reviewer.md +12 -148
  84. package/skills/gsd-path/references/runtime-selection.md +25 -0
  85. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  86. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  87. package/skills/gsd-path/scripts/_common.py +5 -0
  88. package/skills/gsd-path/scripts/archive_milestone.py +30 -124
  89. package/skills/gsd-path/scripts/bootstrap_repository.py +33 -4
  90. package/skills/gsd-path/scripts/build_recovery.py +292 -0
  91. package/skills/gsd-path/scripts/build_state.py +2 -0
  92. package/skills/gsd-path/scripts/check_docs_audit.py +7 -3
  93. package/skills/gsd-path/scripts/check_handoffs.py +7 -1
  94. package/skills/gsd-path/scripts/check_task_briefs.py +3 -0
  95. package/skills/gsd-path/scripts/detect_project.py +22 -3
  96. package/skills/gsd-path/scripts/discussion_records.py +3 -0
  97. package/skills/gsd-path/scripts/discussion_validate.py +8 -3
  98. package/skills/gsd-path/scripts/dispatch_driver.py +233 -22
  99. package/skills/gsd-path/scripts/git_guard.py +768 -0
  100. package/skills/gsd-path/scripts/integration.py +54 -28
  101. package/skills/gsd-path/scripts/isolation.py +24 -6
  102. package/skills/gsd-path/scripts/jev_review.py +138 -0
  103. package/skills/gsd-path/scripts/lean_verification.py +3 -1
  104. package/skills/gsd-path/scripts/loop_run.py +2 -0
  105. package/skills/gsd-path/scripts/model_policy.py +279 -0
  106. package/skills/gsd-path/scripts/path_config.py +248 -0
  107. package/skills/gsd-path/scripts/pipeline_git.py +3 -0
  108. package/skills/gsd-path/scripts/pipeline_state.py +117 -186
  109. package/skills/gsd-path/scripts/promote_lookahead.py +33 -162
  110. package/skills/gsd-path/scripts/review_panel.py +11 -0
  111. package/skills/gsd-path/scripts/roadmap.py +326 -0
  112. package/skills/gsd-path/scripts/state_checkpoint.py +114 -72
  113. package/skills/gsd-path/scripts/state_promote.py +47 -44
  114. package/skills/gsd-path/scripts/status_runtime.py +208 -0
  115. package/skills/gsd-path/scripts/task_context.py +73 -0
  116. package/skills/gsd-path/scripts/token_budget.py +40 -1
  117. package/skills/gsd-path/scripts/workflow_run.py +128 -8
  118. package/skills/gsd-path/scripts/worktree_paths.py +94 -0
  119. package/skills/gsd-path/templates/skeptic.md +1 -1
  120. package/skills/gsd-path/templates/task.md +2 -0
  121. package/skills/gsd-path/templates/wave-panel.md +1 -1
  122. package/skills/gsd-path/templates/wave-review.md +1 -1
  123. package/skills/gsd-path-build/SKILL.md +54 -575
  124. package/skills/gsd-path-build/references/build-abandon.md +33 -0
  125. package/skills/gsd-path-build/references/build-native.md +502 -0
  126. package/skills/gsd-path-build/references/build-recovery.md +78 -0
  127. package/skills/gsd-path-build/references/coder.md +8 -3
  128. package/skills/gsd-path-build/references/dispatch.md +12 -19
  129. package/skills/gsd-path-build/references/jev-review.md +82 -0
  130. package/skills/gsd-path-build/references/model-policy.md +139 -0
  131. package/skills/gsd-path-build/references/reviewer-final.md +21 -0
  132. package/skills/gsd-path-build/references/reviewer-panel.md +17 -0
  133. package/skills/gsd-path-build/references/reviewer-skeptic.md +20 -0
  134. package/skills/gsd-path-build/references/reviewer-wave.md +89 -0
  135. package/skills/gsd-path-build/references/reviewer.md +12 -148
  136. package/skills/gsd-path-build/references/runtime-selection.md +25 -0
  137. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  138. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  139. package/skills/gsd-path-build/scripts/_common.py +5 -0
  140. package/skills/gsd-path-build/scripts/archive_milestone.py +30 -124
  141. package/skills/gsd-path-build/scripts/build_recovery.py +292 -0
  142. package/skills/gsd-path-build/scripts/build_state.py +2 -0
  143. package/skills/gsd-path-build/scripts/check_handoffs.py +7 -1
  144. package/skills/gsd-path-build/scripts/check_task_briefs.py +3 -0
  145. package/skills/gsd-path-build/scripts/detect_project.py +1536 -0
  146. package/skills/gsd-path-build/scripts/discussion_records.py +3 -0
  147. package/skills/gsd-path-build/scripts/discussion_validate.py +8 -3
  148. package/skills/gsd-path-build/scripts/dispatch_driver.py +233 -22
  149. package/skills/gsd-path-build/scripts/integration.py +54 -28
  150. package/skills/gsd-path-build/scripts/isolation.py +24 -6
  151. package/skills/gsd-path-build/scripts/jev_review.py +138 -0
  152. package/skills/gsd-path-build/scripts/loop_run.py +2 -0
  153. package/skills/gsd-path-build/scripts/model_policy.py +279 -0
  154. package/skills/gsd-path-build/scripts/path_config.py +248 -0
  155. package/skills/gsd-path-build/scripts/pipeline_git.py +3 -0
  156. package/skills/gsd-path-build/scripts/pipeline_state.py +117 -186
  157. package/skills/gsd-path-build/scripts/promote_lookahead.py +286 -0
  158. package/skills/gsd-path-build/scripts/review_panel.py +11 -0
  159. package/skills/gsd-path-build/scripts/roadmap.py +326 -0
  160. package/skills/gsd-path-build/scripts/state_checkpoint.py +114 -72
  161. package/skills/gsd-path-build/scripts/state_promote.py +47 -44
  162. package/skills/gsd-path-build/scripts/task_context.py +73 -0
  163. package/skills/gsd-path-build/scripts/token_budget.py +40 -1
  164. package/skills/gsd-path-build/scripts/workflow_run.py +128 -8
  165. package/skills/gsd-path-build/scripts/worktree_paths.py +94 -0
  166. package/skills/gsd-path-build/templates/skeptic.md +1 -1
  167. package/skills/gsd-path-build/templates/task.md +2 -0
  168. package/skills/gsd-path-build/templates/wave-panel.md +1 -1
  169. package/skills/gsd-path-build/templates/wave-review.md +1 -1
  170. package/skills/gsd-path-decide/SKILL.md +4 -6
  171. package/skills/gsd-path-decide/references/dispatch.md +12 -19
  172. package/skills/gsd-path-decide/references/model-policy.md +139 -0
  173. package/skills/gsd-path-decide/references/runtime-selection.md +25 -0
  174. package/skills/gsd-path-decide/scripts/_common.py +5 -0
  175. package/skills/gsd-path-decide/scripts/archive_milestone.py +2171 -0
  176. package/skills/gsd-path-decide/scripts/build_recovery.py +292 -0
  177. package/skills/gsd-path-decide/scripts/check_handoffs.py +7 -1
  178. package/skills/gsd-path-decide/scripts/check_task_briefs.py +3 -0
  179. package/skills/gsd-path-decide/scripts/detect_project.py +1536 -0
  180. package/skills/gsd-path-decide/scripts/discussion_records.py +3 -0
  181. package/skills/gsd-path-decide/scripts/discussion_validate.py +1326 -0
  182. package/skills/gsd-path-decide/scripts/integration.py +1459 -0
  183. package/skills/gsd-path-decide/scripts/isolation.py +24 -6
  184. package/skills/gsd-path-decide/scripts/loop_run.py +839 -0
  185. package/skills/gsd-path-decide/scripts/model_policy.py +279 -0
  186. package/skills/gsd-path-decide/scripts/path_config.py +248 -0
  187. package/skills/gsd-path-decide/scripts/pipeline_git.py +3 -0
  188. package/skills/gsd-path-decide/scripts/pipeline_state.py +117 -186
  189. package/skills/gsd-path-decide/scripts/promote_lookahead.py +286 -0
  190. package/skills/gsd-path-decide/scripts/review_panel.py +564 -0
  191. package/skills/gsd-path-decide/scripts/roadmap.py +326 -0
  192. package/skills/gsd-path-decide/scripts/state_checkpoint.py +114 -72
  193. package/skills/gsd-path-decide/scripts/state_promote.py +47 -44
  194. package/skills/gsd-path-decide/scripts/worktree_paths.py +94 -0
  195. package/skills/gsd-path-define/SKILL.md +23 -21
  196. package/skills/gsd-path-define/references/build-recovery.md +78 -0
  197. package/skills/gsd-path-define/references/runtime-selection.md +25 -0
  198. package/skills/gsd-path-define/scripts/_common.py +5 -0
  199. package/skills/gsd-path-define/scripts/archive_milestone.py +2171 -0
  200. package/skills/gsd-path-define/scripts/build_recovery.py +292 -0
  201. package/skills/gsd-path-define/scripts/check_handoffs.py +7 -1
  202. package/skills/gsd-path-define/scripts/check_task_briefs.py +3 -0
  203. package/skills/gsd-path-define/scripts/detect_project.py +22 -3
  204. package/skills/gsd-path-define/scripts/discussion_records.py +3 -0
  205. package/skills/gsd-path-define/scripts/discussion_validate.py +1326 -0
  206. package/skills/gsd-path-define/scripts/integration.py +1459 -0
  207. package/skills/gsd-path-define/scripts/isolation.py +24 -6
  208. package/skills/gsd-path-define/scripts/loop_run.py +839 -0
  209. package/skills/gsd-path-define/scripts/model_policy.py +279 -0
  210. package/skills/gsd-path-define/scripts/path_config.py +248 -0
  211. package/skills/gsd-path-define/scripts/pipeline_git.py +3 -0
  212. package/skills/gsd-path-define/scripts/pipeline_state.py +117 -186
  213. package/skills/gsd-path-define/scripts/promote_lookahead.py +286 -0
  214. package/skills/gsd-path-define/scripts/review_panel.py +564 -0
  215. package/skills/gsd-path-define/scripts/roadmap.py +326 -0
  216. package/skills/gsd-path-define/scripts/state_checkpoint.py +114 -72
  217. package/skills/gsd-path-define/scripts/state_promote.py +47 -44
  218. package/skills/gsd-path-define/scripts/worktree_paths.py +94 -0
  219. package/skills/gsd-path-discuss/SKILL.md +2 -0
  220. package/skills/gsd-path-discuss/references/runtime-selection.md +25 -0
  221. package/skills/gsd-path-discuss/scripts/_common.py +5 -0
  222. package/skills/gsd-path-discuss/scripts/discussion_records.py +3 -0
  223. package/skills/gsd-path-discuss/scripts/loop_run.py +839 -0
  224. package/skills/gsd-path-discuss/scripts/model_policy.py +279 -0
  225. package/skills/gsd-path-discuss/scripts/path_config.py +248 -0
  226. package/skills/gsd-path-discuss/scripts/review_panel.py +564 -0
  227. package/skills/gsd-path-discuss/scripts/worktree_paths.py +94 -0
  228. package/skills/gsd-path-docs-audit/SKILL.md +2 -0
  229. package/skills/gsd-path-docs-audit/references/dispatch.md +12 -19
  230. package/skills/gsd-path-docs-audit/references/docs-auditor.md +14 -0
  231. package/skills/gsd-path-docs-audit/references/model-policy.md +139 -0
  232. package/skills/gsd-path-docs-audit/references/runtime-selection.md +25 -0
  233. package/skills/gsd-path-docs-audit/scripts/_common.py +5 -0
  234. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +2171 -0
  235. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +292 -0
  236. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +7 -3
  237. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +7 -1
  238. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +3 -0
  239. package/skills/gsd-path-docs-audit/scripts/detect_project.py +1536 -0
  240. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +3 -0
  241. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +1326 -0
  242. package/skills/gsd-path-docs-audit/scripts/integration.py +1459 -0
  243. package/skills/gsd-path-docs-audit/scripts/isolation.py +24 -6
  244. package/skills/gsd-path-docs-audit/scripts/loop_run.py +839 -0
  245. package/skills/gsd-path-docs-audit/scripts/model_policy.py +279 -0
  246. package/skills/gsd-path-docs-audit/scripts/path_config.py +248 -0
  247. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +3 -0
  248. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +117 -186
  249. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +286 -0
  250. package/skills/gsd-path-docs-audit/scripts/review_panel.py +564 -0
  251. package/skills/gsd-path-docs-audit/scripts/roadmap.py +326 -0
  252. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +114 -72
  253. package/skills/gsd-path-docs-audit/scripts/state_promote.py +47 -44
  254. package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +94 -0
  255. package/skills/gsd-path-forensics/SKILL.md +9 -5
  256. package/skills/gsd-path-forensics/references/runtime-selection.md +25 -0
  257. package/skills/gsd-path-forensics/scripts/_common.py +5 -0
  258. package/skills/gsd-path-forensics/scripts/discussion_records.py +3 -0
  259. package/skills/gsd-path-forensics/scripts/loop_run.py +839 -0
  260. package/skills/gsd-path-forensics/scripts/model_policy.py +279 -0
  261. package/skills/gsd-path-forensics/scripts/path_config.py +248 -0
  262. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +15 -3
  263. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +14 -7
  264. package/skills/gsd-path-forensics/scripts/review_panel.py +564 -0
  265. package/skills/gsd-path-forensics/scripts/worktree_paths.py +94 -0
  266. package/skills/gsd-path-inspect/SKILL.md +32 -8
  267. package/skills/gsd-path-inspect/references/dispatch.md +12 -19
  268. package/skills/gsd-path-inspect/references/docs-auditor.md +14 -0
  269. package/skills/gsd-path-inspect/references/model-policy.md +139 -0
  270. package/skills/gsd-path-inspect/references/runtime-selection.md +25 -0
  271. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  272. package/skills/gsd-path-inspect/scripts/_common.py +5 -0
  273. package/skills/gsd-path-inspect/scripts/archive_milestone.py +2171 -0
  274. package/skills/gsd-path-inspect/scripts/build_recovery.py +292 -0
  275. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +7 -3
  276. package/skills/gsd-path-inspect/scripts/check_handoffs.py +7 -1
  277. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +3 -0
  278. package/skills/gsd-path-inspect/scripts/detect_project.py +22 -3
  279. package/skills/gsd-path-inspect/scripts/discussion_records.py +3 -0
  280. package/skills/gsd-path-inspect/scripts/discussion_validate.py +1326 -0
  281. package/skills/gsd-path-inspect/scripts/integration.py +1459 -0
  282. package/skills/gsd-path-inspect/scripts/isolation.py +24 -6
  283. package/skills/gsd-path-inspect/scripts/loop_run.py +839 -0
  284. package/skills/gsd-path-inspect/scripts/model_policy.py +279 -0
  285. package/skills/gsd-path-inspect/scripts/path_config.py +248 -0
  286. package/skills/gsd-path-inspect/scripts/pipeline_git.py +3 -0
  287. package/skills/gsd-path-inspect/scripts/pipeline_state.py +117 -186
  288. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +286 -0
  289. package/skills/gsd-path-inspect/scripts/review_panel.py +564 -0
  290. package/skills/gsd-path-inspect/scripts/roadmap.py +326 -0
  291. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +114 -72
  292. package/skills/gsd-path-inspect/scripts/state_promote.py +47 -44
  293. package/skills/gsd-path-inspect/scripts/workflow_run.py +237 -0
  294. package/skills/gsd-path-inspect/scripts/worktree_paths.py +94 -0
  295. package/skills/gsd-path-loop/SKILL.md +2 -0
  296. package/skills/gsd-path-loop/references/runtime-selection.md +25 -0
  297. package/skills/gsd-path-loop/scripts/_common.py +5 -0
  298. package/skills/gsd-path-loop/scripts/discussion_records.py +3 -0
  299. package/skills/gsd-path-loop/scripts/loop_run.py +2 -0
  300. package/skills/gsd-path-loop/scripts/model_policy.py +279 -0
  301. package/skills/gsd-path-loop/scripts/path_config.py +248 -0
  302. package/skills/gsd-path-loop/scripts/review_panel.py +564 -0
  303. package/skills/gsd-path-loop/scripts/worktree_paths.py +94 -0
  304. package/skills/gsd-path-migrate/SKILL.md +2 -0
  305. package/skills/gsd-path-migrate/references/runtime-selection.md +25 -0
  306. package/skills/gsd-path-migrate/scripts/_common.py +185 -0
  307. package/skills/gsd-path-migrate/scripts/discussion_records.py +3 -0
  308. package/skills/gsd-path-migrate/scripts/loop_run.py +839 -0
  309. package/skills/gsd-path-migrate/scripts/model_policy.py +279 -0
  310. package/skills/gsd-path-migrate/scripts/path_config.py +248 -0
  311. package/skills/gsd-path-migrate/scripts/review_panel.py +564 -0
  312. package/skills/gsd-path-plan/SKILL.md +29 -19
  313. package/skills/gsd-path-plan/references/build-recovery.md +78 -0
  314. package/skills/gsd-path-plan/references/dispatch.md +12 -19
  315. package/skills/gsd-path-plan/references/model-policy.md +139 -0
  316. package/skills/gsd-path-plan/references/runtime-selection.md +25 -0
  317. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  318. package/skills/gsd-path-plan/scripts/_common.py +5 -0
  319. package/skills/gsd-path-plan/scripts/archive_milestone.py +2171 -0
  320. package/skills/gsd-path-plan/scripts/build_recovery.py +292 -0
  321. package/skills/gsd-path-plan/scripts/check_handoffs.py +7 -1
  322. package/skills/gsd-path-plan/scripts/check_task_briefs.py +3 -0
  323. package/skills/gsd-path-plan/scripts/detect_project.py +1536 -0
  324. package/skills/gsd-path-plan/scripts/discussion_records.py +3 -0
  325. package/skills/gsd-path-plan/scripts/discussion_validate.py +1326 -0
  326. package/skills/gsd-path-plan/scripts/integration.py +1459 -0
  327. package/skills/gsd-path-plan/scripts/isolation.py +24 -6
  328. package/skills/gsd-path-plan/scripts/loop_run.py +839 -0
  329. package/skills/gsd-path-plan/scripts/model_policy.py +279 -0
  330. package/skills/gsd-path-plan/scripts/path_config.py +248 -0
  331. package/skills/gsd-path-plan/scripts/pipeline_git.py +3 -0
  332. package/skills/gsd-path-plan/scripts/pipeline_state.py +117 -186
  333. package/skills/gsd-path-plan/scripts/promote_lookahead.py +286 -0
  334. package/skills/gsd-path-plan/scripts/review_panel.py +11 -0
  335. package/skills/gsd-path-plan/scripts/roadmap.py +326 -0
  336. package/skills/gsd-path-plan/scripts/state_checkpoint.py +114 -72
  337. package/skills/gsd-path-plan/scripts/state_promote.py +47 -44
  338. package/skills/gsd-path-plan/scripts/workflow_run.py +128 -8
  339. package/skills/gsd-path-plan/scripts/worktree_paths.py +94 -0
  340. package/skills/gsd-path-plan/templates/task.md +2 -0
  341. package/skills/gsd-path-research/SKILL.md +5 -6
  342. package/skills/gsd-path-research/references/dispatch.md +12 -19
  343. package/skills/gsd-path-research/references/model-policy.md +139 -0
  344. package/skills/gsd-path-research/references/runtime-selection.md +25 -0
  345. package/skills/gsd-path-research/scripts/_common.py +5 -0
  346. package/skills/gsd-path-research/scripts/archive_milestone.py +2171 -0
  347. package/skills/gsd-path-research/scripts/build_recovery.py +292 -0
  348. package/skills/gsd-path-research/scripts/check_handoffs.py +7 -1
  349. package/skills/gsd-path-research/scripts/check_task_briefs.py +3 -0
  350. package/skills/gsd-path-research/scripts/detect_project.py +1536 -0
  351. package/skills/gsd-path-research/scripts/discussion_records.py +3 -0
  352. package/skills/gsd-path-research/scripts/discussion_validate.py +1326 -0
  353. package/skills/gsd-path-research/scripts/integration.py +1459 -0
  354. package/skills/gsd-path-research/scripts/isolation.py +24 -6
  355. package/skills/gsd-path-research/scripts/loop_run.py +839 -0
  356. package/skills/gsd-path-research/scripts/model_policy.py +279 -0
  357. package/skills/gsd-path-research/scripts/path_config.py +248 -0
  358. package/skills/gsd-path-research/scripts/pipeline_git.py +3 -0
  359. package/skills/gsd-path-research/scripts/pipeline_state.py +117 -186
  360. package/skills/gsd-path-research/scripts/promote_lookahead.py +286 -0
  361. package/skills/gsd-path-research/scripts/review_panel.py +564 -0
  362. package/skills/gsd-path-research/scripts/roadmap.py +326 -0
  363. package/skills/gsd-path-research/scripts/state_checkpoint.py +114 -72
  364. package/skills/gsd-path-research/scripts/state_promote.py +47 -44
  365. package/skills/gsd-path-research/scripts/worktree_paths.py +94 -0
  366. package/skills/gsd-path-roadmap/SKILL.md +24 -58
  367. package/skills/gsd-path-roadmap/references/dispatch.md +12 -19
  368. package/skills/gsd-path-roadmap/references/model-policy.md +139 -0
  369. package/skills/gsd-path-roadmap/references/runtime-selection.md +25 -0
  370. package/skills/gsd-path-roadmap/scripts/_common.py +5 -0
  371. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +30 -124
  372. package/skills/gsd-path-roadmap/scripts/build_recovery.py +292 -0
  373. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +7 -1
  374. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +3 -0
  375. package/skills/gsd-path-roadmap/scripts/detect_project.py +22 -3
  376. package/skills/gsd-path-roadmap/scripts/discussion_records.py +3 -0
  377. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +8 -3
  378. package/skills/gsd-path-roadmap/scripts/integration.py +54 -28
  379. package/skills/gsd-path-roadmap/scripts/isolation.py +24 -6
  380. package/skills/gsd-path-roadmap/scripts/loop_run.py +839 -0
  381. package/skills/gsd-path-roadmap/scripts/model_policy.py +279 -0
  382. package/skills/gsd-path-roadmap/scripts/path_config.py +248 -0
  383. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +3 -0
  384. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +117 -186
  385. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +33 -162
  386. package/skills/gsd-path-roadmap/scripts/review_panel.py +11 -0
  387. package/skills/gsd-path-roadmap/scripts/roadmap.py +326 -0
  388. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +114 -72
  389. package/skills/gsd-path-roadmap/scripts/state_promote.py +47 -44
  390. package/skills/gsd-path-roadmap/scripts/worktree_paths.py +94 -0
  391. package/skills/gsd-path-ship/SKILL.md +29 -17
  392. package/skills/gsd-path-ship/references/dispatch.md +12 -19
  393. package/skills/gsd-path-ship/references/jev-review.md +82 -0
  394. package/skills/gsd-path-ship/references/model-policy.md +139 -0
  395. package/skills/gsd-path-ship/references/reviewer-final.md +21 -0
  396. package/skills/gsd-path-ship/references/reviewer-panel.md +17 -0
  397. package/skills/gsd-path-ship/references/reviewer-skeptic.md +20 -0
  398. package/skills/gsd-path-ship/references/reviewer-wave.md +89 -0
  399. package/skills/gsd-path-ship/references/reviewer.md +12 -148
  400. package/skills/gsd-path-ship/references/runtime-selection.md +25 -0
  401. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  402. package/skills/gsd-path-ship/scripts/_common.py +5 -0
  403. package/skills/gsd-path-ship/scripts/archive_milestone.py +30 -124
  404. package/skills/gsd-path-ship/scripts/build_recovery.py +292 -0
  405. package/skills/gsd-path-ship/scripts/build_state.py +2 -0
  406. package/skills/gsd-path-ship/scripts/check_handoffs.py +7 -1
  407. package/skills/gsd-path-ship/scripts/check_task_briefs.py +3 -0
  408. package/skills/gsd-path-ship/scripts/detect_project.py +1536 -0
  409. package/skills/gsd-path-ship/scripts/discussion_records.py +3 -0
  410. package/skills/gsd-path-ship/scripts/discussion_validate.py +8 -3
  411. package/skills/gsd-path-ship/scripts/integration.py +54 -28
  412. package/skills/gsd-path-ship/scripts/isolation.py +24 -6
  413. package/skills/gsd-path-ship/scripts/jev_review.py +138 -0
  414. package/skills/gsd-path-ship/scripts/lean_verification.py +3 -1
  415. package/skills/gsd-path-ship/scripts/loop_run.py +839 -0
  416. package/skills/gsd-path-ship/scripts/model_policy.py +279 -0
  417. package/skills/gsd-path-ship/scripts/path_config.py +248 -0
  418. package/skills/gsd-path-ship/scripts/pipeline_git.py +3 -0
  419. package/skills/gsd-path-ship/scripts/pipeline_state.py +117 -186
  420. package/skills/gsd-path-ship/scripts/promote_lookahead.py +286 -0
  421. package/skills/gsd-path-ship/scripts/review_panel.py +11 -0
  422. package/skills/gsd-path-ship/scripts/roadmap.py +326 -0
  423. package/skills/gsd-path-ship/scripts/state_checkpoint.py +114 -72
  424. package/skills/gsd-path-ship/scripts/state_promote.py +47 -44
  425. package/skills/gsd-path-ship/scripts/workflow_run.py +128 -8
  426. package/skills/gsd-path-ship/scripts/worktree_paths.py +94 -0
  427. package/skills/gsd-path-ship/templates/wave-review.md +1 -1
  428. package/skills/gsd-path-undo/SKILL.md +2 -0
  429. package/skills/gsd-path-undo/references/runtime-selection.md +25 -0
  430. package/skills/gsd-path-undo/scripts/_common.py +5 -0
  431. package/skills/gsd-path-undo/scripts/discussion_records.py +3 -0
  432. package/skills/gsd-path-undo/scripts/loop_run.py +839 -0
  433. package/skills/gsd-path-undo/scripts/model_policy.py +279 -0
  434. package/skills/gsd-path-undo/scripts/path_config.py +248 -0
  435. package/skills/gsd-path-undo/scripts/pipeline_undo.py +14 -7
  436. package/skills/gsd-path-undo/scripts/review_panel.py +564 -0
  437. package/skills/gsd-path-undo/scripts/worktree_paths.py +94 -0
  438. package/skills/path/BUILD.md +54 -575
  439. package/skills/path/DECIDE.md +4 -6
  440. package/skills/path/DEFINE.md +23 -21
  441. package/skills/path/DOCS-AUDIT.md +2 -0
  442. package/skills/path/INSPECT.md +32 -8
  443. package/skills/path/PLAN.md +29 -19
  444. package/skills/path/RESEARCH.md +5 -6
  445. package/skills/path/ROADMAP.md +24 -58
  446. package/skills/path/SHIP.md +29 -17
  447. package/skills/path/SKILL.md +46 -22
  448. package/skills/path/references/build-abandon.md +33 -0
  449. package/skills/path/references/build-native.md +502 -0
  450. package/skills/path/references/build-recovery.md +78 -0
  451. package/skills/path/references/coder.md +8 -3
  452. package/skills/path/references/config.md +57 -0
  453. package/skills/path/references/dispatch.md +12 -19
  454. package/skills/path/references/docs-auditor.md +14 -0
  455. package/skills/path/references/jev-review.md +82 -0
  456. package/skills/path/references/model-policy.md +139 -0
  457. package/skills/path/references/reviewer-final.md +21 -0
  458. package/skills/path/references/reviewer-panel.md +17 -0
  459. package/skills/path/references/reviewer-skeptic.md +20 -0
  460. package/skills/path/references/reviewer-wave.md +89 -0
  461. package/skills/path/references/reviewer.md +12 -148
  462. package/skills/path/references/runtime-selection.md +25 -0
  463. package/skills/path/scripts/_common.py +5 -0
  464. package/skills/path/scripts/archive_milestone.py +30 -124
  465. package/skills/path/scripts/bootstrap_repository.py +33 -4
  466. package/skills/path/scripts/build_recovery.py +292 -0
  467. package/skills/path/scripts/build_state.py +2 -0
  468. package/skills/path/scripts/check_docs_audit.py +7 -3
  469. package/skills/path/scripts/check_handoffs.py +7 -1
  470. package/skills/path/scripts/check_task_briefs.py +3 -0
  471. package/skills/path/scripts/detect_project.py +22 -3
  472. package/skills/path/scripts/discussion_records.py +3 -0
  473. package/skills/path/scripts/discussion_validate.py +8 -3
  474. package/skills/path/scripts/dispatch_driver.py +233 -22
  475. package/skills/path/scripts/git_guard.py +768 -0
  476. package/skills/path/scripts/integration.py +54 -28
  477. package/skills/path/scripts/isolation.py +24 -6
  478. package/skills/path/scripts/jev_review.py +138 -0
  479. package/skills/path/scripts/lean_verification.py +3 -1
  480. package/skills/path/scripts/loop_run.py +2 -0
  481. package/skills/path/scripts/model_policy.py +279 -0
  482. package/skills/path/scripts/path_config.py +248 -0
  483. package/skills/path/scripts/pipeline_git.py +3 -0
  484. package/skills/path/scripts/pipeline_state.py +117 -186
  485. package/skills/path/scripts/promote_lookahead.py +33 -162
  486. package/skills/path/scripts/review_panel.py +11 -0
  487. package/skills/path/scripts/roadmap.py +326 -0
  488. package/skills/path/scripts/state_checkpoint.py +114 -72
  489. package/skills/path/scripts/state_promote.py +47 -44
  490. package/skills/path/scripts/status_runtime.py +208 -0
  491. package/skills/path/scripts/task_context.py +73 -0
  492. package/skills/path/scripts/token_budget.py +40 -1
  493. package/skills/path/scripts/workflow_run.py +128 -8
  494. package/skills/path/scripts/worktree_paths.py +94 -0
  495. package/skills/path/templates/skeptic.md +1 -1
  496. package/skills/path/templates/task.md +2 -0
  497. package/skills/path/templates/wave-panel.md +1 -1
  498. package/skills/path/templates/wave-review.md +1 -1
@@ -3,6 +3,8 @@ name: gsd-path-build
3
3
  description: Execute or resume an approved GSD Path plan with isolated task worktrees, deterministic commits, and independent wave review. Use only when the user explicitly invokes $gsd-path-build or an active $gsd-path router explicitly routes to this phase.
4
4
  ---
5
5
 
6
+ Before executing project helpers, read [runtime selection](references/runtime-selection.md).
7
+
6
8
  # GSD Path Build Orchestrator
7
9
 
8
10
  Orchestrate coders, task landing, and reviewers from the main conversation.
@@ -22,23 +24,14 @@ rule; never invoke an explicit-only sibling skill yourself.
22
24
  marks an interrupted milestone-abandon transaction: resume the Milestone
23
25
  abandon procedure below before any recovery or dispatch. `build/done` is
24
26
  recovery-only: follow [Completion](#completion) instead of dispatching.
25
- - Read the local [coder role](references/coder.md),
26
- [reviewer role](references/reviewer.md), [dispatch contract](references/dispatch.md),
27
- [task template](templates/task.md),
28
- [wave-review template](templates/wave-review.md),
29
- [wave-panel template](templates/wave-panel.md), and
30
- [skeptic template](templates/skeptic.md). Resolve them to absolute
31
- paths before briefing agents. Resolve `scripts/review_panel.py` when
32
- PLAN.md Config names a review panel. Resolve `scripts/review_findings.py`
33
- for blocked-wave finding sets. Resolve `scripts/check_handoffs.py`
34
- for Intent coverage. Resolve `scripts/pipeline_state.py` for guarded state
35
- transitions. Resolve `scripts/isolation.py` for task isolation, recovery,
36
- verify sidecars, task landing, and bookkeeping checkpoints; do not invent
37
- `git worktree add`, `--detach`, commit, or cherry-pick commands. Resolve
38
- `scripts/build_state.py` for the ready set, task reconciliation, the
39
- landed-task proof, and the verify ledger
40
- (`.project/build/verify-ledger.jsonl`, one JSON line per run: command,
41
- commit, result, timestamp); do not select or reconcile tasks in prose.
27
+ - Resolve the bundled `scripts/dispatch_driver.py`, `scripts/workflow_run.py`,
28
+ `scripts/pipeline_state.py`, `scripts/isolation.py`, and `scripts/build_state.py`.
29
+ Helpers own task selection, state, Git, and evidence. Use their receipts.
30
+ - Read the [dispatch contract](references/dispatch.md) only when dispatching
31
+ native children or resolving host counters. Children read their assigned role
32
+ and template; the parent resolves those paths without loading their contents.
33
+ Load the task template only when writing or repairing a task. Load the
34
+ wave-panel and skeptic templates only when those branches apply.
42
35
  - There is no board file. Task frontmatter is the only task-state record;
43
36
  when a report or question needs a wave summary, render it inline from the
44
37
  task files and wave reviews. Record escalations and plan defects in the
@@ -107,6 +100,11 @@ rule; never invoke an explicit-only sibling skill yourself.
107
100
  checkpoint `.project/` records uses this helper. Record the exact full HEAD
108
101
  before the first metadata change in that checkpoint, then run:
109
102
 
103
+ Explicit configuration edits in `.project/config.json` and
104
+ `.project/model-policy.json` are expected bookkeeping. Include them in the next
105
+ normal checkpoint before a clean dispatch base; they may remain pending while
106
+ an already dispatched task lands. Existing model selections stay pinned.
107
+
110
108
  ```text
111
109
  python3 <absolute isolation.py> checkpoint \
112
110
  --repo <absolute primary> \
@@ -128,573 +126,54 @@ brief unless the canonical `build: abandon milestone <slug>` checkpoint moves
128
126
  that same brief into `.project/archive/`; build adds fix tasks and repairs
129
127
  briefs, it never replans.
130
128
 
131
- ## Wave loop
129
+ ## Execute from runtime receipts
132
130
 
133
- For each `## Wave N` in PLAN.md order (a wave's tasks are the task files whose
134
- `wave` equals N):
135
-
136
- **Dispatch driver.** Steps 1–5 below are deterministic, and the bundled
137
- `scripts/dispatch_driver.py` runs them: recover, settle exited coders, the
138
- bookkeeping checkpoint, `ready`, brief lint, `prepare-task`, `activate-task`,
139
- one child per ready task, then Verify in the isolate, Log append, `land`,
140
- `verify-record`, and `retire` in task-id order. Prefer it whenever the owner
141
- supplies a child command (a headless CLI that reads the brief on stdin, for
142
- example `claude -p --output-format json ...` or `codex exec --json ...`; the
143
- owner's flags own the child's permissions):
131
+ For each wave in PLAN.md, use the existing dispatch driver when the owner has
132
+ supplied a child command. Preserve that command and its permission flags; never
133
+ invent a headless command or widen permissions to enable the driver.
144
134
 
145
135
  ```text
146
136
  python3 <absolute dispatch_driver.py> round --repo <absolute primary> --wave <N> \
147
- --child-command '<owner command>' [--wait <owner seconds>] \
148
- [--child-timeout <owner seconds>]
137
+ --child-command '<owner command>'
149
138
  ```
150
139
 
151
- `round` owns the entry transition described in Preconditions and branch
152
- binding, checkpointed as `build: start milestone`, and sets `build/blocked`
153
- on a dependency deadlock or a blocked
154
- recovery; every other stop stays with the parent. Act only on its receipt:
155
- `done` means every wave task landed — run
156
- `review --wave <N> --cycle <C> --child-command '<owner command>' [--wait
157
- <owner seconds>]` for step 6 at `full` or `deep` depth: it records the clean
158
- review base, creates one verify sidecar per lens, briefs one reviewer child
159
- per lens with every task's base and landing commit, validates each file in
160
- its sidecar, copies it to the canonical path, retires the sidecar, and only
161
- after every lens settles concludes: a passing cycle with no panel is
162
- checkpointed; with a panel configured (`panel_required: true`) run `panel
163
- --wave <N> --cycle <C> --advertised <slugs> [--parent-slug <slug>]
164
- --child-command '<owner command with {model}>'`, which resolves the panel,
165
- persists a skipped receipt or runs one panelist per family in its own
166
- sidecar, merges the family files, and makes the single on-pass checkpoint;
167
- `blocked` returns the `review_findings.py collect` grouping; when its
168
- `skeptic_groups` is non-empty, `skeptics --wave <N> --cycle <C>
169
- --child-command '<owner command>'` runs one read-only skeptic per locator in
170
- its own sidecar at the review base, validates and collects each file, and
171
- reruns the helper; then `fix-tasks --wave <N> --cycle <C>` writes one
172
- lint-clean fix task per batch carrying the failed criteria and observations
173
- verbatim, or returns `escalate` for structural blockers, skeptic groups, the
174
- cycle cap, or an all-refuted ruling, which stay with step 7 and the user.
175
- The driver never writes a `verify-only` file (`status: not-applicable`);
176
- `in-flight` means call `round` again; `question` means answer from the
177
- approved artifacts or the user, record it with `answer --task-id <id>
178
- --answer '<answer> — <citation>'`, and call `round` again, which redispatches
179
- the retained isolate; `blocked` names the task, reason, and output and leaves
180
- the isolate in place — apply the recovery, retry, or plan-defect procedure in
181
- steps 1–2 by hand, then call `round` again. The driver counts dispatches per
182
- task per milestone and stops at `--max-attempts` (default 2: the first
183
- dispatch plus this contract's one logged redispatch); owner token limits, when
184
- supplied, gate every dispatch through the milestone's budget ledger. Do not repeat a step the receipt
185
- already proves. Without a child command, dispatch through the runtime
186
- dispatch contract and perform steps 1–5 by hand.
187
-
188
- 1. **Recover before dispatch.** Run `python3 <absolute isolation.py> recover
189
- --repo <absolute primary>`. It is read-only and proves every `done` task's
190
- landing commit from its exact stamped base (first-parent scan for
191
- `<task-id>: <task title>`, body `Task:`/`Base:`/`Files:`, the base task's
192
- declared path allow-list from the task file at that base, exact landing
193
- metadata, append-only task-file body, and
194
- patch equality with a retained task branch). Pending and `in-progress`
195
- tasks bypass landing-history proof and report retained resume state or
196
- `none`; failed and blocked tasks with retained isolation report
197
- `reconcile`. Act only on its verdicts;
198
- do not re-derive them in prose, rerun Verify on a proven commit, use an
199
- unanchored log grep, infer a SHA from `done`, or reset unknown work.
200
- - `attested`: an owner ruling stands in for the landing commit (see the
201
- block escalation below); treat it as landed and never redispatch.
202
- - `recovered`: the task is landed (`land` already stamped `status: done`
203
- and `base`). Retire a still-present task worktree with `isolation.py
204
- retire` only when the report shows it present, clean, and on the task
205
- branch. If only `task_branch` remains, finish its proven interrupted
206
- retirement with `retire --branch <task_branch> --force --landed-commit
207
- <commit>`; both absent is valid.
208
- - `resume`: continue from the returned `base`, `task_branch`, and worktree
209
- (the primary itself when no task branch exists); when the report shows
210
- the worktree absent, return the task to `pending` only when ownership is
211
- clear. When `dispatch_retry` is true, reuse the returned clean isolate,
212
- write fresh dispatch metadata and agent there, then dispatch; do not
213
- recreate it. When `landing_retry` is true, do not resume implementation
214
- or redispatch; rerun `land` against the returned isolate and base.
215
- - `reconcile`: do not resume implementation. Preserve the returned isolate
216
- evidence and follow the failed/blocked reconciliation in step 2.
217
- - `block` on a `done` task with reason `done but no landing commit proves
218
- it` or `done task has invalid base`: the work was committed outside
219
- `land`. Never repair history or task frontmatter by hand. Set
220
- `build/blocked`, present **Outcome** naming every such task, and ask the
221
- user for a ruling per task; put any suggested ruling text in its own
222
- fenced code block so it pastes cleanly. On an explicit ruling, run that task's Verify
223
- at HEAD, record it with `python3 <absolute build_state.py> verify-record
224
- --repo <absolute primary> --command <task Verify> --commit <HEAD>
225
- --result pass`, then run `python3 <absolute isolation.py> attest --repo
226
- <absolute primary> --task-file <task file> --ruling <ruling verbatim>`
227
- (add `--base <SHA>` only to repair an abbreviated or invalid recorded
228
- base). The helper stamps the task and creates the attestation commit
229
- itself; each one moves HEAD, so attest tasks one at a time and rerun
230
- `recover` afterwards.
231
- - Rewritten lineage: when every `done` task is rejected with `commit does
232
- not descend from its Base:` after a rebase or replay, the owner may run
233
- `python3 <absolute isolation.py> adopt-rebase --repo <absolute primary>
234
- --original-head <preserved original tip> --head <HEAD> --ruling
235
- "<ruling verbatim>"`, commit the receipt
236
- `.project/build/rebase-adoption.json` as `.project/` bookkeeping, and
237
- rerun `recover`. The original lineage must stay reachable: keep a local
238
- branch on the old tip until the milestone ships. Adopted tasks report
239
- `attested` with `provenance: owner-authorized-rebase`.
240
- - `block` for any other reason: set `build/blocked` with the returned
241
- reason and stop.
242
- - `none`: take no recovery action for that task.
243
-
244
- 2. **Prepare the ready set.** Run `python3 <absolute build_state.py> ready
245
- --repo <absolute primary>`. It is read-only: it validates every task's
246
- frontmatter against its dispatch metadata and the recovery report, then
247
- returns `ready` — the current wave's `pending` tasks whose dependencies are
248
- all `done`, each with `id`, `title`, `deps`, `files`, `task_file`, and
249
- `verify_heavy` — after proving that ready and `in-progress` tasks have
250
- disjoint `files`. Dispatch exactly the tasks it returns; do not select,
251
- order, or overlap-check tasks in prose. Readiness is continuous, not
252
- layered: a task becomes selectable the moment its last dependency lands,
253
- even while unrelated tasks still run, so rerun `ready` after each landing.
254
- A `NEEDS-ORCHESTRATOR` block stays unselectable until its `Orchestrator
255
- answer` is recorded in the task Log and the task is back to `pending`.
256
- Its typed errors are the recovery rule:
257
- - `task-recovery-required`: for each listed failed or blocked task run
258
- `python3 <absolute build_state.py> reconcile --repo <absolute primary>
259
- --task-id <id>` and act on its `classification`. `proven-landed`: the
260
- task already landed at `landed_commit` and its frontmatter is stale —
261
- reconcile the task file to that landed state and checkpoint it.
262
- `resumable` or `reconcile`: apply the retry procedure below with the
263
- returned `history.candidates` as the rejected evidence. `blocked`: set
264
- `build/blocked` with the returned `reasons` and stop.
265
- - `dependency-deadlock`: set `build/blocked` with its `tasks` list and stop.
266
- - `ready-file-overlap` or `invalid-task-state`: a documented plan defect or
267
- drifted bookkeeping; repair it before a new clean base.
268
- A documented plan
269
- defect may be repaired against INTENT.md and SYNTHESIS.md and logged before
270
- a new clean base. A repair edits only the fields the lint or ruling named
271
- in the tasks it named — `files`, Verify, Interface contract text, Intent
272
- coverage rows, an ambiguous AC. It never adds, removes, splits, merges, or
273
- renames tasks, moves a task between waves, or rewrites another task's
274
- acceptance criteria; a defect that needs any of those sets `build/blocked`
275
- with the lint output and returns to plan, which owns the task inventory.
276
- A user ruling that changes a success criterion,
277
- constraint, or veto is not a plan defect: set `build/blocked`, do not
278
- rewrite the AC, and send `$gsd-path-define` to append INTENT.md
279
- `## Corrections` before plan re-gates. A task Log is not that record. One failed implementation gets one logged redispatch when
280
- its contract remains valid. Repeated failure, ambiguous ownership, a user
281
- ruling, or a dependency deadlock sets build state to `blocked` and stops.
282
- Concurrent tasks must have disjoint `files`; serialize overlapping fix
283
- tasks. A retry never reuses a rejected dirty worktree: first copy its
284
- validated append-only task Log delta into the primary task file, record the
285
- rejected diff's exact path set and hash, and checkpoint the block bookkeeping.
286
- After confirming every old change is task-owned, retire that exact worktree
287
- with `python3 <absolute isolation.py> retire --repo <absolute primary>
288
- --worktree <path> --branch <task_branch> --force --task-file <task path>`,
289
- then create the retry. If retirement was interrupted after removing the
290
- worktree, rerun the same command; the recorded failed or blocked task and
291
- its exact base prove the remaining branch before deletion. Create the retry
292
- from the new clean primary HEAD. After
293
- resolving a recoverable `build/blocked` condition, use
294
- `pipeline_state.py transition` with the blocked state and bound branch as
295
- expected fields to set `build/active` and log the resolution. Checkpoint it
296
- through the bookkeeping rule before recording that new dispatch-round base.
297
-
298
- 3. **Isolate every task.** Checkpoint pending bookkeeping through the rule
299
- above, then record clean `HEAD` as
300
- this dispatch round's base — tasks dispatched in the same round share it;
301
- a later round unlocked by fresh landings records the later HEAD — and
302
- lint every ready task's brief with the bundled
303
- `scripts/check_task_briefs.py --repo <absolute repo root> --base <recorded
304
- base>` and re-check Intent coverage with
305
- `python3 <absolute check_handoffs.py> plan --repo <absolute repo root>`
306
- before creating any worktree; a lint or coverage failure is a documented plan
307
- defect — repair it against INTENT.md and SYNTHESIS.md, then re-establish
308
- the base. Then isolate each ready task with
309
- `python3 <absolute workflow_run.py> prepare-task --repo <absolute primary>
310
- --expected-head <recorded base> --task-id <id> --round-size <N>` where N is the
311
- number of tasks in this dispatch round. Serial (`N=1`) returns the primary
312
- worktree and `task_branch: null` — the coder works on the bound branch.
313
- The runner also creates a named verification sidecar at this clean base
314
- before dispatch. Retain both helper results in the dispatch evidence.
315
- Parallel (`N>=2`) creates a named `gsd-path-task/<id>` branch and linked
316
- worktree at that base; never a detached HEAD. Record dispatch through
317
- `python3 <absolute isolation.py> activate-task --repo <returned worktree>
318
- --base <recorded base> --task-id <id> --agent build_<id> --task-file
319
- <exact selected task-file path> [--task-branch <returned task_branch>]`.
320
- The helper sets `base`, `worktree`, `task_branch`, `status: in-progress`,
321
- and `agent` in the isolated task and records parallel build authorization.
322
- Do not edit those fields directly. Do not commit this dispatch state: it lands
323
- inside the task's own commit, and `recover` derives it from the task
324
- branch and worktree meanwhile. The primary stays clean during a parallel
325
- round. Do not append a dispatch Log entry: the isolated task later appends
326
- at that location, and two parallel appends make the cherry-pick ambiguous. Reuse a retained worktree only when
327
- its recorded base, branch, and task agree exactly.
328
-
329
- 4. **Dispatch the round.** Following the local runtime dispatch contract,
330
- spawn one implementation-capable child per task with deterministic logical
331
- task name `build_<task_id>`.
332
- Its brief contains the absolute isolated-worktree root, coder role, task
333
- file, task template, and the absolute INTENT.md path in that worktree.
334
- Add no hidden implementation context; repair a
335
- defective task contract before establishing the round base. Run ready work
336
- up to capacity. Verify commands marked `Heavy: yes` (`verify_heavy` in the
337
- ready set) run one at a time across every concurrent task, including the
338
- step 5 rerun; light ones are unconstrained. Do not wait for the whole
339
- round before unlocking dependents: each task landing in step 5 re-opens
340
- step 2, and a newly ready
341
- task dispatches in a fresh round at the current clean HEAD while unrelated
342
- tasks still run. The wave advances to review only when every wave task is
343
- `done`.
344
-
345
- 5. **Verify and land serially as results arrive.** A coder returns only
346
- `ready` or `blocked`; it never owns frontmatter or Git. Process each
347
- completion when it lands — never wait for slower in-flight tasks first;
348
- when several results wait, land them in task-id order.
349
-
350
- - For `ready`, compare the complete worktree diff to `base`. Permit only
351
- declared `files` plus append-only Log changes in that task file. Include
352
- additions, deletions, renames, and binary changes; an unexpected path
353
- blocks before any product commit.
354
- - For serial work, reproduce the validated complete task patch, including
355
- untracked additions, in the pre-created verification sidecar. Keep the
356
- primary patch intact. Check its product diff against the primary task
357
- diff before verifying; retire the sidecar through `isolation.py retire`
358
- after preserving its evidence and removing only those reproduced changes.
359
- Parallel work uses the task's existing isolated worktree.
360
- - Run the task's Verify command in that isolated worktree. This rerun is the
361
- authoritative task evidence; a command run in the primary or a sibling
362
- worktree never counts. Append its exact result to the task Log. After
363
- `land` returns, when `git rev-parse <landed commit>^` equals the
364
- recorded `base` the landed tree is the verified tree: record the run
365
- with `python3 <absolute build_state.py> verify-record --repo <absolute
366
- primary> --command <task Verify> --commit <landed commit> --result
367
- pass`. The ledger is `.project` bookkeeping; the next checkpoint
368
- commits it.
369
- - Land with
370
- `python3 <absolute isolation.py> land --repo <absolute primary>
371
- --source <isolated worktree> --base <recorded base> --task-id <id>
372
- --title <task title> --task-file <task path> --allow-path <each declared
373
- file>`. Do not invent commit or cherry-pick commands. For a serial round,
374
- the primary must still be on the bound branch at the recorded base. A
375
- non-zero exit reports the exact landing failure, such as an unexpected
376
- path, base or branch mismatch, invalid task proof, conflict, or empty diff.
377
- On conflict the helper aborts and leaves the primary clean on the bound
378
- branch. Never leave task landing in progress.
379
- - `land` stamps `status: done`, `base`, and null `worktree`/`task_branch`
380
- into the task frontmatter and records `Base:` in the commit body, so the
381
- product commit is the task's only commit; there is no `commit`
382
- frontmatter field — `recover` proves the SHA from git. Do not write a
383
- separate bookkeeping commit. Retire the isolate with
384
- `python3 <absolute isolation.py> retire --repo <absolute primary>
385
- --worktree <isolated worktree> [--branch <task_branch>]`. Serial rounds
386
- return `retired: false` and leave the bound branch untouched. Each
387
- completed task landing re-opens step 2: dispatch newly
388
- ready dependents in a fresh round at the current clean HEAD instead of
389
- idling behind unrelated in-flight tasks.
390
- - A block whose Log delta leads with `NEEDS-ORCHESTRATOR:` is a contract
391
- question, not a failure. When the approved artifacts (PLAN.md,
392
- INTENT.md, SYNTHESIS.md, and the Interface contracts of every involved
393
- task) pin exactly one answer, append `Orchestrator answer: <answer> —
394
- <artifact citation>` to the task Log, return the task to `pending`,
395
- checkpoint the bookkeeping, and let a later layer redispatch it; a question
396
- redispatch never consumes the failed-implementation redispatch. When the
397
- runtime's structured layer exposes a blocking ask/reply channel, relay
398
- the answer through it with the worker held alive per the runtime
399
- dispatch contract instead of redispatching. A dispatch-driver question
400
- keeps the isolate active: record the answer with `dispatch_driver.py
401
- answer`, and the next `round` redispatches that same isolate. When
402
- the artifacts admit more than one reading, ask the user through an
403
- interactive user-input tool when available, record the ruling verbatim
404
- as the answer, and repair the task contract as a documented plan defect
405
- when the ruling changes it — except a ruling that changes a success
406
- criterion, constraint, or veto, which follows the define-Corrections
407
- path above. A question block creates no product commit
408
- and preserves the isolated worktree under the same retirement rule. Before
409
- changing its canonical bookkeeping, revoke a parallel isolate's active
410
- dispatch with `python3 <absolute isolation.py> deactivate-task --repo
411
- <isolated worktree> --task-id <id> --task-branch <task_branch>`.
412
- - A blocked report, invalid diff, or failed Verify creates no product
413
- commit. Validate and copy the isolated task's append-only Log delta once;
414
- it is the coder's sole block/implementation narrative. Add orchestrator
415
- evidence only for a distinct diff or Verify rejection. Before changing the
416
- task to `blocked` or `failed`, revoke a parallel isolate's active dispatch
417
- with `python3 <absolute isolation.py> deactivate-task
418
- --repo <isolated worktree> --task-id <id> --task-branch <task_branch>`.
419
- Then update and checkpoint the bookkeeping and apply the recovery
420
- rule. Preserve the isolated worktree unless and until the explicit clean
421
- retry-retirement procedure in step 2 owns and removes it.
422
-
423
- 6. **Review the wave.** The build orchestrator owns wave reviews; ship never
424
- runs them. Only after every wave task is done, read the wave's
425
- `Review depth` from PLAN.md (default `full`). At `full` or `deep` the
426
- dispatch driver's `review` action performs the sidecar, brief, validate,
427
- collect, and retire work of this step; perform it by hand only without a
428
- child command.
429
- - `full`: spawn one independent reviewer using deterministic logical task
430
- name `review_wave_<wave>_cycle_<cycle>`. Supply every task path, its
431
- recorded base and proven landing commit, the reviewer role, and
432
- wave-review template, and the absolute INTENT.md path.
433
- When INTENT selects quick lane and PLAN has one full wave, also assign
434
- final scope: supply PLAN.md's Surface contract and the recorded review HEAD.
435
- The same reviewer checks all success criteria and any remaining walkthrough
436
- in this pass, records `Review scope: final` and `Reviewed HEAD`, and adds
437
- Surface/Check/Observed fields to each surface criterion. Reuse recorded
438
- command evidence when it already proves the named walkthrough; execute
439
- only missing checks. Ship can then derive FINAL.md without another reviewer.
440
- Record current clean primary HEAD as the review collection base. Create
441
- a fresh review sidecar there; the serial task verification sidecar belongs
442
- to the earlier task base and cannot be collected after landing.
443
- Use `python3 <absolute isolation.py> isolate-verify --repo <absolute primary>
444
- --base <recorded review base> --name wave-<N>-cycle-<C>`. Each task's
445
- recorded base and landing commit still define its isolated review diff.
446
- Keep primary HEAD fixed until collection completes. Brief the
447
- recorded isolated Verify output per task (the Log entry the
448
- orchestrator appended at landing). The reviewer must not re-run that
449
- command or PLAN.md's project Verify. The reviewer
450
- stages `.project/review/wave-N.cycleC.md` there; the
451
- orchestrator validates it, atomically copies it to the primary canonical
452
- path, and only then retires that sidecar with `retire`.
453
- - `deep`: spawn two independent reviewers in parallel, each with a fresh
454
- isolated context and its own verify sidecar from `isolate-verify` at the
455
- recorded review base (`--name wave-<N>-cycle-<C>-contract` and
456
- `wave-<N>-cycle-<C>-adversarial`). Supply both every task path, its
457
- recorded base and proven landing commit, the reviewer role, and the
458
- wave-review template, and the absolute INTENT.md path. The contract lens —
459
- logical task name `review_wave_<wave>_cycle_<cycle>_contract` — does the
460
- full review: apply each task's `commit^..commit` product patch to the
461
- recorded base, check the recorded Verify plus the isolated diff, and
462
- check every acceptance criterion,
463
- owned INTENT success criterion, and interface contract. The adversarial
464
- lens — logical task name
465
- `review_wave_<wave>_cycle_<cycle>_adversarial` — tries to kill the work:
466
- security holes, unhandled edge cases, failure modes, data-loss and
467
- concurrency risks, and missing error handling. Each stages its own file
468
- in its own worktree — `.project/review/wave-N.cycleC.contract.md` and
469
- `.project/review/wave-N.cycleC.adversarial.md`; the orchestrator validates
470
- each, atomically copies both to their primary canonical paths, and only
471
- then retires those sidecars. The wave passes only when both lenses
472
- return `pass`; any `blocked` lens blocks the wave, and both files'
473
- findings feed the fix-task batching in step 7.
474
- - A review file is written only during that cycle, at that cycle's recorded
475
- base, by the writer the selected depth names: a dispatched reviewer at
476
- `full` or `deep`, or the orchestrator at `verify-only`. Never backfill,
477
- split, rename, or reconstruct a review file for a cycle that already ran,
478
- and never write a placeholder verdict for a task that did not exist at
479
- that cycle. A missing or non-canonical earlier artifact is reported to
480
- the user; the
481
- only repair is a new review cycle at the current HEAD, which counts
482
- toward the cap.
483
- - `verify-only`: spawn no reviewer. The orchestrator writes
484
- `.project/review/wave-N.cycleC.md` itself from evidence it already
485
- holds — per task, the Verify evidence and the declared-files diff
486
- check — recording `Depth: verify-only`. Same command, same commit
487
- reuses the recorded pass: the task's Verify evidence is the ledger
488
- entry when `python3 <absolute build_state.py> verify-lookup --repo
489
- <absolute primary> --command <task Verify> --commit <landed commit>`
490
- returns `reuse: true`; otherwise run the command in an
491
- `isolate-verify --historical-task <task id>` sidecar at that commit, record it with
492
- `verify-record`, and use that result. A re-review after a fix cycle
493
- follows the same rule. It checks each acceptance
494
- criterion and each INTENT success criterion owned by the wave's tasks
495
- against that evidence and the diff; anything it cannot
496
- confirm from them is a finding, not a pass. Never spawn a review panel
497
- at `verify-only`.
498
- - After the canonical inherit reviewer (or orchestrator-written
499
- `verify-only` file) is collected, run the optional review panel only
500
- for `full` and `deep`. Inspect advertised model slugs and run
501
- `python3 <absolute review_panel.py> resolve --plan <absolute PLAN.md>
502
- --intent <absolute INTENT.md> --advertised <comma slugs>
503
- --parent-slug <current model slug when known>` and `--charter
504
- <absolute .project/CHARTER.md>` when that file exists. `status: off`
505
- continues with no current-cycle panel artifact. For `skipped`,
506
- persist the helper's exact JSON stdout as
507
- `.project/review/wave-N.cycleC.panel.skipped.json` and continue without
508
- a panel; do not translate or summarize the receipt. Exit 2 / `error`
509
- blocks the wave. `ready` requires that skipped-receipt path to be absent,
510
- then spawns one child per selected family with
511
- logical task name `review_wave_<wave>_cycle_<cycle>_panel_<family>`,
512
- the reviewer role in wave-panel mode, the wave-panel template, and the
513
- exact helper-returned model slug when the host advertises model
514
- selection. On `deep`, each panel brief is the adversarial lens only.
515
- Never override the model on the canonical reviewer. Each child stages
516
- its family file in its own verify sidecar from `isolate-verify`
517
- (`--name wave-<N>-cycle-<C>-panel-<family>`); the parent validates
518
- those files and runs `python3 <absolute review_panel.py> merge --kind
519
- wave --wave <N> --cycle <C> --inputs <family files> --output
520
- <absolute .project/review/wave-N.cycleC.panel.md> --mode
521
- <detected|named>`. The inherit reviewer remains the only Wave verdict.
522
- Do not average panel findings into that verdict or auto-create fix
523
- tasks from preference findings.
524
- - After the canonical inherit reviewer file (and each deep lens file) is
525
- on the primary path, run
526
- `python3 <absolute check_handoffs.py> wave --repo <absolute primary>
527
- --review <canonical wave-review path>`. A non-zero exit is a blocked
528
- wave, not a pass, including `verify-only`. Do not advance on helper
529
- failure.
530
-
531
- 7. **Fix or advance.** A valid canonical `pass` advances unless an
532
- actionable review-panel finding is waiting for a user ruling. On
533
- `blocked`, run `python3 <absolute review_findings.py> collect --repo
534
- <absolute primary> --wave <N> --cycle <C>`, adding one `--helper-failure
535
- "<helper and stderr>"` per bundled helper that exited non-zero in this
536
- cycle. The helper alone reads PLAN.md Config (`max_review_cycles`,
537
- `finding_skeptics`, `wave_budget`), the cycle's lens files, and every
538
- skeptic file of the wave; it groups blocking findings by criterion
539
- locator, collapses true duplicates, carries earlier refutations forward,
540
- separates structural blockers, batches fix groups by disjoint file scope,
541
- and reports `cap_reached`. Exit 2 blocks the wave. Never regroup,
542
- re-derive a locator, or re-decide refutation in model reasoning; act on
543
- the result in this order:
544
- - `structural_blockers` non-empty: a missing or invalid lens, panel, or
545
- skeptic artifact, a helper failure, or a finding that names no
546
- contract criterion never enters skeptic filtering. Keep it blocking
547
- through the ordinary blocked-wave handling — a fix task when applicable
548
- or `build/blocked` escalation otherwise.
549
- - `cap_reached` true: skip every branch below and use the cycle-cap
550
- escalation at the end of this step.
551
- - `skeptic_groups` non-empty: spawn one independent read-only skeptic
552
- per listed locator, concurrently up to the advertised child capacity,
553
- with logical task name
554
- `review_wave_<wave>_cycle_<cycle>_skeptic_<criterion_locator>`, the
555
- reviewer role in skeptic mode, the skeptic template, and its own verify
556
- sidecar from `isolate-verify`
557
- (`--name wave-<N>-cycle-<C>-skeptic-<criterion_locator>`) at the
558
- recorded review base. Brief each with the group's `locator`,
559
- `criterion` verbatim, every `observations` entry verbatim, the group's
560
- `tasks` files, their recorded bases and proven landing commits, and the
561
- absolute INTENT.md path. Each skeptic stages
562
- `.project/review/wave-N.cycleC.skeptic-<criterion_locator>.md` in its
563
- sidecar; validate each against the skeptic template, atomically copy it
564
- to the primary canonical path, then retire that sidecar. Rerun the
565
- helper; a locator refuted in an earlier cycle never gets a second
566
- skeptic, and the helper already routes it.
567
- - `all_refuted` true: stop and ask. Present **Outcome** with the blocked
568
- verdict and the refutation count, **Review** linking the lens and
569
- skeptic files, and **Next** listing `Re-run the review cycle with the
570
- skeptic files in the reviewer briefs (recommended — no finding survived
571
- scrutiny)` first, then `Open fix tasks from the findings anyway (an
572
- explicit ruling that overrides their refutations)`. A selected re-run
573
- consumes a cycle. After the user selects either option, record exact
574
- full HEAD, then use `pipeline_state.py transition` with the exact
575
- current phase, status, branch, and archive as expected and unchanged
576
- phase/status as the result. Append `wave <N> cycle <C> all-refuted
577
- ruling: <selected option verbatim>` to the STATE.md Log and require the
578
- returned position to remain `build/active`. Checkpoint STATE.md and the
579
- collected skeptic artifacts through the Bookkeeping checkpoint rule with
580
- subject `build: record wave <N> cycle <C> skeptic ruling`, body `Why:
581
- persist the all-refuted user ruling before acting`, and `Wave: <N>`. Do
582
- not start the selected review cycle or create, batch, or dispatch fix
583
- tasks until the checkpoint returns its commit. When the persisted ruling
584
- selects `Open fix tasks from the findings anyway`, the override set is
585
- every `refuted_groups` locator with its preserved `observations`; its
586
- governing refutation is the group's `skeptic` entry (the current
587
- cycle's file, or the earlier cycle's file for a same-evidence repeat).
588
- Add that set to `fix_groups` for batching. No other ruling re-admits
589
- refuted groups. Preserve their skeptic verdicts and eligibility
590
- history. After a crash, resume the recorded choice without asking
591
- again.
592
- - Otherwise batch `fix_batches` into complete fix tasks from the task
593
- template — one task per batch, never one per finding — each carrying
594
- its groups' failed criteria and observed evidence verbatim. A group
595
- with `repeat` true is evidence its earlier fix failed, never a new
596
- finding; a re-review never spawns a duplicate fix task for a finding
597
- already carried. Write each fix task to `.project/tasks/` with `wave`
598
- set to the current wave or a newly appended `## Wave N` heading in
599
- PLAN.md before dispatch. Its dependencies include every source task in
600
- the batch; its files match the batch. In `## Review findings`, use one
601
- `### <locator>` block per group, `Criterion: <verbatim criterion>`, and
602
- every observation verbatim. Run the repair through the same isolated
603
- layer loop, even when its appended wave repairs an earlier blocked wave.
604
- After landing, call `review_findings.py repair-evidence --repo <primary>
605
- --wave <source wave> --cycle <source cycle> --task <repair id>` and save
606
- its JSON as the repair evidence for the next review. The helper validates
607
- the carried batch, original and repair landings, isolated product scope,
608
- unchanged source reports and reusable Verify. On success, brief the next
609
- original-wave review with this receipt and the reviewer role's
610
- **Re-review after a proven repair** contract. Reuse command evidence;
611
- the new review judges the repaired product against the original criteria.
612
- Preserve prior verdicts and source tasks. On helper rejection, resolve
613
- the evidence blocker rather than redispatching an already proven fix.
614
- At the cap, record all attempts in the STATE.md log and ask the user —
615
- through an interactive user-input tool when available — after linking
616
- the resolved absolute blocking wave review, every deep lens file for the
617
- cycle, and every skeptic file collected for the wave, plus the STATE.md
618
- attempt log. Ask whether to redirect the approach, raise the cap, or send
619
- define to amend INTENT.md `## Corrections` — never rewrite an AC from a
620
- Log waiver — or, in program flow (ROADMAP.md exists), to abandon the
621
- milestone under the Milestone abandon procedure — listing the
622
- orchestrator's recommended option first marked `(recommended)` with a
623
- one-line reason drawn from the review evidence. Never choose silently.
624
- When the canonical verdict is `pass` and `wave-N.cycleC.panel.md` reports
625
- `Actionable` greater than 0, do not advance silently: present **Outcome**
626
- with the canonical pass plus the actionable count, **Review** linking the
627
- panel file, and **Next** listing `Open fix tasks from panel findings
628
- (recommended)` first, then `Advance and keep panel findings as warnings`.
629
- Preference-only panel warnings do not block advance. On pass, checkpoint
630
- the review artifact, the panel file when present, STATE.md, and wave
631
- bookkeeping, then report `wave N/M done, C review cycle(s)`.
140
+ `round` owns entry transition, recovery, ready-set checks, brief lint, isolation,
141
+ child dispatch, authoritative Verify, landing, ledger, retirement, and bookkeeping.
142
+ Do not replay those steps or rewrite their results in another report.
143
+
144
+ | Receipt | Next action |
145
+ |---|---|
146
+ | `in-flight` | Resume the same action to collect its existing children. |
147
+ | `done` from round | Run `review` with the same repo, wave, child command, and the current cycle. |
148
+ | Passing review, no panel required | Continue with the next wave or Completion. |
149
+ | `panel_required: true` | Read the panel procedure in [native build](references/build-native.md), then use the driver's `panel` action. |
150
+ | Blocked review with findings | Read step 7 in [native build](references/build-native.md); use `skeptics` or `fix-tasks` only as the finding receipt directs. |
151
+ | `question` | Answer from approved artifacts or escalate; record with `answer --task-id <id> --answer '<answer> <citation>'`, then resume round. |
152
+ | Task/recovery `blocked` or structural escalation | Read the matching recovery or plan-defect branch in [native build](references/build-native.md). |
153
+
154
+ Without an owner-supplied child command, read [native build](references/build-native.md)
155
+ and the [dispatch contract](references/dispatch.md). That path uses native child
156
+ tools with the same contracts and evidence. A `verify-only` wave also reads the
157
+ native review procedure because the driver does not author that artifact.
158
+
159
+ A failing helper stops the step: report stderr and run the forensics diagnostic
160
+ under AGENTS.md. A live `in-flight` receipt is resumable work, not a failed helper.
161
+ Apply owner budgets through the dispatch contract. Never infer a new limit.
632
162
 
633
163
  ## Completion
634
164
 
635
- Run `python3 <absolute dispatch_driver.py> complete --repo <absolute primary>`
636
- from a clean primary at `build/active` or crash-left `build/done`. It checks
637
- readiness and the archive-time review cycle contract before recording landing
638
- proof, entering `ship/active`, and checkpointing. A blocked receipt stops
639
- completion; a `done` receipt proves these steps, so do not repeat
640
- them. For manual completion:
641
- after every wave passes, record exact full HEAD and prove every task landed
642
- with `python3 <absolute workflow_run.py> build-evidence --repo <absolute primary>
643
- --expected-head <HEAD>`. The runner writes the wrapped `verify-landed` result
644
- to `.project/build/evidence.json`; that path is the only landing-proof
645
- location the ship runtime recognizes, so never save the receipt under another
646
- name. The result must return one
647
- `proven-landed` or `attested` evidence entry per task, and any non-zero exit
648
- blocks completion. A `done` task without landing proof follows the `block`
649
- handling in step 1 above (owner ruling, Verify, `verify-record`, `attest`).
650
- Then run
651
- `pipeline_state.py transition`, expecting `build/active` plus the exact branch
652
- and archive, to set `phase: ship`, `status: active` with event `build done;
653
- final review pending`. Checkpoint that transition through the rule above with
654
- subject `build: complete milestone` and a concrete `Why:` body. Do not run
655
- PLAN.md's project Verify here — ship runs it once. This
656
- keeps the primary worktree clean and avoids a separate review-phase transition
657
- checkpoint. Report waves, exact task commits, fixed findings, and remaining risk.
658
- Link the resolved absolute final wave review as the review surface and state
659
- that ship is next. Do not merge to the default branch, tag, mark `shipped`, or
660
- integrate; ship owns FINAL.md, project Verify, and those steps. When invoked
661
- directly, stop and tell the user to explicitly
662
- invoke `$gsd-path`, which routes to ship; do not invoke an explicit-only sibling
663
- skill yourself.
664
- If a crash leaves `build/done`, use that phase and status as the expected
665
- transition values, then checkpoint the same `ship/active` result before
666
- returning to the router.
165
+ ```text
166
+ python3 <absolute dispatch_driver.py> complete --repo <absolute primary>
167
+ ```
667
168
 
668
- ## Milestone abandon (program flow only)
169
+ Use this runtime even when coders used native child tools. It proves all tasks
170
+ landed and wave reviews passed, writes the canonical build evidence, enters
171
+ `ship/active`, and checkpoints. A blocked receipt stops completion. On a done
172
+ receipt, report waves, task commits, fixed findings, and remaining risk; link the
173
+ absolute final wave review and use the executable phase handoff in AGENTS.md. Ship owns project Verify,
174
+ final review, archive, and publication; do not repeat or enter them here.
669
175
 
670
- Abandon the active milestone only on an explicit user ruling — from the
671
- review-cycle-cap escalation, a decision invalidation, or a direct request.
672
- Require `.project/ROADMAP.md`; a single-milestone project has no abandon
673
- path — stop and let the user decide how to restart.
176
+ ## Milestone abandon
674
177
 
675
- 1. Retire every recorded task worktree and branch with `isolation.py retire`
676
- after confirming ownership, recording each discarded uncommitted diff's
677
- exact path set and hash in the STATE.md log. Never discard work the
678
- recorded metadata cannot own.
679
- 2. Run the bundled `scripts/archive_milestone.py abandon --repo <absolute
680
- repo root> --slug <milestone slug> --reason <user ruling, verbatim>`.
681
- This one helper-owned transaction journals the exact request and starting
682
- HEAD before mutation; archives the partial artifacts without review gates;
683
- marks the exact ROADMAP entry `Status: abandoned` with its `Archive:` path;
684
- appends `- <NNN>-<slug> — abandoned: <collapsed ruling>` exactly once to
685
- LESSONS.md; transitions STATE to `roadmap/active` with `milestone: null`
686
- and `archive: null`; and creates the checkpoint with exact subject `build:
687
- abandon milestone <slug>` and body `Why: <collapsed ruling>`. The manifest
688
- `Reason:` and checkpoint `Why:` are the same normalized ruling.
689
- 3. Rerun the same command with the same slug and ruling after any interruption.
690
- It resumes archive moves, metadata, state transition, or checkpoint from
691
- the journaled starting HEAD; a changed slug, ruling, archive, branch, or
692
- manifest reason blocks. Success returns the archive, exact checkpoint
693
- commit, and `committed` or `already-complete` status. Never edit or commit
694
- any part of this transaction manually and never select another sequence
695
- number.
696
- 4. Return to the router, which routes `roadmap/active` to the roadmap
697
- contract in re-slice mode. The abandoned code stays on the build branch
698
- until the next milestone's integration, then reaches the default branch as
699
- inert history; the re-slice plans around it. Never revert product commits
700
- yourself.
178
+ Only when the owner abandons a program milestone or STATE.archive records an
179
+ interrupted abandon, read [milestone abandon](references/build-abandon.md).