@opengsd/gsd-path 1.0.0 → 1.1.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 (395) hide show
  1. package/AGENTS.md +28 -11
  2. package/DOCS.md +6 -5
  3. package/FULL.md +9 -13
  4. package/QUICK.md +3 -3
  5. package/README.md +151 -14
  6. package/RUNTIME.md +7 -1
  7. package/WORKFLOW.md +30 -14
  8. package/package.json +15 -1
  9. package/platforms/shared-agents/dispatch.md +6 -0
  10. package/scripts/archive_milestone.py +10 -118
  11. package/scripts/bootstrap_repository.py +25 -3
  12. package/scripts/build_recovery.py +287 -0
  13. package/scripts/check_docs_audit.py +5 -3
  14. package/scripts/check_handoffs.py +1 -1
  15. package/scripts/detect_project.py +11 -2
  16. package/scripts/dispatch_driver.py +4 -2
  17. package/scripts/git_guard.py +2 -1
  18. package/scripts/install.mjs +2 -0
  19. package/scripts/install.py +2 -0
  20. package/scripts/integration.py +28 -22
  21. package/scripts/isolation.py +9 -1
  22. package/scripts/lean_verification.py +1 -1
  23. package/scripts/pipeline_diagnose.py +12 -3
  24. package/scripts/pipeline_state.py +114 -186
  25. package/scripts/pipeline_undo.py +11 -7
  26. package/scripts/promote_lookahead.py +30 -162
  27. package/scripts/roadmap.py +321 -0
  28. package/scripts/skill-resources.json +79 -1
  29. package/scripts/state_checkpoint.py +109 -72
  30. package/scripts/state_promote.py +42 -44
  31. package/scripts/task_context.py +73 -0
  32. package/scripts/token_budget.py +40 -1
  33. package/scripts/workflow_run.py +116 -7
  34. package/skills/gsd-path/BUILD.md +47 -575
  35. package/skills/gsd-path/DECIDE.md +2 -6
  36. package/skills/gsd-path/DEFINE.md +10 -14
  37. package/skills/gsd-path/INSPECT.md +30 -8
  38. package/skills/gsd-path/PLAN.md +25 -17
  39. package/skills/gsd-path/RESEARCH.md +3 -6
  40. package/skills/gsd-path/ROADMAP.md +22 -58
  41. package/skills/gsd-path/SHIP.md +5 -4
  42. package/skills/gsd-path/SKILL.md +24 -14
  43. package/skills/gsd-path/references/build-abandon.md +33 -0
  44. package/skills/gsd-path/references/build-native.md +494 -0
  45. package/skills/gsd-path/references/build-recovery.md +78 -0
  46. package/skills/gsd-path/references/coder.md +8 -3
  47. package/skills/gsd-path/references/dispatch.md +6 -0
  48. package/skills/gsd-path/references/docs-auditor.md +14 -0
  49. package/skills/gsd-path/references/reviewer-final.md +21 -0
  50. package/skills/gsd-path/references/reviewer-panel.md +17 -0
  51. package/skills/gsd-path/references/reviewer-skeptic.md +20 -0
  52. package/skills/gsd-path/references/reviewer-wave.md +89 -0
  53. package/skills/gsd-path/references/reviewer.md +12 -150
  54. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  55. package/skills/gsd-path/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  56. package/skills/gsd-path/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  57. package/skills/gsd-path/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  58. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  59. package/skills/gsd-path/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  60. package/skills/gsd-path/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  61. package/skills/gsd-path/scripts/__pycache__/discussion_records.cpython-312.pyc +0 -0
  62. package/skills/gsd-path/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  63. package/skills/gsd-path/scripts/__pycache__/integration.cpython-312.pyc +0 -0
  64. package/skills/gsd-path/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  65. package/skills/gsd-path/scripts/__pycache__/loop_run.cpython-312.pyc +0 -0
  66. package/skills/gsd-path/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  67. package/skills/gsd-path/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  68. package/skills/gsd-path/scripts/__pycache__/review_findings.cpython-312.pyc +0 -0
  69. package/skills/gsd-path/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  70. package/skills/gsd-path/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  71. package/skills/gsd-path/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  72. package/skills/gsd-path/scripts/__pycache__/task_context.cpython-312.pyc +0 -0
  73. package/skills/gsd-path/scripts/__pycache__/workflow_run.cpython-312.pyc +0 -0
  74. package/skills/gsd-path/scripts/archive_milestone.py +10 -118
  75. package/skills/gsd-path/scripts/bootstrap_repository.py +25 -3
  76. package/skills/gsd-path/scripts/build_recovery.py +287 -0
  77. package/skills/gsd-path/scripts/check_docs_audit.py +5 -3
  78. package/skills/gsd-path/scripts/check_handoffs.py +1 -1
  79. package/skills/gsd-path/scripts/detect_project.py +11 -2
  80. package/skills/gsd-path/scripts/dispatch_driver.py +4 -2
  81. package/skills/gsd-path/scripts/integration.py +28 -22
  82. package/skills/gsd-path/scripts/isolation.py +9 -1
  83. package/skills/gsd-path/scripts/lean_verification.py +1 -1
  84. package/skills/gsd-path/scripts/pipeline_state.py +114 -186
  85. package/skills/gsd-path/scripts/promote_lookahead.py +30 -162
  86. package/skills/gsd-path/scripts/roadmap.py +321 -0
  87. package/skills/gsd-path/scripts/state_checkpoint.py +109 -72
  88. package/skills/gsd-path/scripts/state_promote.py +42 -44
  89. package/skills/gsd-path/scripts/task_context.py +73 -0
  90. package/skills/gsd-path/scripts/token_budget.py +40 -1
  91. package/skills/gsd-path/scripts/workflow_run.py +116 -7
  92. package/skills/gsd-path/templates/wave-review.md +1 -1
  93. package/skills/gsd-path-build/SKILL.md +47 -575
  94. package/skills/gsd-path-build/references/build-abandon.md +33 -0
  95. package/skills/gsd-path-build/references/build-native.md +494 -0
  96. package/skills/gsd-path-build/references/build-recovery.md +78 -0
  97. package/skills/gsd-path-build/references/coder.md +8 -3
  98. package/skills/gsd-path-build/references/dispatch.md +6 -0
  99. package/skills/gsd-path-build/references/reviewer-final.md +21 -0
  100. package/skills/gsd-path-build/references/reviewer-panel.md +17 -0
  101. package/skills/gsd-path-build/references/reviewer-skeptic.md +20 -0
  102. package/skills/gsd-path-build/references/reviewer-wave.md +89 -0
  103. package/skills/gsd-path-build/references/reviewer.md +12 -150
  104. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  105. package/skills/gsd-path-build/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  106. package/skills/gsd-path-build/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  107. package/skills/gsd-path-build/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  108. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  109. package/skills/gsd-path-build/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  110. package/skills/gsd-path-build/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  111. package/skills/gsd-path-build/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  112. package/skills/gsd-path-build/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  113. package/skills/gsd-path-build/scripts/__pycache__/loop_run.cpython-312.pyc +0 -0
  114. package/skills/gsd-path-build/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  115. package/skills/gsd-path-build/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  116. package/skills/gsd-path-build/scripts/__pycache__/review_findings.cpython-312.pyc +0 -0
  117. package/skills/gsd-path-build/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  118. package/skills/gsd-path-build/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  119. package/skills/gsd-path-build/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  120. package/skills/gsd-path-build/scripts/__pycache__/task_context.cpython-312.pyc +0 -0
  121. package/skills/gsd-path-build/scripts/__pycache__/workflow_run.cpython-312.pyc +0 -0
  122. package/skills/gsd-path-build/scripts/archive_milestone.py +10 -118
  123. package/skills/gsd-path-build/scripts/build_recovery.py +287 -0
  124. package/skills/gsd-path-build/scripts/check_handoffs.py +1 -1
  125. package/skills/gsd-path-build/scripts/detect_project.py +1526 -0
  126. package/skills/gsd-path-build/scripts/dispatch_driver.py +4 -2
  127. package/skills/gsd-path-build/scripts/integration.py +28 -22
  128. package/skills/gsd-path-build/scripts/isolation.py +9 -1
  129. package/skills/gsd-path-build/scripts/pipeline_state.py +114 -186
  130. package/skills/gsd-path-build/scripts/promote_lookahead.py +283 -0
  131. package/skills/gsd-path-build/scripts/roadmap.py +321 -0
  132. package/skills/gsd-path-build/scripts/state_checkpoint.py +109 -72
  133. package/skills/gsd-path-build/scripts/state_promote.py +42 -44
  134. package/skills/gsd-path-build/scripts/task_context.py +73 -0
  135. package/skills/gsd-path-build/scripts/token_budget.py +40 -1
  136. package/skills/gsd-path-build/scripts/workflow_run.py +116 -7
  137. package/skills/gsd-path-build/templates/wave-review.md +1 -1
  138. package/skills/gsd-path-decide/SKILL.md +2 -6
  139. package/skills/gsd-path-decide/references/dispatch.md +6 -0
  140. package/skills/gsd-path-decide/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  141. package/skills/gsd-path-decide/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  142. package/skills/gsd-path-decide/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  143. package/skills/gsd-path-decide/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  144. package/skills/gsd-path-decide/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  145. package/skills/gsd-path-decide/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  146. package/skills/gsd-path-decide/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  147. package/skills/gsd-path-decide/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  148. package/skills/gsd-path-decide/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  149. package/skills/gsd-path-decide/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  150. package/skills/gsd-path-decide/scripts/archive_milestone.py +2157 -0
  151. package/skills/gsd-path-decide/scripts/build_recovery.py +287 -0
  152. package/skills/gsd-path-decide/scripts/check_handoffs.py +1 -1
  153. package/skills/gsd-path-decide/scripts/detect_project.py +1526 -0
  154. package/skills/gsd-path-decide/scripts/discussion_validate.py +1321 -0
  155. package/skills/gsd-path-decide/scripts/integration.py +1439 -0
  156. package/skills/gsd-path-decide/scripts/isolation.py +9 -1
  157. package/skills/gsd-path-decide/scripts/pipeline_state.py +114 -186
  158. package/skills/gsd-path-decide/scripts/promote_lookahead.py +283 -0
  159. package/skills/gsd-path-decide/scripts/review_panel.py +553 -0
  160. package/skills/gsd-path-decide/scripts/roadmap.py +321 -0
  161. package/skills/gsd-path-decide/scripts/state_checkpoint.py +109 -72
  162. package/skills/gsd-path-decide/scripts/state_promote.py +42 -44
  163. package/skills/gsd-path-define/SKILL.md +10 -14
  164. package/skills/gsd-path-define/references/build-recovery.md +78 -0
  165. package/skills/gsd-path-define/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  166. package/skills/gsd-path-define/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  167. package/skills/gsd-path-define/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  168. package/skills/gsd-path-define/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  169. package/skills/gsd-path-define/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  170. package/skills/gsd-path-define/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  171. package/skills/gsd-path-define/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  172. package/skills/gsd-path-define/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  173. package/skills/gsd-path-define/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  174. package/skills/gsd-path-define/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  175. package/skills/gsd-path-define/scripts/archive_milestone.py +2157 -0
  176. package/skills/gsd-path-define/scripts/build_recovery.py +287 -0
  177. package/skills/gsd-path-define/scripts/check_handoffs.py +1 -1
  178. package/skills/gsd-path-define/scripts/detect_project.py +11 -2
  179. package/skills/gsd-path-define/scripts/discussion_validate.py +1321 -0
  180. package/skills/gsd-path-define/scripts/integration.py +1439 -0
  181. package/skills/gsd-path-define/scripts/isolation.py +9 -1
  182. package/skills/gsd-path-define/scripts/pipeline_state.py +114 -186
  183. package/skills/gsd-path-define/scripts/promote_lookahead.py +283 -0
  184. package/skills/gsd-path-define/scripts/review_panel.py +553 -0
  185. package/skills/gsd-path-define/scripts/roadmap.py +321 -0
  186. package/skills/gsd-path-define/scripts/state_checkpoint.py +109 -72
  187. package/skills/gsd-path-define/scripts/state_promote.py +42 -44
  188. package/skills/gsd-path-docs-audit/references/dispatch.md +6 -0
  189. package/skills/gsd-path-docs-audit/references/docs-auditor.md +14 -0
  190. package/skills/gsd-path-docs-audit/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  191. package/skills/gsd-path-docs-audit/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  192. package/skills/gsd-path-docs-audit/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  193. package/skills/gsd-path-docs-audit/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  194. package/skills/gsd-path-docs-audit/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  195. package/skills/gsd-path-docs-audit/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  196. package/skills/gsd-path-docs-audit/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  197. package/skills/gsd-path-docs-audit/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  198. package/skills/gsd-path-docs-audit/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  199. package/skills/gsd-path-docs-audit/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  200. package/skills/gsd-path-docs-audit/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  201. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +2157 -0
  202. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +287 -0
  203. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +5 -3
  204. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +1 -1
  205. package/skills/gsd-path-docs-audit/scripts/detect_project.py +1526 -0
  206. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +1321 -0
  207. package/skills/gsd-path-docs-audit/scripts/integration.py +1439 -0
  208. package/skills/gsd-path-docs-audit/scripts/isolation.py +9 -1
  209. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +114 -186
  210. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +283 -0
  211. package/skills/gsd-path-docs-audit/scripts/review_panel.py +553 -0
  212. package/skills/gsd-path-docs-audit/scripts/roadmap.py +321 -0
  213. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +109 -72
  214. package/skills/gsd-path-docs-audit/scripts/state_promote.py +42 -44
  215. package/skills/gsd-path-forensics/scripts/__pycache__/pipeline_undo.cpython-312.pyc +0 -0
  216. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +12 -3
  217. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +11 -7
  218. package/skills/gsd-path-inspect/SKILL.md +30 -8
  219. package/skills/gsd-path-inspect/references/dispatch.md +6 -0
  220. package/skills/gsd-path-inspect/references/docs-auditor.md +14 -0
  221. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  222. package/skills/gsd-path-inspect/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  223. package/skills/gsd-path-inspect/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  224. package/skills/gsd-path-inspect/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  225. package/skills/gsd-path-inspect/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  226. package/skills/gsd-path-inspect/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  227. package/skills/gsd-path-inspect/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  228. package/skills/gsd-path-inspect/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  229. package/skills/gsd-path-inspect/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  230. package/skills/gsd-path-inspect/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  231. package/skills/gsd-path-inspect/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  232. package/skills/gsd-path-inspect/scripts/archive_milestone.py +2157 -0
  233. package/skills/gsd-path-inspect/scripts/build_recovery.py +287 -0
  234. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +5 -3
  235. package/skills/gsd-path-inspect/scripts/check_handoffs.py +1 -1
  236. package/skills/gsd-path-inspect/scripts/detect_project.py +11 -2
  237. package/skills/gsd-path-inspect/scripts/discussion_validate.py +1321 -0
  238. package/skills/gsd-path-inspect/scripts/integration.py +1439 -0
  239. package/skills/gsd-path-inspect/scripts/isolation.py +9 -1
  240. package/skills/gsd-path-inspect/scripts/pipeline_state.py +114 -186
  241. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +283 -0
  242. package/skills/gsd-path-inspect/scripts/review_panel.py +553 -0
  243. package/skills/gsd-path-inspect/scripts/roadmap.py +321 -0
  244. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +109 -72
  245. package/skills/gsd-path-inspect/scripts/state_promote.py +42 -44
  246. package/skills/gsd-path-inspect/scripts/workflow_run.py +226 -0
  247. package/skills/gsd-path-plan/SKILL.md +25 -17
  248. package/skills/gsd-path-plan/references/build-recovery.md +78 -0
  249. package/skills/gsd-path-plan/references/dispatch.md +6 -0
  250. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  251. package/skills/gsd-path-plan/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  252. package/skills/gsd-path-plan/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  253. package/skills/gsd-path-plan/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  254. package/skills/gsd-path-plan/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  255. package/skills/gsd-path-plan/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  256. package/skills/gsd-path-plan/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  257. package/skills/gsd-path-plan/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  258. package/skills/gsd-path-plan/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  259. package/skills/gsd-path-plan/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  260. package/skills/gsd-path-plan/scripts/archive_milestone.py +2157 -0
  261. package/skills/gsd-path-plan/scripts/build_recovery.py +287 -0
  262. package/skills/gsd-path-plan/scripts/check_handoffs.py +1 -1
  263. package/skills/gsd-path-plan/scripts/detect_project.py +1526 -0
  264. package/skills/gsd-path-plan/scripts/discussion_validate.py +1321 -0
  265. package/skills/gsd-path-plan/scripts/integration.py +1439 -0
  266. package/skills/gsd-path-plan/scripts/isolation.py +9 -1
  267. package/skills/gsd-path-plan/scripts/pipeline_state.py +114 -186
  268. package/skills/gsd-path-plan/scripts/promote_lookahead.py +283 -0
  269. package/skills/gsd-path-plan/scripts/roadmap.py +321 -0
  270. package/skills/gsd-path-plan/scripts/state_checkpoint.py +109 -72
  271. package/skills/gsd-path-plan/scripts/state_promote.py +42 -44
  272. package/skills/gsd-path-plan/scripts/workflow_run.py +116 -7
  273. package/skills/gsd-path-research/SKILL.md +3 -6
  274. package/skills/gsd-path-research/references/dispatch.md +6 -0
  275. package/skills/gsd-path-research/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  276. package/skills/gsd-path-research/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  277. package/skills/gsd-path-research/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  278. package/skills/gsd-path-research/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  279. package/skills/gsd-path-research/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  280. package/skills/gsd-path-research/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  281. package/skills/gsd-path-research/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  282. package/skills/gsd-path-research/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  283. package/skills/gsd-path-research/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  284. package/skills/gsd-path-research/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  285. package/skills/gsd-path-research/scripts/archive_milestone.py +2157 -0
  286. package/skills/gsd-path-research/scripts/build_recovery.py +287 -0
  287. package/skills/gsd-path-research/scripts/check_handoffs.py +1 -1
  288. package/skills/gsd-path-research/scripts/detect_project.py +1526 -0
  289. package/skills/gsd-path-research/scripts/discussion_validate.py +1321 -0
  290. package/skills/gsd-path-research/scripts/integration.py +1439 -0
  291. package/skills/gsd-path-research/scripts/isolation.py +9 -1
  292. package/skills/gsd-path-research/scripts/pipeline_state.py +114 -186
  293. package/skills/gsd-path-research/scripts/promote_lookahead.py +283 -0
  294. package/skills/gsd-path-research/scripts/review_panel.py +553 -0
  295. package/skills/gsd-path-research/scripts/roadmap.py +321 -0
  296. package/skills/gsd-path-research/scripts/state_checkpoint.py +109 -72
  297. package/skills/gsd-path-research/scripts/state_promote.py +42 -44
  298. package/skills/gsd-path-roadmap/SKILL.md +22 -58
  299. package/skills/gsd-path-roadmap/references/dispatch.md +6 -0
  300. package/skills/gsd-path-roadmap/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  301. package/skills/gsd-path-roadmap/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  302. package/skills/gsd-path-roadmap/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  303. package/skills/gsd-path-roadmap/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  304. package/skills/gsd-path-roadmap/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  305. package/skills/gsd-path-roadmap/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  306. package/skills/gsd-path-roadmap/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  307. package/skills/gsd-path-roadmap/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  308. package/skills/gsd-path-roadmap/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  309. package/skills/gsd-path-roadmap/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  310. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +10 -118
  311. package/skills/gsd-path-roadmap/scripts/build_recovery.py +287 -0
  312. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +1 -1
  313. package/skills/gsd-path-roadmap/scripts/detect_project.py +11 -2
  314. package/skills/gsd-path-roadmap/scripts/integration.py +28 -22
  315. package/skills/gsd-path-roadmap/scripts/isolation.py +9 -1
  316. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +114 -186
  317. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +30 -162
  318. package/skills/gsd-path-roadmap/scripts/roadmap.py +321 -0
  319. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +109 -72
  320. package/skills/gsd-path-roadmap/scripts/state_promote.py +42 -44
  321. package/skills/gsd-path-ship/SKILL.md +5 -4
  322. package/skills/gsd-path-ship/references/dispatch.md +6 -0
  323. package/skills/gsd-path-ship/references/reviewer-final.md +21 -0
  324. package/skills/gsd-path-ship/references/reviewer-panel.md +17 -0
  325. package/skills/gsd-path-ship/references/reviewer-skeptic.md +20 -0
  326. package/skills/gsd-path-ship/references/reviewer-wave.md +89 -0
  327. package/skills/gsd-path-ship/references/reviewer.md +12 -150
  328. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  329. package/skills/gsd-path-ship/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  330. package/skills/gsd-path-ship/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  331. package/skills/gsd-path-ship/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  332. package/skills/gsd-path-ship/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  333. package/skills/gsd-path-ship/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  334. package/skills/gsd-path-ship/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  335. package/skills/gsd-path-ship/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  336. package/skills/gsd-path-ship/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  337. package/skills/gsd-path-ship/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  338. package/skills/gsd-path-ship/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  339. package/skills/gsd-path-ship/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  340. package/skills/gsd-path-ship/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  341. package/skills/gsd-path-ship/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  342. package/skills/gsd-path-ship/scripts/archive_milestone.py +10 -118
  343. package/skills/gsd-path-ship/scripts/build_recovery.py +287 -0
  344. package/skills/gsd-path-ship/scripts/check_handoffs.py +1 -1
  345. package/skills/gsd-path-ship/scripts/detect_project.py +1526 -0
  346. package/skills/gsd-path-ship/scripts/integration.py +28 -22
  347. package/skills/gsd-path-ship/scripts/isolation.py +9 -1
  348. package/skills/gsd-path-ship/scripts/lean_verification.py +1 -1
  349. package/skills/gsd-path-ship/scripts/pipeline_state.py +114 -186
  350. package/skills/gsd-path-ship/scripts/promote_lookahead.py +283 -0
  351. package/skills/gsd-path-ship/scripts/roadmap.py +321 -0
  352. package/skills/gsd-path-ship/scripts/state_checkpoint.py +109 -72
  353. package/skills/gsd-path-ship/scripts/state_promote.py +42 -44
  354. package/skills/gsd-path-ship/scripts/workflow_run.py +116 -7
  355. package/skills/gsd-path-ship/templates/wave-review.md +1 -1
  356. package/skills/gsd-path-undo/scripts/pipeline_undo.py +11 -7
  357. package/skills/path/BUILD.md +47 -575
  358. package/skills/path/DECIDE.md +2 -6
  359. package/skills/path/DEFINE.md +10 -14
  360. package/skills/path/INSPECT.md +30 -8
  361. package/skills/path/PLAN.md +25 -17
  362. package/skills/path/RESEARCH.md +3 -6
  363. package/skills/path/ROADMAP.md +22 -58
  364. package/skills/path/SHIP.md +5 -4
  365. package/skills/path/SKILL.md +24 -14
  366. package/skills/path/references/build-abandon.md +33 -0
  367. package/skills/path/references/build-native.md +494 -0
  368. package/skills/path/references/build-recovery.md +78 -0
  369. package/skills/path/references/coder.md +8 -3
  370. package/skills/path/references/dispatch.md +6 -0
  371. package/skills/path/references/docs-auditor.md +14 -0
  372. package/skills/path/references/reviewer-final.md +21 -0
  373. package/skills/path/references/reviewer-panel.md +17 -0
  374. package/skills/path/references/reviewer-skeptic.md +20 -0
  375. package/skills/path/references/reviewer-wave.md +89 -0
  376. package/skills/path/references/reviewer.md +12 -150
  377. package/skills/path/scripts/archive_milestone.py +10 -118
  378. package/skills/path/scripts/bootstrap_repository.py +25 -3
  379. package/skills/path/scripts/build_recovery.py +287 -0
  380. package/skills/path/scripts/check_docs_audit.py +5 -3
  381. package/skills/path/scripts/check_handoffs.py +1 -1
  382. package/skills/path/scripts/detect_project.py +11 -2
  383. package/skills/path/scripts/dispatch_driver.py +4 -2
  384. package/skills/path/scripts/integration.py +28 -22
  385. package/skills/path/scripts/isolation.py +9 -1
  386. package/skills/path/scripts/lean_verification.py +1 -1
  387. package/skills/path/scripts/pipeline_state.py +114 -186
  388. package/skills/path/scripts/promote_lookahead.py +30 -162
  389. package/skills/path/scripts/roadmap.py +321 -0
  390. package/skills/path/scripts/state_checkpoint.py +109 -72
  391. package/skills/path/scripts/state_promote.py +42 -44
  392. package/skills/path/scripts/task_context.py +73 -0
  393. package/skills/path/scripts/token_budget.py +40 -1
  394. package/skills/path/scripts/workflow_run.py +116 -7
  395. package/skills/path/templates/wave-review.md +1 -1
@@ -0,0 +1,33 @@
1
+ ## Milestone abandon (program flow only)
2
+
3
+ Abandon the active milestone only on an explicit user ruling — from the
4
+ review-cycle-cap escalation, a decision invalidation, or a direct request.
5
+ Require `.project/ROADMAP.md`; a single-milestone project has no abandon
6
+ path — stop and let the user decide how to restart.
7
+
8
+ 1. Retire every recorded task worktree and branch with `isolation.py retire`
9
+ after confirming ownership, recording each discarded uncommitted diff's
10
+ exact path set and hash in the STATE.md log. Never discard work the
11
+ recorded metadata cannot own.
12
+ 2. Run the bundled `scripts/archive_milestone.py abandon --repo <absolute
13
+ repo root> --slug <milestone slug> --reason <user ruling, verbatim>`.
14
+ This one helper-owned transaction journals the exact request and starting
15
+ HEAD before mutation; archives the partial artifacts without review gates;
16
+ marks the exact ROADMAP entry `Status: abandoned` with its `Archive:` path;
17
+ appends `- <NNN>-<slug> — abandoned: <collapsed ruling>` exactly once to
18
+ LESSONS.md; transitions STATE to `roadmap/active` with `milestone: null`
19
+ and `archive: null`; and creates the checkpoint with exact subject `build:
20
+ abandon milestone <slug>` and body `Why: <collapsed ruling>`. The manifest
21
+ `Reason:` and checkpoint `Why:` are the same normalized ruling.
22
+ 3. Rerun the same command with the same slug and ruling after any interruption.
23
+ It resumes archive moves, metadata, state transition, or checkpoint from
24
+ the journaled starting HEAD; a changed slug, ruling, archive, branch, or
25
+ manifest reason blocks. Success returns the archive, exact checkpoint
26
+ commit, and `committed` or `already-complete` status. Never edit or commit
27
+ any part of this transaction manually and never select another sequence
28
+ number.
29
+ 4. Return to the router, which routes `roadmap/active` to the roadmap
30
+ contract in re-slice mode. The abandoned code stays on the build branch
31
+ until the next milestone's integration, then reaches the default branch as
32
+ inert history; the re-slice plans around it. Never revert product commits
33
+ yourself.
@@ -0,0 +1,494 @@
1
+ # Native dispatch and build recovery
2
+
3
+ Read only when no owner-supplied child command exists, a driver receipt requires
4
+ manual recovery, or the wave uses verify-only review. Entry and bookkeeping
5
+ preconditions remain in the build skill. Do not repeat a proven driver step.
6
+
7
+ ## Wave loop
8
+
9
+ For each `## Wave N` in PLAN.md order (a wave's tasks are the task files whose
10
+ `wave` equals N):
11
+
12
+ **Dispatch driver.** Steps 1–5 below are deterministic, and the bundled
13
+ `scripts/dispatch_driver.py` runs them: recover, settle exited coders, the
14
+ bookkeeping checkpoint, `ready`, brief lint, `prepare-task`, `activate-task`,
15
+ one child per ready task, then Verify in the isolate, Log append, `land`,
16
+ `verify-record`, and `retire` in task-id order. Prefer it whenever the owner
17
+ supplies a child command (a headless CLI that reads the brief on stdin, for
18
+ example `claude -p --output-format json ...` or `codex exec --json ...`; the
19
+ owner's flags own the child's permissions):
20
+
21
+ ```text
22
+ python3 <absolute dispatch_driver.py> round --repo <absolute primary> --wave <N> \
23
+ --child-command '<owner command>' [--wait <owner seconds>] \
24
+ [--child-timeout <owner seconds>]
25
+ ```
26
+
27
+ `round` owns the entry transition described in Preconditions and branch
28
+ binding, checkpointed as `build: start milestone`, and sets `build/blocked`
29
+ on a dependency deadlock or a blocked
30
+ recovery; every other stop stays with the parent. Act only on its receipt:
31
+ `done` means every wave task landed — run
32
+ `review --wave <N> --cycle <C> --child-command '<owner command>' [--wait
33
+ <owner seconds>]` for step 6 at `full` or `deep` depth: it records the clean
34
+ review base, creates one verify sidecar per lens, briefs one reviewer child
35
+ per lens with every task's base and landing commit, validates each file in
36
+ its sidecar, copies it to the canonical path, retires the sidecar, and only
37
+ after every lens settles concludes: a passing cycle with no panel is
38
+ checkpointed; with a panel configured (`panel_required: true`) run `panel
39
+ --wave <N> --cycle <C> --advertised <slugs> [--parent-slug <slug>]
40
+ --child-command '<owner command with {model}>'`, which resolves the panel,
41
+ persists a skipped receipt or runs one panelist per family in its own
42
+ sidecar, merges the family files, and makes the single on-pass checkpoint;
43
+ `blocked` returns the `review_findings.py collect` grouping; when its
44
+ `skeptic_groups` is non-empty, `skeptics --wave <N> --cycle <C>
45
+ --child-command '<owner command>'` runs one read-only skeptic per locator in
46
+ its own sidecar at the review base, validates and collects each file, and
47
+ reruns the helper; then `fix-tasks --wave <N> --cycle <C>` writes one
48
+ lint-clean fix task per batch carrying the failed criteria and observations
49
+ verbatim, or returns `escalate` for structural blockers, skeptic groups, the
50
+ cycle cap, or an all-refuted ruling, which stay with step 7 and the user.
51
+ The driver never writes a `verify-only` file (`status: not-applicable`);
52
+ `in-flight` means call `round` again; `question` means answer from the
53
+ approved artifacts or the user, record it with `answer --task-id <id>
54
+ --answer '<answer> — <citation>'`, and call `round` again, which redispatches
55
+ the retained isolate; `blocked` names the task, reason, and output and leaves
56
+ the isolate in place — apply the recovery, retry, or plan-defect procedure in
57
+ steps 1–2 by hand, then call `round` again. The driver counts dispatches per
58
+ task per milestone and stops at `--max-attempts` (default 2: the first
59
+ dispatch plus this contract's one logged redispatch); owner token limits, when
60
+ supplied, gate every dispatch through the milestone's budget ledger. Do not repeat a step the receipt
61
+ already proves. Without a child command, dispatch through the runtime
62
+ dispatch contract and perform steps 1–5 by hand.
63
+
64
+ 1. **Recover before dispatch.** Run `python3 <absolute isolation.py> recover
65
+ --repo <absolute primary>`. It is read-only and proves every `done` task's
66
+ landing commit from its exact stamped base (first-parent scan for
67
+ `<task-id>: <task title>`, body `Task:`/`Base:`/`Files:`, the base task's
68
+ declared path allow-list from the task file at that base, exact landing
69
+ metadata, append-only task-file body, and
70
+ patch equality with a retained task branch). Pending and `in-progress`
71
+ tasks bypass landing-history proof and report retained resume state or
72
+ `none`; failed and blocked tasks with retained isolation report
73
+ `reconcile`. Act only on its verdicts;
74
+ do not re-derive them in prose, rerun Verify on a proven commit, use an
75
+ unanchored log grep, infer a SHA from `done`, or reset unknown work.
76
+ - `attested`: an owner ruling stands in for the landing commit (see the
77
+ block escalation below); treat it as landed and never redispatch.
78
+ - `recovered`: the task is landed (`land` already stamped `status: done`
79
+ and `base`). Retire a still-present task worktree with `isolation.py
80
+ retire` only when the report shows it present, clean, and on the task
81
+ branch. If only `task_branch` remains, finish its proven interrupted
82
+ retirement with `retire --branch <task_branch> --force --landed-commit
83
+ <commit>`; both absent is valid.
84
+ - `resume`: continue from the returned `base`, `task_branch`, and worktree
85
+ (the primary itself when no task branch exists); when the report shows
86
+ the worktree absent, return the task to `pending` only when ownership is
87
+ clear. When `dispatch_retry` is true, reuse the returned clean isolate,
88
+ write fresh dispatch metadata and agent there, then dispatch; do not
89
+ recreate it. When `landing_retry` is true, do not resume implementation
90
+ or redispatch; rerun `land` against the returned isolate and base.
91
+ - `reconcile`: do not resume implementation. Preserve the returned isolate
92
+ evidence and follow the failed/blocked reconciliation in step 2.
93
+ - `block` on a `done` task with reason `done but no landing commit proves
94
+ it` or `done task has invalid base`: the work was committed outside
95
+ `land`. Never repair history or task frontmatter by hand. Set
96
+ `build/blocked`, present **Outcome** naming every such task, and ask the
97
+ user for a ruling per task; put any suggested ruling text in its own
98
+ fenced code block so it pastes cleanly. On an explicit ruling, run that task's Verify
99
+ at HEAD, record it with `python3 <absolute build_state.py> verify-record
100
+ --repo <absolute primary> --command <task Verify> --commit <HEAD>
101
+ --result pass`, then run `python3 <absolute isolation.py> attest --repo
102
+ <absolute primary> --task-file <task file> --ruling <ruling verbatim>`
103
+ (add `--base <SHA>` only to repair an abbreviated or invalid recorded
104
+ base). The helper stamps the task and creates the attestation commit
105
+ itself; each one moves HEAD, so attest tasks one at a time and rerun
106
+ `recover` afterwards.
107
+ - Rewritten lineage: when every `done` task is rejected with `commit does
108
+ not descend from its Base:` after a rebase or replay, the owner may run
109
+ `python3 <absolute isolation.py> adopt-rebase --repo <absolute primary>
110
+ --original-head <preserved original tip> --head <HEAD> --ruling
111
+ "<ruling verbatim>"`, commit the receipt
112
+ `.project/build/rebase-adoption.json` as `.project/` bookkeeping, and
113
+ rerun `recover`. The original lineage must stay reachable: keep a local
114
+ branch on the old tip until the milestone ships. Adopted tasks report
115
+ `attested` with `provenance: owner-authorized-rebase`.
116
+ - `block` for any other reason: set `build/blocked` with the returned
117
+ reason and stop.
118
+ - `none`: take no recovery action for that task.
119
+
120
+ 2. **Prepare the ready set.** Run `python3 <absolute build_state.py> ready
121
+ --repo <absolute primary>`. It is read-only: it validates every task's
122
+ frontmatter against its dispatch metadata and the recovery report, then
123
+ returns `ready` — the current wave's `pending` tasks whose dependencies are
124
+ all `done`, each with `id`, `title`, `deps`, `files`, `task_file`, and
125
+ `verify_heavy` — after proving that ready and `in-progress` tasks have
126
+ disjoint `files`. Dispatch exactly the tasks it returns; do not select,
127
+ order, or overlap-check tasks in prose. Readiness is continuous, not
128
+ layered: a task becomes selectable the moment its last dependency lands,
129
+ even while unrelated tasks still run, so rerun `ready` after each landing.
130
+ A `NEEDS-ORCHESTRATOR` block stays unselectable until its `Orchestrator
131
+ answer` is recorded in the task Log and the task is back to `pending`.
132
+ Its typed errors are the recovery rule:
133
+ - `task-recovery-required`: for each listed failed or blocked task run
134
+ `python3 <absolute build_state.py> reconcile --repo <absolute primary>
135
+ --task-id <id>` and act on its `classification`. `proven-landed`: the
136
+ task already landed at `landed_commit` and its frontmatter is stale —
137
+ reconcile the task file to that landed state and checkpoint it.
138
+ `resumable` or `reconcile`: apply the retry procedure below with the
139
+ returned `history.candidates` as the rejected evidence. `blocked`: set
140
+ `build/blocked` with the returned `reasons` and stop.
141
+ - `dependency-deadlock`: set `build/blocked` with its `tasks` list and stop.
142
+ - `ready-file-overlap` or `invalid-task-state`: a documented plan defect or
143
+ drifted bookkeeping; repair it before a new clean base.
144
+ A documented plan
145
+ defect may be repaired against INTENT.md and SYNTHESIS.md and logged before
146
+ a new clean base. A repair edits only the fields the lint or ruling named
147
+ in the tasks it named — `files`, Verify, Interface contract text, Intent
148
+ coverage rows, an ambiguous AC. It never adds, removes, splits, merges, or
149
+ renames tasks, moves a task between waves, or rewrites another task's
150
+ acceptance criteria; a defect that needs any of those sets `build/blocked`
151
+ with the lint output and follows [build recovery](build-recovery.md) to
152
+ plan, which owns the task inventory.
153
+ A user ruling that changes a success criterion,
154
+ constraint, or veto is not a plan defect: set `build/blocked`, do not
155
+ rewrite the AC, and follow [build recovery](build-recovery.md) to
156
+ `$gsd-path-define` to append INTENT.md
157
+ `## Corrections` before plan re-gates. A task Log is not that record. One failed implementation gets one logged redispatch when
158
+ its contract remains valid. Repeated failure, ambiguous ownership, a user
159
+ ruling, or a dependency deadlock sets build state to `blocked` and stops.
160
+ Concurrent tasks must have disjoint `files`; serialize overlapping fix
161
+ tasks. A retry never reuses a rejected dirty worktree: first copy its
162
+ validated append-only task Log delta into the primary task file, record the
163
+ rejected diff's exact path set and hash, and checkpoint the block bookkeeping.
164
+ After confirming every old change is task-owned, retire that exact worktree
165
+ with `python3 <absolute isolation.py> retire --repo <absolute primary>
166
+ --worktree <path> --branch <task_branch> --force --task-file <task path>`,
167
+ then create the retry. If retirement was interrupted after removing the
168
+ worktree, rerun the same command; the recorded failed or blocked task and
169
+ its exact base prove the remaining branch before deletion. Create the retry
170
+ from the new clean primary HEAD. After
171
+ resolving a recoverable `build/blocked` condition, use
172
+ `pipeline_state.py transition` with the blocked state and bound branch as
173
+ expected fields to set `build/active` and log the resolution. Checkpoint it
174
+ through the bookkeeping rule before recording that new dispatch-round base.
175
+
176
+ 3. **Isolate every task.** Checkpoint pending bookkeeping through the rule
177
+ above, then record clean `HEAD` as
178
+ this dispatch round's base — tasks dispatched in the same round share it;
179
+ a later round unlocked by fresh landings records the later HEAD — and
180
+ lint every ready task's brief with the bundled
181
+ `scripts/check_task_briefs.py --repo <absolute repo root> --base <recorded
182
+ base>` and re-check Intent coverage with
183
+ `python3 <absolute check_handoffs.py> plan --repo <absolute repo root>`
184
+ before creating any worktree; a lint or coverage failure is a documented plan
185
+ defect — repair it against INTENT.md and SYNTHESIS.md, then re-establish
186
+ the base. Then isolate each ready task with
187
+ `python3 <absolute workflow_run.py> prepare-task --repo <absolute primary>
188
+ --expected-head <recorded base> --task-id <id> --round-size <N>` where N is the
189
+ number of tasks in this dispatch round. Serial (`N=1`) returns the primary
190
+ worktree and `task_branch: null` — the coder works on the bound branch.
191
+ The runner also creates a named verification sidecar at this clean base
192
+ before dispatch. Retain both helper results in the dispatch evidence.
193
+ Parallel (`N>=2`) creates a named `gsd-path-task/<id>` branch and linked
194
+ worktree at that base; never a detached HEAD. Record dispatch through
195
+ `python3 <absolute isolation.py> activate-task --repo <returned worktree>
196
+ --base <recorded base> --task-id <id> --agent build_<id> --task-file
197
+ <exact selected task-file path> [--task-branch <returned task_branch>]`.
198
+ The helper sets `base`, `worktree`, `task_branch`, `status: in-progress`,
199
+ and `agent` in the isolated task and records parallel build authorization.
200
+ Do not edit those fields directly. Do not commit this dispatch state: it lands
201
+ inside the task's own commit, and `recover` derives it from the task
202
+ branch and worktree meanwhile. The primary stays clean during a parallel
203
+ round. Do not append a dispatch Log entry: the isolated task later appends
204
+ at that location, and two parallel appends make the cherry-pick ambiguous. Reuse a retained worktree only when
205
+ its recorded base, branch, and task agree exactly.
206
+
207
+ 4. **Dispatch the round.** Following the local runtime dispatch contract,
208
+ spawn one implementation-capable child per task with deterministic logical
209
+ task name `build_<task_id>`.
210
+ Its brief contains the absolute isolated-worktree root, coder role, task
211
+ file, task template, and the absolute INTENT.md path in that worktree.
212
+ Generate the coder's intent view with `python3 <absolute task_context.py>
213
+ --repo <absolute isolated-worktree> --task <absolute task file>` and include
214
+ its output in the brief. The helper preserves all global rules and falls
215
+ back to full intent when projection is ambiguous. Never summarize it by hand.
216
+ Add no hidden implementation context; repair a
217
+ defective task contract before establishing the round base. Run ready work
218
+ up to capacity. Verify commands marked `Heavy: yes` (`verify_heavy` in the
219
+ ready set) run one at a time across every concurrent task, including the
220
+ step 5 rerun; light ones are unconstrained. Do not wait for the whole
221
+ round before unlocking dependents: each task landing in step 5 re-opens
222
+ step 2, and a newly ready
223
+ task dispatches in a fresh round at the current clean HEAD while unrelated
224
+ tasks still run. The wave advances to review only when every wave task is
225
+ `done`.
226
+
227
+ 5. **Verify and land serially as results arrive.** A coder returns only
228
+ `ready` or `blocked`; it never owns frontmatter or Git. Process each
229
+ completion when it lands — never wait for slower in-flight tasks first;
230
+ when several results wait, land them in task-id order.
231
+
232
+ - For `ready`, compare the complete worktree diff to `base`. Permit only
233
+ declared `files` plus append-only Log changes in that task file. Include
234
+ additions, deletions, renames, and binary changes; an unexpected path
235
+ blocks before any product commit.
236
+ - For a returned `ready` coder, run `python3 <absolute dispatch_driver.py>
237
+ finish --repo <absolute primary> --task-id <id>`. This action works with
238
+ native child tools; no child command is needed. It reproduces serial work
239
+ in its prepared sidecar, runs authoritative Verify, records exact output,
240
+ lands through `isolation.py`, records eligible ledger evidence, and retires
241
+ the isolate. A `landed` receipt proves those steps; do not run them again
242
+ or author another implementation narrative. A blocked receipt preserves
243
+ its failure evidence and follows the recovery rule, never a manual bypass.
244
+ Keep the pre-finish declared-path check above. Each landing re-opens step 2
245
+ so ready dependents can run while unrelated children remain in flight.
246
+ - A block whose Log delta leads with `NEEDS-ORCHESTRATOR:` is a contract
247
+ question, not a failure. When the approved artifacts (PLAN.md,
248
+ INTENT.md, SYNTHESIS.md, and the Interface contracts of every involved
249
+ task) pin exactly one answer, append `Orchestrator answer: <answer> —
250
+ <artifact citation>` to the task Log, return the task to `pending`,
251
+ checkpoint the bookkeeping, and let a later layer redispatch it; a question
252
+ redispatch never consumes the failed-implementation redispatch. When the
253
+ runtime's structured layer exposes a blocking ask/reply channel, relay
254
+ the answer through it with the worker held alive per the runtime
255
+ dispatch contract instead of redispatching. A dispatch-driver question
256
+ keeps the isolate active: record the answer with `dispatch_driver.py
257
+ answer`, and the next `round` redispatches that same isolate. When
258
+ the artifacts admit more than one reading, ask the user through an
259
+ interactive user-input tool when available, record the ruling verbatim
260
+ as the answer, and repair the task contract as a documented plan defect
261
+ when the ruling changes it — except a ruling that changes a success
262
+ criterion, constraint, or veto, which follows the define-Corrections
263
+ path above. A question block creates no product commit
264
+ and preserves the isolated worktree under the same retirement rule. Before
265
+ changing its canonical bookkeeping, revoke a parallel isolate's active
266
+ dispatch with `python3 <absolute isolation.py> deactivate-task --repo
267
+ <isolated worktree> --task-id <id> --task-branch <task_branch>`.
268
+ - A blocked report, invalid diff, or failed Verify creates no product
269
+ commit. Validate and copy the isolated task's append-only Log delta once;
270
+ it is the coder's sole block/implementation narrative. Add orchestrator
271
+ evidence only for a distinct diff or Verify rejection. Before changing the
272
+ task to `blocked` or `failed`, revoke a parallel isolate's active dispatch
273
+ with `python3 <absolute isolation.py> deactivate-task
274
+ --repo <isolated worktree> --task-id <id> --task-branch <task_branch>`.
275
+ Then update and checkpoint the bookkeeping and apply the recovery
276
+ rule. Preserve the isolated worktree unless and until the explicit clean
277
+ retry-retirement procedure in step 2 owns and removes it.
278
+
279
+ 6. **Review the wave.** The build orchestrator owns wave reviews; ship never
280
+ runs them. Only after every wave task is done, read the wave's
281
+ `Review depth` from PLAN.md (default `full`). At `full` or `deep` the
282
+ dispatch driver's `review` action performs the sidecar, brief, validate,
283
+ collect, and retire work of this step; perform it by hand only without a
284
+ child command.
285
+ - `full`: spawn one independent reviewer using deterministic logical task
286
+ name `review_wave_<wave>_cycle_<cycle>`. Supply every task path, its
287
+ recorded base and proven landing commit, the reviewer role, and
288
+ wave-review template, and the absolute INTENT.md path.
289
+ When INTENT selects quick lane and PLAN has one full wave, also assign
290
+ final scope: supply PLAN.md's Surface contract and the recorded review HEAD.
291
+ The same reviewer checks all success criteria and any remaining walkthrough
292
+ in this pass, records `Review scope: final` and `Reviewed HEAD`, and adds
293
+ Surface/Check/Observed fields to each surface criterion. Reuse recorded
294
+ command evidence when it already proves the named walkthrough; execute
295
+ only missing checks. Ship can then derive FINAL.md without another reviewer.
296
+ Record current clean primary HEAD as the review collection base. Create
297
+ a fresh review sidecar there; the serial task verification sidecar belongs
298
+ to the earlier task base and cannot be collected after landing.
299
+ Use `python3 <absolute isolation.py> isolate-verify --repo <absolute primary>
300
+ --base <recorded review base> --name wave-<N>-cycle-<C>`. Each task's
301
+ recorded base and landing commit still define its isolated review diff.
302
+ Keep primary HEAD fixed until collection completes. Brief the
303
+ recorded isolated Verify output per task (the Log entry the
304
+ orchestrator appended at landing). The reviewer must not re-run that
305
+ command or PLAN.md's project Verify. The reviewer
306
+ stages `.project/review/wave-N.cycleC.md` there; the
307
+ orchestrator validates it, atomically copies it to the primary canonical
308
+ path, and only then retires that sidecar with `retire`.
309
+ - `deep`: spawn two independent reviewers in parallel, each with a fresh
310
+ isolated context and its own verify sidecar from `isolate-verify` at the
311
+ recorded review base (`--name wave-<N>-cycle-<C>-contract` and
312
+ `wave-<N>-cycle-<C>-adversarial`). Supply both every task path, its
313
+ recorded base and proven landing commit, the reviewer role, and the
314
+ wave-review template, and the absolute INTENT.md path. The contract lens —
315
+ logical task name `review_wave_<wave>_cycle_<cycle>_contract` — does the
316
+ full review: apply each task's `commit^..commit` product patch to the
317
+ recorded base, check the recorded Verify plus the isolated diff, and
318
+ check every acceptance criterion,
319
+ owned INTENT success criterion, and interface contract. The adversarial
320
+ lens — logical task name
321
+ `review_wave_<wave>_cycle_<cycle>_adversarial` — tries to kill the work:
322
+ security holes, unhandled edge cases, failure modes, data-loss and
323
+ concurrency risks, and missing error handling. Each stages its own file
324
+ in its own worktree — `.project/review/wave-N.cycleC.contract.md` and
325
+ `.project/review/wave-N.cycleC.adversarial.md`; the orchestrator validates
326
+ each, atomically copies both to their primary canonical paths, and only
327
+ then retires those sidecars. The wave passes only when both lenses
328
+ return `pass`; any `blocked` lens blocks the wave, and both files'
329
+ findings feed the fix-task batching in step 7.
330
+ - A review file is written only during that cycle, at that cycle's recorded
331
+ base, by the writer the selected depth names: a dispatched reviewer at
332
+ `full` or `deep`, or the orchestrator at `verify-only`. Never backfill,
333
+ split, rename, or reconstruct a review file for a cycle that already ran,
334
+ and never write a placeholder verdict for a task that did not exist at
335
+ that cycle. A missing or non-canonical earlier artifact is reported to
336
+ the user; the
337
+ only repair is a new review cycle at the current HEAD, which counts
338
+ toward the cap.
339
+ - `verify-only`: spawn no reviewer. The orchestrator writes
340
+ `.project/review/wave-N.cycleC.md` itself from evidence it already
341
+ holds — per task, the Verify evidence and the declared-files diff
342
+ check — recording `Depth: verify-only`. Same command, same commit
343
+ reuses the recorded pass: the task's Verify evidence is the ledger
344
+ entry when `python3 <absolute build_state.py> verify-lookup --repo
345
+ <absolute primary> --command <task Verify> --commit <landed commit>`
346
+ returns `reuse: true`; otherwise run the command in an
347
+ `isolate-verify --historical-task <task id>` sidecar at that commit, record it with
348
+ `verify-record`, and use that result. A re-review after a fix cycle
349
+ follows the same rule. It checks each acceptance
350
+ criterion and each INTENT success criterion owned by the wave's tasks
351
+ against that evidence and the diff; anything it cannot
352
+ confirm from them is a finding, not a pass. Never spawn a review panel
353
+ at `verify-only`.
354
+ - After the canonical inherit reviewer (or orchestrator-written
355
+ `verify-only` file) is collected, run the optional review panel only
356
+ for `full` and `deep`. Inspect advertised model slugs and run
357
+ `python3 <absolute review_panel.py> resolve --plan <absolute PLAN.md>
358
+ --intent <absolute INTENT.md> --advertised <comma slugs>
359
+ --parent-slug <current model slug when known>` and `--charter
360
+ <absolute .project/CHARTER.md>` when that file exists. `status: off`
361
+ continues with no current-cycle panel artifact. For `skipped`,
362
+ persist the helper's exact JSON stdout as
363
+ `.project/review/wave-N.cycleC.panel.skipped.json` and continue without
364
+ a panel; do not translate or summarize the receipt. Exit 2 / `error`
365
+ blocks the wave. `ready` requires that skipped-receipt path to be absent,
366
+ then spawns one child per selected family with
367
+ logical task name `review_wave_<wave>_cycle_<cycle>_panel_<family>`,
368
+ the reviewer role in wave-panel mode, the wave-panel template, and the
369
+ exact helper-returned model slug when the host advertises model
370
+ selection. On `deep`, each panel brief is the adversarial lens only.
371
+ Never override the model on the canonical reviewer. Each child stages
372
+ its family file in its own verify sidecar from `isolate-verify`
373
+ (`--name wave-<N>-cycle-<C>-panel-<family>`); the parent validates
374
+ those files and runs `python3 <absolute review_panel.py> merge --kind
375
+ wave --wave <N> --cycle <C> --inputs <family files> --output
376
+ <absolute .project/review/wave-N.cycleC.panel.md> --mode
377
+ <detected|named>`. The inherit reviewer remains the only Wave verdict.
378
+ Do not average panel findings into that verdict or auto-create fix
379
+ tasks from preference findings.
380
+ - After the canonical inherit reviewer file (and each deep lens file) is
381
+ on the primary path, run
382
+ `python3 <absolute check_handoffs.py> wave --repo <absolute primary>
383
+ --review <canonical wave-review path>`. A non-zero exit is a blocked
384
+ wave, not a pass, including `verify-only`. Do not advance on helper
385
+ failure.
386
+
387
+ 7. **Fix or advance.** A valid canonical `pass` advances unless an
388
+ actionable review-panel finding is waiting for a user ruling. On
389
+ `blocked`, run `python3 <absolute review_findings.py> collect --repo
390
+ <absolute primary> --wave <N> --cycle <C>`, adding one `--helper-failure
391
+ "<helper and stderr>"` per bundled helper that exited non-zero in this
392
+ cycle. The helper alone reads PLAN.md Config (`max_review_cycles`,
393
+ `finding_skeptics`, `wave_budget`), the cycle's lens files, and every
394
+ skeptic file of the wave; it groups blocking findings by criterion
395
+ locator, collapses true duplicates, carries earlier refutations forward,
396
+ separates structural blockers, batches fix groups by disjoint file scope,
397
+ and reports `cap_reached`. Exit 2 blocks the wave. Never regroup,
398
+ re-derive a locator, or re-decide refutation in model reasoning; act on
399
+ the result in this order:
400
+ - `structural_blockers` non-empty: a missing or invalid lens, panel, or
401
+ skeptic artifact, a helper failure, or a finding that names no
402
+ contract criterion never enters skeptic filtering. Keep it blocking
403
+ through the ordinary blocked-wave handling — a fix task when applicable
404
+ or `build/blocked` escalation otherwise.
405
+ - `cap_reached` true: skip every branch below and use the cycle-cap
406
+ escalation at the end of this step.
407
+ - `skeptic_groups` non-empty: spawn one independent read-only skeptic
408
+ per listed locator, concurrently up to the advertised child capacity,
409
+ with logical task name
410
+ `review_wave_<wave>_cycle_<cycle>_skeptic_<criterion_locator>`, the
411
+ reviewer role in skeptic mode, the skeptic template, and its own verify
412
+ sidecar from `isolate-verify`
413
+ (`--name wave-<N>-cycle-<C>-skeptic-<criterion_locator>`) at the
414
+ recorded review base. Brief each with the group's `locator`,
415
+ `criterion` verbatim, every `observations` entry verbatim, the group's
416
+ `tasks` files, their recorded bases and proven landing commits, and the
417
+ absolute INTENT.md path. Each skeptic stages
418
+ `.project/review/wave-N.cycleC.skeptic-<criterion_locator>.md` in its
419
+ sidecar; validate each against the skeptic template, atomically copy it
420
+ to the primary canonical path, then retire that sidecar. Rerun the
421
+ helper; a locator refuted in an earlier cycle never gets a second
422
+ skeptic, and the helper already routes it.
423
+ - `all_refuted` true: stop and ask. Present **Outcome** with the blocked
424
+ verdict and the refutation count, **Review** linking the lens and
425
+ skeptic files, and **Next** listing `Re-run the review cycle with the
426
+ skeptic files in the reviewer briefs (recommended — no finding survived
427
+ scrutiny)` first, then `Open fix tasks from the findings anyway (an
428
+ explicit ruling that overrides their refutations)`. A selected re-run
429
+ consumes a cycle. After the user selects either option, record exact
430
+ full HEAD, then use `pipeline_state.py transition` with the exact
431
+ current phase, status, branch, and archive as expected and unchanged
432
+ phase/status as the result. Append `wave <N> cycle <C> all-refuted
433
+ ruling: <selected option verbatim>` to the STATE.md Log and require the
434
+ returned position to remain `build/active`. Checkpoint STATE.md and the
435
+ collected skeptic artifacts through the Bookkeeping checkpoint rule with
436
+ subject `build: record wave <N> cycle <C> skeptic ruling`, body `Why:
437
+ persist the all-refuted user ruling before acting`, and `Wave: <N>`. Do
438
+ not start the selected review cycle or create, batch, or dispatch fix
439
+ tasks until the checkpoint returns its commit. When the persisted ruling
440
+ selects `Open fix tasks from the findings anyway`, the override set is
441
+ every `refuted_groups` locator with its preserved `observations`; its
442
+ governing refutation is the group's `skeptic` entry (the current
443
+ cycle's file, or the earlier cycle's file for a same-evidence repeat).
444
+ Add that set to `fix_groups` for batching. No other ruling re-admits
445
+ refuted groups. Preserve their skeptic verdicts and eligibility
446
+ history. After a crash, resume the recorded choice without asking
447
+ again.
448
+ - Otherwise batch `fix_batches` into complete fix tasks from the task
449
+ template — one task per batch, never one per finding — each carrying
450
+ its groups' failed criteria and observed evidence verbatim. A group
451
+ with `repeat` true is evidence its earlier fix failed, never a new
452
+ finding; a re-review never spawns a duplicate fix task for a finding
453
+ already carried. Write each fix task to `.project/tasks/` with `wave`
454
+ set to the current wave or a newly appended `## Wave N` heading in
455
+ PLAN.md before dispatch. Its dependencies include every source task in
456
+ the batch; its files match the batch. In `## Review findings`, use one
457
+ `### <locator>` block per group, `Criterion: <verbatim criterion>`, and
458
+ every observation verbatim. Run the repair through the same isolated
459
+ layer loop, even when its appended wave repairs an earlier blocked wave.
460
+ After landing, call `review_findings.py repair-evidence --repo <primary>
461
+ --wave <source wave> --cycle <source cycle> --task <repair id>` and save
462
+ its JSON as the repair evidence for the next review. The helper validates
463
+ the carried batch, original and repair landings, isolated product scope,
464
+ unchanged source reports and reusable Verify. On success, brief the next
465
+ original-wave review with this receipt and the reviewer role's
466
+ **Re-review after a proven repair** contract. Reuse command evidence;
467
+ the new review judges the repaired product against the original criteria.
468
+ Preserve prior verdicts and source tasks. On helper rejection, resolve
469
+ the evidence blocker rather than redispatching an already proven fix.
470
+ At the cap, record all attempts in the STATE.md log and ask the user —
471
+ through an interactive user-input tool when available — after linking
472
+ the resolved absolute blocking wave review, every deep lens file for the
473
+ cycle, and every skeptic file collected for the wave, plus the STATE.md
474
+ attempt log. Ask whether to redirect the approach, raise the cap, or send
475
+ define to amend INTENT.md `## Corrections` — never rewrite an AC from a
476
+ Log waiver — or, in program flow (ROADMAP.md exists), to abandon the
477
+ milestone under the Milestone abandon procedure — listing the
478
+ orchestrator's recommended option first marked `(recommended)` with a
479
+ one-line reason drawn from the review evidence. Never choose silently.
480
+ When the canonical verdict is `pass` and `wave-N.cycleC.panel.md` reports
481
+ `Actionable` greater than 0, do not advance silently: present **Outcome**
482
+ with the canonical pass plus the actionable count, **Review** linking the
483
+ panel file, and **Next** listing `Open fix tasks from panel findings
484
+ (recommended)` first, then `Advance and keep panel findings as warnings`.
485
+ Preference-only panel warnings do not block advance. On pass, checkpoint
486
+ the review artifact, the panel file when present, STATE.md, and wave
487
+ bookkeeping, then report `wave N/M done, C review cycle(s)`.
488
+
489
+ ## Completion
490
+
491
+ Run `python3 <absolute dispatch_driver.py> complete --repo <absolute primary>`
492
+ even when the coders used native child tools. Follow the build skill's Completion
493
+ handoff. The runtime owns landing evidence, transition, and checkpoint; ship owns
494
+ project Verify. Never repeat a proven operation in a manual sequence.
@@ -0,0 +1,78 @@
1
+ # Return a blocked build to its contract owner
2
+
3
+ Use this contract only for an active milestone at `build/blocked`: a documented
4
+ structural plan defect, or an explicit user ruling that changes approved intent.
5
+ It does not reopen ship, archived milestones, or lookahead. Build owns entry;
6
+ Define owns intent corrections; Plan owns the replacement task inventory and
7
+ approval. Routing remains a caller handoff under AGENTS.md.
8
+
9
+ ## Build: checkpoint and enter
10
+
11
+ 1. Record the finding or verbatim user ruling in STATE through its helper.
12
+ Stop dispatch. Use the normal recovery and retirement procedures until
13
+ every task is either unstarted `pending` with null dispatch metadata or
14
+ proven `done`. Preserve owned uncommitted work before any retirement.
15
+ Settle reviewers and their sidecars too. Dispatch records must have no pending
16
+ cleanup; records with reviewer `worktree` and `branch` ownership must also
17
+ record `cleanup_complete`. A `blocked` or `collected` outcome alone does not
18
+ prove retirement. Records that never owned a reviewer sidecar do not require
19
+ that retirement receipt. Use the existing dispatch retirement procedures;
20
+ recovery does not retire sidecars itself. Never infer that a timed-out child
21
+ stopped. Checkpoint the blocked state and artifacts using the Build
22
+ bookkeeping contract; the primary must be clean.
23
+ 2. Run `pipeline_state.py transition` with the complete current state expected,
24
+ `--set-status active`, and the matching target and event:
25
+
26
+ | Cause | Target | Exact event |
27
+ | --- | --- | --- |
28
+ | User changes a criterion, constraint, or veto | `--set-phase define` | `build intent corrections requested` |
29
+ | Task inventory, dependency, or wave repair | `--set-phase plan` | `build plan repair requested` |
30
+
31
+ The helper records the committed recovery base in STATE atomically. Do not
32
+ author or edit that record. Milestone, branch, integration settings, and
33
+ landed task contracts remain fixed throughout recovery.
34
+ 3. Return to the router or name the selected explicit skill. The route names
35
+ `corrections` for Define and `build-repair` for Plan. Other blocked-build
36
+ failures continue through ordinary Build recovery.
37
+
38
+ ## Define and Plan: prepare before editing
39
+
40
+ Run the bundled `pipeline_state.py prepare-build-recovery --repo <absolute-root>`
41
+ before changing any recovery artifact. This repeatable operation preserves the
42
+ old review directory under `plan/build-recovery-<base>/review` and starts a fresh
43
+ active review directory. STATE's recorded base owns an interrupted move; rerun
44
+ this command to finish it. The helper validates the preserved bytes against Git.
45
+ Do not remove, rewrite, or use the preserved reviews as current approval.
46
+
47
+ **Define corrections.** Read the existing intent and governing program artifacts.
48
+ Interview only the requested change; append the user's words under
49
+ `## Corrections`, revise the affected intent, and present the delta for approval.
50
+ Keep the milestone identity. Reclassify the lane using the normal lane rules.
51
+ After approval, use the normal `define/active → define/done` transition and route
52
+ from the approved lane. Standard intent goes through Research and Decide again;
53
+ quick and milestone intent use their existing evidence gates. A program charter
54
+ or roadmap conflict still requires its legal owner gate; this path cannot waive it.
55
+
56
+ **Plan build-repair.** Read the corrected intent, current synthesis, existing plan,
57
+ task files, and recovery base. Use the normal planner, lint, panel, and approval
58
+ gates. Repair the remaining task inventory as needed, including split, rename,
59
+ dependency, or wave changes. Keep IDs ordered and contiguous. Preserve every
60
+ landed task file byte-for-byte, including its recorded base and proof. Any new
61
+ work to satisfy a corrected criterion belongs in new pending tasks, not rewritten
62
+ landed contracts. A plan-only recovery must not change approved intent.
63
+
64
+ ## Approve and return to Build
65
+
66
+ Use normal `pipeline_state.py approve --kind plan --expected-head <HEAD>`.
67
+ Neither `--patch` nor `--defer-checkpoint` is legal for recovery. The helper
68
+ checks landed-task preservation and restored intent ownership, restores review
69
+ evidence only for unchanged contracts, and creates the normal journaled plan
70
+ checkpoint. A failed approval leaves recovery open.
71
+
72
+ Return through `plan/done → build/active` with event `build started`. The dispatch
73
+ driver uses a separate record directory for this recovery base, while retaining
74
+ the milestone budget ledger. Resume only from the new approved task inventory.
75
+ Unchanged wave evidence remains usable; changed waves need review in the new
76
+ record directory. Retained task Verify receipts remain historical evidence for
77
+ their original task and base, never proof for a changed task. Final review still
78
+ requires current-HEAD evidence before shipment.
@@ -7,12 +7,17 @@ Execute exactly one task for `$gsd-path-build`.
7
7
  - Require the brief to name the assigned task file, task template, and
8
8
  `.project/intent/INTENT.md` by absolute path, plus the isolated
9
9
  linked-worktree root returned by `isolation.py isolate-task`. Read the
10
- task file, template, and INTENT.md fully from that worktree.
10
+ task file fully from that worktree. Use the generated intent context in the
11
+ brief when supplied; it retains global rules, corrections, and owned or
12
+ explicitly referenced criteria with source hashes. Otherwise read INTENT.md
13
+ fully. Read the task template only to resolve a missing or ambiguous field;
14
+ the completed task already supplies the implementation contract.
11
15
  On a serial dispatch round that root is the primary worktree on the bound
12
16
  branch; still never edit a sibling task's files. On a parallel round never
13
17
  edit the primary worktree.
14
- - Read the project `AGENTS.md` and every existing path listed in the task's
15
- `files` frontmatter before editing.
18
+ - Apply the project `AGENTS.md`; read it if the host has not already supplied
19
+ that exact file. Read every existing path listed in the task's `files`
20
+ frontmatter before editing. Load WORKFLOW.md only for a workflow ambiguity.
16
21
  - Treat Context, Approach, Interface contract, owned INTENT success
17
22
  criteria, Acceptance criteria, and Verify as the implementation contract.
18
23
  Owned SCs, Criteria, Verify, and the Interface contract define done;
@@ -122,6 +122,12 @@ directory for the full logical session; resumptions reuse it. Record completed
122
122
  parent CLI run events and each native child's session events with stable logical
123
123
  task names before the next dispatch. The helper reads host counters and refuses
124
124
  incomplete or ambiguous usage; never estimate tokens or reset the ledger.
125
+ When the verified CLI adapter reports cumulative counters across `resume`, record
126
+ each later invocation with `--previous-events <previous recorded CLI events>`.
127
+ The helper checks thread identity and records only the new output, preserving the
128
+ raw total and predecessor. Keep that chain in order; never sum cumulative totals.
129
+ Use ordinary `record` for per-invocation counters. An unknown counter convention
130
+ is unproven usage, not permission to guess.
125
131
  Run `admit` for the next task and stop dispatch on a blocked result. Preserve
126
132
  its output in the dispatch evidence. This gates observed usage only: concurrent
127
133
  or in-flight work can overrun before the host reports usage. Codex CLI has no