@opengsd/gsd-path 1.3.1 → 1.5.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 (481) hide show
  1. package/AGENTS.md +2 -207
  2. package/CHANGELOG.md +331 -69
  3. package/DOCS.md +25 -9
  4. package/FULL.md +12 -5
  5. package/GUIDE.md +1 -1
  6. package/HOOKS.md +104 -14
  7. package/QUICK.md +5 -2
  8. package/README.md +131 -111
  9. package/RUNTIME.md +2 -2
  10. package/UPDATE.md +61 -11
  11. package/WORKFLOW.md +44 -7
  12. package/package.json +13 -9
  13. package/platforms/shared-agents/dispatch.md +13 -0
  14. package/scripts/_common.py +619 -18
  15. package/scripts/archive_milestone.py +160 -86
  16. package/scripts/bootstrap_repository.py +8 -5
  17. package/scripts/build_recovery.py +100 -32
  18. package/scripts/build_state.py +143 -24
  19. package/scripts/check_docs_audit.py +91 -7
  20. package/scripts/check_handoffs.py +662 -50
  21. package/scripts/check_task_briefs.py +338 -30
  22. package/scripts/check_update.py +2 -2
  23. package/scripts/core_hook_gate.py +10 -1
  24. package/scripts/core_hook_settings.py +11 -4
  25. package/scripts/detect_project.py +587 -32
  26. package/scripts/discussion_records.py +19 -13
  27. package/scripts/discussion_validate.py +152 -50
  28. package/scripts/dispatch_driver.py +501 -46
  29. package/scripts/git_guard.py +118 -31
  30. package/scripts/guard_hook.py +1567 -194
  31. package/scripts/install.mjs +77 -46
  32. package/scripts/install.py +611 -50
  33. package/scripts/integration.py +580 -25
  34. package/scripts/isolation.py +1438 -57
  35. package/scripts/lean_verification.py +99 -19
  36. package/scripts/loop_run.py +31 -29
  37. package/scripts/members.py +706 -0
  38. package/scripts/migrate_core.py +2 -2
  39. package/scripts/path_config.py +5 -5
  40. package/scripts/pipeline_diagnose.py +82 -31
  41. package/scripts/pipeline_git.py +124 -34
  42. package/scripts/pipeline_state.py +287 -87
  43. package/scripts/pipeline_undo.py +218 -30
  44. package/scripts/promote_lookahead.py +1 -1
  45. package/scripts/review_panel.py +1 -1
  46. package/scripts/runtime_store.py +55 -11
  47. package/scripts/skill-resources.json +37 -5
  48. package/scripts/state_checkpoint.py +135 -44
  49. package/scripts/state_promote.py +2 -0
  50. package/scripts/status_runtime.py +58 -10
  51. package/scripts/sync_skill_resources.py +8 -7
  52. package/scripts/task_context.py +12 -3
  53. package/scripts/token_budget.py +12 -8
  54. package/scripts/wizard.mjs +1 -0
  55. package/scripts/workflow_run.py +107 -30
  56. package/scripts/worktree_paths.py +72 -10
  57. package/skills/gsd-path/BUILD.md +7 -1
  58. package/skills/gsd-path/DECIDE.md +11 -4
  59. package/skills/gsd-path/DEFINE.md +36 -4
  60. package/skills/gsd-path/DOCS-AUDIT.md +6 -4
  61. package/skills/gsd-path/INSPECT.md +5 -4
  62. package/skills/gsd-path/PLAN.md +18 -4
  63. package/skills/gsd-path/RESEARCH.md +13 -1
  64. package/skills/gsd-path/ROADMAP.md +2 -1
  65. package/skills/gsd-path/SHIP.md +33 -11
  66. package/skills/gsd-path/SKILL.md +45 -1
  67. package/skills/gsd-path/references/build-native.md +63 -15
  68. package/skills/gsd-path/references/codebase-mapper.md +2 -1
  69. package/skills/gsd-path/references/dispatch.md +13 -0
  70. package/skills/gsd-path/references/docs-auditor.md +7 -1
  71. package/skills/gsd-path/references/operating-rules.md +214 -0
  72. package/skills/gsd-path/references/planner.md +22 -4
  73. package/skills/gsd-path/references/reviewer-final.md +20 -2
  74. package/skills/gsd-path/references/reviewer-wave.md +18 -5
  75. package/skills/gsd-path/references/reviewer.md +3 -1
  76. package/skills/gsd-path/references/spec-probes.md +150 -0
  77. package/skills/gsd-path/scripts/_common.py +619 -18
  78. package/skills/gsd-path/scripts/archive_milestone.py +160 -86
  79. package/skills/gsd-path/scripts/bootstrap_repository.py +8 -5
  80. package/skills/gsd-path/scripts/build_recovery.py +100 -32
  81. package/skills/gsd-path/scripts/build_state.py +143 -24
  82. package/skills/gsd-path/scripts/check_docs_audit.py +91 -7
  83. package/skills/gsd-path/scripts/check_handoffs.py +662 -50
  84. package/skills/gsd-path/scripts/check_task_briefs.py +338 -30
  85. package/skills/gsd-path/scripts/check_update.py +2 -2
  86. package/skills/gsd-path/scripts/detect_project.py +587 -32
  87. package/skills/gsd-path/scripts/discussion_records.py +19 -13
  88. package/skills/gsd-path/scripts/discussion_validate.py +152 -50
  89. package/skills/gsd-path/scripts/dispatch_driver.py +501 -46
  90. package/skills/gsd-path/scripts/git_guard.py +118 -31
  91. package/skills/gsd-path/scripts/integration.py +580 -25
  92. package/skills/gsd-path/scripts/isolation.py +1438 -57
  93. package/skills/gsd-path/scripts/lean_verification.py +99 -19
  94. package/skills/gsd-path/scripts/loop_run.py +31 -29
  95. package/skills/gsd-path/scripts/members.py +706 -0
  96. package/skills/gsd-path/scripts/path_config.py +5 -5
  97. package/skills/gsd-path/scripts/pipeline_git.py +124 -34
  98. package/skills/gsd-path/scripts/pipeline_state.py +287 -87
  99. package/skills/gsd-path/scripts/promote_lookahead.py +1 -1
  100. package/skills/gsd-path/scripts/review_panel.py +1 -1
  101. package/skills/gsd-path/scripts/state_checkpoint.py +135 -44
  102. package/skills/gsd-path/scripts/state_promote.py +2 -0
  103. package/skills/gsd-path/scripts/status_runtime.py +58 -10
  104. package/skills/gsd-path/scripts/task_context.py +12 -3
  105. package/skills/gsd-path/scripts/token_budget.py +12 -8
  106. package/skills/gsd-path/scripts/workflow_run.py +107 -30
  107. package/skills/gsd-path/scripts/worktree_paths.py +72 -10
  108. package/skills/gsd-path/templates/codebase.md +1 -1
  109. package/skills/gsd-path/templates/docs-audit.md +6 -2
  110. package/skills/gsd-path/templates/final-review.md +16 -4
  111. package/skills/gsd-path/templates/gap-review.md +2 -1
  112. package/skills/gsd-path/templates/intent.md +30 -0
  113. package/skills/gsd-path/templates/patch-findings.md +3 -3
  114. package/skills/gsd-path/templates/plan.md +17 -2
  115. package/skills/gsd-path/templates/research-handoff.md +14 -3
  116. package/skills/gsd-path/templates/state.md +1 -1
  117. package/skills/gsd-path/templates/task.md +1 -0
  118. package/skills/gsd-path/templates/wave-review.md +16 -4
  119. package/skills/gsd-path-build/SKILL.md +7 -1
  120. package/skills/gsd-path-build/references/build-native.md +63 -15
  121. package/skills/gsd-path-build/references/dispatch.md +13 -0
  122. package/skills/gsd-path-build/references/operating-rules.md +214 -0
  123. package/skills/gsd-path-build/references/reviewer-final.md +20 -2
  124. package/skills/gsd-path-build/references/reviewer-wave.md +18 -5
  125. package/skills/gsd-path-build/references/reviewer.md +3 -1
  126. package/skills/gsd-path-build/references/spec-probes.md +150 -0
  127. package/skills/gsd-path-build/scripts/_common.py +619 -18
  128. package/skills/gsd-path-build/scripts/archive_milestone.py +160 -86
  129. package/skills/gsd-path-build/scripts/build_recovery.py +100 -32
  130. package/skills/gsd-path-build/scripts/build_state.py +143 -24
  131. package/skills/gsd-path-build/scripts/check_handoffs.py +662 -50
  132. package/skills/gsd-path-build/scripts/check_task_briefs.py +338 -30
  133. package/skills/gsd-path-build/scripts/detect_project.py +587 -32
  134. package/skills/gsd-path-build/scripts/discussion_records.py +19 -13
  135. package/skills/gsd-path-build/scripts/discussion_validate.py +152 -50
  136. package/skills/gsd-path-build/scripts/dispatch_driver.py +501 -46
  137. package/skills/gsd-path-build/scripts/integration.py +580 -25
  138. package/skills/gsd-path-build/scripts/isolation.py +1438 -57
  139. package/skills/gsd-path-build/scripts/loop_run.py +31 -29
  140. package/skills/gsd-path-build/scripts/members.py +706 -0
  141. package/skills/gsd-path-build/scripts/path_config.py +5 -5
  142. package/skills/gsd-path-build/scripts/pipeline_git.py +124 -34
  143. package/skills/gsd-path-build/scripts/pipeline_state.py +287 -87
  144. package/skills/gsd-path-build/scripts/promote_lookahead.py +1 -1
  145. package/skills/gsd-path-build/scripts/review_panel.py +1 -1
  146. package/skills/gsd-path-build/scripts/state_checkpoint.py +135 -44
  147. package/skills/gsd-path-build/scripts/state_promote.py +2 -0
  148. package/skills/gsd-path-build/scripts/task_context.py +12 -3
  149. package/skills/gsd-path-build/scripts/token_budget.py +12 -8
  150. package/skills/gsd-path-build/scripts/workflow_run.py +107 -30
  151. package/skills/gsd-path-build/scripts/worktree_paths.py +72 -10
  152. package/skills/gsd-path-build/templates/task.md +1 -0
  153. package/skills/gsd-path-build/templates/wave-review.md +16 -4
  154. package/skills/gsd-path-decide/SKILL.md +11 -4
  155. package/skills/gsd-path-decide/references/dispatch.md +13 -0
  156. package/skills/gsd-path-decide/references/operating-rules.md +214 -0
  157. package/skills/gsd-path-decide/scripts/_common.py +619 -18
  158. package/skills/gsd-path-decide/scripts/archive_milestone.py +160 -86
  159. package/skills/gsd-path-decide/scripts/build_recovery.py +100 -32
  160. package/skills/gsd-path-decide/scripts/check_handoffs.py +662 -50
  161. package/skills/gsd-path-decide/scripts/check_task_briefs.py +338 -30
  162. package/skills/gsd-path-decide/scripts/detect_project.py +587 -32
  163. package/skills/gsd-path-decide/scripts/discussion_records.py +19 -13
  164. package/skills/gsd-path-decide/scripts/discussion_validate.py +152 -50
  165. package/skills/gsd-path-decide/scripts/integration.py +580 -25
  166. package/skills/gsd-path-decide/scripts/isolation.py +1438 -57
  167. package/skills/gsd-path-decide/scripts/loop_run.py +31 -29
  168. package/skills/gsd-path-decide/scripts/members.py +706 -0
  169. package/skills/gsd-path-decide/scripts/path_config.py +5 -5
  170. package/skills/gsd-path-decide/scripts/pipeline_git.py +124 -34
  171. package/skills/gsd-path-decide/scripts/pipeline_state.py +287 -87
  172. package/skills/gsd-path-decide/scripts/promote_lookahead.py +1 -1
  173. package/skills/gsd-path-decide/scripts/review_panel.py +1 -1
  174. package/skills/gsd-path-decide/scripts/state_checkpoint.py +135 -44
  175. package/skills/gsd-path-decide/scripts/state_promote.py +2 -0
  176. package/skills/gsd-path-decide/scripts/worktree_paths.py +72 -10
  177. package/skills/gsd-path-define/SKILL.md +36 -4
  178. package/skills/gsd-path-define/references/operating-rules.md +214 -0
  179. package/skills/gsd-path-define/references/spec-probes.md +150 -0
  180. package/skills/gsd-path-define/scripts/_common.py +619 -18
  181. package/skills/gsd-path-define/scripts/archive_milestone.py +160 -86
  182. package/skills/gsd-path-define/scripts/build_recovery.py +100 -32
  183. package/skills/gsd-path-define/scripts/check_handoffs.py +662 -50
  184. package/skills/gsd-path-define/scripts/check_task_briefs.py +338 -30
  185. package/skills/gsd-path-define/scripts/detect_project.py +587 -32
  186. package/skills/gsd-path-define/scripts/discussion_records.py +19 -13
  187. package/skills/gsd-path-define/scripts/discussion_validate.py +152 -50
  188. package/skills/gsd-path-define/scripts/integration.py +580 -25
  189. package/skills/gsd-path-define/scripts/isolation.py +1438 -57
  190. package/skills/gsd-path-define/scripts/loop_run.py +31 -29
  191. package/skills/gsd-path-define/scripts/members.py +706 -0
  192. package/skills/gsd-path-define/scripts/path_config.py +5 -5
  193. package/skills/gsd-path-define/scripts/pipeline_git.py +124 -34
  194. package/skills/gsd-path-define/scripts/pipeline_state.py +287 -87
  195. package/skills/gsd-path-define/scripts/promote_lookahead.py +1 -1
  196. package/skills/gsd-path-define/scripts/review_panel.py +1 -1
  197. package/skills/gsd-path-define/scripts/state_checkpoint.py +135 -44
  198. package/skills/gsd-path-define/scripts/state_promote.py +2 -0
  199. package/skills/gsd-path-define/scripts/worktree_paths.py +72 -10
  200. package/skills/gsd-path-define/templates/intent.md +30 -0
  201. package/skills/gsd-path-define/templates/state.md +1 -1
  202. package/skills/gsd-path-discuss/SKILL.md +2 -1
  203. package/skills/gsd-path-discuss/references/operating-rules.md +214 -0
  204. package/skills/gsd-path-discuss/scripts/_common.py +619 -18
  205. package/skills/gsd-path-discuss/scripts/discussion_records.py +19 -13
  206. package/skills/gsd-path-discuss/scripts/loop_run.py +31 -29
  207. package/skills/gsd-path-discuss/scripts/path_config.py +5 -5
  208. package/skills/gsd-path-discuss/scripts/review_panel.py +1 -1
  209. package/skills/gsd-path-discuss/scripts/worktree_paths.py +72 -10
  210. package/skills/gsd-path-docs-audit/SKILL.md +6 -4
  211. package/skills/gsd-path-docs-audit/references/dispatch.md +13 -0
  212. package/skills/gsd-path-docs-audit/references/docs-auditor.md +7 -1
  213. package/skills/gsd-path-docs-audit/references/operating-rules.md +214 -0
  214. package/skills/gsd-path-docs-audit/scripts/_common.py +619 -18
  215. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +160 -86
  216. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +100 -32
  217. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +91 -7
  218. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +662 -50
  219. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +338 -30
  220. package/skills/gsd-path-docs-audit/scripts/detect_project.py +587 -32
  221. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +19 -13
  222. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +152 -50
  223. package/skills/gsd-path-docs-audit/scripts/integration.py +580 -25
  224. package/skills/gsd-path-docs-audit/scripts/isolation.py +1438 -57
  225. package/skills/gsd-path-docs-audit/scripts/loop_run.py +31 -29
  226. package/skills/gsd-path-docs-audit/scripts/members.py +706 -0
  227. package/skills/gsd-path-docs-audit/scripts/path_config.py +5 -5
  228. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +124 -34
  229. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +287 -87
  230. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +1 -1
  231. package/skills/gsd-path-docs-audit/scripts/review_panel.py +1 -1
  232. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +135 -44
  233. package/skills/gsd-path-docs-audit/scripts/state_promote.py +2 -0
  234. package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +72 -10
  235. package/skills/gsd-path-docs-audit/templates/docs-audit.md +6 -2
  236. package/skills/gsd-path-forensics/SKILL.md +2 -1
  237. package/skills/gsd-path-forensics/references/operating-rules.md +214 -0
  238. package/skills/gsd-path-forensics/scripts/_common.py +619 -18
  239. package/skills/gsd-path-forensics/scripts/discussion_records.py +19 -13
  240. package/skills/gsd-path-forensics/scripts/loop_run.py +31 -29
  241. package/skills/gsd-path-forensics/scripts/path_config.py +5 -5
  242. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +82 -31
  243. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +218 -30
  244. package/skills/gsd-path-forensics/scripts/review_panel.py +1 -1
  245. package/skills/gsd-path-forensics/scripts/worktree_paths.py +72 -10
  246. package/skills/gsd-path-inspect/SKILL.md +5 -4
  247. package/skills/gsd-path-inspect/references/codebase-mapper.md +2 -1
  248. package/skills/gsd-path-inspect/references/dispatch.md +13 -0
  249. package/skills/gsd-path-inspect/references/docs-auditor.md +7 -1
  250. package/skills/gsd-path-inspect/references/operating-rules.md +214 -0
  251. package/skills/gsd-path-inspect/scripts/_common.py +619 -18
  252. package/skills/gsd-path-inspect/scripts/archive_milestone.py +160 -86
  253. package/skills/gsd-path-inspect/scripts/build_recovery.py +100 -32
  254. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +91 -7
  255. package/skills/gsd-path-inspect/scripts/check_handoffs.py +662 -50
  256. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +338 -30
  257. package/skills/gsd-path-inspect/scripts/detect_project.py +587 -32
  258. package/skills/gsd-path-inspect/scripts/discussion_records.py +19 -13
  259. package/skills/gsd-path-inspect/scripts/discussion_validate.py +152 -50
  260. package/skills/gsd-path-inspect/scripts/integration.py +580 -25
  261. package/skills/gsd-path-inspect/scripts/isolation.py +1438 -57
  262. package/skills/gsd-path-inspect/scripts/loop_run.py +31 -29
  263. package/skills/gsd-path-inspect/scripts/members.py +706 -0
  264. package/skills/gsd-path-inspect/scripts/path_config.py +5 -5
  265. package/skills/gsd-path-inspect/scripts/pipeline_git.py +124 -34
  266. package/skills/gsd-path-inspect/scripts/pipeline_state.py +287 -87
  267. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +1 -1
  268. package/skills/gsd-path-inspect/scripts/review_panel.py +1 -1
  269. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +135 -44
  270. package/skills/gsd-path-inspect/scripts/state_promote.py +2 -0
  271. package/skills/gsd-path-inspect/scripts/workflow_run.py +107 -30
  272. package/skills/gsd-path-inspect/scripts/worktree_paths.py +72 -10
  273. package/skills/gsd-path-inspect/templates/codebase.md +1 -1
  274. package/skills/gsd-path-inspect/templates/docs-audit.md +6 -2
  275. package/skills/gsd-path-inspect/templates/state.md +1 -1
  276. package/skills/gsd-path-loop/SKILL.md +2 -1
  277. package/skills/gsd-path-loop/references/operating-rules.md +214 -0
  278. package/skills/gsd-path-loop/scripts/_common.py +619 -18
  279. package/skills/gsd-path-loop/scripts/discussion_records.py +19 -13
  280. package/skills/gsd-path-loop/scripts/loop_run.py +31 -29
  281. package/skills/gsd-path-loop/scripts/path_config.py +5 -5
  282. package/skills/gsd-path-loop/scripts/review_panel.py +1 -1
  283. package/skills/gsd-path-loop/scripts/worktree_paths.py +72 -10
  284. package/skills/gsd-path-migrate/SKILL.md +2 -1
  285. package/skills/gsd-path-migrate/references/operating-rules.md +214 -0
  286. package/skills/gsd-path-migrate/scripts/_common.py +619 -18
  287. package/skills/gsd-path-migrate/scripts/core_hook_gate.py +10 -1
  288. package/skills/gsd-path-migrate/scripts/core_hook_settings.py +11 -4
  289. package/skills/gsd-path-migrate/scripts/discussion_records.py +19 -13
  290. package/skills/gsd-path-migrate/scripts/loop_run.py +31 -29
  291. package/skills/gsd-path-migrate/scripts/migrate_core.py +2 -2
  292. package/skills/gsd-path-migrate/scripts/path_config.py +5 -5
  293. package/skills/gsd-path-migrate/scripts/review_panel.py +1 -1
  294. package/skills/gsd-path-plan/SKILL.md +18 -4
  295. package/skills/gsd-path-plan/references/dispatch.md +13 -0
  296. package/skills/gsd-path-plan/references/operating-rules.md +214 -0
  297. package/skills/gsd-path-plan/references/planner.md +22 -4
  298. package/skills/gsd-path-plan/references/spec-probes.md +150 -0
  299. package/skills/gsd-path-plan/scripts/_common.py +619 -18
  300. package/skills/gsd-path-plan/scripts/archive_milestone.py +160 -86
  301. package/skills/gsd-path-plan/scripts/build_recovery.py +100 -32
  302. package/skills/gsd-path-plan/scripts/check_handoffs.py +662 -50
  303. package/skills/gsd-path-plan/scripts/check_task_briefs.py +338 -30
  304. package/skills/gsd-path-plan/scripts/detect_project.py +587 -32
  305. package/skills/gsd-path-plan/scripts/discussion_records.py +19 -13
  306. package/skills/gsd-path-plan/scripts/discussion_validate.py +152 -50
  307. package/skills/gsd-path-plan/scripts/integration.py +580 -25
  308. package/skills/gsd-path-plan/scripts/isolation.py +1438 -57
  309. package/skills/gsd-path-plan/scripts/loop_run.py +31 -29
  310. package/skills/gsd-path-plan/scripts/members.py +706 -0
  311. package/skills/gsd-path-plan/scripts/path_config.py +5 -5
  312. package/skills/gsd-path-plan/scripts/pipeline_git.py +124 -34
  313. package/skills/gsd-path-plan/scripts/pipeline_state.py +287 -87
  314. package/skills/gsd-path-plan/scripts/promote_lookahead.py +1 -1
  315. package/skills/gsd-path-plan/scripts/review_panel.py +1 -1
  316. package/skills/gsd-path-plan/scripts/state_checkpoint.py +135 -44
  317. package/skills/gsd-path-plan/scripts/state_promote.py +2 -0
  318. package/skills/gsd-path-plan/scripts/workflow_run.py +107 -30
  319. package/skills/gsd-path-plan/scripts/worktree_paths.py +72 -10
  320. package/skills/gsd-path-plan/templates/patch-findings.md +3 -3
  321. package/skills/gsd-path-plan/templates/plan.md +17 -2
  322. package/skills/gsd-path-plan/templates/task.md +1 -0
  323. package/skills/gsd-path-research/SKILL.md +13 -1
  324. package/skills/gsd-path-research/references/dispatch.md +13 -0
  325. package/skills/gsd-path-research/references/operating-rules.md +214 -0
  326. package/skills/gsd-path-research/scripts/_common.py +619 -18
  327. package/skills/gsd-path-research/scripts/archive_milestone.py +160 -86
  328. package/skills/gsd-path-research/scripts/build_recovery.py +100 -32
  329. package/skills/gsd-path-research/scripts/check_handoffs.py +662 -50
  330. package/skills/gsd-path-research/scripts/check_task_briefs.py +338 -30
  331. package/skills/gsd-path-research/scripts/detect_project.py +587 -32
  332. package/skills/gsd-path-research/scripts/discussion_records.py +19 -13
  333. package/skills/gsd-path-research/scripts/discussion_validate.py +152 -50
  334. package/skills/gsd-path-research/scripts/integration.py +580 -25
  335. package/skills/gsd-path-research/scripts/isolation.py +1438 -57
  336. package/skills/gsd-path-research/scripts/loop_run.py +31 -29
  337. package/skills/gsd-path-research/scripts/members.py +706 -0
  338. package/skills/gsd-path-research/scripts/path_config.py +5 -5
  339. package/skills/gsd-path-research/scripts/pipeline_git.py +124 -34
  340. package/skills/gsd-path-research/scripts/pipeline_state.py +287 -87
  341. package/skills/gsd-path-research/scripts/promote_lookahead.py +1 -1
  342. package/skills/gsd-path-research/scripts/review_panel.py +1 -1
  343. package/skills/gsd-path-research/scripts/state_checkpoint.py +135 -44
  344. package/skills/gsd-path-research/scripts/state_promote.py +2 -0
  345. package/skills/gsd-path-research/scripts/worktree_paths.py +72 -10
  346. package/skills/gsd-path-research/templates/research-handoff.md +14 -3
  347. package/skills/gsd-path-roadmap/SKILL.md +2 -1
  348. package/skills/gsd-path-roadmap/references/dispatch.md +13 -0
  349. package/skills/gsd-path-roadmap/references/operating-rules.md +214 -0
  350. package/skills/gsd-path-roadmap/scripts/_common.py +619 -18
  351. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +160 -86
  352. package/skills/gsd-path-roadmap/scripts/build_recovery.py +100 -32
  353. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +662 -50
  354. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +338 -30
  355. package/skills/gsd-path-roadmap/scripts/detect_project.py +587 -32
  356. package/skills/gsd-path-roadmap/scripts/discussion_records.py +19 -13
  357. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +152 -50
  358. package/skills/gsd-path-roadmap/scripts/integration.py +580 -25
  359. package/skills/gsd-path-roadmap/scripts/isolation.py +1438 -57
  360. package/skills/gsd-path-roadmap/scripts/loop_run.py +31 -29
  361. package/skills/gsd-path-roadmap/scripts/members.py +706 -0
  362. package/skills/gsd-path-roadmap/scripts/path_config.py +5 -5
  363. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +124 -34
  364. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +287 -87
  365. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +1 -1
  366. package/skills/gsd-path-roadmap/scripts/review_panel.py +1 -1
  367. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +135 -44
  368. package/skills/gsd-path-roadmap/scripts/state_promote.py +2 -0
  369. package/skills/gsd-path-roadmap/scripts/worktree_paths.py +72 -10
  370. package/skills/gsd-path-ship/SKILL.md +33 -11
  371. package/skills/gsd-path-ship/references/dispatch.md +13 -0
  372. package/skills/gsd-path-ship/references/operating-rules.md +214 -0
  373. package/skills/gsd-path-ship/references/reviewer-final.md +20 -2
  374. package/skills/gsd-path-ship/references/reviewer-wave.md +18 -5
  375. package/skills/gsd-path-ship/references/reviewer.md +3 -1
  376. package/skills/gsd-path-ship/references/spec-probes.md +150 -0
  377. package/skills/gsd-path-ship/scripts/_common.py +619 -18
  378. package/skills/gsd-path-ship/scripts/archive_milestone.py +160 -86
  379. package/skills/gsd-path-ship/scripts/build_recovery.py +100 -32
  380. package/skills/gsd-path-ship/scripts/build_state.py +143 -24
  381. package/skills/gsd-path-ship/scripts/check_handoffs.py +662 -50
  382. package/skills/gsd-path-ship/scripts/check_task_briefs.py +338 -30
  383. package/skills/gsd-path-ship/scripts/detect_project.py +587 -32
  384. package/skills/gsd-path-ship/scripts/discussion_records.py +19 -13
  385. package/skills/gsd-path-ship/scripts/discussion_validate.py +152 -50
  386. package/skills/gsd-path-ship/scripts/integration.py +580 -25
  387. package/skills/gsd-path-ship/scripts/isolation.py +1438 -57
  388. package/skills/gsd-path-ship/scripts/lean_verification.py +99 -19
  389. package/skills/gsd-path-ship/scripts/loop_run.py +31 -29
  390. package/skills/gsd-path-ship/scripts/members.py +706 -0
  391. package/skills/gsd-path-ship/scripts/path_config.py +5 -5
  392. package/skills/gsd-path-ship/scripts/pipeline_git.py +124 -34
  393. package/skills/gsd-path-ship/scripts/pipeline_state.py +287 -87
  394. package/skills/gsd-path-ship/scripts/promote_lookahead.py +1 -1
  395. package/skills/gsd-path-ship/scripts/review_panel.py +1 -1
  396. package/skills/gsd-path-ship/scripts/state_checkpoint.py +135 -44
  397. package/skills/gsd-path-ship/scripts/state_promote.py +2 -0
  398. package/skills/gsd-path-ship/scripts/workflow_run.py +107 -30
  399. package/skills/gsd-path-ship/scripts/worktree_paths.py +72 -10
  400. package/skills/gsd-path-ship/templates/final-review.md +16 -4
  401. package/skills/gsd-path-ship/templates/gap-review.md +2 -1
  402. package/skills/gsd-path-ship/templates/patch-findings.md +3 -3
  403. package/skills/gsd-path-ship/templates/wave-review.md +16 -4
  404. package/skills/gsd-path-undo/SKILL.md +2 -1
  405. package/skills/gsd-path-undo/references/operating-rules.md +214 -0
  406. package/skills/gsd-path-undo/scripts/_common.py +619 -18
  407. package/skills/gsd-path-undo/scripts/discussion_records.py +19 -13
  408. package/skills/gsd-path-undo/scripts/loop_run.py +31 -29
  409. package/skills/gsd-path-undo/scripts/path_config.py +5 -5
  410. package/skills/gsd-path-undo/scripts/pipeline_undo.py +218 -30
  411. package/skills/gsd-path-undo/scripts/review_panel.py +1 -1
  412. package/skills/gsd-path-undo/scripts/worktree_paths.py +72 -10
  413. package/skills/path/BUILD.md +7 -1
  414. package/skills/path/DECIDE.md +11 -4
  415. package/skills/path/DEFINE.md +36 -4
  416. package/skills/path/DOCS-AUDIT.md +6 -4
  417. package/skills/path/INSPECT.md +5 -4
  418. package/skills/path/PLAN.md +18 -4
  419. package/skills/path/RESEARCH.md +13 -1
  420. package/skills/path/ROADMAP.md +2 -1
  421. package/skills/path/SHIP.md +33 -11
  422. package/skills/path/SKILL.md +45 -1
  423. package/skills/path/references/build-native.md +63 -15
  424. package/skills/path/references/codebase-mapper.md +2 -1
  425. package/skills/path/references/dispatch.md +13 -0
  426. package/skills/path/references/docs-auditor.md +7 -1
  427. package/skills/path/references/operating-rules.md +214 -0
  428. package/skills/path/references/planner.md +22 -4
  429. package/skills/path/references/reviewer-final.md +20 -2
  430. package/skills/path/references/reviewer-wave.md +18 -5
  431. package/skills/path/references/reviewer.md +3 -1
  432. package/skills/path/references/spec-probes.md +150 -0
  433. package/skills/path/scripts/_common.py +619 -18
  434. package/skills/path/scripts/archive_milestone.py +160 -86
  435. package/skills/path/scripts/bootstrap_repository.py +8 -5
  436. package/skills/path/scripts/build_recovery.py +100 -32
  437. package/skills/path/scripts/build_state.py +143 -24
  438. package/skills/path/scripts/check_docs_audit.py +91 -7
  439. package/skills/path/scripts/check_handoffs.py +662 -50
  440. package/skills/path/scripts/check_task_briefs.py +338 -30
  441. package/skills/path/scripts/check_update.py +2 -2
  442. package/skills/path/scripts/detect_project.py +587 -32
  443. package/skills/path/scripts/discussion_records.py +19 -13
  444. package/skills/path/scripts/discussion_validate.py +152 -50
  445. package/skills/path/scripts/dispatch_driver.py +501 -46
  446. package/skills/path/scripts/git_guard.py +118 -31
  447. package/skills/path/scripts/integration.py +580 -25
  448. package/skills/path/scripts/isolation.py +1438 -57
  449. package/skills/path/scripts/lean_verification.py +99 -19
  450. package/skills/path/scripts/loop_run.py +31 -29
  451. package/skills/path/scripts/members.py +706 -0
  452. package/skills/path/scripts/path_config.py +5 -5
  453. package/skills/path/scripts/pipeline_git.py +124 -34
  454. package/skills/path/scripts/pipeline_state.py +287 -87
  455. package/skills/path/scripts/promote_lookahead.py +1 -1
  456. package/skills/path/scripts/review_panel.py +1 -1
  457. package/skills/path/scripts/state_checkpoint.py +135 -44
  458. package/skills/path/scripts/state_promote.py +2 -0
  459. package/skills/path/scripts/status_runtime.py +58 -10
  460. package/skills/path/scripts/task_context.py +12 -3
  461. package/skills/path/scripts/token_budget.py +12 -8
  462. package/skills/path/scripts/workflow_run.py +107 -30
  463. package/skills/path/scripts/worktree_paths.py +72 -10
  464. package/skills/path/templates/codebase.md +1 -1
  465. package/skills/path/templates/docs-audit.md +6 -2
  466. package/skills/path/templates/final-review.md +16 -4
  467. package/skills/path/templates/gap-review.md +2 -1
  468. package/skills/path/templates/intent.md +30 -0
  469. package/skills/path/templates/patch-findings.md +3 -3
  470. package/skills/path/templates/plan.md +17 -2
  471. package/skills/path/templates/research-handoff.md +14 -3
  472. package/skills/path/templates/state.md +1 -1
  473. package/skills/path/templates/task.md +1 -0
  474. package/skills/path/templates/wave-review.md +16 -4
  475. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  476. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  477. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  478. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  479. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  480. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  481. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
@@ -3,7 +3,8 @@ name: gsd-path-plan
3
3
  description: Create and validate dependency-ordered GSD Path build waves and complete task contracts. Use only when the user explicitly invokes $gsd-path-plan or an active $gsd-path router explicitly routes to this phase.
4
4
  ---
5
5
 
6
- Before executing project helpers, read [runtime selection](references/runtime-selection.md).
6
+ Before executing project helpers, read [runtime selection](references/runtime-selection.md)
7
+ and [operating rules](references/operating-rules.md).
7
8
 
8
9
  # GSD Path Planning Phase
9
10
 
@@ -114,9 +115,10 @@ as stated in Lookahead mode.
114
115
  In patch mode, tasks already `done` keep their landed metadata; only
115
116
  the appended patch tasks must start clean.
116
117
  - Require every dependency id to exist, forbid later-wave dependencies,
117
- detect cycles, and forbid file overlap between planned tasks in the same
118
- wave. Same-wave dependency chains are allowed only when their files do
119
- not overlap; the build executes them in dependency layers.
118
+ detect cycles, and forbid unordered file overlap between planned tasks
119
+ in the same wave. Same-wave tasks may share files only when one
120
+ transitively depends on the other through `deps`; the build executes
121
+ them in dependency layers.
120
122
  - Reject a declared dependency that carries neither data nor a prerequisite
121
123
  effect. A `deps` edge is valid only when the dependent consumes a symbol,
122
124
  signature, schema, endpoint, file format, or path named in that
@@ -156,6 +158,13 @@ as stated in Lookahead mode.
156
158
  command's output — not an internal unit test.
157
159
  Require the surface to land in the same wave as the capability behind
158
160
  it, never in a later polish wave.
161
+ - When INTENT.md has `## Edge coverage`, require a PLAN.md
162
+ `## Held-out checks` row for every `held-out` edge and for no other
163
+ edge. The named test is in that task's `files`, the task's Verify runs
164
+ it, and the task's Acceptance criteria state the edge id and its ruling
165
+ (see [spec-reach probes](references/spec-probes.md)). An edge or
166
+ prohibition ruled `criterion SCn` needs no extra row; it is covered as
167
+ SCn. Put each `judgment` prohibition in its owning task's Approach.
159
168
  - Prove every intent constraint and synthesis decision is covered, that no
160
169
  scope-out veto appears in a task, and that `Project verify` is a real,
161
170
  non-placeholder command in PLAN.md. Every Verify — task and project —
@@ -226,6 +235,11 @@ as stated in Lookahead mode.
226
235
  Before asking for approval, require exactly one panel artifact for non-off
227
236
  Config: `PLAN-PANEL.md` for `ready`, or `PLAN-PANEL.skipped.json` for
228
237
  `skipped`. Off Config requires neither. A mismatch blocks approval.
238
+ When the active router recorded a `plan` pre-approval grant, first run
239
+ `python3 <absolute workflow_run.py> preauthorize --repo <absolute root>
240
+ --kind plan`. On `complete`, present Outcome and Review, say the owner's
241
+ pre-approval passed this gate, and continue at step 6 as approved. On
242
+ `blocked`, ask as below.
229
243
  Ask one explicit next question: whether to approve this plan and start the
230
244
  build. When PLAN-PANEL.md has `Actionable: 0` or the panel did not run,
231
245
  list `Approve and start build (recommended)` first, with `Request changes`
@@ -3,7 +3,8 @@ name: gsd-path-research
3
3
  description: Dispatch parallel researchers and collect cited GSD Path evidence about domain, stack, pitfalls, and comparable products. Use only when the user explicitly invokes $gsd-path-research or an active $gsd-path router explicitly routes to this phase.
4
4
  ---
5
5
 
6
- Before executing project helpers, read [runtime selection](references/runtime-selection.md).
6
+ Before executing project helpers, read [runtime selection](references/runtime-selection.md)
7
+ and [operating rules](references/operating-rules.md).
7
8
 
8
9
  # GSD Path Research Phase
9
10
 
@@ -83,6 +84,17 @@ settled brownfield input.
83
84
  template before dispatch. Record every standard dimension exactly once as
84
85
  `dispatched` or `skipped` with a reason, and assign every research question
85
86
  to at least one dispatched dimension. No question may remain unassigned.
87
+ Copy each question to exactly one `Question assignments` row. Assign one or
88
+ more dispatched dimension slugs there, each in its own code span and
89
+ separated by commas, as in:
90
+
91
+ ```md
92
+ - `[RESEARCH] Which approach is viable?` → `stack`, `pitfalls`
93
+ ```
94
+
95
+ List a dimension only once per row. Every dispatched dimension must own at
96
+ least one question, and its evidence file must answer every question
97
+ assigned to it. Use `- none` only when there are no research questions.
86
98
  2. Decide which standard dimensions have work: dispatch a dimension only when
87
99
  it has at least one assigned `RESEARCH` question from INTENT.md or
88
100
  CHARTER.md. Unsettled choices and risks need that source question before
@@ -3,7 +3,8 @@ name: gsd-path-roadmap
3
3
  description: Slice an approved GSD Path program charter into a dependency-ordered roadmap of independently shippable milestones. Use only when the user explicitly invokes $gsd-path-roadmap or an active $gsd-path router explicitly routes to this phase.
4
4
  ---
5
5
 
6
- Before executing project helpers, read [runtime selection](references/runtime-selection.md).
6
+ Before executing project helpers, read [runtime selection](references/runtime-selection.md)
7
+ and [operating rules](references/operating-rules.md).
7
8
 
8
9
  # GSD Path Roadmap Phase
9
10
 
@@ -3,7 +3,8 @@ name: gsd-path-ship
3
3
  description: Verify a completed GSD Path milestone, manage evidence-backed patch decisions, request final shipping approval, and archive the validated result. Use only when the user explicitly invokes $gsd-path-ship or an active $gsd-path router or build orchestrator explicitly routes to this phase.
4
4
  ---
5
5
 
6
- Before executing project helpers, read [runtime selection](references/runtime-selection.md).
6
+ Before executing project helpers, read [runtime selection](references/runtime-selection.md)
7
+ and [operating rules](references/operating-rules.md).
7
8
 
8
9
  # GSD Path Ship Phase
9
10
 
@@ -82,10 +83,13 @@ so the position is unchanged. Then:
82
83
  This owns pending-discussion and landing checks, project Verify isolation,
83
84
  execution, output recording, collection, cleanup, and final-review reuse.
84
85
  Keep its JSON receipt; do not reconstruct those operations in shell calls.
85
- Exact stdout/stderr live once in `.project/build/verify-ledger.jsonl`;
86
- `final-gap-1.md` is the generated view referencing that entry. Re-entry at
87
- the same command and commit reuses the execution, including a failed one,
88
- and finishes interrupted collection without running the command again.
86
+ For a single-repo milestone, exact stdout/stderr live once in
87
+ `.project/build/verify-ledger.jsonl`; `final-gap-1.md` is the generated view
88
+ referencing that entry. For a member milestone, the gap records each member
89
+ head and holds the exact output; there is no reusable ledger entry.
90
+ Single-repo re-entry at the same command and commit reuses the execution,
91
+ including a failed one, and finishes interrupted collection without running
92
+ the command again.
89
93
  Missing legacy output requires evidence reconciliation, not a blind rerun.
90
94
  Any non-zero result stops this step; preserve its stderr and diagnose through
91
95
  the bundled forensics contract. Do not launch reviewers while project Verify
@@ -121,9 +125,10 @@ so the position is unchanged. Then:
121
125
  step 3 or create a fresh sidecar with `isolate-verify --name review-final`
122
126
  and dispatch the integration reviewer under logical task name
123
127
  `review_final`, assigning only
124
- `.project/review/FINAL.md`. Its complete brief includes the exact recorded
125
- project Verify ledger entry, every collected gap verdict so Overall verdict is
126
- consistent with them, and PLAN.md's `## Surface contract` when INTENT.md
128
+ `.project/review/FINAL.md`. Its complete brief includes the project Verify
129
+ evidence from the ledger or the member milestone's gap output, every
130
+ collected gap verdict so Overall verdict is consistent with them, and
131
+ PLAN.md's `## Surface contract` when INTENT.md
127
132
  names surfaces — that reviewer performs each Walkthrough and records the
128
133
  surface and what it showed on every criterion the contract lists. Collect FINAL.md and retire its sidecar through the
129
134
  same helper flow.
@@ -154,7 +159,12 @@ so the position is unchanged. Then:
154
159
  then stop and do not invent a patch finding. A `not-met`,
155
160
  `unverifiable`, or blocked gap with valid evidence sets `ship/blocked`,
156
161
  writes `.project/review/PATCH-FINDINGS.md` from the patch-findings template,
157
- and runs `python3 <absolute check_handoffs.py> patch --repo <absolute repo
162
+ copying the full `Risk: ...` line into each gap finding's Locator, its
163
+ `Found` field into Evidence, and its `Fix direction` field verbatim. For a
164
+ `FINAL.md` finding, use its `SC<n>` id as Locator and copy its `Finding` and
165
+ `Fix direction` fields verbatim. The patch validator requires these source
166
+ field values to match exactly; do not shorten or paraphrase them. Run
167
+ `python3 <absolute check_handoffs.py> patch --repo <absolute repo
158
168
  root>`. Present the blocked outcome, link the resolved absolute
159
169
  PATCH-FINDINGS.md path, and state that patch planning is next. The manifest
160
170
  contains exactly those FINAL.md and gap rows. When routed by an active
@@ -253,6 +263,14 @@ The persisted `STATE.archive` field is the transaction identity.
253
263
  at the current HEAD is the only artifact-producing remedy. The archive helper independently binds every FINAL.md
254
264
  `SCn` heading id and normalized text to the archived INTENT.md; a renamed or
255
265
  easier criterion blocks even if the earlier handoff gate was bypassed.
266
+ For a multi-repo milestone (the archive holds `build/members.json`), run
267
+ `python3 <absolute archive_milestone.py> close-members --repo <root>`
268
+ after preflight passes and before recording shipment. It closes each
269
+ locked member in lock order in that member's integration mode and
270
+ journals each one. When it returns `awaiting-merge`, report the member PR
271
+ link, stop, and rerun the same command after the user merges it; never
272
+ merge a member PR yourself. When it returns `integrated`, keep its `body`
273
+ for the ship commit below.
256
274
  5. Only after preflight passes, record shipment through the journaled helper;
257
275
  for a program it atomically replaces both ROADMAP.md and STATE.md, setting
258
276
  the current entry to `Status: shipped` with the exact `Archive:` pointer:
@@ -270,10 +288,14 @@ The persisted `STATE.archive` field is the transaction identity.
270
288
  idempotent after completion. Stage only
271
289
  `.project/` paths, inspect the staged path list against the transaction and
272
290
  create the ship phase's one commit with exact subject
273
- `ship: M00N — <milestone-slug>` and a body of exactly two consecutive lines,
291
+ `ship: M00N — <milestone-slug>`. For a single-repo milestone, its body has
292
+ exactly two consecutive lines,
274
293
  `Archive: .project/archive/<NNN>-<slug>` then
275
294
  `Reviewed-HEAD: <reviewed SHA>`, with no comment lines or blank line between them.
276
- Write the subject, a blank line, and the two body lines to a message file,
295
+ A multi-repo milestone's body is exactly the `body` that `close-members`
296
+ returned: those two lines, then one `Member-Reviewed-HEAD:` and one
297
+ `Member:` line per member.
298
+ Write the subject, a blank line, and the body lines to a message file,
277
299
  then use `git commit -F <message-file>`. M00N and NNN come from STATE.archive.
278
300
  There is no untracked-project exception and no product or older-archive
279
301
  path may enter this commit.
@@ -3,13 +3,29 @@ name: gsd-path
3
3
  description: Inspect .project/STATE.md, report GSD Path progress, and run the next valid phase. Use only when the user explicitly invokes $gsd-path. The status argument reports state without advancing; config views or edits settings without advancing. Do not infer this skill from generic project, next-step, or resume requests.
4
4
  ---
5
5
 
6
- Before executing project helpers, read [runtime selection](references/runtime-selection.md).
6
+ Before executing project helpers, read [runtime selection](references/runtime-selection.md)
7
+ and [operating rules](references/operating-rules.md).
7
8
 
8
9
  ## Configuration mode
9
10
 
10
11
  When the first argument is `config`, read [Path settings](references/config.md)
11
12
  and complete that request without initializing state or advancing a phase.
12
13
 
14
+ ## Pre-approval
15
+
16
+ `--pre-approve <kinds>` in the arguments (`intent`, `plan`, or `intent,plan`)
17
+ grants those gates ahead of time for this run, for unattended quick lanes.
18
+ After `.project/STATE.md` exists and before milestone intent approval, run
19
+ `python3 <absolute pipeline_state.py> pre-approve --repo <absolute root>
20
+ --grant <kinds>` once; its Log record is the grant. Write only the kinds the
21
+ owner passed. A refused grant stops the run with the helper's message. Ship,
22
+ roadmap, patch selection, and repository setup are never pre-approved. At a
23
+ granted gate, the define or plan contract runs `python3 <absolute
24
+ workflow_run.py> preauthorize --repo <absolute root> --kind <kind>` before
25
+ asking: `complete` passes the gate through its normal approval command;
26
+ `blocked` asks the owner as usual. A grant never answers an interview
27
+ question, ruling, or `NEEDS-USER` item.
28
+
13
29
  # GSD Path Router
14
30
 
15
31
  Determine the current pipeline phase, report it briefly, and run the next valid
@@ -188,6 +204,34 @@ The current value resets from the project default at the next milestone.
188
204
  Both settings lock when build starts. A lookahead STATE inherits the active
189
205
  project's `integration_default` and uses it for `integration`.
190
206
 
207
+ ## Member repositories
208
+
209
+ A coordinator project can change other repositories (members) in the same
210
+ milestone; `.project/MEMBERS.md` lists them. Change members only at a
211
+ milestone boundary, never during build or ship. Resolve the bundled
212
+ `scripts/members.py` to an absolute path and use it; never edit MEMBERS.md
213
+ or a member marker by hand.
214
+
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
219
+ `python3 <members.py> add --repo <absolute-root> --name <name> --checkout <path> --integration <mode>`.
220
+ - To create a new member repository, present the exact `owner/name`,
221
+ visibility, and checkout path as the **Review** surface and get approval
222
+ first, as for a new GitHub repository. Then run the same command with
223
+ `--create <owner/name> --visibility <visibility>`. It journals the approved
224
+ target before creating anything; rerun the identical command to resume.
225
+ - After adding a member, tell the user to install its guard hooks:
226
+ `npx @opengsd/gsd-path@latest --member-of <absolute-root> --project <member checkout>`.
227
+ - `python3 <members.py> validate --repo <absolute-root>` checks every member;
228
+ `repair` rewrites stale markers; `detect --checkout <path>` reports whether a
229
+ repository is a member and of which coordinator.
230
+
231
+ Build locks the members that tasks name and works in Path-owned member
232
+ branches `gsd-path/<project>-M00N`. Ship runs `close-members` after preflight
233
+ to merge each member in lock order, then ships the coordinator.
234
+
191
235
  ## Transaction recovery first
192
236
 
193
237
  For a helper failure, use the diagnostic in the sibling bundle:
@@ -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
@@ -82,9 +90,12 @@ dispatch contract and perform steps 1–5 by hand.
82
90
  - `recovered`: the task is landed (`land` already stamped `status: done`
83
91
  and `base`). Retire a still-present task worktree with `isolation.py
84
92
  retire` only when the report shows it present, clean, and on the task
85
- branch. If only `task_branch` remains, finish its proven interrupted
86
- retirement with `retire --branch <task_branch> --force --landed-commit
87
- <commit>`; both absent is valid.
93
+ branch. If the checkout directory is absent and `task_branch` remains,
94
+ finish its proven interrupted retirement with `retire --branch
95
+ <task_branch> --force --landed-commit <commit>`. This also clears a stale
96
+ registration at that task's sidecar path after the landing proof passes;
97
+ a locked registration fails without deleting the branch. Both absent is
98
+ valid.
88
99
  - `resume`: continue from the returned `base`, `task_branch`, and worktree
89
100
  (the primary itself when no task branch exists); when the report shows
90
101
  the worktree absent, return the task to `pending` only when ownership is
@@ -133,6 +144,13 @@ dispatch contract and perform steps 1–5 by hand.
133
144
  even while unrelated tasks still run, so rerun `ready` after each landing.
134
145
  A `NEEDS-ORCHESTRATOR` block stays unselectable until its `Orchestrator
135
146
  answer` is recorded in the task Log and the task is back to `pending`.
147
+ An all-done wave whose latest canonical review cycle has any blocked lens
148
+ gates later waves: `ready` selects unfinished later tasks with a `## Review
149
+ findings` section that depend on it, sets `current_wave` to the earliest
150
+ repair wave, and adds `repair_for_wave` with the source wave. When no such
151
+ repair remains, `ready` returns no tasks and adds `blocked_review` (`wave`,
152
+ `cycle`, `waiting_waves`); a later passing canonical review cycle releases
153
+ the waiting waves.
136
154
  Its typed errors are the recovery rule:
137
155
  - `task-recovery-required`: for each listed failed or blocked task run
138
156
  `python3 <absolute build_state.py> reconcile --repo <absolute primary>
@@ -171,7 +189,17 @@ dispatch contract and perform steps 1–5 by hand.
171
189
  then create the retry. If retirement was interrupted after removing the
172
190
  worktree, rerun the same command; the recorded failed or blocked task and
173
191
  its exact base prove the remaining branch before deletion. Create the retry
174
- from the new clean primary HEAD. After
192
+ from the new clean primary HEAD. A member task (`repo: <member>`) stays
193
+ `pending` in the coordinator; its rejected attempt lives in the member
194
+ sidecar. Copy the live copy's Log delta into the coordinator task file,
195
+ checkpoint it, then retire the sidecar with `python3 <absolute isolation.py>
196
+ retire-member-task --repo <absolute primary> --member <member> --task-id
197
+ <id> --task-file <task path> --force`. It refuses until the committed task
198
+ file holds that delta, and a rerun finishes an interrupted retirement. A
199
+ copy that fails the append-only check holds no trusted delta: record your
200
+ own rejection evidence in the coordinator task Log and checkpoint it, as for
201
+ a coordinator diff rejection; retirement then reports `copy_rejected`. The
202
+ next `prepare-task` creates the retry sidecar at the member bound tip. After
175
203
  resolving a recoverable `build/blocked` condition, use
176
204
  `pipeline_state.py transition` with the blocked state and bound branch as
177
205
  expected fields to set `build/active` and log the resolution. Checkpoint it
@@ -183,19 +211,21 @@ dispatch contract and perform steps 1–5 by hand.
183
211
  a later round unlocked by fresh landings records the later HEAD — and
184
212
  lint every ready task's brief with the bundled
185
213
  `scripts/check_task_briefs.py --repo <absolute repo root> --base <recorded
186
- base>` and re-check Intent coverage with
214
+ base> --project-dir <routed project dir>` and re-check Intent coverage with
187
215
  `python3 <absolute check_handoffs.py> plan --repo <absolute repo root>`
188
216
  before creating any worktree; a lint or coverage failure is a documented plan
189
217
  defect — repair it against INTENT.md and SYNTHESIS.md, then re-establish
190
218
  the base. Then isolate each ready task with
191
219
  `python3 <absolute workflow_run.py> prepare-task --repo <absolute primary>
192
220
  --expected-head <recorded base> --task-id <id> --round-size <N>` where N is the
193
- number of tasks in this dispatch round. Serial (`N=1`) returns the primary
194
- worktree and `task_branch: null` — the coder works on the bound branch.
221
+ number of tasks in this dispatch round. For a coordinator task, serial
222
+ (`N=1`) returns the primary worktree and `task_branch: null` — the coder
223
+ works on the bound branch.
195
224
  The runner also creates a named verification sidecar at this clean base
196
225
  before dispatch. Retain both helper results in the dispatch evidence.
197
- Parallel (`N>=2`) creates a named `gsd-path-task/<id>` branch and linked
198
- worktree at that base; never a detached HEAD. Record dispatch through
226
+ For a coordinator task, parallel (`N>=2`) creates a named
227
+ `gsd-path-task/<id>` branch and linked worktree at that base; never a
228
+ detached HEAD. Record dispatch through
199
229
  `python3 <absolute isolation.py> activate-task --repo <returned worktree>
200
230
  --base <recorded base> --task-id <id> --agent build_<id> --task-file
201
231
  <exact selected task-file path> [--task-branch <returned task_branch>]`.
@@ -207,14 +237,26 @@ dispatch contract and perform steps 1–5 by hand.
207
237
  round. Do not append a dispatch Log entry: the isolated task later appends
208
238
  at that location, and two parallel appends make the cherry-pick ambiguous. Reuse a retained worktree only when
209
239
  its recorded base, branch, and task agree exactly.
240
+ A member task (`repo: <member>`) returns `mode: member` from
241
+ `prepare-task`: a member sidecar at the member bound tip, with no
242
+ coordinator verify sidecar. Record its dispatch with `python3 <absolute
243
+ isolation.py> activate-member-task --repo <absolute primary> --member
244
+ <member> --task-id <id> --agent build_<id> --task-file <exact task-file
245
+ path> --base <recorded base>`. It writes the live task copy (returned as
246
+ `copy`) inside the member sidecar; the coordinator task file stays
247
+ unchanged. Brief the coder with the member sidecar root and that live copy
248
+ as its task file, plus the coordinator's INTENT.md. Step 5's `finish` lands
249
+ it in the member and records it in the coordinator.
210
250
 
211
251
  4. **Dispatch the round.** Following the local runtime dispatch contract,
212
252
  spawn one implementation-capable child per task with deterministic logical
213
253
  task name `build_<task_id>`.
214
254
  Its brief contains the absolute isolated-worktree root, coder role, task
215
- file, task template, and the absolute INTENT.md path in that worktree.
255
+ file, task template, and the absolute INTENT.md path in the coordinator for
256
+ member tasks or in that worktree for coordinator tasks.
216
257
  Generate the coder's intent view with `python3 <absolute task_context.py>
217
- --repo <absolute isolated-worktree> --task <absolute task file>` and include
258
+ --repo <absolute coordinator root for member tasks, otherwise isolated-worktree>
259
+ --task <absolute live task copy for member tasks, otherwise isolated task file>` and include
218
260
  its output in the brief. The helper preserves all global rules and falls
219
261
  back to full intent when projection is ambiguous. Never summarize it by hand.
220
262
  Add no hidden implementation context; repair a
@@ -233,10 +275,15 @@ dispatch contract and perform steps 1–5 by hand.
233
275
  completion when it lands — never wait for slower in-flight tasks first;
234
276
  when several results wait, land them in task-id order.
235
277
 
236
- - For `ready`, compare the complete worktree diff to `base`. Permit only
237
- declared `files` plus append-only Log changes in that task file. Include
238
- additions, deletions, renames, and binary changes; an unexpected path
239
- blocks before any product commit.
278
+ - For a `ready` coordinator task, compare the complete worktree diff to
279
+ `base`. Permit only declared `files` plus append-only Log changes in that
280
+ task file. Include additions, deletions, renames, and binary changes; an
281
+ unexpected path blocks before any product commit.
282
+ - For a `ready` member task, compare the complete member sidecar diff to the
283
+ returned `member_base`. Permit only declared `files`, including additions,
284
+ deletions, renames, and binary changes. Separately check the returned live
285
+ task `copy` against the coordinator task contract for an append-only Log.
286
+ An unexpected path or Log change blocks before any product commit.
240
287
  - For a returned `ready` coder, run `python3 <absolute dispatch_driver.py>
241
288
  finish --repo <absolute primary> --task-id <id>`. This action works with
242
289
  native child tools; no child command is needed. It reproduces serial work
@@ -276,6 +323,7 @@ dispatch contract and perform steps 1–5 by hand.
276
323
  task to `blocked` or `failed`, revoke a parallel isolate's active dispatch
277
324
  with `python3 <absolute isolation.py> deactivate-task
278
325
  --repo <isolated worktree> --task-id <id> --task-branch <task_branch>`.
326
+ A member task keeps `pending` instead; follow the member retry in step 2.
279
327
  Then update and checkpoint the bookkeeping and apply the recovery
280
328
  rule. Preserve the isolated worktree unless and until the explicit clean
281
329
  retry-retirement procedure in step 2 owns and removes it.
@@ -10,7 +10,8 @@ change nothing outside your single output file.
10
10
  - Read AGENTS.md and the template before scanning. Stop on a missing path.
11
11
  - Write only the assigned output using the template. When the brief supplies a
12
12
  disposable root, write the output under that root at the relative handoff
13
- path; the orchestrator transfers it after validation. Do not ask the user
13
+ path; the orchestrator transfers it after validation. `Repo root` still names
14
+ the primary repo root, never the disposable root. Do not ask the user
14
15
  questions.
15
16
 
16
17
  ## What to establish
@@ -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
 
@@ -11,7 +11,8 @@ actually does. Read-only: change nothing outside your single output file.
11
11
  - Read AGENTS.md and the template before auditing. Stop on a missing path.
12
12
  - Write only the assigned output using the template. When the brief supplies a
13
13
  disposable root, write the output under that root at the relative handoff
14
- path; the orchestrator transfers it after validation. Do not ask the user
14
+ path; the orchestrator transfers it after validation. `Repo root` still names
15
+ the primary repo root, never the disposable root. Do not ask the user
15
16
  questions.
16
17
 
17
18
  ## Method
@@ -58,6 +59,11 @@ actually does. Read-only: change nothing outside your single output file.
58
59
  5. **Classify remediation** for every non-verified claim: `fix-doc`,
59
60
  `fix-code`, or `NEEDS-USER` when the right side of the conflict is not
60
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.
61
67
 
62
68
  ## Rules
63
69