@opengsd/gsd-path 1.3.0 → 1.4.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 (434) hide show
  1. package/AGENTS.md +2 -207
  2. package/CHANGELOG.md +294 -0
  3. package/DOCS.md +19 -10
  4. package/FULL.md +9 -3
  5. package/GUIDE.md +1 -1
  6. package/HOOKS.md +9 -6
  7. package/QUICK.md +4 -1
  8. package/README.md +63 -11
  9. package/RUNTIME.md +1 -1
  10. package/UPDATE.md +61 -12
  11. package/WORKFLOW.md +22 -6
  12. package/package.json +9 -8
  13. package/scripts/_common.py +472 -19
  14. package/scripts/archive_milestone.py +146 -73
  15. package/scripts/bootstrap_repository.py +8 -5
  16. package/scripts/build_recovery.py +4 -1
  17. package/scripts/build_state.py +66 -23
  18. package/scripts/check_docs_audit.py +14 -3
  19. package/scripts/check_handoffs.py +116 -20
  20. package/scripts/check_task_briefs.py +60 -8
  21. package/scripts/check_update.py +2 -2
  22. package/scripts/core_hook_gate.py +10 -1
  23. package/scripts/core_hook_settings.py +11 -4
  24. package/scripts/detect_project.py +345 -15
  25. package/scripts/discussion_records.py +19 -13
  26. package/scripts/discussion_validate.py +66 -21
  27. package/scripts/dispatch_driver.py +111 -26
  28. package/scripts/git_guard.py +116 -29
  29. package/scripts/guard_hook.py +151 -29
  30. package/scripts/install.mjs +55 -39
  31. package/scripts/install.py +564 -41
  32. package/scripts/integration.py +434 -24
  33. package/scripts/isolation.py +1077 -28
  34. package/scripts/lean_verification.py +99 -19
  35. package/scripts/loop_run.py +20 -30
  36. package/scripts/members.py +704 -0
  37. package/scripts/migrate_core.py +2 -2
  38. package/scripts/path_config.py +2 -2
  39. package/scripts/pipeline_diagnose.py +82 -31
  40. package/scripts/pipeline_git.py +61 -22
  41. package/scripts/pipeline_state.py +176 -54
  42. package/scripts/pipeline_undo.py +117 -22
  43. package/scripts/promote_lookahead.py +1 -1
  44. package/scripts/review_panel.py +1 -1
  45. package/scripts/runtime_store.py +49 -11
  46. package/scripts/skill-resources.json +28 -3
  47. package/scripts/state_checkpoint.py +140 -31
  48. package/scripts/state_promote.py +2 -0
  49. package/scripts/status_runtime.py +36 -6
  50. package/scripts/sync_skill_resources.py +8 -7
  51. package/scripts/token_budget.py +12 -8
  52. package/scripts/workflow_run.py +103 -29
  53. package/scripts/worktree_paths.py +18 -8
  54. package/skills/gsd-path/BUILD.md +7 -1
  55. package/skills/gsd-path/DECIDE.md +11 -4
  56. package/skills/gsd-path/DEFINE.md +8 -1
  57. package/skills/gsd-path/DOCS-AUDIT.md +6 -4
  58. package/skills/gsd-path/INSPECT.md +5 -4
  59. package/skills/gsd-path/PLAN.md +7 -1
  60. package/skills/gsd-path/RESEARCH.md +2 -1
  61. package/skills/gsd-path/ROADMAP.md +2 -1
  62. package/skills/gsd-path/SHIP.md +27 -10
  63. package/skills/gsd-path/SKILL.md +45 -1
  64. package/skills/gsd-path/references/build-native.md +47 -14
  65. package/skills/gsd-path/references/codebase-mapper.md +2 -1
  66. package/skills/gsd-path/references/docs-auditor.md +2 -1
  67. package/skills/gsd-path/references/operating-rules.md +214 -0
  68. package/skills/gsd-path/references/planner.md +8 -0
  69. package/skills/gsd-path/references/reviewer-wave.md +3 -1
  70. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  71. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  72. package/skills/gsd-path/scripts/_common.py +472 -19
  73. package/skills/gsd-path/scripts/archive_milestone.py +146 -73
  74. package/skills/gsd-path/scripts/bootstrap_repository.py +8 -5
  75. package/skills/gsd-path/scripts/build_recovery.py +4 -1
  76. package/skills/gsd-path/scripts/build_state.py +66 -23
  77. package/skills/gsd-path/scripts/check_docs_audit.py +14 -3
  78. package/skills/gsd-path/scripts/check_handoffs.py +116 -20
  79. package/skills/gsd-path/scripts/check_task_briefs.py +60 -8
  80. package/skills/gsd-path/scripts/check_update.py +2 -2
  81. package/skills/gsd-path/scripts/detect_project.py +345 -15
  82. package/skills/gsd-path/scripts/discussion_records.py +19 -13
  83. package/skills/gsd-path/scripts/discussion_validate.py +66 -21
  84. package/skills/gsd-path/scripts/dispatch_driver.py +111 -26
  85. package/skills/gsd-path/scripts/git_guard.py +116 -29
  86. package/skills/gsd-path/scripts/integration.py +434 -24
  87. package/skills/gsd-path/scripts/isolation.py +1077 -28
  88. package/skills/gsd-path/scripts/lean_verification.py +99 -19
  89. package/skills/gsd-path/scripts/loop_run.py +20 -30
  90. package/skills/gsd-path/scripts/members.py +704 -0
  91. package/skills/gsd-path/scripts/path_config.py +2 -2
  92. package/skills/gsd-path/scripts/pipeline_git.py +61 -22
  93. package/skills/gsd-path/scripts/pipeline_state.py +176 -54
  94. package/skills/gsd-path/scripts/promote_lookahead.py +1 -1
  95. package/skills/gsd-path/scripts/review_panel.py +1 -1
  96. package/skills/gsd-path/scripts/state_checkpoint.py +140 -31
  97. package/skills/gsd-path/scripts/state_promote.py +2 -0
  98. package/skills/gsd-path/scripts/status_runtime.py +36 -6
  99. package/skills/gsd-path/scripts/token_budget.py +12 -8
  100. package/skills/gsd-path/scripts/workflow_run.py +103 -29
  101. package/skills/gsd-path/scripts/worktree_paths.py +18 -8
  102. package/skills/gsd-path/templates/codebase.md +1 -1
  103. package/skills/gsd-path/templates/docs-audit.md +1 -1
  104. package/skills/gsd-path/templates/final-review.md +5 -2
  105. package/skills/gsd-path/templates/gap-review.md +2 -1
  106. package/skills/gsd-path/templates/task.md +1 -0
  107. package/skills/gsd-path/templates/wave-review.md +3 -1
  108. package/skills/gsd-path-build/SKILL.md +7 -1
  109. package/skills/gsd-path-build/references/build-native.md +47 -14
  110. package/skills/gsd-path-build/references/operating-rules.md +214 -0
  111. package/skills/gsd-path-build/references/reviewer-wave.md +3 -1
  112. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  113. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  114. package/skills/gsd-path-build/scripts/_common.py +472 -19
  115. package/skills/gsd-path-build/scripts/archive_milestone.py +146 -73
  116. package/skills/gsd-path-build/scripts/build_recovery.py +4 -1
  117. package/skills/gsd-path-build/scripts/build_state.py +66 -23
  118. package/skills/gsd-path-build/scripts/check_handoffs.py +116 -20
  119. package/skills/gsd-path-build/scripts/check_task_briefs.py +60 -8
  120. package/skills/gsd-path-build/scripts/detect_project.py +345 -15
  121. package/skills/gsd-path-build/scripts/discussion_records.py +19 -13
  122. package/skills/gsd-path-build/scripts/discussion_validate.py +66 -21
  123. package/skills/gsd-path-build/scripts/dispatch_driver.py +111 -26
  124. package/skills/gsd-path-build/scripts/integration.py +434 -24
  125. package/skills/gsd-path-build/scripts/isolation.py +1077 -28
  126. package/skills/gsd-path-build/scripts/loop_run.py +20 -30
  127. package/skills/gsd-path-build/scripts/members.py +704 -0
  128. package/skills/gsd-path-build/scripts/path_config.py +2 -2
  129. package/skills/gsd-path-build/scripts/pipeline_git.py +61 -22
  130. package/skills/gsd-path-build/scripts/pipeline_state.py +176 -54
  131. package/skills/gsd-path-build/scripts/promote_lookahead.py +1 -1
  132. package/skills/gsd-path-build/scripts/review_panel.py +1 -1
  133. package/skills/gsd-path-build/scripts/state_checkpoint.py +140 -31
  134. package/skills/gsd-path-build/scripts/state_promote.py +2 -0
  135. package/skills/gsd-path-build/scripts/token_budget.py +12 -8
  136. package/skills/gsd-path-build/scripts/workflow_run.py +103 -29
  137. package/skills/gsd-path-build/scripts/worktree_paths.py +18 -8
  138. package/skills/gsd-path-build/templates/task.md +1 -0
  139. package/skills/gsd-path-build/templates/wave-review.md +3 -1
  140. package/skills/gsd-path-decide/SKILL.md +11 -4
  141. package/skills/gsd-path-decide/references/operating-rules.md +214 -0
  142. package/skills/gsd-path-decide/scripts/_common.py +472 -19
  143. package/skills/gsd-path-decide/scripts/archive_milestone.py +146 -73
  144. package/skills/gsd-path-decide/scripts/build_recovery.py +4 -1
  145. package/skills/gsd-path-decide/scripts/check_handoffs.py +116 -20
  146. package/skills/gsd-path-decide/scripts/check_task_briefs.py +60 -8
  147. package/skills/gsd-path-decide/scripts/detect_project.py +345 -15
  148. package/skills/gsd-path-decide/scripts/discussion_records.py +19 -13
  149. package/skills/gsd-path-decide/scripts/discussion_validate.py +66 -21
  150. package/skills/gsd-path-decide/scripts/integration.py +434 -24
  151. package/skills/gsd-path-decide/scripts/isolation.py +1077 -28
  152. package/skills/gsd-path-decide/scripts/loop_run.py +20 -30
  153. package/skills/gsd-path-decide/scripts/members.py +704 -0
  154. package/skills/gsd-path-decide/scripts/path_config.py +2 -2
  155. package/skills/gsd-path-decide/scripts/pipeline_git.py +61 -22
  156. package/skills/gsd-path-decide/scripts/pipeline_state.py +176 -54
  157. package/skills/gsd-path-decide/scripts/promote_lookahead.py +1 -1
  158. package/skills/gsd-path-decide/scripts/review_panel.py +1 -1
  159. package/skills/gsd-path-decide/scripts/state_checkpoint.py +140 -31
  160. package/skills/gsd-path-decide/scripts/state_promote.py +2 -0
  161. package/skills/gsd-path-decide/scripts/worktree_paths.py +18 -8
  162. package/skills/gsd-path-define/SKILL.md +8 -1
  163. package/skills/gsd-path-define/references/operating-rules.md +214 -0
  164. package/skills/gsd-path-define/scripts/_common.py +472 -19
  165. package/skills/gsd-path-define/scripts/archive_milestone.py +146 -73
  166. package/skills/gsd-path-define/scripts/build_recovery.py +4 -1
  167. package/skills/gsd-path-define/scripts/check_handoffs.py +116 -20
  168. package/skills/gsd-path-define/scripts/check_task_briefs.py +60 -8
  169. package/skills/gsd-path-define/scripts/detect_project.py +345 -15
  170. package/skills/gsd-path-define/scripts/discussion_records.py +19 -13
  171. package/skills/gsd-path-define/scripts/discussion_validate.py +66 -21
  172. package/skills/gsd-path-define/scripts/integration.py +434 -24
  173. package/skills/gsd-path-define/scripts/isolation.py +1077 -28
  174. package/skills/gsd-path-define/scripts/loop_run.py +20 -30
  175. package/skills/gsd-path-define/scripts/members.py +704 -0
  176. package/skills/gsd-path-define/scripts/path_config.py +2 -2
  177. package/skills/gsd-path-define/scripts/pipeline_git.py +61 -22
  178. package/skills/gsd-path-define/scripts/pipeline_state.py +176 -54
  179. package/skills/gsd-path-define/scripts/promote_lookahead.py +1 -1
  180. package/skills/gsd-path-define/scripts/review_panel.py +1 -1
  181. package/skills/gsd-path-define/scripts/state_checkpoint.py +140 -31
  182. package/skills/gsd-path-define/scripts/state_promote.py +2 -0
  183. package/skills/gsd-path-define/scripts/worktree_paths.py +18 -8
  184. package/skills/gsd-path-discuss/SKILL.md +2 -1
  185. package/skills/gsd-path-discuss/references/operating-rules.md +214 -0
  186. package/skills/gsd-path-discuss/scripts/_common.py +472 -19
  187. package/skills/gsd-path-discuss/scripts/discussion_records.py +19 -13
  188. package/skills/gsd-path-discuss/scripts/loop_run.py +20 -30
  189. package/skills/gsd-path-discuss/scripts/path_config.py +2 -2
  190. package/skills/gsd-path-discuss/scripts/review_panel.py +1 -1
  191. package/skills/gsd-path-discuss/scripts/worktree_paths.py +18 -8
  192. package/skills/gsd-path-docs-audit/SKILL.md +6 -4
  193. package/skills/gsd-path-docs-audit/references/docs-auditor.md +2 -1
  194. package/skills/gsd-path-docs-audit/references/operating-rules.md +214 -0
  195. package/skills/gsd-path-docs-audit/scripts/_common.py +472 -19
  196. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +146 -73
  197. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +4 -1
  198. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +14 -3
  199. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +116 -20
  200. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +60 -8
  201. package/skills/gsd-path-docs-audit/scripts/detect_project.py +345 -15
  202. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +19 -13
  203. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +66 -21
  204. package/skills/gsd-path-docs-audit/scripts/integration.py +434 -24
  205. package/skills/gsd-path-docs-audit/scripts/isolation.py +1077 -28
  206. package/skills/gsd-path-docs-audit/scripts/loop_run.py +20 -30
  207. package/skills/gsd-path-docs-audit/scripts/members.py +704 -0
  208. package/skills/gsd-path-docs-audit/scripts/path_config.py +2 -2
  209. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +61 -22
  210. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +176 -54
  211. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +1 -1
  212. package/skills/gsd-path-docs-audit/scripts/review_panel.py +1 -1
  213. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +140 -31
  214. package/skills/gsd-path-docs-audit/scripts/state_promote.py +2 -0
  215. package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +18 -8
  216. package/skills/gsd-path-docs-audit/templates/docs-audit.md +1 -1
  217. package/skills/gsd-path-forensics/SKILL.md +2 -1
  218. package/skills/gsd-path-forensics/references/operating-rules.md +214 -0
  219. package/skills/gsd-path-forensics/scripts/_common.py +472 -19
  220. package/skills/gsd-path-forensics/scripts/discussion_records.py +19 -13
  221. package/skills/gsd-path-forensics/scripts/loop_run.py +20 -30
  222. package/skills/gsd-path-forensics/scripts/path_config.py +2 -2
  223. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +82 -31
  224. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +117 -22
  225. package/skills/gsd-path-forensics/scripts/review_panel.py +1 -1
  226. package/skills/gsd-path-forensics/scripts/worktree_paths.py +18 -8
  227. package/skills/gsd-path-inspect/SKILL.md +5 -4
  228. package/skills/gsd-path-inspect/references/codebase-mapper.md +2 -1
  229. package/skills/gsd-path-inspect/references/docs-auditor.md +2 -1
  230. package/skills/gsd-path-inspect/references/operating-rules.md +214 -0
  231. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  232. package/skills/gsd-path-inspect/scripts/_common.py +472 -19
  233. package/skills/gsd-path-inspect/scripts/archive_milestone.py +146 -73
  234. package/skills/gsd-path-inspect/scripts/build_recovery.py +4 -1
  235. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +14 -3
  236. package/skills/gsd-path-inspect/scripts/check_handoffs.py +116 -20
  237. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +60 -8
  238. package/skills/gsd-path-inspect/scripts/detect_project.py +345 -15
  239. package/skills/gsd-path-inspect/scripts/discussion_records.py +19 -13
  240. package/skills/gsd-path-inspect/scripts/discussion_validate.py +66 -21
  241. package/skills/gsd-path-inspect/scripts/integration.py +434 -24
  242. package/skills/gsd-path-inspect/scripts/isolation.py +1077 -28
  243. package/skills/gsd-path-inspect/scripts/loop_run.py +20 -30
  244. package/skills/gsd-path-inspect/scripts/members.py +704 -0
  245. package/skills/gsd-path-inspect/scripts/path_config.py +2 -2
  246. package/skills/gsd-path-inspect/scripts/pipeline_git.py +61 -22
  247. package/skills/gsd-path-inspect/scripts/pipeline_state.py +176 -54
  248. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +1 -1
  249. package/skills/gsd-path-inspect/scripts/review_panel.py +1 -1
  250. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +140 -31
  251. package/skills/gsd-path-inspect/scripts/state_promote.py +2 -0
  252. package/skills/gsd-path-inspect/scripts/workflow_run.py +103 -29
  253. package/skills/gsd-path-inspect/scripts/worktree_paths.py +18 -8
  254. package/skills/gsd-path-inspect/templates/codebase.md +1 -1
  255. package/skills/gsd-path-inspect/templates/docs-audit.md +1 -1
  256. package/skills/gsd-path-loop/SKILL.md +2 -1
  257. package/skills/gsd-path-loop/references/operating-rules.md +214 -0
  258. package/skills/gsd-path-loop/scripts/_common.py +472 -19
  259. package/skills/gsd-path-loop/scripts/discussion_records.py +19 -13
  260. package/skills/gsd-path-loop/scripts/loop_run.py +20 -30
  261. package/skills/gsd-path-loop/scripts/path_config.py +2 -2
  262. package/skills/gsd-path-loop/scripts/review_panel.py +1 -1
  263. package/skills/gsd-path-loop/scripts/worktree_paths.py +18 -8
  264. package/skills/gsd-path-migrate/SKILL.md +2 -1
  265. package/skills/gsd-path-migrate/references/operating-rules.md +214 -0
  266. package/skills/gsd-path-migrate/scripts/_common.py +472 -19
  267. package/skills/gsd-path-migrate/scripts/core_hook_gate.py +10 -1
  268. package/skills/gsd-path-migrate/scripts/core_hook_settings.py +11 -4
  269. package/skills/gsd-path-migrate/scripts/discussion_records.py +19 -13
  270. package/skills/gsd-path-migrate/scripts/loop_run.py +20 -30
  271. package/skills/gsd-path-migrate/scripts/migrate_core.py +2 -2
  272. package/skills/gsd-path-migrate/scripts/path_config.py +2 -2
  273. package/skills/gsd-path-migrate/scripts/review_panel.py +1 -1
  274. package/skills/gsd-path-plan/SKILL.md +7 -1
  275. package/skills/gsd-path-plan/references/operating-rules.md +214 -0
  276. package/skills/gsd-path-plan/references/planner.md +8 -0
  277. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  278. package/skills/gsd-path-plan/scripts/_common.py +472 -19
  279. package/skills/gsd-path-plan/scripts/archive_milestone.py +146 -73
  280. package/skills/gsd-path-plan/scripts/build_recovery.py +4 -1
  281. package/skills/gsd-path-plan/scripts/check_handoffs.py +116 -20
  282. package/skills/gsd-path-plan/scripts/check_task_briefs.py +60 -8
  283. package/skills/gsd-path-plan/scripts/detect_project.py +345 -15
  284. package/skills/gsd-path-plan/scripts/discussion_records.py +19 -13
  285. package/skills/gsd-path-plan/scripts/discussion_validate.py +66 -21
  286. package/skills/gsd-path-plan/scripts/integration.py +434 -24
  287. package/skills/gsd-path-plan/scripts/isolation.py +1077 -28
  288. package/skills/gsd-path-plan/scripts/loop_run.py +20 -30
  289. package/skills/gsd-path-plan/scripts/members.py +704 -0
  290. package/skills/gsd-path-plan/scripts/path_config.py +2 -2
  291. package/skills/gsd-path-plan/scripts/pipeline_git.py +61 -22
  292. package/skills/gsd-path-plan/scripts/pipeline_state.py +176 -54
  293. package/skills/gsd-path-plan/scripts/promote_lookahead.py +1 -1
  294. package/skills/gsd-path-plan/scripts/review_panel.py +1 -1
  295. package/skills/gsd-path-plan/scripts/state_checkpoint.py +140 -31
  296. package/skills/gsd-path-plan/scripts/state_promote.py +2 -0
  297. package/skills/gsd-path-plan/scripts/workflow_run.py +103 -29
  298. package/skills/gsd-path-plan/scripts/worktree_paths.py +18 -8
  299. package/skills/gsd-path-plan/templates/task.md +1 -0
  300. package/skills/gsd-path-research/SKILL.md +2 -1
  301. package/skills/gsd-path-research/references/operating-rules.md +214 -0
  302. package/skills/gsd-path-research/scripts/_common.py +472 -19
  303. package/skills/gsd-path-research/scripts/archive_milestone.py +146 -73
  304. package/skills/gsd-path-research/scripts/build_recovery.py +4 -1
  305. package/skills/gsd-path-research/scripts/check_handoffs.py +116 -20
  306. package/skills/gsd-path-research/scripts/check_task_briefs.py +60 -8
  307. package/skills/gsd-path-research/scripts/detect_project.py +345 -15
  308. package/skills/gsd-path-research/scripts/discussion_records.py +19 -13
  309. package/skills/gsd-path-research/scripts/discussion_validate.py +66 -21
  310. package/skills/gsd-path-research/scripts/integration.py +434 -24
  311. package/skills/gsd-path-research/scripts/isolation.py +1077 -28
  312. package/skills/gsd-path-research/scripts/loop_run.py +20 -30
  313. package/skills/gsd-path-research/scripts/members.py +704 -0
  314. package/skills/gsd-path-research/scripts/path_config.py +2 -2
  315. package/skills/gsd-path-research/scripts/pipeline_git.py +61 -22
  316. package/skills/gsd-path-research/scripts/pipeline_state.py +176 -54
  317. package/skills/gsd-path-research/scripts/promote_lookahead.py +1 -1
  318. package/skills/gsd-path-research/scripts/review_panel.py +1 -1
  319. package/skills/gsd-path-research/scripts/state_checkpoint.py +140 -31
  320. package/skills/gsd-path-research/scripts/state_promote.py +2 -0
  321. package/skills/gsd-path-research/scripts/worktree_paths.py +18 -8
  322. package/skills/gsd-path-roadmap/SKILL.md +2 -1
  323. package/skills/gsd-path-roadmap/references/operating-rules.md +214 -0
  324. package/skills/gsd-path-roadmap/scripts/_common.py +472 -19
  325. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +146 -73
  326. package/skills/gsd-path-roadmap/scripts/build_recovery.py +4 -1
  327. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +116 -20
  328. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +60 -8
  329. package/skills/gsd-path-roadmap/scripts/detect_project.py +345 -15
  330. package/skills/gsd-path-roadmap/scripts/discussion_records.py +19 -13
  331. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +66 -21
  332. package/skills/gsd-path-roadmap/scripts/integration.py +434 -24
  333. package/skills/gsd-path-roadmap/scripts/isolation.py +1077 -28
  334. package/skills/gsd-path-roadmap/scripts/loop_run.py +20 -30
  335. package/skills/gsd-path-roadmap/scripts/members.py +704 -0
  336. package/skills/gsd-path-roadmap/scripts/path_config.py +2 -2
  337. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +61 -22
  338. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +176 -54
  339. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +1 -1
  340. package/skills/gsd-path-roadmap/scripts/review_panel.py +1 -1
  341. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +140 -31
  342. package/skills/gsd-path-roadmap/scripts/state_promote.py +2 -0
  343. package/skills/gsd-path-roadmap/scripts/worktree_paths.py +18 -8
  344. package/skills/gsd-path-ship/SKILL.md +27 -10
  345. package/skills/gsd-path-ship/references/operating-rules.md +214 -0
  346. package/skills/gsd-path-ship/references/reviewer-wave.md +3 -1
  347. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  348. package/skills/gsd-path-ship/scripts/_common.py +472 -19
  349. package/skills/gsd-path-ship/scripts/archive_milestone.py +146 -73
  350. package/skills/gsd-path-ship/scripts/build_recovery.py +4 -1
  351. package/skills/gsd-path-ship/scripts/build_state.py +66 -23
  352. package/skills/gsd-path-ship/scripts/check_handoffs.py +116 -20
  353. package/skills/gsd-path-ship/scripts/check_task_briefs.py +60 -8
  354. package/skills/gsd-path-ship/scripts/detect_project.py +345 -15
  355. package/skills/gsd-path-ship/scripts/discussion_records.py +19 -13
  356. package/skills/gsd-path-ship/scripts/discussion_validate.py +66 -21
  357. package/skills/gsd-path-ship/scripts/integration.py +434 -24
  358. package/skills/gsd-path-ship/scripts/isolation.py +1077 -28
  359. package/skills/gsd-path-ship/scripts/lean_verification.py +99 -19
  360. package/skills/gsd-path-ship/scripts/loop_run.py +20 -30
  361. package/skills/gsd-path-ship/scripts/members.py +704 -0
  362. package/skills/gsd-path-ship/scripts/path_config.py +2 -2
  363. package/skills/gsd-path-ship/scripts/pipeline_git.py +61 -22
  364. package/skills/gsd-path-ship/scripts/pipeline_state.py +176 -54
  365. package/skills/gsd-path-ship/scripts/promote_lookahead.py +1 -1
  366. package/skills/gsd-path-ship/scripts/review_panel.py +1 -1
  367. package/skills/gsd-path-ship/scripts/state_checkpoint.py +140 -31
  368. package/skills/gsd-path-ship/scripts/state_promote.py +2 -0
  369. package/skills/gsd-path-ship/scripts/workflow_run.py +103 -29
  370. package/skills/gsd-path-ship/scripts/worktree_paths.py +18 -8
  371. package/skills/gsd-path-ship/templates/final-review.md +5 -2
  372. package/skills/gsd-path-ship/templates/gap-review.md +2 -1
  373. package/skills/gsd-path-ship/templates/wave-review.md +3 -1
  374. package/skills/gsd-path-undo/SKILL.md +2 -1
  375. package/skills/gsd-path-undo/references/operating-rules.md +214 -0
  376. package/skills/gsd-path-undo/scripts/_common.py +472 -19
  377. package/skills/gsd-path-undo/scripts/discussion_records.py +19 -13
  378. package/skills/gsd-path-undo/scripts/loop_run.py +20 -30
  379. package/skills/gsd-path-undo/scripts/path_config.py +2 -2
  380. package/skills/gsd-path-undo/scripts/pipeline_undo.py +117 -22
  381. package/skills/gsd-path-undo/scripts/review_panel.py +1 -1
  382. package/skills/gsd-path-undo/scripts/worktree_paths.py +18 -8
  383. package/skills/path/BUILD.md +7 -1
  384. package/skills/path/DECIDE.md +11 -4
  385. package/skills/path/DEFINE.md +8 -1
  386. package/skills/path/DOCS-AUDIT.md +6 -4
  387. package/skills/path/INSPECT.md +5 -4
  388. package/skills/path/PLAN.md +7 -1
  389. package/skills/path/RESEARCH.md +2 -1
  390. package/skills/path/ROADMAP.md +2 -1
  391. package/skills/path/SHIP.md +27 -10
  392. package/skills/path/SKILL.md +45 -1
  393. package/skills/path/references/build-native.md +47 -14
  394. package/skills/path/references/codebase-mapper.md +2 -1
  395. package/skills/path/references/docs-auditor.md +2 -1
  396. package/skills/path/references/operating-rules.md +214 -0
  397. package/skills/path/references/planner.md +8 -0
  398. package/skills/path/references/reviewer-wave.md +3 -1
  399. package/skills/path/scripts/_common.py +472 -19
  400. package/skills/path/scripts/archive_milestone.py +146 -73
  401. package/skills/path/scripts/bootstrap_repository.py +8 -5
  402. package/skills/path/scripts/build_recovery.py +4 -1
  403. package/skills/path/scripts/build_state.py +66 -23
  404. package/skills/path/scripts/check_docs_audit.py +14 -3
  405. package/skills/path/scripts/check_handoffs.py +116 -20
  406. package/skills/path/scripts/check_task_briefs.py +60 -8
  407. package/skills/path/scripts/check_update.py +2 -2
  408. package/skills/path/scripts/detect_project.py +345 -15
  409. package/skills/path/scripts/discussion_records.py +19 -13
  410. package/skills/path/scripts/discussion_validate.py +66 -21
  411. package/skills/path/scripts/dispatch_driver.py +111 -26
  412. package/skills/path/scripts/git_guard.py +116 -29
  413. package/skills/path/scripts/integration.py +434 -24
  414. package/skills/path/scripts/isolation.py +1077 -28
  415. package/skills/path/scripts/lean_verification.py +99 -19
  416. package/skills/path/scripts/loop_run.py +20 -30
  417. package/skills/path/scripts/members.py +704 -0
  418. package/skills/path/scripts/path_config.py +2 -2
  419. package/skills/path/scripts/pipeline_git.py +61 -22
  420. package/skills/path/scripts/pipeline_state.py +176 -54
  421. package/skills/path/scripts/promote_lookahead.py +1 -1
  422. package/skills/path/scripts/review_panel.py +1 -1
  423. package/skills/path/scripts/state_checkpoint.py +140 -31
  424. package/skills/path/scripts/state_promote.py +2 -0
  425. package/skills/path/scripts/status_runtime.py +36 -6
  426. package/skills/path/scripts/token_budget.py +12 -8
  427. package/skills/path/scripts/workflow_run.py +103 -29
  428. package/skills/path/scripts/worktree_paths.py +18 -8
  429. package/skills/path/templates/codebase.md +1 -1
  430. package/skills/path/templates/docs-audit.md +1 -1
  431. package/skills/path/templates/final-review.md +5 -2
  432. package/skills/path/templates/gap-review.md +2 -1
  433. package/skills/path/templates/task.md +1 -0
  434. package/skills/path/templates/wave-review.md +3 -1
@@ -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:
@@ -82,9 +82,12 @@ dispatch contract and perform steps 1–5 by hand.
82
82
  - `recovered`: the task is landed (`land` already stamped `status: done`
83
83
  and `base`). Retire a still-present task worktree with `isolation.py
84
84
  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.
85
+ branch. If the checkout directory is absent and `task_branch` remains,
86
+ finish its proven interrupted retirement with `retire --branch
87
+ <task_branch> --force --landed-commit <commit>`. This also clears a stale
88
+ registration at that task's sidecar path after the landing proof passes;
89
+ a locked registration fails without deleting the branch. Both absent is
90
+ valid.
88
91
  - `resume`: continue from the returned `base`, `task_branch`, and worktree
89
92
  (the primary itself when no task branch exists); when the report shows
90
93
  the worktree absent, return the task to `pending` only when ownership is
@@ -171,7 +174,17 @@ dispatch contract and perform steps 1–5 by hand.
171
174
  then create the retry. If retirement was interrupted after removing the
172
175
  worktree, rerun the same command; the recorded failed or blocked task and
173
176
  its exact base prove the remaining branch before deletion. Create the retry
174
- from the new clean primary HEAD. After
177
+ from the new clean primary HEAD. A member task (`repo: <member>`) stays
178
+ `pending` in the coordinator; its rejected attempt lives in the member
179
+ sidecar. Copy the live copy's Log delta into the coordinator task file,
180
+ checkpoint it, then retire the sidecar with `python3 <absolute isolation.py>
181
+ retire-member-task --repo <absolute primary> --member <member> --task-id
182
+ <id> --task-file <task path> --force`. It refuses until the committed task
183
+ file holds that delta, and a rerun finishes an interrupted retirement. A
184
+ copy that fails the append-only check holds no trusted delta: record your
185
+ own rejection evidence in the coordinator task Log and checkpoint it, as for
186
+ a coordinator diff rejection; retirement then reports `copy_rejected`. The
187
+ next `prepare-task` creates the retry sidecar at the member bound tip. After
175
188
  resolving a recoverable `build/blocked` condition, use
176
189
  `pipeline_state.py transition` with the blocked state and bound branch as
177
190
  expected fields to set `build/active` and log the resolution. Checkpoint it
@@ -190,12 +203,14 @@ dispatch contract and perform steps 1–5 by hand.
190
203
  the base. Then isolate each ready task with
191
204
  `python3 <absolute workflow_run.py> prepare-task --repo <absolute primary>
192
205
  --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.
206
+ number of tasks in this dispatch round. For a coordinator task, serial
207
+ (`N=1`) returns the primary worktree and `task_branch: null` — the coder
208
+ works on the bound branch.
195
209
  The runner also creates a named verification sidecar at this clean base
196
210
  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
211
+ For a coordinator task, parallel (`N>=2`) creates a named
212
+ `gsd-path-task/<id>` branch and linked worktree at that base; never a
213
+ detached HEAD. Record dispatch through
199
214
  `python3 <absolute isolation.py> activate-task --repo <returned worktree>
200
215
  --base <recorded base> --task-id <id> --agent build_<id> --task-file
201
216
  <exact selected task-file path> [--task-branch <returned task_branch>]`.
@@ -207,14 +222,26 @@ dispatch contract and perform steps 1–5 by hand.
207
222
  round. Do not append a dispatch Log entry: the isolated task later appends
208
223
  at that location, and two parallel appends make the cherry-pick ambiguous. Reuse a retained worktree only when
209
224
  its recorded base, branch, and task agree exactly.
225
+ A member task (`repo: <member>`) returns `mode: member` from
226
+ `prepare-task`: a member sidecar at the member bound tip, with no
227
+ coordinator verify sidecar. Record its dispatch with `python3 <absolute
228
+ isolation.py> activate-member-task --repo <absolute primary> --member
229
+ <member> --task-id <id> --agent build_<id> --task-file <exact task-file
230
+ path> --base <recorded base>`. It writes the live task copy (returned as
231
+ `copy`) inside the member sidecar; the coordinator task file stays
232
+ unchanged. Brief the coder with the member sidecar root and that live copy
233
+ as its task file, plus the coordinator's INTENT.md. Step 5's `finish` lands
234
+ it in the member and records it in the coordinator.
210
235
 
211
236
  4. **Dispatch the round.** Following the local runtime dispatch contract,
212
237
  spawn one implementation-capable child per task with deterministic logical
213
238
  task name `build_<task_id>`.
214
239
  Its brief contains the absolute isolated-worktree root, coder role, task
215
- file, task template, and the absolute INTENT.md path in that worktree.
240
+ file, task template, and the absolute INTENT.md path in the coordinator for
241
+ member tasks or in that worktree for coordinator tasks.
216
242
  Generate the coder's intent view with `python3 <absolute task_context.py>
217
- --repo <absolute isolated-worktree> --task <absolute task file>` and include
243
+ --repo <absolute coordinator root for member tasks, otherwise isolated-worktree>
244
+ --task <absolute live task copy for member tasks, otherwise isolated task file>` and include
218
245
  its output in the brief. The helper preserves all global rules and falls
219
246
  back to full intent when projection is ambiguous. Never summarize it by hand.
220
247
  Add no hidden implementation context; repair a
@@ -233,10 +260,15 @@ dispatch contract and perform steps 1–5 by hand.
233
260
  completion when it lands — never wait for slower in-flight tasks first;
234
261
  when several results wait, land them in task-id order.
235
262
 
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.
263
+ - For a `ready` coordinator task, compare the complete worktree diff to
264
+ `base`. Permit only declared `files` plus append-only Log changes in that
265
+ task file. Include additions, deletions, renames, and binary changes; an
266
+ unexpected path blocks before any product commit.
267
+ - For a `ready` member task, compare the complete member sidecar diff to the
268
+ returned `member_base`. Permit only declared `files`, including additions,
269
+ deletions, renames, and binary changes. Separately check the returned live
270
+ task `copy` against the coordinator task contract for an append-only Log.
271
+ An unexpected path or Log change blocks before any product commit.
240
272
  - For a returned `ready` coder, run `python3 <absolute dispatch_driver.py>
241
273
  finish --repo <absolute primary> --task-id <id>`. This action works with
242
274
  native child tools; no child command is needed. It reproduces serial work
@@ -276,6 +308,7 @@ dispatch contract and perform steps 1–5 by hand.
276
308
  task to `blocked` or `failed`, revoke a parallel isolate's active dispatch
277
309
  with `python3 <absolute isolation.py> deactivate-task
278
310
  --repo <isolated worktree> --task-id <id> --task-branch <task_branch>`.
311
+ A member task keeps `pending` instead; follow the member retry in step 2.
279
312
  Then update and checkpoint the bookkeeping and apply the recovery
280
313
  rule. Preserve the isolated worktree unless and until the explicit clean
281
314
  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
@@ -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
@@ -0,0 +1,214 @@
1
+ # Operating rules for phase work
2
+
3
+ These rules extend the project `AGENTS.md` block. Every GSD Path skill
4
+ bundles this file; spawned agents follow their role brief instead.
5
+
6
+ ## Files and state
7
+
8
+ - `.project/discuss/DIALOGUE.md` and `.project/discuss/ANSWERS.md` are the
9
+ append-only memory for any-phase discussion. Read them before continuing an
10
+ existing thread; never treat chat history alone as durable context.
11
+ - The discussion skill never commits. Every phase orchestrator treats only
12
+ complete append-only discussion records as expected bookkeeping and includes
13
+ them in its next normal `.project/` checkpoint; build does so before its next
14
+ clean layer base, and ship includes them in its transaction.
15
+ - Write every output to the handoff path in WORKFLOW.md, using the absolute
16
+ bundled template path supplied by the active phase skill. An output that
17
+ needs verbal explanation is defective.
18
+ - With no `.project/STATE.md`, route through the bundled
19
+ `scripts/detect_project.py initialize --repo <absolute-root> --template
20
+ <absolute-state-template> --require-git` helper; `route: setup-repository`
21
+ leaves the invocation folder unchanged and routes to repository setup before
22
+ state creation or branch binding. Never delete the invocation folder or its
23
+ state to satisfy bootstrap path checks. Do not classify from a directory listing
24
+ or conversation. Follow its JSON `verdict` and `route`. Reserve `classify`
25
+ for read-only inspection; do not use it as a state-initialization preflight.
26
+ - `.project/STATE.md` tracks phase position. Parse and validate it only with
27
+ the bundled `scripts/pipeline_state.py validate` command, route with its
28
+ `route` command, and make ordinary phase transitions only with its
29
+ expected-state `transition`. A journaled transaction helper may write only
30
+ the state fields its contract explicitly owns. Never reproduce these
31
+ deterministic operations in model reasoning. The
32
+ orchestrator alone owns task frontmatter base, isolated worktree/branch,
33
+ status, and agent; the landing commit is proven from git by `isolation.py
34
+ recover`, never recorded. Require `pipeline: gsd-path/v2`; never
35
+ consume an ambiguous or differently owned state file. Artifacts outrank
36
+ summaries; reconcile STATE.md when it disagrees with task frontmatter.
37
+ During a program build, `.project/next/STATE.md` may hold
38
+ the lookahead planning track for the next milestone; it follows the same
39
+ marker rule, owns no task frontmatter, and never binds a branch.
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
43
+ preserves explicit override provenance. Older v2 state defaults to `direct`,
44
+ and modes may be changed only through `pipeline_state.py
45
+ configure-integration` before build. A next milestone resets its current
46
+ choice from the project default.
47
+ - Spawned agents have isolated context. Follow the installed runtime dispatch
48
+ contract and brief them with exact input and output paths, constraints, a
49
+ deterministic logical task name, and a bounded responsibility. Independent
50
+ briefs may run in parallel up to available child capacity; a dependent
51
+ brief runs as soon as its dependencies complete.
52
+
53
+ ## Stay in role
54
+
55
+ - The codebase mapper and docs auditor observe and verify; they are strictly
56
+ read-only, report observations rather than judgments, and never resolve a
57
+ doc-vs-code conflict — that ruling belongs to the user.
58
+ - Build, test, lint, and help commands are not presumed read-safe. Read-only
59
+ roles run project commands only in orchestrator-created disposable worktrees
60
+ at a recorded revision; otherwise they use static evidence or mark the check
61
+ unverifiable. They never create worktrees or run commands in the source tree.
62
+ - Researchers gather evidence; they do not decide. A dimension is researched
63
+ only when it has open questions; the research phase records dispatched and
64
+ skipped dimensions. Brownfield adds `evidence-codebase.md` as settled input.
65
+ - The decider works from existing evidence; it does not re-research. An
66
+ unresolved or uncited required decision fails the synthesis gate.
67
+ - The planner reads both INTENT.md and SYNTHESIS.md and specs
68
+ deliverable-sized outcomes and constraints; every INTENT success criterion
69
+ maps to a task AC and Verify in PLAN.md Intent coverage. Coders own
70
+ implementation decisions inside those bounds.
71
+ - Coders implement only their full task contract, including owned INTENT
72
+ success criteria read from INTENT.md, and append their result to the
73
+ task Log. They never change task state, review acceptance, stage, commit, or
74
+ freelance outside declared files.
75
+ - The orchestrator dispatches, arbitrates, and creates task isolation and
76
+ verify sidecars through the bundled `scripts/isolation.py` helper — named
77
+ branches only, never a detached HEAD — lands task work serially, and
78
+ records each clean base in task frontmatter; `land` stamps the landed
79
+ state into the task's own commit, so a task has exactly one commit. It
80
+ writes no product code. When a done task's work already sits on the bound
81
+ branch without a landing commit, only an explicit owner ruling through
82
+ `isolation.py attest` may stand in for it: one `.project/`-only commit that
83
+ names the base, the attested HEAD, the declared files that changed, the
84
+ task Verify recorded as passing at that HEAD, and the ruling verbatim.
85
+ `recover` reports it as `attested`, never as a proven landing.
86
+ - All pipeline work for a milestone lives on `gsd-path/M00N` (M001, M002,
87
+ …) bound in STATE.branch. The next milestone binds a new unused
88
+ `gsd-path/M00N` at the remote default after the previous ship integrates.
89
+ Integration at ship is the only path from the bound branch to the default
90
+ branch — either Path's direct merge or a Path-owned PR merged by the user.
91
+ The bound branch never receives merges or back-merges and is never the
92
+ GitHub default.
93
+ - After initialization writes STATE.md, and before entering the first pipeline
94
+ phase in an existing Git repository, the router calls
95
+ `scripts/pipeline_git.py bind-initial` with the selected M00N and exact
96
+ fetched `origin/main` SHA. The helper alone checks worktree identity and
97
+ cleanliness, exact base, and every local, remote, and other-worktree
98
+ collision before creating or adopting the branch. The sole cleanliness
99
+ exception is untracked `.project/STATE.md`: validated v2 state in active
100
+ inspect or define, with null milestone, branch, and archive, in a real
101
+ directory containing only that regular file with no hard links. The helper
102
+ checks its identity and bytes across binding. Do not commit initialization
103
+ before binding. The router persists its
104
+ typed result in the new state. Build has no branch-creation authority.
105
+ - After `validate-integrated` passes and before any next-milestone file
106
+ changes, the router calls the bundled `scripts/pipeline_git.py bind-next`
107
+ helper with the previous bound branch, exact ship SHA, and exact current
108
+ `origin/main` SHA. The helper moves the clean primary worktree to the new
109
+ unused `gsd-path/M00N` branch at that SHA without moving the previous
110
+ branch or entering the default checkout, then retires the integrated
111
+ previous branch — deleted locally and on origin; the ship commit stays
112
+ reachable from the integration merge and its annotated tag. The router
113
+ persists the new branch in STATE; a wrong-SHA or colliding branch blocks.
114
+ After validated PR integration, `bind-next --allow-missing-previous` may
115
+ retire only the local previous branch when GitHub already auto-deleted its
116
+ remote branch.
117
+ `bind-initial`, this handoff, and the approved new-repository bootstrap are
118
+ the only bound-branch creation authorities, and the handoff's retirement
119
+ push is the router's only bound-branch deletion authority. When a lookahead
120
+ track exists, the router then calls `scripts/pipeline_state.py promote-next`;
121
+ only that journaled helper moves the track, updates state and roadmap,
122
+ classifies plan drift, and writes the router promotion commit.
123
+ - Build adopts the branch recorded in STATE.branch, never whatever is current
124
+ when a recorded branch exists. A new-GitHub REPOSITORY.md proves the
125
+ default checkout and first bound branch; later milestones may rebind
126
+ `gsd-path/M00N` without rewriting that artifact. Build ignores older
127
+ milestone ship and integrate commits inherited through main. A ship commit
128
+ for the current STATE.branch milestone must be an ancestor of origin/main;
129
+ if it is not, that milestone's integration is incomplete and control routes
130
+ to ship, not build. Direct mode requires the matching canonical `integrate:`
131
+ commit; PR mode requires tag metadata and a two-parent merge whose second
132
+ parent is the ship commit. A null branch returns
133
+ to the router; build never creates, selects, switches, or rebinds it.
134
+ - The ship phase makes exactly one commit on the bound branch — the
135
+ `.project/`-only ship commit recording
136
+ STATE.md, the final-review artifacts, and the archive — and additionally
137
+ owns the integration leg. Direct mode creates and pushes one `--no-ff` merge
138
+ onto `main` with subject
139
+ `integrate: M00N — merge gsd-path/M00N into main`. Pull-request mode creates
140
+ or reuses one GitHub.com PR and waits for the user to merge it with a merge
141
+ commit; it never auto-merges. Both modes create one annotated
142
+ `milestone/<NNN>-<slug>` tag after merge validation.
143
+ The roadmap and
144
+ plan phases each make exactly one approval checkpoint commit
145
+ (`.project/`-only, deferred to the build transition commit during a
146
+ new-repository transaction or before Git exists). Their bundled
147
+ `pipeline_state.py approve` command journals before changing STATE or
148
+ ROADMAP.md and owns that canonical checkpoint; a routed
149
+ `resume-checkpoint` must finish before phase work. The router makes one
150
+ bookkeeping commit through `pipeline_state.py promote-next` when promoting a
151
+ lookahead track at a milestone boundary. Every other commit belongs to the
152
+ orchestrator.
153
+ - Reviewers verify and block; they never fix. A block names the criterion,
154
+ observed result, evidence location, and concrete fix direction. An optional
155
+ review panel is advisory: the canonical reviewer remains the only wave
156
+ pass/fail, and panel findings never average or auto-replan. Same-model
157
+ agreement is not independent verification: matching verdicts from one
158
+ model family count as a single evidence path. Independence comes from
159
+ re-run commands, reconstructed patches, different sources, or a
160
+ different model family. Resolve panel
161
+ membership with the bundled `scripts/review_panel.py` helper; do not invent
162
+ model families or slugs. Create task isolation and verify sidecars with the
163
+ bundled `scripts/isolation.py` helper; do not invent `git worktree add` or
164
+ `--detach`. Undo unpublished pipeline work with `scripts/pipeline_undo.py`;
165
+ do not invent `git reset`. Diagnose a stuck pipeline with
166
+ `scripts/pipeline_diagnose.py`.
167
+ - A bundled helper that exits non-zero stops the current step. Print its
168
+ stderr verbatim, run `scripts/pipeline_diagnose.py diagnose --repo
169
+ <absolute-root>` (bundled with `$gsd-path-forensics`), and report both.
170
+ Do not rerun the same command unchanged unless the helper's own contract
171
+ names that exact rerun as its interruption recovery. Never repair state or
172
+ Git by hand instead.
173
+ - The discussion sidecar may run during any non-shipped phase. It grounds
174
+ answers in code and phase artifacts, may perform focused research when
175
+ needed, and writes only its discussion artifacts; it never changes phase
176
+ state or bypasses a phase gate.
177
+ - During an uncommitted archive transaction, discussion writes a complete
178
+ active copy that extends the archived pair. The ship phase reruns `prepare`;
179
+ the helper validates the prefix and atomically reconciles both files.
180
+ Discussion never edits an archive directly or writes after shipment.
181
+ - The loop runner wraps explicit skills in a bounded check → verify → fix →
182
+ verify pass driven by a LOOP.md spec. It never advances a phase gate
183
+ itself and never commits or pushes.
184
+ - Fix tasks use the complete task template, not an abbreviated finding.
185
+
186
+ ## New GitHub repositories
187
+
188
+ - Create a GitHub repository only from an explicit user request followed by an
189
+ approval of the exact owner/name, visibility, default-checkout path,
190
+ `gsd-path/M001` branch, and linked primary-worktree path. Before the
191
+ external action produces an artifact, present those proposed targets as the
192
+ inline **Review** surface using the active router's preview contract.
193
+ Do not write a
194
+ preview file into the invocation directory or another repository. Run the
195
+ bundled bootstrap helper's read-only `preview` command for this evidence.
196
+ - After approval, the bootstrap helper persists the exact targets under the
197
+ approved workspace before the first external mutation. Its `create` command
198
+ creates or verifies the remote, checkout, branch, and linked worktree one
199
+ stage at a time. A matching journal permits explicit resume and adoption; a
200
+ collision without that journal blocks. The helper removes the journal only
201
+ after writing owned STATE.md and fixed-format `.project/REPOSITORY.md` in the
202
+ linked worktree.
203
+ - During an approved new-repository transaction, the router may create the
204
+ first GSD Path branch and linked primary worktree at the verified
205
+ remote-default SHA and persist that branch in STATE.md and REPOSITORY.md.
206
+ Build must verify and adopt that exact binding from REPOSITORY.md, never a
207
+ free-form log. Task branches and task worktrees remain exclusively
208
+ build-orchestrator owned.
209
+ - Keep the cloned default checkout clean on the remote default branch. Run the
210
+ pipeline from the linked GSD Path worktree; never initialize `.project/` in
211
+ the default checkout, reuse an existing branch or path (except an explicitly
212
+ approved empty linked-worktree folder via `--reuse-empty-worktree`), move an existing
213
+ repository, or recover a partial GitHub creation without the exact approved
214
+ journal and re-verification.
@@ -86,6 +86,14 @@ plan order above, which still keeps plan-invalidating risk in wave 1.
86
86
  this task's work is skipped. That command must name a path from `files`,
87
87
  and must not be PLAN.md's project Verify unless an SC this task owns names
88
88
  that command. Criteria and Verify are the contract; Approach is guidance.
89
+ - In a multi-repo milestone (`.project/MEMBERS.md` lists members), each task
90
+ changes exactly one repo. Give a member task `repo: <member>`; its `files`
91
+ and Verify are relative to that member's root, and its Verify runs there.
92
+ Coordinator tasks omit `repo:`. Split work that spans repos into one task
93
+ per repo joined by an Interface contract. PLAN.md's project Verify runs
94
+ from the coordinator root and reaches a member as `../<member>`. Do not
95
+ plan a task for a member this milestone already closed at ship; plan it in
96
+ the next milestone.
89
97
  - Preserve every template field and its required initial value.
90
98
 
91
99
  Put the full-project build-and-test command in PLAN.md. Copy `Review panel:`
@@ -62,7 +62,9 @@ When explicitly briefed with final scope, record `Review scope: final` and the
62
62
  full supplied review HEAD in the wave artifact. Check all INTENT success criteria
63
63
  and PLAN's Surface contract against the completed isolated product. Each surface
64
64
  criterion's Intent coverage block includes `- **Surface**:`, `- **Check**:`, and
65
- `- **Observed**:` with the walked states and actual result. Reuse recorded task
65
+ `- **Observed**:` with the walked states and actual result. `Surface` holds
66
+ exactly the surface name from PLAN's Surface contract; walkthrough detail belongs
67
+ in Check and Observed. Reuse recorded task
66
68
  output if it proves that exact walkthrough; run only a missing check. Final-scope
67
69
  coverage shares this wave artifact; do not write a second report. Shipping's
68
70
  runtime checks freshness and derives the final view from these records.