@opengsd/gsd-path 1.4.0 → 1.6.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 (476) hide show
  1. package/CHANGELOG.md +460 -341
  2. package/DOCS.md +16 -5
  3. package/FULL.md +67 -6
  4. package/HOOKS.md +158 -10
  5. package/MIGRATE.md +12 -0
  6. package/QUICK.md +4 -2
  7. package/README.md +136 -116
  8. package/RUNTIME.md +24 -6
  9. package/UPDATE.md +39 -3
  10. package/WORKFLOW.md +80 -4
  11. package/package.json +5 -2
  12. package/platforms/shared-agents/dispatch.md +13 -0
  13. package/scripts/_common.py +256 -2
  14. package/scripts/archive_milestone.py +14 -13
  15. package/scripts/build_recovery.py +155 -58
  16. package/scripts/build_state.py +274 -8
  17. package/scripts/check_docs_audit.py +77 -4
  18. package/scripts/check_handoffs.py +635 -57
  19. package/scripts/check_task_briefs.py +293 -32
  20. package/scripts/detect_project.py +260 -20
  21. package/scripts/discussion_records.py +9 -1
  22. package/scripts/discussion_validate.py +93 -35
  23. package/scripts/dispatch_driver.py +549 -53
  24. package/scripts/git_guard.py +27 -8
  25. package/scripts/guard_hook.py +2630 -210
  26. package/scripts/install.mjs +99 -11
  27. package/scripts/install.py +231 -46
  28. package/scripts/integration.py +244 -65
  29. package/scripts/isolation.py +539 -70
  30. package/scripts/loop_run.py +16 -4
  31. package/scripts/members.py +77 -32
  32. package/scripts/migrate_core.py +2 -0
  33. package/scripts/model_policy.py +5 -1
  34. package/scripts/path_config.py +3 -3
  35. package/scripts/pipeline_diagnose.py +17 -2
  36. package/scripts/pipeline_git.py +131 -42
  37. package/scripts/pipeline_state.py +139 -39
  38. package/scripts/pipeline_undo.py +118 -16
  39. package/scripts/promote_lookahead.py +3 -3
  40. package/scripts/review_findings.py +180 -44
  41. package/scripts/roadmap.py +9 -1
  42. package/scripts/runtime_store.py +21 -2
  43. package/scripts/skill-resources.json +9 -2
  44. package/scripts/state_checkpoint.py +39 -36
  45. package/scripts/state_promote.py +15 -4
  46. package/scripts/status_runtime.py +22 -4
  47. package/scripts/task_context.py +14 -3
  48. package/scripts/wizard.mjs +1 -0
  49. package/scripts/workflow_run.py +14 -4
  50. package/scripts/worktree_paths.py +54 -2
  51. package/skills/gsd-path/DEFINE.md +34 -5
  52. package/skills/gsd-path/PLAN.md +14 -3
  53. package/skills/gsd-path/RESEARCH.md +11 -0
  54. package/skills/gsd-path/ROADMAP.md +16 -6
  55. package/skills/gsd-path/SHIP.md +32 -5
  56. package/skills/gsd-path/SKILL.md +52 -24
  57. package/skills/gsd-path/references/build-native.md +112 -10
  58. package/skills/gsd-path/references/build-recovery.md +13 -0
  59. package/skills/gsd-path/references/coder.md +7 -3
  60. package/skills/gsd-path/references/dispatch.md +13 -0
  61. package/skills/gsd-path/references/docs-auditor.md +5 -0
  62. package/skills/gsd-path/references/operating-rules.md +11 -3
  63. package/skills/gsd-path/references/planner.md +26 -4
  64. package/skills/gsd-path/references/reviewer-final.md +20 -2
  65. package/skills/gsd-path/references/reviewer-wave.md +56 -12
  66. package/skills/gsd-path/references/reviewer.md +3 -1
  67. package/skills/gsd-path/references/runtime-selection.md +9 -0
  68. package/skills/gsd-path/references/spec-probes.md +150 -0
  69. package/skills/gsd-path/scripts/_common.py +256 -2
  70. package/skills/gsd-path/scripts/archive_milestone.py +14 -13
  71. package/skills/gsd-path/scripts/build_recovery.py +155 -58
  72. package/skills/gsd-path/scripts/build_state.py +274 -8
  73. package/skills/gsd-path/scripts/check_docs_audit.py +77 -4
  74. package/skills/gsd-path/scripts/check_handoffs.py +635 -57
  75. package/skills/gsd-path/scripts/check_task_briefs.py +293 -32
  76. package/skills/gsd-path/scripts/detect_project.py +260 -20
  77. package/skills/gsd-path/scripts/discussion_records.py +9 -1
  78. package/skills/gsd-path/scripts/discussion_validate.py +93 -35
  79. package/skills/gsd-path/scripts/dispatch_driver.py +549 -53
  80. package/skills/gsd-path/scripts/git_guard.py +27 -8
  81. package/skills/gsd-path/scripts/integration.py +244 -65
  82. package/skills/gsd-path/scripts/isolation.py +539 -70
  83. package/skills/gsd-path/scripts/loop_run.py +16 -4
  84. package/skills/gsd-path/scripts/members.py +77 -32
  85. package/skills/gsd-path/scripts/model_policy.py +5 -1
  86. package/skills/gsd-path/scripts/path_config.py +3 -3
  87. package/skills/gsd-path/scripts/pipeline_git.py +131 -42
  88. package/skills/gsd-path/scripts/pipeline_state.py +139 -39
  89. package/skills/gsd-path/scripts/promote_lookahead.py +3 -3
  90. package/skills/gsd-path/scripts/review_findings.py +180 -44
  91. package/skills/gsd-path/scripts/roadmap.py +9 -1
  92. package/skills/gsd-path/scripts/state_checkpoint.py +39 -36
  93. package/skills/gsd-path/scripts/state_promote.py +15 -4
  94. package/skills/gsd-path/scripts/status_runtime.py +22 -4
  95. package/skills/gsd-path/scripts/task_context.py +14 -3
  96. package/skills/gsd-path/scripts/workflow_run.py +14 -4
  97. package/skills/gsd-path/scripts/worktree_paths.py +54 -2
  98. package/skills/gsd-path/templates/docs-audit.md +5 -1
  99. package/skills/gsd-path/templates/final-review.md +11 -2
  100. package/skills/gsd-path/templates/intent.md +30 -0
  101. package/skills/gsd-path/templates/patch-findings.md +3 -3
  102. package/skills/gsd-path/templates/plan.md +17 -2
  103. package/skills/gsd-path/templates/research-handoff.md +14 -3
  104. package/skills/gsd-path/templates/state.md +2 -1
  105. package/skills/gsd-path/templates/task.md +1 -0
  106. package/skills/gsd-path/templates/wave-review.md +28 -9
  107. package/skills/gsd-path-build/references/build-native.md +112 -10
  108. package/skills/gsd-path-build/references/build-recovery.md +13 -0
  109. package/skills/gsd-path-build/references/coder.md +7 -3
  110. package/skills/gsd-path-build/references/dispatch.md +13 -0
  111. package/skills/gsd-path-build/references/operating-rules.md +11 -3
  112. package/skills/gsd-path-build/references/reviewer-final.md +20 -2
  113. package/skills/gsd-path-build/references/reviewer-wave.md +56 -12
  114. package/skills/gsd-path-build/references/reviewer.md +3 -1
  115. package/skills/gsd-path-build/references/runtime-selection.md +9 -0
  116. package/skills/gsd-path-build/references/spec-probes.md +150 -0
  117. package/skills/gsd-path-build/scripts/_common.py +256 -2
  118. package/skills/gsd-path-build/scripts/archive_milestone.py +14 -13
  119. package/skills/gsd-path-build/scripts/build_recovery.py +155 -58
  120. package/skills/gsd-path-build/scripts/build_state.py +274 -8
  121. package/skills/gsd-path-build/scripts/check_handoffs.py +635 -57
  122. package/skills/gsd-path-build/scripts/check_task_briefs.py +293 -32
  123. package/skills/gsd-path-build/scripts/detect_project.py +260 -20
  124. package/skills/gsd-path-build/scripts/discussion_records.py +9 -1
  125. package/skills/gsd-path-build/scripts/discussion_validate.py +93 -35
  126. package/skills/gsd-path-build/scripts/dispatch_driver.py +549 -53
  127. package/skills/gsd-path-build/scripts/integration.py +244 -65
  128. package/skills/gsd-path-build/scripts/isolation.py +539 -70
  129. package/skills/gsd-path-build/scripts/loop_run.py +16 -4
  130. package/skills/gsd-path-build/scripts/members.py +77 -32
  131. package/skills/gsd-path-build/scripts/model_policy.py +5 -1
  132. package/skills/gsd-path-build/scripts/path_config.py +3 -3
  133. package/skills/gsd-path-build/scripts/pipeline_git.py +131 -42
  134. package/skills/gsd-path-build/scripts/pipeline_state.py +139 -39
  135. package/skills/gsd-path-build/scripts/promote_lookahead.py +3 -3
  136. package/skills/gsd-path-build/scripts/review_findings.py +180 -44
  137. package/skills/gsd-path-build/scripts/roadmap.py +9 -1
  138. package/skills/gsd-path-build/scripts/state_checkpoint.py +39 -36
  139. package/skills/gsd-path-build/scripts/state_promote.py +15 -4
  140. package/skills/gsd-path-build/scripts/task_context.py +14 -3
  141. package/skills/gsd-path-build/scripts/workflow_run.py +14 -4
  142. package/skills/gsd-path-build/scripts/worktree_paths.py +54 -2
  143. package/skills/gsd-path-build/templates/task.md +1 -0
  144. package/skills/gsd-path-build/templates/wave-review.md +28 -9
  145. package/skills/gsd-path-decide/references/dispatch.md +13 -0
  146. package/skills/gsd-path-decide/references/operating-rules.md +11 -3
  147. package/skills/gsd-path-decide/references/runtime-selection.md +9 -0
  148. package/skills/gsd-path-decide/scripts/_common.py +256 -2
  149. package/skills/gsd-path-decide/scripts/archive_milestone.py +14 -13
  150. package/skills/gsd-path-decide/scripts/build_recovery.py +155 -58
  151. package/skills/gsd-path-decide/scripts/check_handoffs.py +635 -57
  152. package/skills/gsd-path-decide/scripts/check_task_briefs.py +293 -32
  153. package/skills/gsd-path-decide/scripts/detect_project.py +260 -20
  154. package/skills/gsd-path-decide/scripts/discussion_records.py +9 -1
  155. package/skills/gsd-path-decide/scripts/discussion_validate.py +93 -35
  156. package/skills/gsd-path-decide/scripts/integration.py +244 -65
  157. package/skills/gsd-path-decide/scripts/isolation.py +539 -70
  158. package/skills/gsd-path-decide/scripts/loop_run.py +16 -4
  159. package/skills/gsd-path-decide/scripts/members.py +77 -32
  160. package/skills/gsd-path-decide/scripts/model_policy.py +5 -1
  161. package/skills/gsd-path-decide/scripts/path_config.py +3 -3
  162. package/skills/gsd-path-decide/scripts/pipeline_git.py +131 -42
  163. package/skills/gsd-path-decide/scripts/pipeline_state.py +139 -39
  164. package/skills/gsd-path-decide/scripts/promote_lookahead.py +3 -3
  165. package/skills/gsd-path-decide/scripts/roadmap.py +9 -1
  166. package/skills/gsd-path-decide/scripts/state_checkpoint.py +39 -36
  167. package/skills/gsd-path-decide/scripts/state_promote.py +15 -4
  168. package/skills/gsd-path-decide/scripts/worktree_paths.py +54 -2
  169. package/skills/gsd-path-define/SKILL.md +34 -5
  170. package/skills/gsd-path-define/references/build-recovery.md +13 -0
  171. package/skills/gsd-path-define/references/operating-rules.md +11 -3
  172. package/skills/gsd-path-define/references/runtime-selection.md +9 -0
  173. package/skills/gsd-path-define/references/spec-probes.md +150 -0
  174. package/skills/gsd-path-define/scripts/_common.py +256 -2
  175. package/skills/gsd-path-define/scripts/archive_milestone.py +14 -13
  176. package/skills/gsd-path-define/scripts/build_recovery.py +155 -58
  177. package/skills/gsd-path-define/scripts/check_handoffs.py +635 -57
  178. package/skills/gsd-path-define/scripts/check_task_briefs.py +293 -32
  179. package/skills/gsd-path-define/scripts/detect_project.py +260 -20
  180. package/skills/gsd-path-define/scripts/discussion_records.py +9 -1
  181. package/skills/gsd-path-define/scripts/discussion_validate.py +93 -35
  182. package/skills/gsd-path-define/scripts/integration.py +244 -65
  183. package/skills/gsd-path-define/scripts/isolation.py +539 -70
  184. package/skills/gsd-path-define/scripts/loop_run.py +16 -4
  185. package/skills/gsd-path-define/scripts/members.py +77 -32
  186. package/skills/gsd-path-define/scripts/model_policy.py +5 -1
  187. package/skills/gsd-path-define/scripts/path_config.py +3 -3
  188. package/skills/gsd-path-define/scripts/pipeline_git.py +131 -42
  189. package/skills/gsd-path-define/scripts/pipeline_state.py +139 -39
  190. package/skills/gsd-path-define/scripts/promote_lookahead.py +3 -3
  191. package/skills/gsd-path-define/scripts/roadmap.py +9 -1
  192. package/skills/gsd-path-define/scripts/state_checkpoint.py +39 -36
  193. package/skills/gsd-path-define/scripts/state_promote.py +15 -4
  194. package/skills/gsd-path-define/scripts/worktree_paths.py +54 -2
  195. package/skills/gsd-path-define/templates/intent.md +30 -0
  196. package/skills/gsd-path-define/templates/state.md +2 -1
  197. package/skills/gsd-path-discuss/references/operating-rules.md +11 -3
  198. package/skills/gsd-path-discuss/references/runtime-selection.md +9 -0
  199. package/skills/gsd-path-discuss/scripts/_common.py +256 -2
  200. package/skills/gsd-path-discuss/scripts/discussion_records.py +9 -1
  201. package/skills/gsd-path-discuss/scripts/loop_run.py +16 -4
  202. package/skills/gsd-path-discuss/scripts/model_policy.py +5 -1
  203. package/skills/gsd-path-discuss/scripts/path_config.py +3 -3
  204. package/skills/gsd-path-discuss/scripts/worktree_paths.py +54 -2
  205. package/skills/gsd-path-docs-audit/references/dispatch.md +13 -0
  206. package/skills/gsd-path-docs-audit/references/docs-auditor.md +5 -0
  207. package/skills/gsd-path-docs-audit/references/operating-rules.md +11 -3
  208. package/skills/gsd-path-docs-audit/references/runtime-selection.md +9 -0
  209. package/skills/gsd-path-docs-audit/scripts/_common.py +256 -2
  210. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +14 -13
  211. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +155 -58
  212. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +77 -4
  213. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +635 -57
  214. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +293 -32
  215. package/skills/gsd-path-docs-audit/scripts/detect_project.py +260 -20
  216. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +9 -1
  217. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +93 -35
  218. package/skills/gsd-path-docs-audit/scripts/integration.py +244 -65
  219. package/skills/gsd-path-docs-audit/scripts/isolation.py +539 -70
  220. package/skills/gsd-path-docs-audit/scripts/loop_run.py +16 -4
  221. package/skills/gsd-path-docs-audit/scripts/members.py +77 -32
  222. package/skills/gsd-path-docs-audit/scripts/model_policy.py +5 -1
  223. package/skills/gsd-path-docs-audit/scripts/path_config.py +3 -3
  224. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +131 -42
  225. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +139 -39
  226. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +3 -3
  227. package/skills/gsd-path-docs-audit/scripts/roadmap.py +9 -1
  228. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +39 -36
  229. package/skills/gsd-path-docs-audit/scripts/state_promote.py +15 -4
  230. package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +54 -2
  231. package/skills/gsd-path-docs-audit/templates/docs-audit.md +5 -1
  232. package/skills/gsd-path-forensics/references/operating-rules.md +11 -3
  233. package/skills/gsd-path-forensics/references/runtime-selection.md +9 -0
  234. package/skills/gsd-path-forensics/scripts/_common.py +256 -2
  235. package/skills/gsd-path-forensics/scripts/discussion_records.py +9 -1
  236. package/skills/gsd-path-forensics/scripts/loop_run.py +16 -4
  237. package/skills/gsd-path-forensics/scripts/model_policy.py +5 -1
  238. package/skills/gsd-path-forensics/scripts/path_config.py +3 -3
  239. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +17 -2
  240. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +118 -16
  241. package/skills/gsd-path-forensics/scripts/worktree_paths.py +54 -2
  242. package/skills/gsd-path-inspect/references/dispatch.md +13 -0
  243. package/skills/gsd-path-inspect/references/docs-auditor.md +5 -0
  244. package/skills/gsd-path-inspect/references/operating-rules.md +11 -3
  245. package/skills/gsd-path-inspect/references/runtime-selection.md +9 -0
  246. package/skills/gsd-path-inspect/scripts/_common.py +256 -2
  247. package/skills/gsd-path-inspect/scripts/archive_milestone.py +14 -13
  248. package/skills/gsd-path-inspect/scripts/build_recovery.py +155 -58
  249. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +77 -4
  250. package/skills/gsd-path-inspect/scripts/check_handoffs.py +635 -57
  251. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +293 -32
  252. package/skills/gsd-path-inspect/scripts/detect_project.py +260 -20
  253. package/skills/gsd-path-inspect/scripts/discussion_records.py +9 -1
  254. package/skills/gsd-path-inspect/scripts/discussion_validate.py +93 -35
  255. package/skills/gsd-path-inspect/scripts/integration.py +244 -65
  256. package/skills/gsd-path-inspect/scripts/isolation.py +539 -70
  257. package/skills/gsd-path-inspect/scripts/loop_run.py +16 -4
  258. package/skills/gsd-path-inspect/scripts/members.py +77 -32
  259. package/skills/gsd-path-inspect/scripts/model_policy.py +5 -1
  260. package/skills/gsd-path-inspect/scripts/path_config.py +3 -3
  261. package/skills/gsd-path-inspect/scripts/pipeline_git.py +131 -42
  262. package/skills/gsd-path-inspect/scripts/pipeline_state.py +139 -39
  263. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +3 -3
  264. package/skills/gsd-path-inspect/scripts/roadmap.py +9 -1
  265. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +39 -36
  266. package/skills/gsd-path-inspect/scripts/state_promote.py +15 -4
  267. package/skills/gsd-path-inspect/scripts/workflow_run.py +14 -4
  268. package/skills/gsd-path-inspect/scripts/worktree_paths.py +54 -2
  269. package/skills/gsd-path-inspect/templates/docs-audit.md +5 -1
  270. package/skills/gsd-path-inspect/templates/state.md +2 -1
  271. package/skills/gsd-path-loop/references/operating-rules.md +11 -3
  272. package/skills/gsd-path-loop/references/runtime-selection.md +9 -0
  273. package/skills/gsd-path-loop/scripts/_common.py +256 -2
  274. package/skills/gsd-path-loop/scripts/discussion_records.py +9 -1
  275. package/skills/gsd-path-loop/scripts/loop_run.py +16 -4
  276. package/skills/gsd-path-loop/scripts/model_policy.py +5 -1
  277. package/skills/gsd-path-loop/scripts/path_config.py +3 -3
  278. package/skills/gsd-path-loop/scripts/worktree_paths.py +54 -2
  279. package/skills/gsd-path-migrate/SKILL.md +8 -0
  280. package/skills/gsd-path-migrate/references/operating-rules.md +11 -3
  281. package/skills/gsd-path-migrate/references/runtime-selection.md +9 -0
  282. package/skills/gsd-path-migrate/scripts/_common.py +256 -2
  283. package/skills/gsd-path-migrate/scripts/discussion_records.py +9 -1
  284. package/skills/gsd-path-migrate/scripts/loop_run.py +16 -4
  285. package/skills/gsd-path-migrate/scripts/migrate_core.py +2 -0
  286. package/skills/gsd-path-migrate/scripts/model_policy.py +5 -1
  287. package/skills/gsd-path-migrate/scripts/path_config.py +3 -3
  288. package/skills/gsd-path-plan/SKILL.md +14 -3
  289. package/skills/gsd-path-plan/references/build-recovery.md +13 -0
  290. package/skills/gsd-path-plan/references/dispatch.md +13 -0
  291. package/skills/gsd-path-plan/references/operating-rules.md +11 -3
  292. package/skills/gsd-path-plan/references/planner.md +26 -4
  293. package/skills/gsd-path-plan/references/runtime-selection.md +9 -0
  294. package/skills/gsd-path-plan/references/spec-probes.md +150 -0
  295. package/skills/gsd-path-plan/scripts/_common.py +256 -2
  296. package/skills/gsd-path-plan/scripts/archive_milestone.py +14 -13
  297. package/skills/gsd-path-plan/scripts/build_recovery.py +155 -58
  298. package/skills/gsd-path-plan/scripts/check_handoffs.py +635 -57
  299. package/skills/gsd-path-plan/scripts/check_task_briefs.py +293 -32
  300. package/skills/gsd-path-plan/scripts/detect_project.py +260 -20
  301. package/skills/gsd-path-plan/scripts/discussion_records.py +9 -1
  302. package/skills/gsd-path-plan/scripts/discussion_validate.py +93 -35
  303. package/skills/gsd-path-plan/scripts/integration.py +244 -65
  304. package/skills/gsd-path-plan/scripts/isolation.py +539 -70
  305. package/skills/gsd-path-plan/scripts/loop_run.py +16 -4
  306. package/skills/gsd-path-plan/scripts/members.py +77 -32
  307. package/skills/gsd-path-plan/scripts/model_policy.py +5 -1
  308. package/skills/gsd-path-plan/scripts/path_config.py +3 -3
  309. package/skills/gsd-path-plan/scripts/pipeline_git.py +131 -42
  310. package/skills/gsd-path-plan/scripts/pipeline_state.py +139 -39
  311. package/skills/gsd-path-plan/scripts/promote_lookahead.py +3 -3
  312. package/skills/gsd-path-plan/scripts/roadmap.py +9 -1
  313. package/skills/gsd-path-plan/scripts/state_checkpoint.py +39 -36
  314. package/skills/gsd-path-plan/scripts/state_promote.py +15 -4
  315. package/skills/gsd-path-plan/scripts/workflow_run.py +14 -4
  316. package/skills/gsd-path-plan/scripts/worktree_paths.py +54 -2
  317. package/skills/gsd-path-plan/templates/patch-findings.md +3 -3
  318. package/skills/gsd-path-plan/templates/plan.md +17 -2
  319. package/skills/gsd-path-plan/templates/task.md +1 -0
  320. package/skills/gsd-path-research/SKILL.md +11 -0
  321. package/skills/gsd-path-research/references/dispatch.md +13 -0
  322. package/skills/gsd-path-research/references/operating-rules.md +11 -3
  323. package/skills/gsd-path-research/references/runtime-selection.md +9 -0
  324. package/skills/gsd-path-research/scripts/_common.py +256 -2
  325. package/skills/gsd-path-research/scripts/archive_milestone.py +14 -13
  326. package/skills/gsd-path-research/scripts/build_recovery.py +155 -58
  327. package/skills/gsd-path-research/scripts/check_handoffs.py +635 -57
  328. package/skills/gsd-path-research/scripts/check_task_briefs.py +293 -32
  329. package/skills/gsd-path-research/scripts/detect_project.py +260 -20
  330. package/skills/gsd-path-research/scripts/discussion_records.py +9 -1
  331. package/skills/gsd-path-research/scripts/discussion_validate.py +93 -35
  332. package/skills/gsd-path-research/scripts/integration.py +244 -65
  333. package/skills/gsd-path-research/scripts/isolation.py +539 -70
  334. package/skills/gsd-path-research/scripts/loop_run.py +16 -4
  335. package/skills/gsd-path-research/scripts/members.py +77 -32
  336. package/skills/gsd-path-research/scripts/model_policy.py +5 -1
  337. package/skills/gsd-path-research/scripts/path_config.py +3 -3
  338. package/skills/gsd-path-research/scripts/pipeline_git.py +131 -42
  339. package/skills/gsd-path-research/scripts/pipeline_state.py +139 -39
  340. package/skills/gsd-path-research/scripts/promote_lookahead.py +3 -3
  341. package/skills/gsd-path-research/scripts/roadmap.py +9 -1
  342. package/skills/gsd-path-research/scripts/state_checkpoint.py +39 -36
  343. package/skills/gsd-path-research/scripts/state_promote.py +15 -4
  344. package/skills/gsd-path-research/scripts/worktree_paths.py +54 -2
  345. package/skills/gsd-path-research/templates/research-handoff.md +14 -3
  346. package/skills/gsd-path-roadmap/SKILL.md +16 -6
  347. package/skills/gsd-path-roadmap/references/dispatch.md +13 -0
  348. package/skills/gsd-path-roadmap/references/operating-rules.md +11 -3
  349. package/skills/gsd-path-roadmap/references/runtime-selection.md +9 -0
  350. package/skills/gsd-path-roadmap/scripts/_common.py +256 -2
  351. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +14 -13
  352. package/skills/gsd-path-roadmap/scripts/build_recovery.py +155 -58
  353. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +635 -57
  354. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +293 -32
  355. package/skills/gsd-path-roadmap/scripts/detect_project.py +260 -20
  356. package/skills/gsd-path-roadmap/scripts/discussion_records.py +9 -1
  357. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +93 -35
  358. package/skills/gsd-path-roadmap/scripts/integration.py +244 -65
  359. package/skills/gsd-path-roadmap/scripts/isolation.py +539 -70
  360. package/skills/gsd-path-roadmap/scripts/loop_run.py +16 -4
  361. package/skills/gsd-path-roadmap/scripts/members.py +77 -32
  362. package/skills/gsd-path-roadmap/scripts/model_policy.py +5 -1
  363. package/skills/gsd-path-roadmap/scripts/path_config.py +3 -3
  364. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +131 -42
  365. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +139 -39
  366. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +3 -3
  367. package/skills/gsd-path-roadmap/scripts/roadmap.py +9 -1
  368. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +39 -36
  369. package/skills/gsd-path-roadmap/scripts/state_promote.py +15 -4
  370. package/skills/gsd-path-roadmap/scripts/worktree_paths.py +54 -2
  371. package/skills/gsd-path-ship/SKILL.md +32 -5
  372. package/skills/gsd-path-ship/references/dispatch.md +13 -0
  373. package/skills/gsd-path-ship/references/operating-rules.md +11 -3
  374. package/skills/gsd-path-ship/references/reviewer-final.md +20 -2
  375. package/skills/gsd-path-ship/references/reviewer-wave.md +56 -12
  376. package/skills/gsd-path-ship/references/reviewer.md +3 -1
  377. package/skills/gsd-path-ship/references/runtime-selection.md +9 -0
  378. package/skills/gsd-path-ship/references/spec-probes.md +150 -0
  379. package/skills/gsd-path-ship/scripts/_common.py +256 -2
  380. package/skills/gsd-path-ship/scripts/archive_milestone.py +14 -13
  381. package/skills/gsd-path-ship/scripts/build_recovery.py +155 -58
  382. package/skills/gsd-path-ship/scripts/build_state.py +274 -8
  383. package/skills/gsd-path-ship/scripts/check_handoffs.py +635 -57
  384. package/skills/gsd-path-ship/scripts/check_task_briefs.py +293 -32
  385. package/skills/gsd-path-ship/scripts/detect_project.py +260 -20
  386. package/skills/gsd-path-ship/scripts/discussion_records.py +9 -1
  387. package/skills/gsd-path-ship/scripts/discussion_validate.py +93 -35
  388. package/skills/gsd-path-ship/scripts/integration.py +244 -65
  389. package/skills/gsd-path-ship/scripts/isolation.py +539 -70
  390. package/skills/gsd-path-ship/scripts/loop_run.py +16 -4
  391. package/skills/gsd-path-ship/scripts/members.py +77 -32
  392. package/skills/gsd-path-ship/scripts/model_policy.py +5 -1
  393. package/skills/gsd-path-ship/scripts/path_config.py +3 -3
  394. package/skills/gsd-path-ship/scripts/pipeline_git.py +131 -42
  395. package/skills/gsd-path-ship/scripts/pipeline_state.py +139 -39
  396. package/skills/gsd-path-ship/scripts/promote_lookahead.py +3 -3
  397. package/skills/gsd-path-ship/scripts/roadmap.py +9 -1
  398. package/skills/gsd-path-ship/scripts/state_checkpoint.py +39 -36
  399. package/skills/gsd-path-ship/scripts/state_promote.py +15 -4
  400. package/skills/gsd-path-ship/scripts/workflow_run.py +14 -4
  401. package/skills/gsd-path-ship/scripts/worktree_paths.py +54 -2
  402. package/skills/gsd-path-ship/templates/final-review.md +11 -2
  403. package/skills/gsd-path-ship/templates/patch-findings.md +3 -3
  404. package/skills/gsd-path-ship/templates/wave-review.md +28 -9
  405. package/skills/gsd-path-undo/references/operating-rules.md +11 -3
  406. package/skills/gsd-path-undo/references/runtime-selection.md +9 -0
  407. package/skills/gsd-path-undo/scripts/_common.py +256 -2
  408. package/skills/gsd-path-undo/scripts/discussion_records.py +9 -1
  409. package/skills/gsd-path-undo/scripts/loop_run.py +16 -4
  410. package/skills/gsd-path-undo/scripts/model_policy.py +5 -1
  411. package/skills/gsd-path-undo/scripts/path_config.py +3 -3
  412. package/skills/gsd-path-undo/scripts/pipeline_undo.py +118 -16
  413. package/skills/gsd-path-undo/scripts/worktree_paths.py +54 -2
  414. package/skills/path/DEFINE.md +34 -5
  415. package/skills/path/PLAN.md +14 -3
  416. package/skills/path/RESEARCH.md +11 -0
  417. package/skills/path/ROADMAP.md +16 -6
  418. package/skills/path/SHIP.md +32 -5
  419. package/skills/path/SKILL.md +52 -24
  420. package/skills/path/references/build-native.md +112 -10
  421. package/skills/path/references/build-recovery.md +13 -0
  422. package/skills/path/references/coder.md +7 -3
  423. package/skills/path/references/dispatch.md +13 -0
  424. package/skills/path/references/docs-auditor.md +5 -0
  425. package/skills/path/references/operating-rules.md +11 -3
  426. package/skills/path/references/planner.md +26 -4
  427. package/skills/path/references/reviewer-final.md +20 -2
  428. package/skills/path/references/reviewer-wave.md +56 -12
  429. package/skills/path/references/reviewer.md +3 -1
  430. package/skills/path/references/runtime-selection.md +9 -0
  431. package/skills/path/references/spec-probes.md +150 -0
  432. package/skills/path/scripts/_common.py +256 -2
  433. package/skills/path/scripts/archive_milestone.py +14 -13
  434. package/skills/path/scripts/build_recovery.py +155 -58
  435. package/skills/path/scripts/build_state.py +274 -8
  436. package/skills/path/scripts/check_docs_audit.py +77 -4
  437. package/skills/path/scripts/check_handoffs.py +635 -57
  438. package/skills/path/scripts/check_task_briefs.py +293 -32
  439. package/skills/path/scripts/detect_project.py +260 -20
  440. package/skills/path/scripts/discussion_records.py +9 -1
  441. package/skills/path/scripts/discussion_validate.py +93 -35
  442. package/skills/path/scripts/dispatch_driver.py +549 -53
  443. package/skills/path/scripts/git_guard.py +27 -8
  444. package/skills/path/scripts/integration.py +244 -65
  445. package/skills/path/scripts/isolation.py +539 -70
  446. package/skills/path/scripts/loop_run.py +16 -4
  447. package/skills/path/scripts/members.py +77 -32
  448. package/skills/path/scripts/model_policy.py +5 -1
  449. package/skills/path/scripts/path_config.py +3 -3
  450. package/skills/path/scripts/pipeline_git.py +131 -42
  451. package/skills/path/scripts/pipeline_state.py +139 -39
  452. package/skills/path/scripts/promote_lookahead.py +3 -3
  453. package/skills/path/scripts/review_findings.py +180 -44
  454. package/skills/path/scripts/roadmap.py +9 -1
  455. package/skills/path/scripts/state_checkpoint.py +39 -36
  456. package/skills/path/scripts/state_promote.py +15 -4
  457. package/skills/path/scripts/status_runtime.py +22 -4
  458. package/skills/path/scripts/task_context.py +14 -3
  459. package/skills/path/scripts/workflow_run.py +14 -4
  460. package/skills/path/scripts/worktree_paths.py +54 -2
  461. package/skills/path/templates/docs-audit.md +5 -1
  462. package/skills/path/templates/final-review.md +11 -2
  463. package/skills/path/templates/intent.md +30 -0
  464. package/skills/path/templates/patch-findings.md +3 -3
  465. package/skills/path/templates/plan.md +17 -2
  466. package/skills/path/templates/research-handoff.md +14 -3
  467. package/skills/path/templates/state.md +2 -1
  468. package/skills/path/templates/task.md +1 -0
  469. package/skills/path/templates/wave-review.md +28 -9
  470. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  471. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  472. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  473. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  474. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  475. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  476. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
@@ -179,6 +179,23 @@ selects a milestone branch.
179
179
  `define/active`; report that no brownfield signal fired, and route to
180
180
  the bundled [define contract](DEFINE.md).
181
181
 
182
+ ## Default branch
183
+
184
+ `initialize` records the default branch of `origin` one time, as STATE
185
+ `default_branch`. It reads the local `refs/remotes/origin/HEAD`; when that ref
186
+ is unset it records `main`. When the repository has an `origin`, run
187
+ `git remote set-head origin --auto` before `initialize`, so that the record is
188
+ the default branch of the forge. A STATE file without the field means `main`.
189
+
190
+ `<default_branch>` in the commands below is the `default_branch` value in the
191
+ `validate`, `route`, and `status` JSON, beside `state`. Never edit the field,
192
+ and never take the name from a later `origin/HEAD` lookup. When a helper
193
+ reports that the remote default differs from the recorded one, stop and report
194
+ it. In a project with members, STATE `default_branch` is the default branch of
195
+ the coordinator only. `members.py add` records the default branch of each
196
+ member in `.project/MEMBERS.md`; the member helpers read that record. The
197
+ names can differ.
198
+
182
199
  ## Integration choice
183
200
 
184
201
  New state uses the user shipping default (built-in: `direct`) for
@@ -190,7 +207,7 @@ helper; never edit these fields by hand:
190
207
  python3 <absolute-bundled-pipeline-state.py> configure-integration \
191
208
  --repo <absolute-root> \
192
209
  --scope <default-or-milestone> \
193
- --mode <direct-or-pull-request>
210
+ --mode <direct|pull-request|external-landing>
194
211
  ```
195
212
 
196
213
  `default` changes the project setting and changes the current milestone only
@@ -212,16 +229,23 @@ milestone boundary, never during build or ship. Resolve the bundled
212
229
  `scripts/members.py` to an absolute path and use it; never edit MEMBERS.md
213
230
  or a member marker by hand.
214
231
 
215
- - To add an existing repository, it needs a GitHub.com `origin` whose default
216
- is `main`, a clean worktree, and no active milestone of its own. Ask for the
217
- member name, checkout path, and integration (`direct`, `pull-request`, or
218
- `default`, which follows the milestone's choice), then run
232
+ - To add an existing repository, it needs a GitHub.com `origin`, a clean
233
+ worktree, and no active milestone of its own. Its default branch can have
234
+ any name. Run `git remote set-head origin --auto` in the member first: `add`
235
+ reads the member's local `origin/HEAD` one time and records the name in
236
+ MEMBERS.md as `Default branch`; an unset `origin/HEAD` records `main`. Ask
237
+ for the member name, checkout path, and integration (`direct`,
238
+ `pull-request`, or `default`, which follows the milestone's choice), then run
219
239
  `python3 <members.py> add --repo <absolute-root> --name <name> --checkout <path> --integration <mode>`.
240
+ When `validate` or member close later reports
241
+ `remote default must be <recorded>`, stop and report it; never edit the
242
+ record.
220
243
  - To create a new member repository, present the exact `owner/name`,
221
244
  visibility, and checkout path as the **Review** surface and get approval
222
245
  first, as for a new GitHub repository. Then run the same command with
223
246
  `--create <owner/name> --visibility <visibility>`. It journals the approved
224
- target before creating anything; rerun the identical command to resume.
247
+ target before creating anything; rerun the identical command to resume. A
248
+ new member repository uses `main`.
225
249
  - After adding a member, tell the user to install its guard hooks:
226
250
  `npx @opengsd/gsd-path@latest --member-of <absolute-root> --project <member checkout>`.
227
251
  - `python3 <members.py> validate --repo <absolute-root>` checks every member;
@@ -269,8 +293,8 @@ integration ancestry, cleanliness, and journal ownership before continuing.
269
293
  After it returns, continue the state transition or lookahead promotion below.
270
294
  Do not reconstruct this classification from Git output or Log prose.
271
295
  When the route returns `allow_remote_absent: true`, also pass
272
- `--allow-missing-previous`; this is valid only because a merged PR may have
273
- auto-deleted the published bound branch.
296
+ `--allow-missing-previous`; this is valid only because the forge may have
297
+ auto-deleted the published bound branch after the merge.
274
298
 
275
299
  Before ordinary routing, inspect `STATE.archive`.
276
300
 
@@ -328,7 +352,7 @@ promotion, `resume-next-handoff` resumes the verified `bind-next` transaction,
328
352
  `resume-undo` invokes `$gsd-path-undo` with the returned kind and expected HEAD,
329
353
  `block` stops with the returned reason. `bind-initial`
330
354
  means initialization is complete and phase work must wait for the initial
331
- router binding: resolve the exact fetched `origin/main` SHA, call `bind-initial` as
355
+ router binding: resolve the exact fetched `origin/<default_branch>` SHA, call `bind-initial` as
332
356
  above with `route.branch`, then persist its returned branch with
333
357
  `pipeline_state.py transition` using the route result's `state` phase and status plus its
334
358
  null branch and archive as expected fields. Set `--set-branch` to the helper's
@@ -371,7 +395,8 @@ on `NEEDS-USER`. Planning owns the single build-approval gate; never ask a
371
395
  second time. One user-driven exception to normal routing: at a program milestone
372
396
  boundary — `inspect/active` or `define/active` with no approved INTENT.md for
373
397
  the next milestone — a user request to re-scope the remaining `pending`
374
- entries routes to the bundled [roadmap contract](ROADMAP.md) in re-slice mode.
398
+ entries, or at `define/active` the `active` entry, routes to the bundled
399
+ [roadmap contract](ROADMAP.md) in re-slice mode.
375
400
 
376
401
  ## Lookahead planning (program flow)
377
402
 
@@ -400,7 +425,9 @@ template](templates/state.md) with `pipeline: gsd-path/v2`, `phase:
400
425
  inspect`, `status: active`, the selector's exact returned `milestone` slug as
401
426
  `milestone`, `branch: null`, and `archive: null`. Copy the active project's
402
427
  `integration_default` into both integration mode fields and set
403
- `integration_source: default`. Then follow the bundled
428
+ `integration_source: default`. Set `default_branch` to the active project's
429
+ value; when the active STATE.md has no `default_branch` line, delete that line
430
+ from the new file. Then follow the bundled
404
431
  phase contracts in their Lookahead mode — inspect, define (milestone +
405
432
  brownfield), research (only when the entry lists open questions), decide, and
406
433
  plan — rooted at `.project/next/`.
@@ -424,14 +451,14 @@ bundled integration check (`validate-integrated`); pending integration routes
424
451
  back to ship, never here. Preserve the previous archive path, ship SHA,
425
452
  integration SHA, and build branch in the state Log. Before fetching or binding
426
453
  the next program branch, fetch origin and resolve the exact current
427
- `origin/main` SHA. For a program roadmap, resolve the branch from that exact
454
+ `origin/<default_branch>` SHA. For a program roadmap, resolve the branch from that exact
428
455
  fetched commit through the bundled helper. With a saved lookahead track, run:
429
456
 
430
457
  ```text
431
458
  python3 <absolute-bundled-promote-lookahead.py> select-base \
432
459
  --repo <absolute-primary-root> \
433
- --base <exact-origin-main-sha> \
434
- --remote-default origin/main \
460
+ --base <exact-remote-default-sha> \
461
+ --remote-default origin/<default_branch> \
435
462
  --lookahead
436
463
  ```
437
464
 
@@ -440,8 +467,8 @@ Without a saved lookahead track, run:
440
467
  ```text
441
468
  python3 <absolute-bundled-promote-lookahead.py> select-base \
442
469
  --repo <absolute-primary-root> \
443
- --base <exact-origin-main-sha> \
444
- --remote-default origin/main
470
+ --base <exact-remote-default-sha> \
471
+ --remote-default origin/<default_branch>
445
472
  ```
446
473
 
447
474
  When the helper returns `status: complete`, report program completion and stop;
@@ -457,21 +484,22 @@ python3 <absolute-bundled-pipeline-git.py> bind-next \
457
484
  --branch <selected-branch> \
458
485
  --previous-branch <STATE.branch> \
459
486
  --ship <exact-ship-sha> \
460
- --remote-default origin/main \
461
- --base <exact-origin-main-sha> \
487
+ --remote-default origin/<default_branch> \
488
+ --base <exact-remote-default-sha> \
462
489
  --landing <validate-integrated-landing-sha>
463
490
  ```
464
491
 
465
492
  Add `--allow-missing-previous` when `validate-integrated` returned
466
- `mode: pull-request` and `origin/<STATE.branch>` is absent. GitHub may delete
467
- that head branch after merge; the local branch and exact ship SHA still bind
468
- the handoff. The helper independently verifies the published pull-request
469
- milestone tag and merge topology before accepting the missing branch.
493
+ `mode: pull-request` or `mode: external-landing` and `origin/<STATE.branch>`
494
+ is absent. The forge may delete that source branch after merge; the local
495
+ branch and exact ship SHA still bind the handoff. The helper independently
496
+ verifies the published milestone tag for `STATE.integration` and the merge
497
+ topology before accepting the missing branch.
470
498
 
471
499
  The helper requires the previous branch, while it still exists locally, to
472
500
  remain at the ship SHA, proves the ship commit is integrated into the exact
473
501
  base, rejects local or remote branch collisions,
474
- and switches the clean primary worktree without tracking main. It then
502
+ and switches the clean primary worktree without tracking the default branch. It then
475
503
  retires the integrated previous branch — deleted locally and on origin; the
476
504
  ship commit stays reachable from the integration merge and its tag. Repeating the
477
505
  same command while the new branch is current at the unchanged base is the
@@ -488,7 +516,7 @@ Log, then:
488
516
  --repo <absolute-primary-root> \
489
517
  --milestone <next-slug> \
490
518
  --branch gsd-path/M00N \
491
- --base <exact-current-origin-main-sha> \
519
+ --base <exact-current-remote-default-sha> \
492
520
  --landing <exact-milestone-merge-sha>
493
521
  ```
494
522
 
@@ -24,6 +24,14 @@ python3 <absolute dispatch_driver.py> round --repo <absolute primary> --wave <N>
24
24
  [--child-timeout <owner seconds>]
25
25
  ```
26
26
 
27
+ Use the absolute `dispatch_driver.py` from the active installed
28
+ `gsd-path-build` skill when orchestrating a consuming project's build; that
29
+ copy resolves role briefs and templates from its own skill bundle. The
30
+ repository or npm package also supports the top-level `scripts/dispatch_driver.py`:
31
+ when a default is not beside that script, it resolves from the shipped
32
+ `skills/gsd-path` bundle. Explicit `--role-brief`, `--task-template`, and
33
+ `--template` paths override those defaults and must name existing files.
34
+
27
35
  `round` owns the entry transition described in Preconditions and branch
28
36
  binding, checkpointed as `build: start milestone`, and sets `build/blocked`
29
37
  on a dependency deadlock or a blocked
@@ -120,6 +128,10 @@ dispatch contract and perform steps 1–5 by hand.
120
128
  rerun `recover`. The original lineage must stay reachable: keep a local
121
129
  branch on the old tip until the milestone ships. Adopted tasks report
122
130
  `attested` with `provenance: owner-authorized-rebase`.
131
+ - `block` with a `leftover` path: the task is landed, and that path is what
132
+ a failed removal left of its isolate; it holds nothing that Git does not
133
+ have. Do not set `build/blocked`. Stop with the returned reason; after
134
+ the path is removed, rerun `recover`.
123
135
  - `block` for any other reason: set `build/blocked` with the returned
124
136
  reason and stop.
125
137
  - `none`: take no recovery action for that task.
@@ -134,8 +146,27 @@ dispatch contract and perform steps 1–5 by hand.
134
146
  order, or overlap-check tasks in prose. Readiness is continuous, not
135
147
  layered: a task becomes selectable the moment its last dependency lands,
136
148
  even while unrelated tasks still run, so rerun `ready` after each landing.
149
+ Two tasks that each share a file with the same `done` task of an earlier
150
+ wave never run together: `ready` returns one and holds the other until the
151
+ first is `done`. The second then starts from a base that has the first
152
+ landing, and the step 5 rerun of the earlier Verify checks both edits. A
153
+ task with a retained isolate keeps its turn. A task that a `supersedes`
154
+ field retires still counts: the superseding task never runs together
155
+ with a task that shares a file with the superseded task.
137
156
  A `NEEDS-ORCHESTRATOR` block stays unselectable until its `Orchestrator
138
157
  answer` is recorded in the task Log and the task is back to `pending`.
158
+ An all-done wave whose latest canonical review cycle has any blocked lens
159
+ gates later waves: `ready` selects unfinished later tasks with a `## Review
160
+ findings` section that depend on it, sets `current_wave` to the earliest
161
+ repair wave, and adds `repair_for_wave` with the source wave. When no such
162
+ repair remains, `ready` returns no tasks and adds `blocked_review` (`wave`,
163
+ `cycle`, `waiting_waves`); a later passing canonical review cycle releases
164
+ the waiting waves.
165
+ `unreviewed_waves`, when present, lists earlier waves whose tasks are all
166
+ `done` and that have no canonical review file. A repair wave is not
167
+ listed: the next review cycle of its source wave judges it. `ready` reports
168
+ the listed waves and does not hold the returned tasks: run step 6 for each
169
+ listed wave before you dispatch.
139
170
  Its typed errors are the recovery rule:
140
171
  - `task-recovery-required`: for each listed failed or blocked task run
141
172
  `python3 <absolute build_state.py> reconcile --repo <absolute primary>
@@ -196,7 +227,7 @@ dispatch contract and perform steps 1–5 by hand.
196
227
  a later round unlocked by fresh landings records the later HEAD — and
197
228
  lint every ready task's brief with the bundled
198
229
  `scripts/check_task_briefs.py --repo <absolute repo root> --base <recorded
199
- base>` and re-check Intent coverage with
230
+ base> --project-dir <routed project dir>` and re-check Intent coverage with
200
231
  `python3 <absolute check_handoffs.py> plan --repo <absolute repo root>`
201
232
  before creating any worktree; a lint or coverage failure is a documented plan
202
233
  defect — repair it against INTENT.md and SYNTHESIS.md, then re-establish
@@ -248,7 +279,8 @@ dispatch contract and perform steps 1–5 by hand.
248
279
  defective task contract before establishing the round base. Run ready work
249
280
  up to capacity. Verify commands marked `Heavy: yes` (`verify_heavy` in the
250
281
  ready set) run one at a time across every concurrent task, including the
251
- step 5 rerun; light ones are unconstrained. Do not wait for the whole
282
+ step 5 rerun; light ones are unconstrained. `verify_heavy` is also true
283
+ when step 5 reruns a heavy Verify of an earlier task. Do not wait for the whole
252
284
  round before unlocking dependents: each task landing in step 5 re-opens
253
285
  step 2, and a newly ready
254
286
  task dispatches in a fresh round at the current clean HEAD while unrelated
@@ -274,8 +306,35 @@ dispatch contract and perform steps 1–5 by hand.
274
306
  native child tools; no child command is needed. It reproduces serial work
275
307
  in its prepared sidecar, runs authoritative Verify, records exact output,
276
308
  lands through `isolation.py`, records eligible ledger evidence, and retires
277
- the isolate. A `landed` receipt proves those steps; do not run them again
278
- or author another implementation narrative. A blocked receipt preserves
309
+ the isolate. Authoritative Verify is the task's own Verify, then the
310
+ Verify of each `done` task of an earlier wave, in the same repo, that
311
+ shares a declared file with this task. `finish` selects those commands;
312
+ never select them by hand. An earlier command does not run again in two
313
+ cases only: it is identical to the own Verify, or the own Verify is the
314
+ unchanged Verify that `fix-tasks` wrote from the task's `deps` and the
315
+ command belongs to one of them. A Verify that only contains the command
316
+ text does not replace the rerun. A failed earlier-task Verify blocks the landing as a
317
+ failed own Verify does. The receipt (`regressions`) and the task Log
318
+ entry `orchestrator regression Verify of <task id>` name the earlier
319
+ task. The ledger records only the own command.
320
+ A plan-approved `supersedes` field retires the Verify of each earlier
321
+ task that it names: `finish` does not run that Verify for the task, or
322
+ for a task that lands after the task is `done`. The receipt (`retired`)
323
+ and the task Log entry `orchestrator regression Verify of <task id>
324
+ retired: superseded by <task id>` name both tasks. When the generated
325
+ Verify of a fix task loses only the copy of a retired Verify, the
326
+ `retired` entry has the key `part` and the Log entry is `orchestrator
327
+ regression Verify of <fix task id>: part of <task id> retired:
328
+ superseded by <task id>`. The superseding
329
+ task inherits the role of each task that it names, also through a
330
+ chain: after it is `done`, its Verify runs in the place of the retired
331
+ Verify for each later landing that shares a file with a superseded
332
+ task, also in its own wave. The Log entry is `orchestrator regression
333
+ Verify of <task id> (supersedes <task id>)`.
334
+ A `landed` receipt proves those steps; do not run them again
335
+ or author another implementation narrative. A `cleanup_warning` on a
336
+ landing means only that the isolate was not removed: the task is landed,
337
+ and the next `round` or `finish` checks the isolate again. A blocked receipt preserves
279
338
  its failure evidence and follows the recovery rule, never a manual bypass.
280
339
  Keep the pre-finish declared-path check above. Each landing re-opens step 2
281
340
  so ready dependents can run while unrelated children remain in flight.
@@ -488,26 +547,69 @@ dispatch contract and perform steps 1–5 by hand.
488
547
  again.
489
548
  - Otherwise batch `fix_batches` into complete fix tasks from the task
490
549
  template — one task per batch, never one per finding — each carrying
491
- its groups' failed criteria and observed evidence verbatim. A group
550
+ its groups' failed criteria and observed evidence verbatim. Each batch
551
+ is in one repo: a batch with `repo` is for that member and its fix task
552
+ has `repo: <member>`; a batch without `repo` is for the coordinator. A
553
+ finding whose source tasks are in two repos gives one batch for each
554
+ repo. A group
492
555
  with `repeat` true is evidence its earlier fix failed, never a new
493
556
  finding; a re-review never spawns a duplicate fix task for a finding
494
- already carried. Write each fix task to `.project/tasks/` with `wave`
557
+ that a fix task not yet `done` already carries in the same repo. A
558
+ repeat after its fix
559
+ landed gets the next fix task. After a build recovery, a changed wave
560
+ is reviewed again from cycle 1; the fix tasks and PLAN.md repair wave
561
+ of the review that recovery set aside do not count for the new one.
562
+ Write each fix task to `.project/tasks/` with `wave`
495
563
  set to the current wave or a newly appended `## Wave N` heading in
496
- PLAN.md before dispatch. Its dependencies include every source task in
497
- the batch; its files match the batch. In `## Review findings`, use one
564
+ PLAN.md before dispatch. Its dependencies include every source task of
565
+ the batch that is in the same repo, and every landed fix task of the
566
+ same source wave and repo that carried one of its findings; its Verify
567
+ runs the Verify of those source tasks; its files are the batch files or a subset of them, never
568
+ none. When a finding names a fix site outside the batch files, follow
569
+ [build recovery](build-recovery.md) to plan, which adds a repair task
570
+ with those files, the batch's `## Review findings` and the same
571
+ dependencies; `repair-evidence` accepts that task. In
572
+ `## Review findings`, use one
498
573
  `### <locator>` block per group, `Criterion: <verbatim criterion>`, and
499
574
  every observation verbatim. Run the repair through the same isolated
500
575
  layer loop, even when its appended wave repairs an earlier blocked wave.
576
+ An appended repair wave has the highest wave number and still runs before
577
+ the pending waves, because `ready` gates them on the blocked wave (step
578
+ 2). Do not renumber waves or move the repair wave.
501
579
  After landing, call `review_findings.py repair-evidence --repo <primary>
502
580
  --wave <source wave> --cycle <source cycle> --task <repair id>` and save
503
- its JSON as the repair evidence for the next review. The helper validates
581
+ its JSON as the repair evidence for the next review. The helper selects
582
+ the batch by the repair's locators and repo, then validates
504
583
  the carried batch, original and repair landings, isolated product scope,
505
- unchanged source reports and reusable Verify. On success, brief the next
584
+ unchanged source reports and reusable Verify. For a member repair it
585
+ checks the product in the member repository, against the member commits
586
+ and the member Verify record, and the receipt adds `member`,
587
+ `member_base` and `member_commit`. Another change to the checked files
588
+ is accepted only when it is the landing of a linked repair: a `done`
589
+ task of the same repo that carries one of the repair's findings in
590
+ `## Review findings`, with the same locator and criterion, and is
591
+ joined to the repair by `deps`. A finding on an acceptance criterion of
592
+ a fix task counts as the finding that this fix task carries with the
593
+ same criterion; the same criterion text under another locator is
594
+ another finding. Linked
595
+ repairs in the repair base are in `earlier_repairs`. Linked repairs
596
+ after the repair are in `later_repairs`; then the landing and the
597
+ recorded Verify of the last one are the evidence, and `chain_files`
598
+ lists the files checked from the repair base to the tip: those of the
599
+ repair and of every later linked repair. From the repair base to the
600
+ parent of the repair landing, no landing can change these files, also
601
+ not a linked one. On success, brief the next
506
602
  original-wave review with this receipt and the reviewer role's
507
603
  **Re-review after a proven repair** contract. Reuse command evidence;
508
604
  the new review judges the repaired product against the original criteria.
509
605
  Preserve prior verdicts and source tasks. On helper rejection, resolve
510
606
  the evidence blocker rather than redispatching an already proven fix.
607
+ When the blocker cannot be resolved, for example `repair base contains
608
+ unlinked changes to original product` or `product changed after the
609
+ repair landing` because a task that is not a linked repair changed the
610
+ same files, run the next review cycle of the source wave in full at the
611
+ current HEAD, without the receipt. This is the supported fallback: it
612
+ needs no ruling and no plan change.
511
613
  At the cap, record all attempts in the STATE.md log and ask the user —
512
614
  through an interactive user-input tool when available — after linking
513
615
  the resolved absolute blocking wave review, every deep lens file for the
@@ -69,6 +69,19 @@ checks landed-task preservation and restored intent ownership, restores review
69
69
  evidence only for unchanged contracts, and creates the normal journaled plan
70
70
  checkpoint. A failed approval leaves recovery open.
71
71
 
72
+ A wave keeps its review evidence when INTENT.md, its own `## Wave N` section,
73
+ its task files, and every other non-wave PLAN.md section are byte-identical to
74
+ the recovery base. Two edits are exempt: the value of the `max_review_cycles`
75
+ and `wave_budget` lines in `## Config`, and all of `## Dependency notes`. In
76
+ `## Config` only those two values may change; any other edit there, a comment
77
+ edit included, drops the evidence of every wave, as does any other non-wave
78
+ edit. A `- review_panel:` line that is added, removed, or changed anywhere in
79
+ PLAN.md also drops the evidence of every wave. The approval result reports
80
+ this in `recovery_reviews`: `restored` lists the waves that kept their evidence, and
81
+ `review_again` lists each wave that lost it, with the reason. Review every
82
+ `review_again` wave again after build resumes; completion refuses a wave
83
+ without a passing review.
84
+
72
85
  Return through `plan/done → build/active` with event `build started`. The dispatch
73
86
  driver uses a separate record directory for this recovery base, while retaining
74
87
  the milestone budget ledger. Resume only from the new approved task inventory.
@@ -51,9 +51,13 @@ costs the run.
51
51
  2. Satisfy every acceptance criterion and every owned INTENT success
52
52
  criterion within the Approach constraints, matching conventions in the
53
53
  listed files.
54
- 3. Edit only exact paths in `files`, plus the task file's Log. There is no
55
- exception for imports, routes, generated files, or wiring.
56
- 4. Run Verify. Fix failures only within the allowed paths.
54
+ 3. Edit only paths in `files`, plus the task file's Log. A declared
55
+ directory covers the files below it; a declared file covers only itself.
56
+ There is no exception for imports, routes, generated files, or wiring.
57
+ 4. Run Verify. Fix failures only within the allowed paths. The orchestrator
58
+ also runs the Verify of each earlier-wave task that shares a file with
59
+ yours. A Log entry `orchestrator regression Verify of <task id>` with
60
+ `fail` names a task you broke; make its Verify pass too.
57
61
  5. Append the implementation and Verify result to Log. On a block, append the
58
62
  specific reason. Do not edit frontmatter state.
59
63
 
@@ -44,6 +44,19 @@ use exactly one matching branch:
44
44
  create another worktree. Encode task dependencies explicitly; launch
45
45
  independent children concurrently up to the host's advertised
46
46
  concurrent-subagent capacity.
47
+ - A `muse.subagent_spawn` tool (with `muse.subagent_wait`,
48
+ `muse.subagent_read_result`, and `muse.subagent_send_message` siblings) is
49
+ Muse Code. Omit `subagent_type` (general-purpose, full capability), pass the
50
+ logical task name as `task_name` and `role`, and the complete brief as
51
+ `objective`. Never set `worktree_isolation`. Keep the returned
52
+ `subagent_id`; send a correction to a still-live child with
53
+ `muse.subagent_send_message` mode `followup` and the complete new prompt,
54
+ otherwise start a fresh child. Collect with `muse.subagent_wait`
55
+ (`wait_for: task_terminal`) then `muse.subagent_read_result`; on
56
+ `root_capacity_exhausted`, wait for a child to finish and retry. Spawn has no
57
+ model or effort argument, so record no such capability. If only
58
+ `muse.workflow` is exposed (untrusted workspace), do not script or inline
59
+ the work; stop and report that the workspace must be trusted.
47
60
 
48
61
  For every branch:
49
62
 
@@ -59,6 +59,11 @@ actually does. Read-only: change nothing outside your single output file.
59
59
  5. **Classify remediation** for every non-verified claim: `fix-doc`,
60
60
  `fix-code`, or `NEEDS-USER` when the right side of the conflict is not
61
61
  yours to decide.
62
+ Number queue rows with unique, strictly increasing positive integers; they
63
+ need not be contiguous. A row that persists from the prior audit keeps its
64
+ number. A new row takes a number greater than every prior queue number and
65
+ every `## User rulings` Queue #. Never reuse a retired number: a ruling
66
+ stays bound to the item it was made for.
62
67
 
63
68
  ## Rules
64
69
 
@@ -38,8 +38,8 @@ bundles this file; spawned agents follow their role brief instead.
38
38
  the lookahead planning track for the next milestone; it follows the same
39
39
  marker rule, owns no task frontmatter, and never binds a branch.
40
40
  - STATE.integration_default is the project closeout choice and
41
- STATE.integration is the current milestone choice. Both are `direct` or
42
- `pull-request`; STATE.integration_source is `default` or `milestone` and
41
+ STATE.integration is the current milestone choice. Both are `direct`,
42
+ `pull-request`, or `external-landing`; STATE.integration_source is `default` or `milestone` and
43
43
  preserves explicit override provenance. Older v2 state defaults to `direct`,
44
44
  and modes may be changed only through `pipeline_state.py
45
45
  configure-integration` before build. A next milestone resets its current
@@ -82,7 +82,9 @@ bundles this file; spawned agents follow their role brief instead.
82
82
  `isolation.py attest` may stand in for it: one `.project/`-only commit that
83
83
  names the base, the attested HEAD, the declared files that changed, the
84
84
  task Verify recorded as passing at that HEAD, and the ruling verbatim.
85
- `recover` reports it as `attested`, never as a proven landing.
85
+ `recover` reports it as `attested`, never as a proven landing. Attestation
86
+ matches the declared files literally: work that is only below a declared
87
+ directory can land but cannot be attested.
86
88
  - All pipeline work for a milestone lives on `gsd-path/M00N` (M001, M002,
87
89
  …) bound in STATE.branch. The next milestone binds a new unused
88
90
  `gsd-path/M00N` at the remote default after the previous ship integrates.
@@ -90,6 +92,12 @@ bundles this file; spawned agents follow their role brief instead.
90
92
  branch — either Path's direct merge or a Path-owned PR merged by the user.
91
93
  The bound branch never receives merges or back-merges and is never the
92
94
  GitHub default.
95
+ - The default branch is the one that STATE `default_branch` records at
96
+ initialization; a STATE file without the field means `main`. `main` and
97
+ `origin/main` in these rules mean that branch. Never change the record and
98
+ never take the name from a later `origin/HEAD` lookup. For a member
99
+ repository, the branch is the one that its `.project/MEMBERS.md` section
100
+ records as `Default branch`; a section without the field means `main`.
93
101
  - After initialization writes STATE.md, and before entering the first pipeline
94
102
  phase in an existing Git repository, the router calls
95
103
  `scripts/pipeline_git.py bind-initial` with the selected M00N and exact
@@ -38,8 +38,9 @@ the how.
38
38
  security-critical; `verify-only` suits polish and low-risk feature waves
39
39
  whose Verify commands meaningfully cover the criteria.
40
40
 
41
- Every dependency must be in an earlier wave or in the same wave with no file
42
- overlap. Produce an acyclic graph; same-wave chains execute in layers.
41
+ Every dependency must be in an earlier wave or in the same wave. Same-wave
42
+ tasks may share files only when one transitively depends on the other. Produce
43
+ an acyclic graph; same-wave chains execute in layers.
43
44
 
44
45
  Declare a dependency only when something real crosses it: data — the dependent
45
46
  consumes a symbol, signature, schema, endpoint, file format, or path named in
@@ -72,8 +73,17 @@ plan order above, which still keeps plan-invalidating risk in wave 1.
72
73
  criterion may appear in only one surface block. Put the surface in the same
73
74
  wave as the capability behind it. A milestone with a surface is not done
74
75
  when only its internals run.
76
+ - When INTENT.md carries `## Edge coverage` or `## Prohibitions` (read the
77
+ supplied [spec-reach probes](spec-probes.md)), treat every ruling as a hard
78
+ limit on its criterion. For each `held-out` edge, write one PLAN.md
79
+ `## Held-out checks` row: a test file in the owning task's `files`, a
80
+ Verify that runs it, and an Acceptance criterion that names the edge id
81
+ and states its ruling from Detail. Omit the section when no edge is
82
+ held-out. Put each `judgment` prohibition's Must not and Detail in the
83
+ owning task's Approach.
75
84
  - Make `files` exhaustive, including imports, routes, generated artifacts,
76
- tests, and wiring. Require disjoint files for same-wave tasks.
85
+ tests, and wiring. Require disjoint files for same-wave tasks that are not
86
+ dependency-ordered. A declared directory overlaps every path below it.
77
87
  - Write an Interface contract in every task: `None` for independent tasks;
78
88
  for any tasks that exchange a symbol, signature, schema, endpoint, file
79
89
  format, or path, the exact shapes both sides code against — identical text
@@ -86,6 +96,18 @@ plan order above, which still keeps plan-invalidating risk in wave 1.
86
96
  this task's work is skipped. That command must name a path from `files`,
87
97
  and must not be PLAN.md's project Verify unless an SC this task owns names
88
98
  that command. Criteria and Verify are the contract; Approach is guidance.
99
+ A task that lists a file of an earlier-wave task must also pass that
100
+ task's Verify to land. When it changes that behavior on purpose, list the
101
+ tests that Verify runs in its `files`.
102
+ - Add `supersedes: [<task id>]` only when INTENT.md requires this task to
103
+ remove or replace behavior of an earlier-wave task, and that task's Verify
104
+ cannot pass after the change. The named task must be in an earlier wave,
105
+ in the same repo, and share a file with this task. Its Verify is then
106
+ retired: it does not run at this landing or at a later landing. State the
107
+ replacement in this task's acceptance criteria. This task's Verify then
108
+ runs in its place for each later task that shares a file with the named
109
+ task, so it must check the replacement behavior for all files of that
110
+ task.
89
111
  - In a multi-repo milestone (`.project/MEMBERS.md` lists members), each task
90
112
  changes exactly one repo. Give a member task `repo: <member>`; its `files`
91
113
  and Verify are relative to that member's root, and its Verify runs there.
@@ -105,7 +127,7 @@ family list. Copy `Finding skeptics:` from INTENT.md into PLAN.md Config as
105
127
  invent `on`. Quick-lane plans always write both values as `off`.
106
128
 
107
129
  Before returning, check veto exclusion, decision coverage, Intent coverage,
108
- the Surface contract, dependencies, file overlap, task size, criteria, and
130
+ the Surface contract, Held-out checks, dependencies, file overlap, task size, criteria, and
109
131
  Verify commands.
110
132
 
111
133
  Return a brief structured summary: wave count, task count, and the wave-1
@@ -1,8 +1,13 @@
1
1
  ## Final integration mode
2
2
 
3
3
  Use only final-review.md. Treat INTENT.md success criteria as the rubric.
4
- Exercise the running system and record `met`, `not-met`, or `unverifiable`
5
- with checked command output or a precise file reference. When PLAN.md carries
4
+ Each `### SCn —` heading must have every word of the criterion in INTENT.md
5
+ `## Success criteria`: join indented continuation lines and sub-bullets
6
+ with a single space. You can keep or remove the `- ` markers of the
7
+ sub-bullets; the gate compares every other word. Exercise the running
8
+ system and record `met`, `not-met`, or
9
+ `unverifiable` with checked command output or a precise file reference.
10
+ When PLAN.md carries
6
11
  a `## Surface contract`, every criterion it lists under a surface is checked
7
12
  by performing that surface's Walkthrough from its Entry in the supplied
8
13
  sidecar: `Surface` names that surface, Check names what was performed,
@@ -14,6 +19,19 @@ re-run PLAN.md's project Verify; cite the orchestrator's recorded
14
19
  project-verify sidecar output. `pass`
15
20
  requires every criterion to be `met`.
16
21
 
22
+ When INTENT.md `## Edge coverage` or `## Prohibitions` tags a criterion with a
23
+ `held-out` edge or a `judgment` prohibition, grade that criterion on cited
24
+ evidence for every tag (see the [spec-reach probes](spec-probes.md)). Name
25
+ each id in Check, Observed, or Reference with its evidence: the held-out
26
+ test's recorded passing output from the PLAN.md `## Held-out checks` test, or
27
+ the observed behavior judged against the prohibition's Detail. When a tag's
28
+ evidence is missing, did not run, or cannot be judged, record `unverifiable`
29
+ with `Finding: insufficient spec evidence: <id> <what is missing>` and a Fix
30
+ direction naming the check to add or run. Never mark such a criterion `met`
31
+ on inference or on code that merely looks right; the ship gate refuses a
32
+ `met` verdict that does not cite every tag. Grade untagged criteria as usual:
33
+ the trigger is the INTENT.md tag, never your own doubt.
34
+
17
35
  ## Final gap mode
18
36
 
19
37
  Use only gap-review.md. Check the one cross-wave risk in the brief against the