@opengsd/gsd-path 1.5.0 → 1.6.1

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 (363) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +169 -0
  3. package/DOCS.md +4 -3
  4. package/FULL.md +68 -7
  5. package/HOOKS.md +81 -4
  6. package/MIGRATE.md +12 -0
  7. package/QUICK.md +4 -2
  8. package/README.md +69 -16
  9. package/RUNTIME.md +23 -5
  10. package/UPDATE.md +35 -0
  11. package/WORKFLOW.md +66 -7
  12. package/package.json +1 -1
  13. package/scripts/_common.py +150 -1
  14. package/scripts/build_recovery.py +62 -30
  15. package/scripts/build_state.py +195 -5
  16. package/scripts/check_handoffs.py +92 -30
  17. package/scripts/check_task_briefs.py +27 -19
  18. package/scripts/detect_project.py +17 -2
  19. package/scripts/discussion_records.py +9 -1
  20. package/scripts/discussion_validate.py +7 -6
  21. package/scripts/dispatch_driver.py +174 -36
  22. package/scripts/git_guard.py +42 -7
  23. package/scripts/guard_hook.py +1216 -47
  24. package/scripts/install.mjs +76 -3
  25. package/scripts/install.py +182 -37
  26. package/scripts/integration.py +115 -68
  27. package/scripts/isolation.py +192 -23
  28. package/scripts/members.py +68 -25
  29. package/scripts/migrate_core.py +2 -0
  30. package/scripts/model_policy.py +13 -2
  31. package/scripts/pipeline_diagnose.py +17 -2
  32. package/scripts/pipeline_git.py +87 -35
  33. package/scripts/pipeline_state.py +31 -7
  34. package/scripts/pipeline_undo.py +17 -8
  35. package/scripts/promote_lookahead.py +3 -3
  36. package/scripts/review_findings.py +180 -44
  37. package/scripts/roadmap.py +9 -1
  38. package/scripts/runtime_store.py +1 -0
  39. package/scripts/state_checkpoint.py +30 -9
  40. package/scripts/state_promote.py +92 -5
  41. package/scripts/task_context.py +2 -0
  42. package/scripts/workflow_run.py +9 -2
  43. package/skills/gsd-path/DEFINE.md +6 -2
  44. package/skills/gsd-path/PLAN.md +6 -2
  45. package/skills/gsd-path/ROADMAP.md +16 -6
  46. package/skills/gsd-path/SHIP.md +38 -11
  47. package/skills/gsd-path/SKILL.md +52 -24
  48. package/skills/gsd-path/references/build-native.md +96 -9
  49. package/skills/gsd-path/references/build-recovery.md +13 -0
  50. package/skills/gsd-path/references/coder.md +7 -3
  51. package/skills/gsd-path/references/model-policy.md +3 -1
  52. package/skills/gsd-path/references/operating-rules.md +14 -5
  53. package/skills/gsd-path/references/planner.md +13 -1
  54. package/skills/gsd-path/references/reviewer-final.md +5 -5
  55. package/skills/gsd-path/references/reviewer-wave.md +46 -13
  56. package/skills/gsd-path/references/runtime-selection.md +10 -0
  57. package/skills/gsd-path/scripts/_common.py +150 -1
  58. package/skills/gsd-path/scripts/build_recovery.py +62 -30
  59. package/skills/gsd-path/scripts/build_state.py +195 -5
  60. package/skills/gsd-path/scripts/check_handoffs.py +92 -30
  61. package/skills/gsd-path/scripts/check_task_briefs.py +27 -19
  62. package/skills/gsd-path/scripts/detect_project.py +17 -2
  63. package/skills/gsd-path/scripts/discussion_records.py +9 -1
  64. package/skills/gsd-path/scripts/discussion_validate.py +7 -6
  65. package/skills/gsd-path/scripts/dispatch_driver.py +174 -36
  66. package/skills/gsd-path/scripts/git_guard.py +42 -7
  67. package/skills/gsd-path/scripts/integration.py +115 -68
  68. package/skills/gsd-path/scripts/isolation.py +192 -23
  69. package/skills/gsd-path/scripts/members.py +68 -25
  70. package/skills/gsd-path/scripts/model_policy.py +13 -2
  71. package/skills/gsd-path/scripts/pipeline_git.py +87 -35
  72. package/skills/gsd-path/scripts/pipeline_state.py +31 -7
  73. package/skills/gsd-path/scripts/promote_lookahead.py +3 -3
  74. package/skills/gsd-path/scripts/review_findings.py +180 -44
  75. package/skills/gsd-path/scripts/roadmap.py +9 -1
  76. package/skills/gsd-path/scripts/state_checkpoint.py +30 -9
  77. package/skills/gsd-path/scripts/state_promote.py +92 -5
  78. package/skills/gsd-path/scripts/task_context.py +2 -0
  79. package/skills/gsd-path/scripts/workflow_run.py +9 -2
  80. package/skills/gsd-path/templates/final-review.md +5 -5
  81. package/skills/gsd-path/templates/state.md +1 -0
  82. package/skills/gsd-path/templates/task.md +1 -0
  83. package/skills/gsd-path/templates/wave-review.md +18 -9
  84. package/skills/gsd-path-build/references/build-native.md +96 -9
  85. package/skills/gsd-path-build/references/build-recovery.md +13 -0
  86. package/skills/gsd-path-build/references/coder.md +7 -3
  87. package/skills/gsd-path-build/references/model-policy.md +3 -1
  88. package/skills/gsd-path-build/references/operating-rules.md +14 -5
  89. package/skills/gsd-path-build/references/reviewer-final.md +5 -5
  90. package/skills/gsd-path-build/references/reviewer-wave.md +46 -13
  91. package/skills/gsd-path-build/references/runtime-selection.md +10 -0
  92. package/skills/gsd-path-build/scripts/_common.py +150 -1
  93. package/skills/gsd-path-build/scripts/build_recovery.py +62 -30
  94. package/skills/gsd-path-build/scripts/build_state.py +195 -5
  95. package/skills/gsd-path-build/scripts/check_handoffs.py +92 -30
  96. package/skills/gsd-path-build/scripts/check_task_briefs.py +27 -19
  97. package/skills/gsd-path-build/scripts/detect_project.py +17 -2
  98. package/skills/gsd-path-build/scripts/discussion_records.py +9 -1
  99. package/skills/gsd-path-build/scripts/discussion_validate.py +7 -6
  100. package/skills/gsd-path-build/scripts/dispatch_driver.py +174 -36
  101. package/skills/gsd-path-build/scripts/integration.py +115 -68
  102. package/skills/gsd-path-build/scripts/isolation.py +192 -23
  103. package/skills/gsd-path-build/scripts/members.py +68 -25
  104. package/skills/gsd-path-build/scripts/model_policy.py +13 -2
  105. package/skills/gsd-path-build/scripts/pipeline_git.py +87 -35
  106. package/skills/gsd-path-build/scripts/pipeline_state.py +31 -7
  107. package/skills/gsd-path-build/scripts/promote_lookahead.py +3 -3
  108. package/skills/gsd-path-build/scripts/review_findings.py +180 -44
  109. package/skills/gsd-path-build/scripts/roadmap.py +9 -1
  110. package/skills/gsd-path-build/scripts/state_checkpoint.py +30 -9
  111. package/skills/gsd-path-build/scripts/state_promote.py +92 -5
  112. package/skills/gsd-path-build/scripts/task_context.py +2 -0
  113. package/skills/gsd-path-build/scripts/workflow_run.py +9 -2
  114. package/skills/gsd-path-build/templates/task.md +1 -0
  115. package/skills/gsd-path-build/templates/wave-review.md +18 -9
  116. package/skills/gsd-path-decide/references/model-policy.md +3 -1
  117. package/skills/gsd-path-decide/references/operating-rules.md +14 -5
  118. package/skills/gsd-path-decide/references/runtime-selection.md +10 -0
  119. package/skills/gsd-path-decide/scripts/_common.py +150 -1
  120. package/skills/gsd-path-decide/scripts/build_recovery.py +62 -30
  121. package/skills/gsd-path-decide/scripts/check_handoffs.py +92 -30
  122. package/skills/gsd-path-decide/scripts/check_task_briefs.py +27 -19
  123. package/skills/gsd-path-decide/scripts/detect_project.py +17 -2
  124. package/skills/gsd-path-decide/scripts/discussion_records.py +9 -1
  125. package/skills/gsd-path-decide/scripts/discussion_validate.py +7 -6
  126. package/skills/gsd-path-decide/scripts/integration.py +115 -68
  127. package/skills/gsd-path-decide/scripts/isolation.py +192 -23
  128. package/skills/gsd-path-decide/scripts/members.py +68 -25
  129. package/skills/gsd-path-decide/scripts/model_policy.py +13 -2
  130. package/skills/gsd-path-decide/scripts/pipeline_git.py +87 -35
  131. package/skills/gsd-path-decide/scripts/pipeline_state.py +31 -7
  132. package/skills/gsd-path-decide/scripts/promote_lookahead.py +3 -3
  133. package/skills/gsd-path-decide/scripts/roadmap.py +9 -1
  134. package/skills/gsd-path-decide/scripts/state_checkpoint.py +30 -9
  135. package/skills/gsd-path-decide/scripts/state_promote.py +92 -5
  136. package/skills/gsd-path-define/SKILL.md +6 -2
  137. package/skills/gsd-path-define/references/build-recovery.md +13 -0
  138. package/skills/gsd-path-define/references/operating-rules.md +14 -5
  139. package/skills/gsd-path-define/references/runtime-selection.md +10 -0
  140. package/skills/gsd-path-define/scripts/_common.py +150 -1
  141. package/skills/gsd-path-define/scripts/build_recovery.py +62 -30
  142. package/skills/gsd-path-define/scripts/check_handoffs.py +92 -30
  143. package/skills/gsd-path-define/scripts/check_task_briefs.py +27 -19
  144. package/skills/gsd-path-define/scripts/detect_project.py +17 -2
  145. package/skills/gsd-path-define/scripts/discussion_records.py +9 -1
  146. package/skills/gsd-path-define/scripts/discussion_validate.py +7 -6
  147. package/skills/gsd-path-define/scripts/integration.py +115 -68
  148. package/skills/gsd-path-define/scripts/isolation.py +192 -23
  149. package/skills/gsd-path-define/scripts/members.py +68 -25
  150. package/skills/gsd-path-define/scripts/model_policy.py +13 -2
  151. package/skills/gsd-path-define/scripts/pipeline_git.py +87 -35
  152. package/skills/gsd-path-define/scripts/pipeline_state.py +31 -7
  153. package/skills/gsd-path-define/scripts/promote_lookahead.py +3 -3
  154. package/skills/gsd-path-define/scripts/roadmap.py +9 -1
  155. package/skills/gsd-path-define/scripts/state_checkpoint.py +30 -9
  156. package/skills/gsd-path-define/scripts/state_promote.py +92 -5
  157. package/skills/gsd-path-define/templates/state.md +1 -0
  158. package/skills/gsd-path-discuss/references/operating-rules.md +14 -5
  159. package/skills/gsd-path-discuss/references/runtime-selection.md +10 -0
  160. package/skills/gsd-path-discuss/scripts/_common.py +150 -1
  161. package/skills/gsd-path-discuss/scripts/discussion_records.py +9 -1
  162. package/skills/gsd-path-discuss/scripts/model_policy.py +13 -2
  163. package/skills/gsd-path-docs-audit/references/model-policy.md +3 -1
  164. package/skills/gsd-path-docs-audit/references/operating-rules.md +14 -5
  165. package/skills/gsd-path-docs-audit/references/runtime-selection.md +10 -0
  166. package/skills/gsd-path-docs-audit/scripts/_common.py +150 -1
  167. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +62 -30
  168. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +92 -30
  169. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +27 -19
  170. package/skills/gsd-path-docs-audit/scripts/detect_project.py +17 -2
  171. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +9 -1
  172. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +7 -6
  173. package/skills/gsd-path-docs-audit/scripts/integration.py +115 -68
  174. package/skills/gsd-path-docs-audit/scripts/isolation.py +192 -23
  175. package/skills/gsd-path-docs-audit/scripts/members.py +68 -25
  176. package/skills/gsd-path-docs-audit/scripts/model_policy.py +13 -2
  177. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +87 -35
  178. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +31 -7
  179. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +3 -3
  180. package/skills/gsd-path-docs-audit/scripts/roadmap.py +9 -1
  181. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +30 -9
  182. package/skills/gsd-path-docs-audit/scripts/state_promote.py +92 -5
  183. package/skills/gsd-path-forensics/references/operating-rules.md +14 -5
  184. package/skills/gsd-path-forensics/references/runtime-selection.md +10 -0
  185. package/skills/gsd-path-forensics/scripts/_common.py +150 -1
  186. package/skills/gsd-path-forensics/scripts/discussion_records.py +9 -1
  187. package/skills/gsd-path-forensics/scripts/model_policy.py +13 -2
  188. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +17 -2
  189. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +17 -8
  190. package/skills/gsd-path-inspect/references/model-policy.md +3 -1
  191. package/skills/gsd-path-inspect/references/operating-rules.md +14 -5
  192. package/skills/gsd-path-inspect/references/runtime-selection.md +10 -0
  193. package/skills/gsd-path-inspect/scripts/_common.py +150 -1
  194. package/skills/gsd-path-inspect/scripts/build_recovery.py +62 -30
  195. package/skills/gsd-path-inspect/scripts/check_handoffs.py +92 -30
  196. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +27 -19
  197. package/skills/gsd-path-inspect/scripts/detect_project.py +17 -2
  198. package/skills/gsd-path-inspect/scripts/discussion_records.py +9 -1
  199. package/skills/gsd-path-inspect/scripts/discussion_validate.py +7 -6
  200. package/skills/gsd-path-inspect/scripts/integration.py +115 -68
  201. package/skills/gsd-path-inspect/scripts/isolation.py +192 -23
  202. package/skills/gsd-path-inspect/scripts/members.py +68 -25
  203. package/skills/gsd-path-inspect/scripts/model_policy.py +13 -2
  204. package/skills/gsd-path-inspect/scripts/pipeline_git.py +87 -35
  205. package/skills/gsd-path-inspect/scripts/pipeline_state.py +31 -7
  206. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +3 -3
  207. package/skills/gsd-path-inspect/scripts/roadmap.py +9 -1
  208. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +30 -9
  209. package/skills/gsd-path-inspect/scripts/state_promote.py +92 -5
  210. package/skills/gsd-path-inspect/scripts/workflow_run.py +9 -2
  211. package/skills/gsd-path-inspect/templates/state.md +1 -0
  212. package/skills/gsd-path-loop/references/operating-rules.md +14 -5
  213. package/skills/gsd-path-loop/references/runtime-selection.md +10 -0
  214. package/skills/gsd-path-loop/scripts/_common.py +150 -1
  215. package/skills/gsd-path-loop/scripts/discussion_records.py +9 -1
  216. package/skills/gsd-path-loop/scripts/model_policy.py +13 -2
  217. package/skills/gsd-path-migrate/SKILL.md +8 -0
  218. package/skills/gsd-path-migrate/references/operating-rules.md +14 -5
  219. package/skills/gsd-path-migrate/references/runtime-selection.md +10 -0
  220. package/skills/gsd-path-migrate/scripts/_common.py +150 -1
  221. package/skills/gsd-path-migrate/scripts/discussion_records.py +9 -1
  222. package/skills/gsd-path-migrate/scripts/migrate_core.py +2 -0
  223. package/skills/gsd-path-migrate/scripts/model_policy.py +13 -2
  224. package/skills/gsd-path-plan/SKILL.md +6 -2
  225. package/skills/gsd-path-plan/references/build-recovery.md +13 -0
  226. package/skills/gsd-path-plan/references/model-policy.md +3 -1
  227. package/skills/gsd-path-plan/references/operating-rules.md +14 -5
  228. package/skills/gsd-path-plan/references/planner.md +13 -1
  229. package/skills/gsd-path-plan/references/runtime-selection.md +10 -0
  230. package/skills/gsd-path-plan/scripts/_common.py +150 -1
  231. package/skills/gsd-path-plan/scripts/build_recovery.py +62 -30
  232. package/skills/gsd-path-plan/scripts/check_handoffs.py +92 -30
  233. package/skills/gsd-path-plan/scripts/check_task_briefs.py +27 -19
  234. package/skills/gsd-path-plan/scripts/detect_project.py +17 -2
  235. package/skills/gsd-path-plan/scripts/discussion_records.py +9 -1
  236. package/skills/gsd-path-plan/scripts/discussion_validate.py +7 -6
  237. package/skills/gsd-path-plan/scripts/integration.py +115 -68
  238. package/skills/gsd-path-plan/scripts/isolation.py +192 -23
  239. package/skills/gsd-path-plan/scripts/members.py +68 -25
  240. package/skills/gsd-path-plan/scripts/model_policy.py +13 -2
  241. package/skills/gsd-path-plan/scripts/pipeline_git.py +87 -35
  242. package/skills/gsd-path-plan/scripts/pipeline_state.py +31 -7
  243. package/skills/gsd-path-plan/scripts/promote_lookahead.py +3 -3
  244. package/skills/gsd-path-plan/scripts/roadmap.py +9 -1
  245. package/skills/gsd-path-plan/scripts/state_checkpoint.py +30 -9
  246. package/skills/gsd-path-plan/scripts/state_promote.py +92 -5
  247. package/skills/gsd-path-plan/scripts/workflow_run.py +9 -2
  248. package/skills/gsd-path-plan/templates/task.md +1 -0
  249. package/skills/gsd-path-research/references/model-policy.md +3 -1
  250. package/skills/gsd-path-research/references/operating-rules.md +14 -5
  251. package/skills/gsd-path-research/references/runtime-selection.md +10 -0
  252. package/skills/gsd-path-research/scripts/_common.py +150 -1
  253. package/skills/gsd-path-research/scripts/build_recovery.py +62 -30
  254. package/skills/gsd-path-research/scripts/check_handoffs.py +92 -30
  255. package/skills/gsd-path-research/scripts/check_task_briefs.py +27 -19
  256. package/skills/gsd-path-research/scripts/detect_project.py +17 -2
  257. package/skills/gsd-path-research/scripts/discussion_records.py +9 -1
  258. package/skills/gsd-path-research/scripts/discussion_validate.py +7 -6
  259. package/skills/gsd-path-research/scripts/integration.py +115 -68
  260. package/skills/gsd-path-research/scripts/isolation.py +192 -23
  261. package/skills/gsd-path-research/scripts/members.py +68 -25
  262. package/skills/gsd-path-research/scripts/model_policy.py +13 -2
  263. package/skills/gsd-path-research/scripts/pipeline_git.py +87 -35
  264. package/skills/gsd-path-research/scripts/pipeline_state.py +31 -7
  265. package/skills/gsd-path-research/scripts/promote_lookahead.py +3 -3
  266. package/skills/gsd-path-research/scripts/roadmap.py +9 -1
  267. package/skills/gsd-path-research/scripts/state_checkpoint.py +30 -9
  268. package/skills/gsd-path-research/scripts/state_promote.py +92 -5
  269. package/skills/gsd-path-roadmap/SKILL.md +16 -6
  270. package/skills/gsd-path-roadmap/references/model-policy.md +3 -1
  271. package/skills/gsd-path-roadmap/references/operating-rules.md +14 -5
  272. package/skills/gsd-path-roadmap/references/runtime-selection.md +10 -0
  273. package/skills/gsd-path-roadmap/scripts/_common.py +150 -1
  274. package/skills/gsd-path-roadmap/scripts/build_recovery.py +62 -30
  275. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +92 -30
  276. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +27 -19
  277. package/skills/gsd-path-roadmap/scripts/detect_project.py +17 -2
  278. package/skills/gsd-path-roadmap/scripts/discussion_records.py +9 -1
  279. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +7 -6
  280. package/skills/gsd-path-roadmap/scripts/integration.py +115 -68
  281. package/skills/gsd-path-roadmap/scripts/isolation.py +192 -23
  282. package/skills/gsd-path-roadmap/scripts/members.py +68 -25
  283. package/skills/gsd-path-roadmap/scripts/model_policy.py +13 -2
  284. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +87 -35
  285. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +31 -7
  286. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +3 -3
  287. package/skills/gsd-path-roadmap/scripts/roadmap.py +9 -1
  288. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +30 -9
  289. package/skills/gsd-path-roadmap/scripts/state_promote.py +92 -5
  290. package/skills/gsd-path-ship/SKILL.md +38 -11
  291. package/skills/gsd-path-ship/references/model-policy.md +3 -1
  292. package/skills/gsd-path-ship/references/operating-rules.md +14 -5
  293. package/skills/gsd-path-ship/references/reviewer-final.md +5 -5
  294. package/skills/gsd-path-ship/references/reviewer-wave.md +46 -13
  295. package/skills/gsd-path-ship/references/runtime-selection.md +10 -0
  296. package/skills/gsd-path-ship/scripts/_common.py +150 -1
  297. package/skills/gsd-path-ship/scripts/build_recovery.py +62 -30
  298. package/skills/gsd-path-ship/scripts/build_state.py +195 -5
  299. package/skills/gsd-path-ship/scripts/check_handoffs.py +92 -30
  300. package/skills/gsd-path-ship/scripts/check_task_briefs.py +27 -19
  301. package/skills/gsd-path-ship/scripts/detect_project.py +17 -2
  302. package/skills/gsd-path-ship/scripts/discussion_records.py +9 -1
  303. package/skills/gsd-path-ship/scripts/discussion_validate.py +7 -6
  304. package/skills/gsd-path-ship/scripts/integration.py +115 -68
  305. package/skills/gsd-path-ship/scripts/isolation.py +192 -23
  306. package/skills/gsd-path-ship/scripts/members.py +68 -25
  307. package/skills/gsd-path-ship/scripts/model_policy.py +13 -2
  308. package/skills/gsd-path-ship/scripts/pipeline_git.py +87 -35
  309. package/skills/gsd-path-ship/scripts/pipeline_state.py +31 -7
  310. package/skills/gsd-path-ship/scripts/promote_lookahead.py +3 -3
  311. package/skills/gsd-path-ship/scripts/roadmap.py +9 -1
  312. package/skills/gsd-path-ship/scripts/state_checkpoint.py +30 -9
  313. package/skills/gsd-path-ship/scripts/state_promote.py +92 -5
  314. package/skills/gsd-path-ship/scripts/workflow_run.py +9 -2
  315. package/skills/gsd-path-ship/templates/final-review.md +5 -5
  316. package/skills/gsd-path-ship/templates/wave-review.md +18 -9
  317. package/skills/gsd-path-undo/references/operating-rules.md +14 -5
  318. package/skills/gsd-path-undo/references/runtime-selection.md +10 -0
  319. package/skills/gsd-path-undo/scripts/_common.py +150 -1
  320. package/skills/gsd-path-undo/scripts/discussion_records.py +9 -1
  321. package/skills/gsd-path-undo/scripts/model_policy.py +13 -2
  322. package/skills/gsd-path-undo/scripts/pipeline_undo.py +17 -8
  323. package/skills/path/DEFINE.md +6 -2
  324. package/skills/path/PLAN.md +6 -2
  325. package/skills/path/ROADMAP.md +16 -6
  326. package/skills/path/SHIP.md +38 -11
  327. package/skills/path/SKILL.md +52 -24
  328. package/skills/path/references/build-native.md +96 -9
  329. package/skills/path/references/build-recovery.md +13 -0
  330. package/skills/path/references/coder.md +7 -3
  331. package/skills/path/references/model-policy.md +3 -1
  332. package/skills/path/references/operating-rules.md +14 -5
  333. package/skills/path/references/planner.md +13 -1
  334. package/skills/path/references/reviewer-final.md +5 -5
  335. package/skills/path/references/reviewer-wave.md +46 -13
  336. package/skills/path/references/runtime-selection.md +10 -0
  337. package/skills/path/scripts/_common.py +150 -1
  338. package/skills/path/scripts/build_recovery.py +62 -30
  339. package/skills/path/scripts/build_state.py +195 -5
  340. package/skills/path/scripts/check_handoffs.py +92 -30
  341. package/skills/path/scripts/check_task_briefs.py +27 -19
  342. package/skills/path/scripts/detect_project.py +17 -2
  343. package/skills/path/scripts/discussion_records.py +9 -1
  344. package/skills/path/scripts/discussion_validate.py +7 -6
  345. package/skills/path/scripts/dispatch_driver.py +174 -36
  346. package/skills/path/scripts/git_guard.py +42 -7
  347. package/skills/path/scripts/integration.py +115 -68
  348. package/skills/path/scripts/isolation.py +192 -23
  349. package/skills/path/scripts/members.py +68 -25
  350. package/skills/path/scripts/model_policy.py +13 -2
  351. package/skills/path/scripts/pipeline_git.py +87 -35
  352. package/skills/path/scripts/pipeline_state.py +31 -7
  353. package/skills/path/scripts/promote_lookahead.py +3 -3
  354. package/skills/path/scripts/review_findings.py +180 -44
  355. package/skills/path/scripts/roadmap.py +9 -1
  356. package/skills/path/scripts/state_checkpoint.py +30 -9
  357. package/skills/path/scripts/state_promote.py +92 -5
  358. package/skills/path/scripts/task_context.py +2 -0
  359. package/skills/path/scripts/workflow_run.py +9 -2
  360. package/skills/path/templates/final-review.md +5 -5
  361. package/skills/path/templates/state.md +1 -0
  362. package/skills/path/templates/task.md +1 -0
  363. package/skills/path/templates/wave-review.md +18 -9
package/AGENTS.md CHANGED
@@ -139,7 +139,7 @@ full-repo suite on a tiny edit outrank the phase brief.
139
139
  canonical contents, carry-forward, and manifest pass the bundled precommit
140
140
  validator; report shipped only after the exact `.project/`-only ship commit
141
141
  passes the postcommit validator and `validate-integrated` proves the
142
- two-parent integration merge, its tag, and its ancestry on origin/main —
142
+ integration landing, its tag, and its ancestry on origin/main —
143
143
  while integration is pending the router routes back to ship instead of
144
144
  reporting shipped or starting the next milestone.
145
145
 
package/CHANGELOG.md CHANGED
@@ -11,6 +11,175 @@ app and the daemon have their own file,
11
11
  [daemon/app/CHANGELOG.md](daemon/app/CHANGELOG.md). Release bookkeeping and
12
12
  test-only changes are not listed; the Git history has them.
13
13
 
14
+ ## [1.6.1] - 2026-10-16
15
+
16
+ ### Added
17
+ - accept GitHub rebase merges in pull-request integration
18
+
19
+ ### Changed
20
+ - record 1.6.1 live host release evidence
21
+ - prepare 1.6.1 patch candidate
22
+ - Note PR rebase-merge landing in CONTEXT, WORKFLOW, AGENTS
23
+ - Note owner-authorized push exception in FULL.md and HOOKS.md
24
+ - correct the minimum Git version in TEST_ENVIRONMENT.md
25
+ - prove the landed member base through the file scope check
26
+ - describe project Update with no project install
27
+ - update release notes for v1.6.0
28
+
29
+ ### Fixed
30
+ - run dispatch_driver subprocess helpers from the selected runtime
31
+ - refuse a relative model_policy --record and check release before locking
32
+ - let promote-next replace a DOCS-AUDIT carry-forward the lookahead keeps
33
+ - let the owner authorize one exact pre-ship push to a task branch
34
+ - post Discord changelogs from automated releases
35
+ - stage a landing or checkpoint change set with one git add
36
+ - pass the landing message and member paths to git through stdin
37
+ - do not check the paths that a landed task brief names
38
+ - accept a landed task as the only owner of an Interface contract bullet
39
+ - say why a project has no workflow status in the desktop app
40
+
41
+ ### Other
42
+ - Accept only same value or T### for pending rulings
43
+ - list not-started projects and re-probe after project install
44
+ - sort idle projects with shipped in legacy dashboard
45
+ ## [1.6.0] - 2026-10-12
46
+
47
+ ### Added
48
+ - let a later task supersede an earlier task and retire its Verify
49
+ - document the default branch record of a member
50
+ - member paths read the default branch that MEMBERS.md records
51
+ - record the default branch of a member in MEMBERS.md
52
+ - add --uninstall to the skill installers
53
+ - expose default_branch to the router and document the rule
54
+ - refuse members under a coordinator whose default branch is not main
55
+ - status, promotion and the git guard follow STATE default_branch
56
+ - integrate and validate on the default branch that STATE records
57
+ - bind milestones at the default branch that STATE records
58
+ - record the origin default branch in STATE at initialization
59
+
60
+ ### Changed
61
+ - make each checkpoint commit different in the stale sidecar test
62
+ - record 1.6.0 live release evidence
63
+ - prepare 1.6.0 minor candidate
64
+ - Merge main into fix/issue-392-wave-review-validator
65
+ - Merge main into fix/issue-393-helper-papercuts
66
+ - Merge main into fix/issue-357-regression-verify
67
+ - Merge main into fix/issue-358-multi-repo-batches
68
+ - Merge main into fix/issue-390-build-helpers-runtime
69
+ - state the repair base-to-landing rule in build-native.md
70
+ - document supersedes gate rule in plan skill
71
+ - describe finish retry, stale Verify sidecar, leftover isolate
72
+ - document retired Verify key in RUNTIME.md
73
+ - name per-repo batching in review_findings docstring
74
+ - correct task_review_observation docstring after marker-tolerant matching
75
+ - state the wave review format rules and name them in the gate errors
76
+ - Document alias denial in directories that do not exist
77
+ - a done task brief with a deleted Context path does not fail later lint
78
+ - Document directory overlap rule in planner brief
79
+ - prove the issue 374 fixes through the real commands
80
+ - prove a define re-slice that removes a surface reaches the plan gate
81
+ - Merge remote-tracking branch 'origin/main' into fix/issue-344-scope-destructive-git-guards
82
+ - correct fix-tasks carried rule in RUNTIME.md
83
+ - document regression Verify at landing in RUNTIME.md
84
+ - point stale Python-installer flag lists to README
85
+ - say how more than one person can work on a project
86
+ - show host proof tiers in README and QUICK
87
+ - Document literal attestation limit for declared directories
88
+ - Align coder file-scope rule with declared-directory landing
89
+ - add contributing guide, security policy, and issue forms
90
+ - style: fix assignment spacing in round lint test
91
+ - prove round lint accepts dependency-supplied contract paths
92
+ - bind the next milestone after a direct ship on a master default
93
+ - Add GitHub Actions workflow for Discord changelog
94
+ - update release notes for v1.5.0
95
+ - quote portable repository paths in shell fixture
96
+
97
+ ### Fixed
98
+ - plan gate reads a declared directory when it checks supersedes
99
+ - give no removal advice for an isolate that holds a gitignored file
100
+ - replace a stale Verify sidecar only when it is proven untouched
101
+ - check the chain files from the repair base, not from the repair landing
102
+ - read update-ref, branch and worktree targets as Git does
103
+ - deny scoped deletions when the guard cannot prove the repository
104
+ - link review repairs by finding, not by criterion text alone
105
+ - give a superseding task the protective role of the task it supersedes
106
+ - check the files of every later linked repair before a chain receipt
107
+ - name only the leftover isolate when a landed task could not be cleaned up
108
+ - make only sub-bullet line markers optional in a criterion quote
109
+ - give a receipt to a chain of review repairs on the same files
110
+ - report a landed task as landed when the removal of its isolate fails
111
+ - deliver review_findings and task_context through the project runtime
112
+ - prove a member review repair in the member repository
113
+ - match a quoted criterion without the list markers of its sub-bullets
114
+ - let finish run again after a failed serial Verify, and prepare-task replace a stale Verify sidecar
115
+ - accept a review repair whose files are not in its fix batch
116
+ - report unreviewed earlier waves in ready and prove repair-wave order
117
+ - say how to record a Log event when a transition changes no field
118
+ - tell the user how to get the full SHA when a ref is refused
119
+ - name the differing identity field when a model policy record does not match
120
+ - a review cycle replaces an older one only with a valid wave verdict
121
+ - land tasks that share an earlier task one at a time
122
+ - list worktrees on Git versions without worktree list -z
123
+ - keep tracked cd targets valid with the scoped deletion rules
124
+ - keep ordinary Git commands allowed with env and in new directories
125
+ - accept an unset base milestone only for a closed build recovery
126
+ - keep review evidence checks when a criterion number repeats
127
+ - keep the fallback for a missing bundled helper module
128
+ - git guard uses main when STATE has no default_branch
129
+ - do not skip an earlier Verify because its text is in the own Verify
130
+ - treat a declared directory and a path below it as overlapping files
131
+ - accept a default branch that starts with origin/ at ship
132
+ - re-raise an import error from inside a bundled helper module
133
+ - keep a blocked review cycle until a newer cycle has a verdict
134
+ - keep the cap exemption when a cap line carries the template comment
135
+ - run earlier-wave Verify at landing when a task edits the same files
136
+ - keep each review repair in one repo and lint landed briefs as history
137
+ - give a repeat finding its next repair and ignore repairs of a replaced review
138
+ - land files under a declared files directory
139
+ - let a define-entered re-slice amend the active roadmap entry
140
+ - keep wave reviews when a plan repair changes only caps or dependency notes
141
+ - drop superseded review cycles from the dashboard attention list
142
+ - load bundled helpers when a foreign `scripts` package is importable
143
+ - tolerate repeated criterion numbers and unset recovery base milestone
144
+ - chain an existing Git hook instead of refusing the hook install
145
+ - accept external-landing proof when the forge deletes the bound branch
146
+ - fail early on a non-main default and document external-landing
147
+ - cover all parameter syntaxes in scoped deletion
148
+ - fail closed on literal parameter target ambiguity
149
+ - scope destructive Git cleanup to Path-owned targets
150
+
151
+ ### Other
152
+ - Resolve macOS temp path in ownership scope test fixture
153
+ - Check unfolded and folded readings of process substitutions
154
+ - Fold process substitutions; count only real earlier Git commands
155
+ - Check each reading of inexact Git commands; limit descriptor denial
156
+ - Split separator-joined redirections; read attached printf -v name
157
+ - Strip shell redirections before Git detection; keep alias words
158
+ - Both Windows failures have one cause, and it is a test defect, not a product defect. The fix is one line in `tests/test_member_native.py`; it is not committed. **Cause.** The failing assertion is the second leftover check in `test_next_finish_names_only_the_leftover_sidecar_of_a_landed_member_task` (line 136). The test's `attempt()` helper writes `app.py` with `write_text("v2\n")`, which is `v2\r\n` on Windows, and CI runs with `core.autocrlf=false`, so the landed blob is CRLF. The test then wrote the file back with `write_bytes(b"v2\n")`. On Windows those bytes are not the landed blob, so the driver correctly gave no "remove its leftover isolate" stop and reported `landed`, and the test raised `KeyError: 'reason'`. **Invariant.** A test that puts a "landed" file back must write the same bytes that were landed, on every platform. This was the only place in the branch's new tests that broke it: the sibling leftover tests in `test_dispatch_driver.py` and `test_isolation.py` pass on Windows. **Fix.** The restore now uses the same `write_text("v2\n", encoding="utf-8")` call as `attempt()`. No product code changed, so no generated copies needed a sync. **Verification (macOS only; no Windows run was possible here).** - `python3 -m unittest tests.test_member_native`: 6 tests pass. - With `Path.write_text` patched to write CRLF for `app.py` (to emulate Windows), the original test fails with the same `KeyError: 'reason'` at line 136, and the fixed test passes
159
+ - Read redirections and Git context names as the shell does
160
+ - list a part as retired only when dropped; document it
161
+ - record each retired part of a fix-task Verify
162
+ - retire copied Verify in fix tasks; restore _task_deps
163
+ - Prefer exact criterion quote; join any-indent sub-bullets
164
+ - give the leftover-isolate stop only after a content check
165
+ - Cause: both Windows checks fail in one test only, `test_gsd_path_text_in_a_path_does_not_make_a_worktree_path_owned` (18 subtest failures = 6 targets x 3 pipeline states). The test put a native path, not quoted, into a Bash command. On Windows the path has backslashes, Bash word splitting removes them (`C:\Users\x` becomes `C:Usersx`), and the guard correctly answers "needs a literal target". The guard code is correct; the test was not cross-platform. Invariant: a test that puts a filesystem path into a shell command must quote it, so the guard sees the same path on each OS. Fix (tests/test_guard_hook.py only, no change to scripts/guard_hook.py): - The two commands in the failing test now use `shlex.quote(str(target))`, the convention the file already uses in other tests. - Same edit at the two sibling sites in `test_forced_worktree_remove_checks_registered_path_and_owner` (`{task_worktree}`, `{managed}`). They passed on Windows only because `assert_denied` accepts any denial reason, so they did not test ownership there. - No other unquoted path interpolation into a `worktree remove` command exists in tests/test_guard_hook.py, tests/test_guard_hook_windows.py or tests/test_git_guard.py. Verification: the two changed tests pass locally on macOS (2 tests, OK). A check with `shlex.split` on a sample Windows path shows the unquoted form loses the backslashes and the quoted form keeps them. Not verified: an actual Windows run; that needs the next CI run. The full test suite was not run, because only two test methods changed. Changes are in the working tree, not committed
166
+ - restore the exact-heading repair marker test method
167
+ - align plan gate supersedes with runtime; trim reviewer rule
168
+ - match em-dash criteria in review_findings; correct placeholder message
169
+ - leave landed repair waves out of unreviewed_waves
170
+ - scope guard built-ins and worktree ownership correctly
171
+ - void wave reviews on any review_panel line change
172
+ - Cause: the PR's new test `test_validate_refuses_a_default_branch_that_cannot_be_recorded` (tests/test_members.py) wrote a MEMBERS.md row with `Checkout: /x`. On Windows `/x` is not an absolute path, so `members.py validate` stopped at the earlier check (`Checkout must be absolute`) and never reached the `Default branch` check. All 3 subtests failed on both Windows jobs (3.9 and 3.12, shard 2). The product code is correct. Invariant: a test row that targets one validation rule must be valid for every earlier rule on every OS. Sites checked in the changed area: - `test_validate_refuses_a_default_branch_that_cannot_be_recorded`: violated, fixed. - `repeated default branch` case in `test_validate_refuses_malformed_members_file` (also added by this PR, also uses `/x`): holds. It asserts only `MEMBERS.md` in stderr and passed on Windows. Not changed. Fix (1 line, test only): the row now uses `Checkout: {self.root / 'web'}`, which is absolute on each OS. This is the same pattern as the existing row at tests/test_members.py:190. Verification (macOS, local): - `python3 -m unittest tests.test_members -k default_branch`: 6 tests, OK. - Mutation check: with the `valid_default_branch` check in scripts/members.py disabled, the test fails with `failures=3`. The mutation was reverted; only tests/test_members.py is changed. - Not run on Windows locally. The Windows result depends on the next CI run. The change is not committed. The test-writer and ponytail skills were not invoked for this one-line test edit
173
+ - drop dash from cap value class, allow cost caps
174
+ - compare Config as raw text except cap values
175
+ - accept member-create rerun on row without default branch
176
+ - All 4 failing checks have one cause: the two new tests `test_land_staging_failure_reports_git_stderr` and `test_checkpoint_staging_failure_reports_git_stderr` in `tests/test_isolation.py` ("IsolationError not raised"). The fix is a test-only change in the helper `refuse_crlf_staging`; the product code is correct and is not changed. Root cause: the helper made `git add` fail with repository config `core.autocrlf=input` + `core.safecrlf=true`. The CI test runner (`scripts/dev/py.mjs`) sets `core.autocrlf=false` through `GIT_CONFIG_*` environment variables, and the environment overrides repository config. Thus on CI git did no CRLF conversion, `git add` passed, and no error was raised. The tests passed with plain `python3 -m unittest`, which is why the failure was not seen before the push. This is not an OS or git-version problem (Linux and Windows failed the same way). Invariant: a test that needs `git add` to fail must not depend on a git setting that the test runner overrides. The helper is the one shared boundary; only these two tests use it. No other test in this change sets `core.autocrlf`. Fix: the helper now writes `* text eol=lf` to `.git/info/attributes` (an attribute overrides `core.autocrlf`, and the file is outside the work tree, so it adds no pending path) and keeps `core.safecrlf=true`. The assertions are unchanged: they still require the error to end with git's stderr ("CRLF would be replaced by LF") and HEAD to stay at the base. Verification: - Reproduced the CI failure locally through `node scripts/dev/py.mjs` before the fix (2 failures). - After the fix the two tests pass through `node scripts/dev/py.mjs`, with plain `python3`, and with `core.autocrlf=true` forced through the environment. - Full `tests/test_isolation.py` through the CI runner: 155 tests, 1 failure. That failure is `RecoverTests.test_serial_task_recovers_after_only_project_bookkeeping_commits` (blocked subtest: verdict 'none', expected 'reconcile'). It also fails when run alone, it does not use the changed helper, the test and the recover code are not in this PR's diff, and CI reported only the two staging tests as failures. I did not change it. It looks like a local-environment difference (local git is 2.54, CI is 2.55), but I did not find its cause. Not run: the full repository suite and the Windows jobs (CI owns those)
177
+ - identify replaced-review repairs by history, not name
178
+ - split cap lines like the Config parser
179
+ - state Codex native hook needs trust in README
180
+ - keep cap lines with comment markers under Config guard
181
+ - correct canonical-file rule in CONTRIBUTING.md
182
+ - journal recovery_reviews so resumed approvals report dropped reviews
14
183
  ## [1.5.0] - 2026-10-09
15
184
 
16
185
  ### Added
package/DOCS.md CHANGED
@@ -36,6 +36,7 @@ DOCS.md (here) four journeys in one place
36
36
  | **Team** — pin skills in repo | `--local` install; see [Installing](#installing) |
37
37
  | **Shipping broke** — archive commit blocked | [HOOKS.md](HOOKS.md) (expected with hooks) |
38
38
  | **Several repos** — one milestone changes them all | [Multi-repo milestones](README.md#multi-repo-milestones) |
39
+ | **Several people** — one project | [Working with more than one person](FULL.md#working-with-more-than-one-person) |
39
40
 
40
41
  ---
41
42
 
@@ -101,9 +102,9 @@ README's Windows notes). **Always** restart the agent session after install.
101
102
 
102
103
  Full roots and invocation table: [README.md](README.md#install-summary).
103
104
 
104
- **Python installer:** `scripts/install.py` supports global and `--local`
105
- installs plus `--update`. The Node CLI remains the interactive wizard and npm
106
- entry point.
105
+ **Python installer:** `scripts/install.py`; see
106
+ [README.md](README.md#install-summary) for what it supports. The Node CLI
107
+ remains the interactive wizard and npm entry point.
107
108
  Help: `node scripts/install.mjs --help`
108
109
 
109
110
  ---
package/FULL.md CHANGED
@@ -8,7 +8,8 @@ Complete walkthrough from install to shipped milestone.
8
8
 
9
9
  **Contents:** [What it is](#what-gsd-path-is) · [Installation](#installation) ·
10
10
  [Starting a milestone](#starting-a-milestone) · [Phases](#phases-and-your-role) ·
11
- [Shipping](#shipping) · [Resume](#resume-and-recovery) · [Troubleshooting](#troubleshooting)
11
+ [Shipping](#shipping) · [Resume](#resume-and-recovery) ·
12
+ [More than one person](#working-with-more-than-one-person) · [Troubleshooting](#troubleshooting)
12
13
 
13
14
  **Related docs**
14
15
 
@@ -86,8 +87,8 @@ Use the [router and phase invocation table](README.md#install-summary) for your
86
87
  - **Python 3.9+** found as `python3`, `python`, or `py -3`; required for project
87
88
  installs, project refresh, and project-state
88
89
  doctor checks; optional for global-only Node installs. `scripts/install.py`
89
- mirrors global and `--local` install transactions and `--update`; it does not
90
- provide the interactive wizard
90
+ does not provide the interactive wizard; see
91
+ [README.md](README.md#install-summary) for what it supports
91
92
 
92
93
  ### Global install (default)
93
94
 
@@ -321,14 +322,18 @@ approve **Archive and ship**, the archive transaction begins:
321
322
  - `MANIFEST.md` records contents and ship metadata
322
323
  - One **ship commit** (subject `ship: M00N — <slug>`) touches only `.project/`
323
324
  - Ship then either merges `gsd-path/M00N` onto `main` directly or opens a
324
- GitHub PR and waits for you to merge it with a merge commit. Path-created PRs
325
- include a GSD Path credit footer.
326
- - After the two-parent merge validates, Path tags `milestone/<NNN>-<slug>`
325
+ GitHub PR and waits for you to merge it with a merge commit or a rebase
326
+ merge. Path-created PRs include a GSD Path credit footer.
327
+ - After the landing validates, Path tags `milestone/<NNN>-<slug>`
327
328
  - Archives are **read-only** — guard hooks enforce this if installed
328
329
 
329
330
  Direct integration is the project default. Before build, ask the router to set
330
331
  `pull-request` as the project default or as an override for the current
331
- milestone. The setting locks when build starts.
332
+ milestone. The setting locks when build starts. When origin is not GitHub.com
333
+ and `main` accepts merge requests only, set `external-landing`: Path publishes
334
+ the milestone branch, you merge it in your own forge with the merge message
335
+ that Path returns, and Path then validates the merge and tags it. See
336
+ [integration](WORKFLOW.md#integration).
332
337
 
333
338
  After `validate-integrated` passes, the next milestone starts clean on a new
334
339
  `gsd-path/M00N` cut from `origin/main`. Invoke the router again; brownfield
@@ -407,6 +412,62 @@ in force; see [the collection helper](scripts/isolation.py).
407
412
 
408
413
  ---
409
414
 
415
+ ## Working with more than one person
416
+
417
+ One operator drives a milestone. One checkout holds the bound branch
418
+ `gsd-path/M00N` and the `.project/` state of that milestone. A multi-repo
419
+ milestone does not change this: one coordinator checkout holds the state.
420
+
421
+ GSD Path does not record or check who approves a gate. The `STATE.md` log
422
+ keeps the date, the phase, and the event. The only name is the Git author of a
423
+ checkpoint commit, and GSD Path does not read it. Agree in your team who
424
+ approves.
425
+
426
+ **Supported**
427
+
428
+ - One person runs the router and approves the gates, in one checkout.
429
+ - Other people review and merge the result. Set `pull-request` integration
430
+ before build. Path opens the pull request and waits until a GitHub user
431
+ account merges it with a merge commit. Path does not check which user. With
432
+ `external-landing`, the review is the merge request in your own forge.
433
+ - A second session in the same checkout can ask for status and can run the
434
+ discussion skill. Status only reads. The discussion helper takes a lock and
435
+ only appends records.
436
+ - The desktop app and the monitor only read a watched project in the
437
+ background. Their explicit actions change install and configuration files.
438
+ They cannot advance a phase. See [daemon/README.md](daemon/README.md).
439
+
440
+ **Not protected**
441
+
442
+ - The locks are file locks on one computer, in one clone. They put helper
443
+ calls in sequence: state changes, approvals, discussion records, and
444
+ dispatch driver calls. A state change from an old view fails with
445
+ `expected state does not match`. A second dispatch driver call returns
446
+ `blocked`.
447
+ - The locks do not cover the files that agents write: the artifacts in
448
+ `.project/` and the product files. Two sessions that do phase work in one
449
+ checkout write to the same working tree.
450
+ - The locks do not reach a second clone. Each clone keeps its own `STATE.md`,
451
+ task landings, and approvals. GSD Path does not merge them. Ship stops
452
+ (`moved or collides`) when `origin` already has `gsd-path/M00N` from another
453
+ clone.
454
+ - You cannot share a milestone in progress through the remote. With
455
+ [guard hooks](HOOKS.md) installed, the pre-push hook refuses `gsd-path/M00N`
456
+ before its ship commit. It also refuses any other branch that carries the
457
+ unfinished state, unless the owner authorizes that exact commit (see
458
+ [HOOKS.md](HOOKS.md)). Hooks are optional and local to each clone. A clone
459
+ without hooks has no such check.
460
+
461
+ **Do not**
462
+
463
+ - Do not run the router or a phase skill for one milestone from two clones, or
464
+ from two sessions at the same time.
465
+ - Do not push `gsd-path/M00N` by hand, and do not merge another branch into
466
+ it.
467
+ - Do not squash or rebase the integration pull request or merge request.
468
+
469
+ ---
470
+
410
471
  ## Standalone docs audit
411
472
 
412
473
  `/gsd-path-docs-audit` runs between phases as a drift check. Findings get
package/HOOKS.md CHANGED
@@ -77,6 +77,29 @@ setups (Husky and friends) and linked worktrees (where `.git` is a file).
77
77
  Every selected host requires an initialized repository with a resolvable hooks
78
78
  directory; otherwise installation stops before writing.
79
79
 
80
+ ### Existing Git hooks
81
+
82
+ A repository can already have its own `pre-commit`, `commit-msg`, or `pre-push`
83
+ hook.
84
+
85
+ - **In the repository's own `.git/hooks`:** the installer keeps your hook as
86
+ `<hook>.gsd-path-chained` and writes the guard hook in its place. The guard
87
+ runs first. Your hook runs after it, with the same arguments and the same
88
+ `pre-push` input, only when the guard accepts. If the installation fails,
89
+ your hook is put back unchanged.
90
+ - **In a `core.hooksPath` directory (for example Husky) or a linked worktree:**
91
+ the installer stops with `cannot chain` and changes nothing. That directory
92
+ can be tracked or shared, so a rename there reaches other clones. Rename your
93
+ hook to `<hook>.gsd-path-chained` yourself, then rerun the installer. Commit
94
+ the rename when the directory is tracked.
95
+ - **`<hook>.gsd-path-chained` already exists beside a foreign hook:** the
96
+ installer stops. Decide which of the two files you want to keep.
97
+
98
+ Git hooks are local to a clone. A bot that merges on the server, such as
99
+ Renovate, never runs them, and its commits on the default branch do not
100
+ disturb milestone validation. A merge request can still conflict when the bot
101
+ and the milestone change the same file; Path does not resolve that conflict.
102
+
80
103
  Git hooks work for **any** agent that commits. Native guard wiring denies a tool
81
104
  call when its event is malformed or the guard cannot validate it.
82
105
 
@@ -128,9 +151,46 @@ See [UPDATE.md](UPDATE.md).
128
151
  the archive tree; shell operands count an ancestor only for deletion or move
129
152
  commands
130
153
  - `git reset --hard`, destructive `git clean` modes, force pushes (including
131
- `+` refspecs), destructive branch or ref deletion, `git branch -m`,
132
- `git worktree remove --force`, `git stash drop`/`clear`, and whole-tree
154
+ `+` refspecs), `git branch -m`, `git stash drop`/`clear`, and whole-tree
133
155
  `git checkout -- .`/`git restore .`
156
+ - forced branch deletion (`git branch -D`), `git update-ref` deletion, and
157
+ `git worktree remove --force` when the target is Path-owned: a `gsd-path/`,
158
+ `gsd-path-task/`, `gsd-path-verify/`, or `gsd-path-integrate/` branch, a
159
+ `refs/gsd-path/` ref, the bound `STATE.branch`, a task branch or worktree
160
+ that task frontmatter records, a worktree on one of these branches, and a
161
+ worktree below a managed worktree root (`~/.gsd-path`,
162
+ `GSD_PATH_WORKTREE_ROOT`, a pinned workspace root, or the earlier
163
+ `<repo>.gsd-path/` and `.<repo>-gsd-path-integrate-*` locations beside the
164
+ repository). The text `gsd-path` in a path does not make a worktree
165
+ Path-owned. Also Path-owned: the remote-tracking ref of one of these
166
+ branches (`origin/gsd-path/M001`), `refs/stash`, and a name that differs
167
+ from a recorded branch only in letter case. Other branches, refs, and
168
+ registered worktrees are allowed in each pipeline state. These three
169
+ commands are also denied when the guard cannot prove the target: a missing,
170
+ non-literal, or unregistered target, a shell parameter in the Git command
171
+ (`git -C "$dir" branch -D x`), a `~` or glob in a Git option value,
172
+ `update-ref --stdin`, an `update-ref` name outside `refs/` (`HEAD`) or an
173
+ option cluster (`-dm`), an `update-ref` deletion without `--no-deref` after
174
+ another Git command in the same command line, ownership metadata it cannot
175
+ read, a working directory that does not exist yet, or an `env` wrapper that
176
+ resets or unsets `HOME`, `XDG_CONFIG_HOME`, or a `GIT_*` variable. They are
177
+ denied too after a directory change the guard cannot model. Only
178
+ `cd <directory>` or `cd -- <directory>` is modeled, with one literal
179
+ directory that is absolute or starts with `./` or `../` (a shell with
180
+ `CDPATH` looks for a plain relative name in other directories). Another
181
+ command name (`pushd`, `chdir`), an option, a second operand, a redirection,
182
+ a `cd` in a subshell, pipeline, condition, function, alias, trap, or
183
+ comment line is not modeled. Use `git -C <directory>` there. A plain
184
+ redirection on the Git command (`2>/dev/null`, `>file`, `>>file`, `<file`,
185
+ `2>&1`, `&>file`) is not a target. A here-document, here-string, process
186
+ substitution, a redirection target that is not one literal word, or a
187
+ `# comment` after the command keeps the denial. So does a file
188
+ descriptor word of more than one digit or a `{name}` word against a
189
+ redirection (`10>file`, `{fd}>file`), because bash and zsh read that word
190
+ differently. With
191
+ such an `env` wrapper, or in a directory that does not exist yet, a Git
192
+ command that is not a built-in command is denied too, because its alias
193
+ cannot be inspected
134
194
  - shell writes (redirections, `tee`, `cp`, `mv`, `rm`, `sed -i`, ...) that
135
195
  target a routing control (`.git`, `.project/STATE.md`, `.project/next`,
136
196
  `.gsd-path`) while `.project/STATE.md` exists, or target a product file
@@ -291,6 +351,22 @@ such as `rm -rf scratch` passes the archive check; other guard rules still apply
291
351
  without `STATE.md` passes on an ordinary ref. An absent bound ref passes
292
352
  deletion. The authorized publisher is `archive_milestone.py integrate`;
293
353
  the hook checks ref updates, not which client initiated them
354
+ - **allows** an owner-approved push of unshipped work, such as a task
355
+ branch that CI must measure before the task can finish. The owner records
356
+ the exact commit for the exact branch, then pushes it:
357
+
358
+ ```bash
359
+ git update-ref refs/gsd-path/authorizations/<project>/push/refs/heads/<branch> <commit>
360
+ ```
361
+
362
+ `<project>` is the `project` field in that commit's `STATE.md`. The hook
363
+ accepts the push only at that commit; a later commit, such as one that
364
+ removes the measurement inputs, needs its own record. Bound `gsd-path/M###`
365
+ refs, the default branch, and tags never accept an authorization. The
366
+ authorization accepts every push of that commit to that branch until the
367
+ owner removes it with `git update-ref -d <same ref>`. Deleting the remote
368
+ branch afterwards needs no authorization. Only the owner records an
369
+ authorization; an agent asks the owner for one
294
370
  - **allows** adding files to archive during the ship transaction, before the
295
371
  branch closes
296
372
 
@@ -298,8 +374,8 @@ These local hooks cover pushes made by plain Git and clients that invoke
298
374
  Git with hooks enabled. Creating a PR from an already published ref does not
299
375
  run the pre-push hook. A branch cut from `main` carrying `shipped/done` passes;
300
376
  if `main` instead carries an unshipped bound state, pushes of branches carrying
301
- that state remain blocked until the milestone records are repaired through the
302
- pipeline.
377
+ that state remain blocked, except owner-authorized commits, until the
378
+ milestone records are repaired through the pipeline.
303
379
 
304
380
  ## GitHub-side gate
305
381
 
@@ -366,6 +442,7 @@ not intercept subagent tools — treat coverage as orchestrator-level.
366
442
  | `ship:` commit blocked with `app.py` staged | Ship commits may only touch `.project/` |
367
443
  | Tool denied editing archive | Pre-tool guard — use active paths, not archive |
368
444
  | Hook not running in Cursor | Run `--hooks-refresh-full --cursor --project /path/to/repo` |
445
+ | Installer stops with `cannot chain` | See [existing Git hooks](#existing-git-hooks): rename your hook to `<hook>.gsd-path-chained`, or remove the stale chained file, then rerun |
369
446
  | `--hooks-refresh` rejects an unmanaged guard | Move the foreign guard aside, then rerun refresh; use `--hooks-init` if guards are wanted |
370
447
  | Runtime missing, invalid, or legacy | Follow [runtime restoration or migration](DOCS.md#project-runtime-versions) |
371
448
 
package/MIGRATE.md CHANGED
@@ -10,6 +10,18 @@ selected project. Core history stays in `.planning/`; Path creates its own
10
10
  `.project/` state through the normal router. Core phase positions and completed
11
11
  plans do not become passed Path gates.
12
12
 
13
+ ## Requirements
14
+
15
+ - The default branch of `origin` can have any name, for example `master`.
16
+ Path initialization records it in `.project/STATE.md` as `default_branch`
17
+ and ships onto it. Run `git remote set-head origin --auto` before the first
18
+ Path run: an unset `origin/HEAD` records `main`. See
19
+ [default branch](WORKFLOW.md#default-branch).
20
+ - Pull-request shipping supports GitHub.com only. On GitLab, Gitea, or GitHub
21
+ Enterprise Server, ship with `direct`, or with
22
+ [`external-landing`](WORKFLOW.md#integration) when the default branch
23
+ accepts merge requests only.
24
+
13
25
  ## Start
14
26
 
15
27
  Install or update GSD Path using [the install guide](QUICK.md). In the Core
package/QUICK.md CHANGED
@@ -13,8 +13,10 @@
13
13
  One router skill drives a gated pipeline: inspect → define → research → decide →
14
14
  plan → build → ship. Every handoff lives in `.project/` so any session can resume from disk.
15
15
 
16
- **Hosts:** Codex, Claude Code, Grok, OpenCode, Copilot CLI, Qwen, Antigravity,
17
- Cursor, Zed, Kiro, Kimi Code, Muse Code.
16
+ **Hosts:** Codex, Claude Code, Grok, OpenCode, Antigravity, Cursor, and Kimi
17
+ Code have a passing live milestone for release 1.6.1. Copilot CLI, Qwen, Zed,
18
+ Kiro, and Muse Code install, but have no live milestone for that release. See
19
+ [host tiers](README.md).
18
20
 
19
21
  ---
20
22
 
package/README.md CHANGED
@@ -9,21 +9,29 @@ milestone loop. While a milestone builds, the next one can be planned in
9
9
  parallel under `.project/next/` (lookahead); a building milestone can also be
10
10
  abandoned on an explicit ruling, archiving its partial work for a re-slice.
11
11
 
12
- **Supported hosts:** Codex, Claude Code, Grok, OpenCode, GitHub Copilot CLI,
13
- Qwen Code, Antigravity CLI, Cursor, Zed, Kiro, Kimi Code, and Muse Code.
14
- Support means the installer and dispatch contract exist. See the
15
- [host trust matrix](https://github.com/open-gsd/gsd-path/blob/main/docs/trust-validation/HOST-MATRIX.md) for live milestone
16
- proof and each host's guard tier.
12
+ **Hosts with a passing full live milestone for release 1.6.1:** Codex, Claude
13
+ Code, Grok, OpenCode, Antigravity CLI, Cursor, and Kimi Code.
14
+
15
+ **Hosts with an installer and a dispatch contract, but no live milestone for
16
+ release 1.6.1:** GitHub Copilot CLI (account quota exhausted), Qwen Code, Zed,
17
+ and Kiro (API credits), and Muse Code (no live release evidence recorded yet).
18
+ These hosts are excluded from the release evaluation. Exclusion is not a pass.
19
+
20
+ With guard hooks installed, only Claude Code and Cursor get a fail-closed
21
+ native guard; every other host relies on Git hooks. The installer also writes a
22
+ native Codex hook, and it runs only after you trust it (see [HOOKS.md](HOOKS.md)).
23
+ The [host trust matrix](https://github.com/open-gsd/gsd-path/blob/main/docs/trust-validation/HOST-MATRIX.md)
24
+ is the source of truth for live milestone proof and each host's guard tier.
17
25
 
18
26
  <!-- release-docs -->
19
- **Latest npm release:** [@opengsd/gsd-path@1.5.0](https://www.npmjs.com/package/@opengsd/gsd-path/v/1.5.0) — [release notes](CHANGELOG.md#150---2026-10-09)
27
+ **Latest npm release:** [@opengsd/gsd-path@1.6.1](https://www.npmjs.com/package/@opengsd/gsd-path/v/1.6.1) — [release notes](CHANGELOG.md#161---2026-10-16)
20
28
 
21
29
  **Recent highlights**
22
- - record runtime hotfix provenance on the declaration
23
- - add signed self-update
24
- - add the Skills, Stats, Settings, and Environment pages and the setup wizard
25
- - register the hosts, project operation, and env routes
26
- - add project setup operations for the app
30
+ - accept GitHub rebase merges in pull-request integration
31
+ - run dispatch_driver subprocess helpers from the selected runtime
32
+ - refuse a relative model_policy --record and check release before locking
33
+ - let promote-next replace a DOCS-AUDIT carry-forward the lookahead keeps
34
+ - let the owner authorize one exact pre-ship push to a task branch
27
35
 
28
36
  <!-- /release-docs -->
29
37
 
@@ -120,7 +128,13 @@ contain newer changes.
120
128
 
121
129
  1. Open your project folder in your coding-agent host. Existing repositories
122
130
  need Git; GitHub repository creation and pull-request operations also need
123
- an authenticated GitHub CLI (`gh`).
131
+ an authenticated GitHub CLI (`gh`). The default branch of `origin` can have
132
+ any name: Path records it at initialization and ships onto it. This guide
133
+ calls it `main`; see [default branch](WORKFLOW.md#default-branch).
134
+ Pull-request
135
+ shipping supports GitHub.com only. On GitLab, Gitea, or GitHub Enterprise
136
+ Server, use the [`external-landing` mode](WORKFLOW.md#integration) when
137
+ the default branch accepts merge requests only.
124
138
  2. Start or reload the host session so it discovers the installed skills.
125
139
  3. Invoke `$path` in Codex, or `/path` on slash-command hosts. The router
126
140
  identifies the project and guides you through the required inputs and approvals.
@@ -151,6 +165,25 @@ project settings. Dashboard users can open **Settings → Path settings** for th
151
165
  same shipping, model/effort, and future review-panel controls. See
152
166
  [Path settings](skills/gsd-path/references/config.md) for precedence and locks.
153
167
 
168
+ ### Uninstall
169
+
170
+ ```bash
171
+ npx @opengsd/gsd-path@latest --uninstall --all --dry-run
172
+ npx @opengsd/gsd-path@latest --uninstall --all
173
+ ```
174
+
175
+ `--uninstall` removes the installed GSD Path skills from the selected hosts.
176
+ For Cursor it also removes the GSD Path subagent file. Use host flags instead
177
+ of `--all` to select hosts. For project-local skills, run the command from
178
+ your project directory and add `--local`. `--dry-run` shows each path and
179
+ removes nothing.
180
+
181
+ The command removes only GSD Path skills. It keeps other skills, host
182
+ settings, and `disabled-gsd-skills` backups. It makes no backup: changes that
183
+ you made in a GSD Path skill directory are lost. It does not remove project
184
+ contracts or hooks (`.project/`, `.gsd-path/`, the `AGENTS.md` block, guard
185
+ hooks). See [Uninstall skills](UPDATE.md#uninstall-skills).
186
+
154
187
  ## Desktop app
155
188
 
156
189
  The **OpenGSD Path app** shows your projects without opening each project's
@@ -358,12 +391,30 @@ partial remote/clone/worktree transaction; the default checkout stays clean.
358
391
  One project can change several repositories in the same milestone. The
359
392
  **coordinator** repo holds `.project/` and runs the pipeline; each other repo
360
393
  is a **member** listed in `.project/MEMBERS.md`. A member needs a GitHub.com
361
- `origin` whose default is `main`. See
394
+ `origin`. Its default branch can have any name, and it can differ from the
395
+ default branch of the coordinator and of the other members. See
362
396
  [ADR 0002](docs/adr/0002-multi-repo-coordinator.md) for the design.
363
397
 
398
+ `MEMBERS.md` has one section per member, in ship order. `members.py` writes
399
+ it; do not edit it by hand:
400
+
401
+ ```markdown
402
+ ## web
403
+ Checkout: /absolute/path/to/web
404
+ Remote: https://github.com/acme/web.git
405
+ Integration: default
406
+ Default branch: master
407
+ ```
408
+
409
+ `Default branch` is the member's default branch on `origin`. `members.py add`
410
+ records it one time, from the member's local `origin/HEAD`; run
411
+ `git remote set-head origin --auto` in the member first. A section without
412
+ the field means `main`. See [default branch](WORKFLOW.md#default-branch).
413
+
364
414
  - Add members at a milestone boundary: ask the router to add an existing repo
365
415
  (`members.py add`) or to create a new one (`members.py add --create`, after
366
- you approve the exact owner, name, visibility, and checkout). For optional
416
+ you approve the exact owner, name, visibility, and checkout; a new
417
+ repository uses `main`). For optional
367
418
  guard hooks, install them in the member with
368
419
  `npx @opengsd/gsd-path@latest --member-of <coordinator> --project <member>`.
369
420
  - The planner gives each member task `repo: <member>`; one task changes one
@@ -414,7 +465,8 @@ an atomic close across repos.
414
465
  Shipping moves milestone artifacts into `archive/` with a MANIFEST. It then
415
466
  either merges the milestone's `gsd-path/M00N` branch into `main` directly or
416
467
  opens/reuses a GitHub PR and waits for its user-controlled merge. Path reports
417
- shipped only after a two-parent merge and the milestone tag validate. Before
468
+ shipped only after the landing (a two-parent merge, or a proven GitHub rebase
469
+ merge of the PR) and the milestone tag validate. Before
418
470
  any next-milestone files change, the router binds
419
471
  a new `gsd-path/M00N` at the updated `origin/main`. `STATE.md`, `REPOSITORY.md`,
420
472
  `LESSONS.md`, `next/`, and the program artifacts (`CHARTER.md`, `ROADMAP.md`,
@@ -438,6 +490,7 @@ node scripts/install.mjs --all --local
438
490
  node scripts/install.mjs --all --project /path/to/project
439
491
  node scripts/install.mjs --update
440
492
  node scripts/install.mjs --all --update --project /path/to/project # refresh .gsd-path/; keeps contracts
493
+ node scripts/install.mjs --uninstall --all --dry-run # preview; removes skills only
441
494
  ```
442
495
 
443
496
  | Flag | User skills root | Invoke |
@@ -457,7 +510,7 @@ OpenCode stable: ask to load and use the `gsd-path` skill.
457
510
  `gsd-path` remains the canonical router name; `path` is its short menu alias.
458
511
  For a single phase, use `$gsd-path-plan` in Codex or `/gsd-path-plan` on slash hosts.
459
512
 
460
- `scripts/install.py` — Python install, including `--local` and `--update`.
513
+ `scripts/install.py` — Python install, including `--local`, `--update`, and `--uninstall`.
461
514
  The Node CLI remains the interactive and npm entry point. See [FULL.md](FULL.md) and
462
515
  [UPDATE.md](UPDATE.md) for `--hooks`, `--hooks-refresh`, `--local`, and host notes.
463
516