@opengsd/gsd-path 1.0.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 (398) hide show
  1. package/AGENTS.md +397 -0
  2. package/DOCS.md +341 -0
  3. package/FULL.md +475 -0
  4. package/GUIDE.md +23 -0
  5. package/HOOKS.md +273 -0
  6. package/LICENSE +21 -0
  7. package/MIGRATE.md +100 -0
  8. package/QUICK.md +146 -0
  9. package/README.md +280 -0
  10. package/RUNTIME.md +229 -0
  11. package/UPDATE.md +196 -0
  12. package/WORKFLOW.md +683 -0
  13. package/package.json +80 -0
  14. package/platforms/claude/dispatch.md +63 -0
  15. package/platforms/copilot/dispatch.md +61 -0
  16. package/platforms/cursor/agent.md +17 -0
  17. package/platforms/cursor/dispatch.md +63 -0
  18. package/platforms/grok/dispatch.md +61 -0
  19. package/platforms/kimi/dispatch.md +64 -0
  20. package/platforms/kiro/dispatch.md +58 -0
  21. package/platforms/opencode/dispatch.md +62 -0
  22. package/platforms/qwen/dispatch.md +60 -0
  23. package/platforms/shared-agents/dispatch.md +131 -0
  24. package/plugin.json +14 -0
  25. package/scripts/_common.py +180 -0
  26. package/scripts/archive_milestone.py +2265 -0
  27. package/scripts/bootstrap_repository.py +710 -0
  28. package/scripts/build_state.py +854 -0
  29. package/scripts/check_docs_audit.py +463 -0
  30. package/scripts/check_handoffs.py +1855 -0
  31. package/scripts/check_task_briefs.py +376 -0
  32. package/scripts/check_update.py +93 -0
  33. package/scripts/core_hook_gate.py +34 -0
  34. package/scripts/core_hook_settings.py +119 -0
  35. package/scripts/detect_project.py +1517 -0
  36. package/scripts/discussion_records.py +619 -0
  37. package/scripts/discussion_validate.py +1321 -0
  38. package/scripts/dispatch_driver.py +1812 -0
  39. package/scripts/git_guard.py +759 -0
  40. package/scripts/guard_hook.py +2124 -0
  41. package/scripts/install.mjs +3239 -0
  42. package/scripts/install.py +3008 -0
  43. package/scripts/integration.py +1433 -0
  44. package/scripts/isolation.py +3538 -0
  45. package/scripts/lean_verification.py +256 -0
  46. package/scripts/loop_run.py +837 -0
  47. package/scripts/migrate_core.py +169 -0
  48. package/scripts/pipeline_diagnose.py +715 -0
  49. package/scripts/pipeline_git.py +940 -0
  50. package/scripts/pipeline_state.py +2291 -0
  51. package/scripts/pipeline_undo.py +1039 -0
  52. package/scripts/promote_lookahead.py +415 -0
  53. package/scripts/review_findings.py +714 -0
  54. package/scripts/review_panel.py +553 -0
  55. package/scripts/skill-resources.json +340 -0
  56. package/scripts/state_checkpoint.py +1039 -0
  57. package/scripts/state_promote.py +743 -0
  58. package/scripts/status_runtime.py +122 -0
  59. package/scripts/sync_skill_resources.py +259 -0
  60. package/scripts/token_budget.py +146 -0
  61. package/scripts/wizard.mjs +179 -0
  62. package/scripts/workflow_run.py +117 -0
  63. package/skills/gsd-path/BUILD.md +700 -0
  64. package/skills/gsd-path/DECIDE.md +115 -0
  65. package/skills/gsd-path/DEFINE.md +297 -0
  66. package/skills/gsd-path/DOCS-AUDIT.md +190 -0
  67. package/skills/gsd-path/INSPECT.md +167 -0
  68. package/skills/gsd-path/PLAN.md +411 -0
  69. package/skills/gsd-path/RESEARCH.md +159 -0
  70. package/skills/gsd-path/ROADMAP.md +215 -0
  71. package/skills/gsd-path/SHIP.md +412 -0
  72. package/skills/gsd-path/SKILL.md +471 -0
  73. package/skills/gsd-path/agents/openai.yaml +6 -0
  74. package/skills/gsd-path/references/codebase-mapper.md +52 -0
  75. package/skills/gsd-path/references/coder.md +90 -0
  76. package/skills/gsd-path/references/decider.md +36 -0
  77. package/skills/gsd-path/references/dispatch.md +131 -0
  78. package/skills/gsd-path/references/docs-auditor.md +60 -0
  79. package/skills/gsd-path/references/planner.md +104 -0
  80. package/skills/gsd-path/references/researcher.md +42 -0
  81. package/skills/gsd-path/references/reviewer.md +188 -0
  82. package/skills/gsd-path/references/roadmapper.md +48 -0
  83. package/skills/gsd-path/scripts/_common.py +180 -0
  84. package/skills/gsd-path/scripts/archive_milestone.py +2265 -0
  85. package/skills/gsd-path/scripts/bootstrap_repository.py +710 -0
  86. package/skills/gsd-path/scripts/build_state.py +854 -0
  87. package/skills/gsd-path/scripts/check_docs_audit.py +463 -0
  88. package/skills/gsd-path/scripts/check_handoffs.py +1855 -0
  89. package/skills/gsd-path/scripts/check_task_briefs.py +376 -0
  90. package/skills/gsd-path/scripts/check_update.py +93 -0
  91. package/skills/gsd-path/scripts/detect_project.py +1517 -0
  92. package/skills/gsd-path/scripts/discussion_records.py +619 -0
  93. package/skills/gsd-path/scripts/discussion_validate.py +1321 -0
  94. package/skills/gsd-path/scripts/dispatch_driver.py +1812 -0
  95. package/skills/gsd-path/scripts/integration.py +1433 -0
  96. package/skills/gsd-path/scripts/isolation.py +3538 -0
  97. package/skills/gsd-path/scripts/lean_verification.py +256 -0
  98. package/skills/gsd-path/scripts/loop_run.py +837 -0
  99. package/skills/gsd-path/scripts/pipeline_git.py +940 -0
  100. package/skills/gsd-path/scripts/pipeline_state.py +2291 -0
  101. package/skills/gsd-path/scripts/promote_lookahead.py +415 -0
  102. package/skills/gsd-path/scripts/review_findings.py +714 -0
  103. package/skills/gsd-path/scripts/review_panel.py +553 -0
  104. package/skills/gsd-path/scripts/state_checkpoint.py +1039 -0
  105. package/skills/gsd-path/scripts/state_promote.py +743 -0
  106. package/skills/gsd-path/scripts/token_budget.py +146 -0
  107. package/skills/gsd-path/scripts/workflow_run.py +117 -0
  108. package/skills/gsd-path/templates/answers.md +29 -0
  109. package/skills/gsd-path/templates/archive-manifest.md +37 -0
  110. package/skills/gsd-path/templates/charter.md +50 -0
  111. package/skills/gsd-path/templates/codebase.md +46 -0
  112. package/skills/gsd-path/templates/dialogue.md +21 -0
  113. package/skills/gsd-path/templates/docs-audit.md +69 -0
  114. package/skills/gsd-path/templates/evidence.md +24 -0
  115. package/skills/gsd-path/templates/final-review.md +27 -0
  116. package/skills/gsd-path/templates/gap-review.md +20 -0
  117. package/skills/gsd-path/templates/intent.md +98 -0
  118. package/skills/gsd-path/templates/loop.md +59 -0
  119. package/skills/gsd-path/templates/patch-findings.md +16 -0
  120. package/skills/gsd-path/templates/plan-panel.md +25 -0
  121. package/skills/gsd-path/templates/plan.md +89 -0
  122. package/skills/gsd-path/templates/repository.md +16 -0
  123. package/skills/gsd-path/templates/research-handoff.md +25 -0
  124. package/skills/gsd-path/templates/roadmap.md +38 -0
  125. package/skills/gsd-path/templates/skeptic.md +36 -0
  126. package/skills/gsd-path/templates/state.md +27 -0
  127. package/skills/gsd-path/templates/synthesis.md +36 -0
  128. package/skills/gsd-path/templates/task.md +74 -0
  129. package/skills/gsd-path/templates/wave-panel.md +25 -0
  130. package/skills/gsd-path/templates/wave-review.md +64 -0
  131. package/skills/gsd-path-build/SKILL.md +700 -0
  132. package/skills/gsd-path-build/agents/openai.yaml +6 -0
  133. package/skills/gsd-path-build/references/coder.md +90 -0
  134. package/skills/gsd-path-build/references/dispatch.md +131 -0
  135. package/skills/gsd-path-build/references/reviewer.md +188 -0
  136. package/skills/gsd-path-build/scripts/_common.py +180 -0
  137. package/skills/gsd-path-build/scripts/archive_milestone.py +2265 -0
  138. package/skills/gsd-path-build/scripts/build_state.py +854 -0
  139. package/skills/gsd-path-build/scripts/check_handoffs.py +1855 -0
  140. package/skills/gsd-path-build/scripts/check_task_briefs.py +376 -0
  141. package/skills/gsd-path-build/scripts/discussion_records.py +619 -0
  142. package/skills/gsd-path-build/scripts/discussion_validate.py +1321 -0
  143. package/skills/gsd-path-build/scripts/dispatch_driver.py +1812 -0
  144. package/skills/gsd-path-build/scripts/integration.py +1433 -0
  145. package/skills/gsd-path-build/scripts/isolation.py +3538 -0
  146. package/skills/gsd-path-build/scripts/loop_run.py +837 -0
  147. package/skills/gsd-path-build/scripts/pipeline_git.py +940 -0
  148. package/skills/gsd-path-build/scripts/pipeline_state.py +2291 -0
  149. package/skills/gsd-path-build/scripts/review_findings.py +714 -0
  150. package/skills/gsd-path-build/scripts/review_panel.py +553 -0
  151. package/skills/gsd-path-build/scripts/state_checkpoint.py +1039 -0
  152. package/skills/gsd-path-build/scripts/state_promote.py +743 -0
  153. package/skills/gsd-path-build/scripts/token_budget.py +146 -0
  154. package/skills/gsd-path-build/scripts/workflow_run.py +117 -0
  155. package/skills/gsd-path-build/templates/skeptic.md +36 -0
  156. package/skills/gsd-path-build/templates/task.md +74 -0
  157. package/skills/gsd-path-build/templates/wave-panel.md +25 -0
  158. package/skills/gsd-path-build/templates/wave-review.md +64 -0
  159. package/skills/gsd-path-decide/SKILL.md +115 -0
  160. package/skills/gsd-path-decide/agents/openai.yaml +6 -0
  161. package/skills/gsd-path-decide/references/decider.md +36 -0
  162. package/skills/gsd-path-decide/references/dispatch.md +131 -0
  163. package/skills/gsd-path-decide/scripts/_common.py +180 -0
  164. package/skills/gsd-path-decide/scripts/check_handoffs.py +1855 -0
  165. package/skills/gsd-path-decide/scripts/check_task_briefs.py +376 -0
  166. package/skills/gsd-path-decide/scripts/discussion_records.py +619 -0
  167. package/skills/gsd-path-decide/scripts/isolation.py +3538 -0
  168. package/skills/gsd-path-decide/scripts/pipeline_git.py +940 -0
  169. package/skills/gsd-path-decide/scripts/pipeline_state.py +2291 -0
  170. package/skills/gsd-path-decide/scripts/state_checkpoint.py +1039 -0
  171. package/skills/gsd-path-decide/scripts/state_promote.py +743 -0
  172. package/skills/gsd-path-decide/templates/synthesis.md +36 -0
  173. package/skills/gsd-path-define/SKILL.md +297 -0
  174. package/skills/gsd-path-define/agents/openai.yaml +6 -0
  175. package/skills/gsd-path-define/scripts/_common.py +180 -0
  176. package/skills/gsd-path-define/scripts/check_handoffs.py +1855 -0
  177. package/skills/gsd-path-define/scripts/check_task_briefs.py +376 -0
  178. package/skills/gsd-path-define/scripts/detect_project.py +1517 -0
  179. package/skills/gsd-path-define/scripts/discussion_records.py +619 -0
  180. package/skills/gsd-path-define/scripts/isolation.py +3538 -0
  181. package/skills/gsd-path-define/scripts/pipeline_git.py +940 -0
  182. package/skills/gsd-path-define/scripts/pipeline_state.py +2291 -0
  183. package/skills/gsd-path-define/scripts/state_checkpoint.py +1039 -0
  184. package/skills/gsd-path-define/scripts/state_promote.py +743 -0
  185. package/skills/gsd-path-define/templates/charter.md +50 -0
  186. package/skills/gsd-path-define/templates/intent.md +98 -0
  187. package/skills/gsd-path-define/templates/state.md +27 -0
  188. package/skills/gsd-path-discuss/SKILL.md +162 -0
  189. package/skills/gsd-path-discuss/agents/openai.yaml +6 -0
  190. package/skills/gsd-path-discuss/scripts/_common.py +180 -0
  191. package/skills/gsd-path-discuss/scripts/discussion_records.py +619 -0
  192. package/skills/gsd-path-discuss/templates/answers.md +29 -0
  193. package/skills/gsd-path-discuss/templates/dialogue.md +21 -0
  194. package/skills/gsd-path-docs-audit/SKILL.md +190 -0
  195. package/skills/gsd-path-docs-audit/agents/openai.yaml +6 -0
  196. package/skills/gsd-path-docs-audit/references/dispatch.md +131 -0
  197. package/skills/gsd-path-docs-audit/references/docs-auditor.md +60 -0
  198. package/skills/gsd-path-docs-audit/scripts/_common.py +180 -0
  199. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +463 -0
  200. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +1855 -0
  201. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +376 -0
  202. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +619 -0
  203. package/skills/gsd-path-docs-audit/scripts/isolation.py +3538 -0
  204. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +940 -0
  205. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +2291 -0
  206. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +1039 -0
  207. package/skills/gsd-path-docs-audit/scripts/state_promote.py +743 -0
  208. package/skills/gsd-path-docs-audit/templates/docs-audit.md +69 -0
  209. package/skills/gsd-path-forensics/SKILL.md +39 -0
  210. package/skills/gsd-path-forensics/agents/openai.yaml +6 -0
  211. package/skills/gsd-path-forensics/scripts/_common.py +180 -0
  212. package/skills/gsd-path-forensics/scripts/discussion_records.py +619 -0
  213. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +715 -0
  214. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +1039 -0
  215. package/skills/gsd-path-inspect/SKILL.md +167 -0
  216. package/skills/gsd-path-inspect/agents/openai.yaml +6 -0
  217. package/skills/gsd-path-inspect/references/codebase-mapper.md +52 -0
  218. package/skills/gsd-path-inspect/references/dispatch.md +131 -0
  219. package/skills/gsd-path-inspect/references/docs-auditor.md +60 -0
  220. package/skills/gsd-path-inspect/scripts/_common.py +180 -0
  221. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +463 -0
  222. package/skills/gsd-path-inspect/scripts/check_handoffs.py +1855 -0
  223. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +376 -0
  224. package/skills/gsd-path-inspect/scripts/detect_project.py +1517 -0
  225. package/skills/gsd-path-inspect/scripts/discussion_records.py +619 -0
  226. package/skills/gsd-path-inspect/scripts/isolation.py +3538 -0
  227. package/skills/gsd-path-inspect/scripts/pipeline_git.py +940 -0
  228. package/skills/gsd-path-inspect/scripts/pipeline_state.py +2291 -0
  229. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +1039 -0
  230. package/skills/gsd-path-inspect/scripts/state_promote.py +743 -0
  231. package/skills/gsd-path-inspect/templates/codebase.md +46 -0
  232. package/skills/gsd-path-inspect/templates/docs-audit.md +69 -0
  233. package/skills/gsd-path-inspect/templates/state.md +27 -0
  234. package/skills/gsd-path-loop/SKILL.md +98 -0
  235. package/skills/gsd-path-loop/agents/openai.yaml +6 -0
  236. package/skills/gsd-path-loop/examples/ci-repair.LOOP.md +61 -0
  237. package/skills/gsd-path-loop/scripts/_common.py +180 -0
  238. package/skills/gsd-path-loop/scripts/discussion_records.py +619 -0
  239. package/skills/gsd-path-loop/scripts/loop_run.py +837 -0
  240. package/skills/gsd-path-loop/templates/loop.md +59 -0
  241. package/skills/gsd-path-migrate/SKILL.md +134 -0
  242. package/skills/gsd-path-migrate/agents/openai.yaml +6 -0
  243. package/skills/gsd-path-migrate/scripts/core_hook_gate.py +34 -0
  244. package/skills/gsd-path-migrate/scripts/core_hook_settings.py +119 -0
  245. package/skills/gsd-path-migrate/scripts/discussion_records.py +619 -0
  246. package/skills/gsd-path-migrate/scripts/migrate_core.py +169 -0
  247. package/skills/gsd-path-plan/SKILL.md +411 -0
  248. package/skills/gsd-path-plan/agents/openai.yaml +6 -0
  249. package/skills/gsd-path-plan/references/dispatch.md +131 -0
  250. package/skills/gsd-path-plan/references/planner.md +104 -0
  251. package/skills/gsd-path-plan/scripts/_common.py +180 -0
  252. package/skills/gsd-path-plan/scripts/check_handoffs.py +1855 -0
  253. package/skills/gsd-path-plan/scripts/check_task_briefs.py +376 -0
  254. package/skills/gsd-path-plan/scripts/discussion_records.py +619 -0
  255. package/skills/gsd-path-plan/scripts/isolation.py +3538 -0
  256. package/skills/gsd-path-plan/scripts/pipeline_git.py +940 -0
  257. package/skills/gsd-path-plan/scripts/pipeline_state.py +2291 -0
  258. package/skills/gsd-path-plan/scripts/review_panel.py +553 -0
  259. package/skills/gsd-path-plan/scripts/state_checkpoint.py +1039 -0
  260. package/skills/gsd-path-plan/scripts/state_promote.py +743 -0
  261. package/skills/gsd-path-plan/scripts/workflow_run.py +117 -0
  262. package/skills/gsd-path-plan/templates/patch-findings.md +16 -0
  263. package/skills/gsd-path-plan/templates/plan-panel.md +25 -0
  264. package/skills/gsd-path-plan/templates/plan.md +89 -0
  265. package/skills/gsd-path-plan/templates/task.md +74 -0
  266. package/skills/gsd-path-research/SKILL.md +159 -0
  267. package/skills/gsd-path-research/agents/openai.yaml +6 -0
  268. package/skills/gsd-path-research/references/dispatch.md +131 -0
  269. package/skills/gsd-path-research/references/researcher.md +42 -0
  270. package/skills/gsd-path-research/scripts/_common.py +180 -0
  271. package/skills/gsd-path-research/scripts/check_handoffs.py +1855 -0
  272. package/skills/gsd-path-research/scripts/check_task_briefs.py +376 -0
  273. package/skills/gsd-path-research/scripts/discussion_records.py +619 -0
  274. package/skills/gsd-path-research/scripts/isolation.py +3538 -0
  275. package/skills/gsd-path-research/scripts/pipeline_git.py +940 -0
  276. package/skills/gsd-path-research/scripts/pipeline_state.py +2291 -0
  277. package/skills/gsd-path-research/scripts/state_checkpoint.py +1039 -0
  278. package/skills/gsd-path-research/scripts/state_promote.py +743 -0
  279. package/skills/gsd-path-research/templates/evidence.md +24 -0
  280. package/skills/gsd-path-research/templates/research-handoff.md +25 -0
  281. package/skills/gsd-path-roadmap/SKILL.md +215 -0
  282. package/skills/gsd-path-roadmap/agents/openai.yaml +6 -0
  283. package/skills/gsd-path-roadmap/references/dispatch.md +131 -0
  284. package/skills/gsd-path-roadmap/references/roadmapper.md +48 -0
  285. package/skills/gsd-path-roadmap/scripts/_common.py +180 -0
  286. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +2265 -0
  287. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +1855 -0
  288. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +376 -0
  289. package/skills/gsd-path-roadmap/scripts/detect_project.py +1517 -0
  290. package/skills/gsd-path-roadmap/scripts/discussion_records.py +619 -0
  291. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +1321 -0
  292. package/skills/gsd-path-roadmap/scripts/integration.py +1433 -0
  293. package/skills/gsd-path-roadmap/scripts/isolation.py +3538 -0
  294. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +940 -0
  295. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +2291 -0
  296. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +415 -0
  297. package/skills/gsd-path-roadmap/scripts/review_panel.py +553 -0
  298. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +1039 -0
  299. package/skills/gsd-path-roadmap/scripts/state_promote.py +743 -0
  300. package/skills/gsd-path-roadmap/templates/roadmap.md +38 -0
  301. package/skills/gsd-path-ship/SKILL.md +412 -0
  302. package/skills/gsd-path-ship/agents/openai.yaml +6 -0
  303. package/skills/gsd-path-ship/references/dispatch.md +131 -0
  304. package/skills/gsd-path-ship/references/reviewer.md +188 -0
  305. package/skills/gsd-path-ship/scripts/_common.py +180 -0
  306. package/skills/gsd-path-ship/scripts/archive_milestone.py +2265 -0
  307. package/skills/gsd-path-ship/scripts/build_state.py +854 -0
  308. package/skills/gsd-path-ship/scripts/check_handoffs.py +1855 -0
  309. package/skills/gsd-path-ship/scripts/check_task_briefs.py +376 -0
  310. package/skills/gsd-path-ship/scripts/discussion_records.py +619 -0
  311. package/skills/gsd-path-ship/scripts/discussion_validate.py +1321 -0
  312. package/skills/gsd-path-ship/scripts/integration.py +1433 -0
  313. package/skills/gsd-path-ship/scripts/isolation.py +3538 -0
  314. package/skills/gsd-path-ship/scripts/lean_verification.py +256 -0
  315. package/skills/gsd-path-ship/scripts/pipeline_git.py +940 -0
  316. package/skills/gsd-path-ship/scripts/pipeline_state.py +2291 -0
  317. package/skills/gsd-path-ship/scripts/review_panel.py +553 -0
  318. package/skills/gsd-path-ship/scripts/state_checkpoint.py +1039 -0
  319. package/skills/gsd-path-ship/scripts/state_promote.py +743 -0
  320. package/skills/gsd-path-ship/scripts/workflow_run.py +117 -0
  321. package/skills/gsd-path-ship/templates/archive-manifest.md +37 -0
  322. package/skills/gsd-path-ship/templates/final-review.md +27 -0
  323. package/skills/gsd-path-ship/templates/gap-review.md +20 -0
  324. package/skills/gsd-path-ship/templates/patch-findings.md +16 -0
  325. package/skills/gsd-path-ship/templates/wave-review.md +64 -0
  326. package/skills/gsd-path-undo/SKILL.md +45 -0
  327. package/skills/gsd-path-undo/agents/openai.yaml +6 -0
  328. package/skills/gsd-path-undo/scripts/_common.py +180 -0
  329. package/skills/gsd-path-undo/scripts/discussion_records.py +619 -0
  330. package/skills/gsd-path-undo/scripts/pipeline_undo.py +1039 -0
  331. package/skills/path/BUILD.md +700 -0
  332. package/skills/path/DECIDE.md +115 -0
  333. package/skills/path/DEFINE.md +297 -0
  334. package/skills/path/DOCS-AUDIT.md +190 -0
  335. package/skills/path/INSPECT.md +167 -0
  336. package/skills/path/PLAN.md +411 -0
  337. package/skills/path/RESEARCH.md +159 -0
  338. package/skills/path/ROADMAP.md +215 -0
  339. package/skills/path/SHIP.md +412 -0
  340. package/skills/path/SKILL.md +471 -0
  341. package/skills/path/agents/openai.yaml +6 -0
  342. package/skills/path/references/codebase-mapper.md +52 -0
  343. package/skills/path/references/coder.md +90 -0
  344. package/skills/path/references/decider.md +36 -0
  345. package/skills/path/references/dispatch.md +131 -0
  346. package/skills/path/references/docs-auditor.md +60 -0
  347. package/skills/path/references/planner.md +104 -0
  348. package/skills/path/references/researcher.md +42 -0
  349. package/skills/path/references/reviewer.md +188 -0
  350. package/skills/path/references/roadmapper.md +48 -0
  351. package/skills/path/scripts/_common.py +180 -0
  352. package/skills/path/scripts/archive_milestone.py +2265 -0
  353. package/skills/path/scripts/bootstrap_repository.py +710 -0
  354. package/skills/path/scripts/build_state.py +854 -0
  355. package/skills/path/scripts/check_docs_audit.py +463 -0
  356. package/skills/path/scripts/check_handoffs.py +1855 -0
  357. package/skills/path/scripts/check_task_briefs.py +376 -0
  358. package/skills/path/scripts/check_update.py +93 -0
  359. package/skills/path/scripts/detect_project.py +1517 -0
  360. package/skills/path/scripts/discussion_records.py +619 -0
  361. package/skills/path/scripts/discussion_validate.py +1321 -0
  362. package/skills/path/scripts/dispatch_driver.py +1812 -0
  363. package/skills/path/scripts/integration.py +1433 -0
  364. package/skills/path/scripts/isolation.py +3538 -0
  365. package/skills/path/scripts/lean_verification.py +256 -0
  366. package/skills/path/scripts/loop_run.py +837 -0
  367. package/skills/path/scripts/pipeline_git.py +940 -0
  368. package/skills/path/scripts/pipeline_state.py +2291 -0
  369. package/skills/path/scripts/promote_lookahead.py +415 -0
  370. package/skills/path/scripts/review_findings.py +714 -0
  371. package/skills/path/scripts/review_panel.py +553 -0
  372. package/skills/path/scripts/state_checkpoint.py +1039 -0
  373. package/skills/path/scripts/state_promote.py +743 -0
  374. package/skills/path/scripts/token_budget.py +146 -0
  375. package/skills/path/scripts/workflow_run.py +117 -0
  376. package/skills/path/templates/answers.md +29 -0
  377. package/skills/path/templates/archive-manifest.md +37 -0
  378. package/skills/path/templates/charter.md +50 -0
  379. package/skills/path/templates/codebase.md +46 -0
  380. package/skills/path/templates/dialogue.md +21 -0
  381. package/skills/path/templates/docs-audit.md +69 -0
  382. package/skills/path/templates/evidence.md +24 -0
  383. package/skills/path/templates/final-review.md +27 -0
  384. package/skills/path/templates/gap-review.md +20 -0
  385. package/skills/path/templates/intent.md +98 -0
  386. package/skills/path/templates/loop.md +59 -0
  387. package/skills/path/templates/patch-findings.md +16 -0
  388. package/skills/path/templates/plan-panel.md +25 -0
  389. package/skills/path/templates/plan.md +89 -0
  390. package/skills/path/templates/repository.md +16 -0
  391. package/skills/path/templates/research-handoff.md +25 -0
  392. package/skills/path/templates/roadmap.md +38 -0
  393. package/skills/path/templates/skeptic.md +36 -0
  394. package/skills/path/templates/state.md +27 -0
  395. package/skills/path/templates/synthesis.md +36 -0
  396. package/skills/path/templates/task.md +74 -0
  397. package/skills/path/templates/wave-panel.md +25 -0
  398. package/skills/path/templates/wave-review.md +64 -0
@@ -0,0 +1,38 @@
1
+ # Roadmap — <program name>
2
+
3
+ <!-- Written and owned by $gsd-path-roadmap. Rolling-wave: milestone-granularity
4
+ scope for EVERY milestone; waves and tasks are planned only for the active
5
+ milestone. Never edit a shipped entry except its Status, Archive, and
6
+ Integrated fields; never edit an abandoned entry at all. Lives at
7
+ .project/ top
8
+ level and persists across milestones; it never archives. -->
9
+
10
+ ## Milestones
11
+
12
+ ### M001 — <slug>
13
+
14
+ Goal: <one sentence — the independently shippable outcome>
15
+ Depends on: [] # milestone ids; acyclic; earlier ids only
16
+ Surfaces: none # none | the human-facing surfaces this milestone
17
+ # delivers (web app, CLI, HTTP API). Each one needs a
18
+ # success criterion observable there.
19
+ Status: pending # pending | active | shipped | abandoned
20
+ Archive: null # .project/archive/<NNN>-<slug>/ recorded at ship
21
+ Integrated: null # optional; merge SHA of the integrate commit onto
22
+ # the remote default, filled after integration
23
+
24
+ Scope: in
25
+ - <deliverable sized capability>
26
+
27
+ Scope: out
28
+ - <explicit exclusion deferred to a later milestone or vetoed>
29
+
30
+ Success criteria
31
+ 1. <observable criterion the milestone's final review can check>
32
+
33
+ Risks
34
+ - <risk that could invalidate this milestone or its dependents>
35
+
36
+ Open questions
37
+ - None # any real question here inserts milestone-scoped
38
+ # research + decide before that milestone's planning
@@ -0,0 +1,412 @@
1
+ ---
2
+ name: gsd-path-ship
3
+ description: Verify a completed GSD Path milestone, manage evidence-backed patch decisions, request final shipping approval, and archive the validated result. Use only when the user explicitly invokes $gsd-path-ship or an active $gsd-path router or build orchestrator explicitly routes to this phase.
4
+ ---
5
+
6
+ # GSD Path Ship Phase
7
+
8
+ Reuse proven review scope; dispatch reviewers for remaining claims. They never fix
9
+ product code.
10
+
11
+ Routing instructions below are caller handoffs under the AGENTS.md handoff
12
+ rule; never invoke an explicit-only sibling skill yourself.
13
+
14
+ Require `pipeline: gsd-path/v2` in `.project/STATE.md`; a missing or different
15
+ marker returns to `$gsd-path` for ownership checking. Read the local
16
+ [reviewer role](references/reviewer.md) and
17
+ [dispatch contract](references/dispatch.md), resolve them to absolute paths,
18
+ and follow that runtime-specific dispatch contract. Resolve
19
+ `scripts/isolation.py` for verify sidecars; do not invent detached checkouts.
20
+ Resolve `scripts/build_state.py` for the landed-task proof and the verify
21
+ ledger.
22
+
23
+ This skill
24
+ verifies first and never archives or ships before explicit final approval.
25
+
26
+ Wave reviews are owned by the build orchestrator; this phase never runs them.
27
+
28
+ ## Final mode
29
+
30
+ If STATE.md has a concrete `archive` path and phase is `ship` or `shipped`,
31
+ skip ordinary final-mode preconditions and resume **Archive transaction**
32
+ below. Also enter archive recovery when STATE is `ship/active`, `archive` is
33
+ null, and the only otherwise-unexpected path is the deterministic
34
+ `.project/.STATE.md.gsd-path-tmp`; `prepare` removes that interrupted temp
35
+ before safely persisting a transaction identity. Moved artifacts are
36
+ transaction state, not missing inputs. A concrete archive in any other phase
37
+ blocks without mutation. Otherwise, first scan ANSWERS.md for pending required
38
+ follow-ups under AGENTS.md. Apply an answer addressed to
39
+ `gsd-path-ship` only through current review
40
+ artifacts. Pass the record's exact stored owner to `dispose` so the disposition
41
+ receipt preserves that durable owner name; use `gsd-path-ship` for new records.
42
+ If it changes approved intent/plan or names another owner, keep
43
+ `ship/blocked`, link ANSWERS.md and the target artifact, and ask the user
44
+ before dispatch or ship. Every `ship/blocked` write and the step 7 log-only
45
+ event use `pipeline_state.py transition` with expected `ship/active` and the
46
+ exact current branch and archive values: blocking passes `--set-status
47
+ blocked`; the log-only event passes `--set-status active` and the event text,
48
+ so the position is unchanged. Then:
49
+
50
+ 1. Require STATE `ship/active` produced and committed by the build
51
+ orchestrator, `.project/intent/INTENT.md`,
52
+ `.project/plan/PLAN.md`, all task files, all passing wave reviews, the bound
53
+ build branch, and no product or unrelated changes. On retry, existing
54
+ uncommitted assigned final-review outputs may remain. Resolve and record the
55
+ exact full reviewed `HEAD` before dispatch, then prove every task landed
56
+ through the runtime in step 3. Its landing check must return one
57
+ `proven-landed` or `attested` entry per task. For rebase recovery, see
58
+ `$gsd-path-build` step 1. Its receipt
59
+ `.project/build/rebase-adoption.json` may remain uncommitted only after
60
+ the runtime's `build_state.verify_landed_tasks` check passes. Keep bookkeeping in STATE.md
61
+ and assigned artifacts; never create extra `.project/` execution reports. Reuse an output only when its
62
+ `Reviewed HEAD` equals that SHA and the complete numbered gap-risk mapping
63
+ still equals the freshly derived risk list. Regenerate the exact assigned
64
+ output set when stale, removing only superseded `final-gap-N.md` files. A
65
+ stale committed output may be replaced or removed only when Git and
66
+ task logs prove it is the immediately preceding `ship/blocked` finding
67
+ set, the approved patch tasks copied every finding verbatim, and those tasks
68
+ are now done; otherwise it blocks. Git history preserves the superseded
69
+ finding, while final review itself still creates no pre-ship commit.
70
+ 2. Derive a stable numbered list of cross-wave integration risks from
71
+ interfaces and flows that span waves. List only genuine risks that could
72
+ plausibly fail; never pad the list. Include PLAN.md's project Verify as
73
+ numbered risk 1. The orchestrator runs that command once in step 3 and
74
+ writes its gap artifact; do not dispatch a gap reviewer for it. Resolve the local
75
+ [final-review template](templates/final-review.md),
76
+ [gap-review template](templates/gap-review.md), [patch-findings
77
+ template](templates/patch-findings.md), and `scripts/check_handoffs.py`.
78
+ 3. Run `python3 <absolute workflow_run.py> prepare-final --repo
79
+ <absolute primary> --expected-head <HEAD>` from this skill's bundled scripts.
80
+ This owns pending-discussion and landing checks, project Verify isolation,
81
+ execution, output recording, collection, cleanup, and final-review reuse.
82
+ Keep its JSON receipt; do not reconstruct those operations in shell calls.
83
+ Exact stdout/stderr live once in `.project/build/verify-ledger.jsonl`;
84
+ `final-gap-1.md` is the generated view referencing that entry. Re-entry at
85
+ the same command and commit reuses the execution, including a failed one,
86
+ and finishes interrupted collection without running the command again.
87
+ Missing legacy output requires evidence reconciliation, not a blind rerun.
88
+ Any non-zero result stops this step; preserve its stderr and diagnose through
89
+ the bundled forensics contract. Do not launch reviewers while project Verify
90
+ is failing. Record the command failure in STATE.md and link its gap evidence.
91
+
92
+ Read the final step's `result.final`. `reused: true` means FINAL.md already
93
+ proves final scope: do not dispatch `review_final` or rewrite it. For a
94
+ quick lane with one full wave, reuse requires a committed review explicitly
95
+ covering final scope, every success criterion and required walkthrough,
96
+ and unchanged product and approved contracts. The helper generates FINAL.md
97
+ as a view of that proof. Multiple waves, deep/verify-only reviews, missing
98
+ evidence, or changed inputs require fresh final review. Existing valid final
99
+ evidence at the current HEAD is also reused on retry.
100
+
101
+ 4. For each numbered risk other than project Verify without a reusable output,
102
+ dispatch one reviewer through the shared capacity-aware contract at the
103
+ exact reviewed HEAD. Use logical task name `review_gap_<number>` and assign only
104
+ `.project/review/final-gap-N.md`. Before each dispatch, create its distinct
105
+ sidecar with `python3 <absolute isolation.py> isolate-verify --repo
106
+ <absolute primary> --base <HEAD> --name review-gap-<number>` and supply the
107
+ returned path.
108
+ Review commands and staged outputs run only there, never in the primary
109
+ worktree. For every returned artifact, substitute its returned worktree,
110
+ branch, and assigned `.project/review/...` path into `python3 <absolute isolation.py> collect-artifact --repo <primary>
111
+ --source <worktree> --base <HEAD> --branch <branch> --source-path <assigned path>
112
+ --destination-path <assigned path>`. If replacing an admitted stale output,
113
+ include `--expected-destination <its recorded SHA-256>`. Require returned
114
+ fields to match, then run `python3 <absolute isolation.py> retire --repo
115
+ <primary> --worktree <worktree> --branch <branch>`. The helper must observe only
116
+ the assigned artifact in each sidecar. Model-written copies into the
117
+ primary do not count as collection.
118
+ After every gap artifact is present, reuse a valid FINAL.md admitted by
119
+ step 3 or create a fresh sidecar with `isolate-verify --name review-final`
120
+ and dispatch the integration reviewer under logical task name
121
+ `review_final`, assigning only
122
+ `.project/review/FINAL.md`. Its complete brief includes the exact recorded
123
+ project Verify ledger entry, every collected gap verdict so Overall verdict is
124
+ consistent with them, and PLAN.md's `## Surface contract` when INTENT.md
125
+ names surfaces — that reviewer performs each Walkthrough and records the
126
+ surface and what it showed on every criterion the contract lists. Collect FINAL.md and retire its sidecar through the
127
+ same helper flow.
128
+ 5. Only after `final-gap-1.md` and every dispatched reviewer artifact have
129
+ been collected and all review sidecars retired, validate every artifact.
130
+ Every success criterion is `met`, `not-met`, or
131
+ `unverifiable` with checked evidence; every gap is `pass` or `blocked` with
132
+ checked evidence. Every output must record the same exact full reviewed
133
+ HEAD, and each numbered gap heading and Risk value must match its dispatch
134
+ risk. Run
135
+ `python3 <absolute check_handoffs.py> final --repo <absolute repo root>`
136
+ before any archive question: FINAL.md needs one `### SCn — ...` block per
137
+ INTENT success criterion, `Overall verdict: pass` requires every
138
+ verdict `met` with a non-`none` Check or Reference, and every criterion
139
+ listed in PLAN.md's Surface contract requires a matching `Surface` field
140
+ and a non-`none` Check. A non-zero exit is
141
+ `ship/blocked`; never rerun project Verify to repair the evidence.
142
+ 6. Redispatch one complete corrected brief for a missing or invalid reviewer
143
+ artifact under the same logical task name, following the runtime dispatch
144
+ contract. Before dispatch, record the invalid destination's exact SHA-256.
145
+ Give the retry a fresh verify sidecar, collect its corrected artifact with
146
+ the same `collect-artifact` command plus
147
+ `--expected-destination <recorded SHA-256>`, retire the sidecar, and rerun
148
+ the final handoff gate. If it remains invalid, set `ship/blocked` with
149
+ the exact contract failure and a `NEEDS-USER` dispatch-failure entry. Present
150
+ **Outcome** with the invalid output, **Review** linking that output or
151
+ STATE.md when it is missing, and **Next** naming the required correction;
152
+ then stop and do not invent a patch finding. A `not-met`,
153
+ `unverifiable`, or blocked gap with valid evidence sets `ship/blocked`,
154
+ writes `.project/review/PATCH-FINDINGS.md` from the patch-findings template,
155
+ and runs `python3 <absolute check_handoffs.py> patch --repo <absolute repo
156
+ root>`. Present the blocked outcome, link the resolved absolute
157
+ PATCH-FINDINGS.md path, and state that patch planning is next. The manifest
158
+ contains exactly those FINAL.md and gap rows. When routed by an active
159
+ `$gsd-path`, return control so its bundled plan contract opens patch mode.
160
+ When invoked directly, stop and tell the user to explicitly invoke
161
+ `$gsd-path`, which routes those sources to plan patch mode; do not invoke an
162
+ explicit-only sibling skill yourself. Ship never writes tasks or PLAN.md.
163
+ The patch build commits this prior finding set with the approved patch
164
+ artifacts before execution.
165
+ 7. Only when every criterion is `met`, every gap passes, project Verify passes,
166
+ and no required discussion follow-up is pending, keep STATE.md at `phase:
167
+ ship`, `status: active`, append `final gate passed; shipping approval
168
+ pending`. Present **Outcome** with the final verdict, **Review** linking the
169
+ resolved absolute FINAL.md path and summarizing the gap artifacts, and
170
+ **Next** asking whether to `Archive and ship (recommended)` or `Stop for
171
+ review`. The recommendation is grounded in the passing gates. Begin the
172
+ transaction below only after approval; declining leaves review active and
173
+ makes no archive mutation. Do not mark or report `shipped` yet.
174
+
175
+ ## Archive transaction
176
+
177
+ Resolve the project's guard-owned `.gsd-path/runtime/archive_milestone.py` and
178
+ `.gsd-path/runtime/pipeline_state.py` to absolute paths for `prepare`,
179
+ `render-manifest`, `preflight`, `record-shipment`, `validate`, `integrate`, and
180
+ `validate-integrated`. Invoke them with `python3`; the files need not be
181
+ executable. Skill-bundle copies are not the guard's trust anchor, even when
182
+ byte-identical. The archive helper is the sole MANIFEST.md and integration writer.
183
+ The persisted `STATE.archive` field is the transaction identity.
184
+
185
+ 1. Normally require STATE `ship/active`, the bound build branch, and no
186
+ non-`.project` change. The sole crash-recovery exception is
187
+ `shipped/done` with a concrete target that is absent from HEAD; this is an
188
+ uncommitted transaction and resumes without rewinding STATE. On every
189
+ initial run or retry, run:
190
+ `python3 <absolute archive_milestone.py> prepare --repo <root> --slug <STATE.milestone>`.
191
+ On a fresh transaction, `prepare` refuses a `review/FINAL.md` whose
192
+ `Reviewed HEAD` differs from current HEAD, before persisting STATE.archive
193
+ or creating archive directories. Regenerate the final review for the current
194
+ commit before archiving; preflight and validation retain their own checks.
195
+ The helper strict-loads STATE.md, requires its canonical `gsd-path/M00N`
196
+ branch with `N >= 1` to equal the next collision-free archive sequence,
197
+ rejects any `000-*` archive entry, and writes the exact
198
+ `.project/archive/<NNN>-<slug>` path atomically to STATE.md before moving
199
+ anything, and then moves the active milestone. On every retry run
200
+ the same command; it reuses STATE.archive and never recomputes N.
201
+ 2. The helper requires exactly one of each active or archived top-level
202
+ artifact, permits active and archived `research/` together only for the
203
+ byte-identical pending DOCS-AUDIT carry-forward, and recreates its parent
204
+ before an atomic copy. Any other collision or missing artifact blocks.
205
+ For a non-off PLAN review-panel policy it also requires exactly one plan
206
+ resolution artifact: `review/PLAN-PANEL.md` for `ready`, or the exact
207
+ helper JSON in `review/PLAN-PANEL.skipped.json` for `skipped`. Each full or
208
+ deep wave cycle likewise requires exactly one merged `.panel.md` artifact
209
+ or exact `.panel.skipped.json` receipt. Configuration alone never proves
210
+ that a panel was ready or skipped.
211
+ 3. Append milestone lessons to `.project/LESSONS.md` (create it when
212
+ missing): one line per repeat-offender criterion across this milestone's
213
+ wave reviews and one per escalation in the STATE.md log, formatted
214
+ `- <NNN>-<slug> — <lesson>`. Skip the file entirely when there are none.
215
+ LESSONS.md stays in the active root across milestones — it ships inside
216
+ the ship commit but never archives — and the planner reads it. The same
217
+ persistence applies to program artifacts when present: CHARTER.md,
218
+ ROADMAP.md, and a top-level program SYNTHESIS.md ship in the commit but
219
+ never archive.
220
+ Then run `python3 <absolute archive_milestone.py> render-manifest --repo <root>`. The helper derives final verdicts, wave/task/cycle counts,
221
+ carry-forward count, and the exact archive inventory, then atomically
222
+ replaces MANIFEST.md through its deterministic same-directory temporary.
223
+ Never render or edit the manifest directly. `prepare` removes that exact
224
+ temporary after a crash. If the target exists in HEAD, `prepare` and
225
+ `render-manifest` refuse mutation and the only valid action is `validate`.
226
+ 4. Run `python3 <absolute archive_milestone.py> preflight --repo <root>` while
227
+ STATE is `ship/active`, or while it is `shipped/done` in the uncommitted
228
+ crash window above. It validates Git root/branch, current target absence from
229
+ HEAD, immutable older archives, canonical real files, exact active-root
230
+ allowlist and carry-forward, reviewed revision, manifest metadata and
231
+ criteria against FINAL.md, exact ordered PLAN wave task/title rows with
232
+ non-placeholder evidence for every task and owned success criterion, actual
233
+ cycle counts, completed Notes, and the exact file inventory. Canonical
234
+ `wave-N.cycleC.repair-T###.json` receipts are auxiliary evidence, not review
235
+ verdicts; their payload identity must match their filename. Same-wave repair
236
+ tasks enter review coverage only after their receipt's source cycle, and a
237
+ later review cycle is required. Concrete evidence may contain generic types
238
+ such as `Result<T>` or comparisons. Markdown code spans with matching
239
+ backtick delimiters may contain placeholder-shaped quoted evidence, such
240
+ as `Queues unavailable: <stored reason>`. A whole value containing only
241
+ `<record observation>` remains invalid, even inside a code span; unquoted
242
+ template placeholders also remain invalid.
243
+ Immediately
244
+ before this command, recheck for an active
245
+ `discuss/` copy created after prepare; if present, rerun `prepare`, regenerate
246
+ MANIFEST.md by rerunning `render-manifest`, and only then preflight. Do not
247
+ commit when it fails. A failure over a missing or non-canonical review
248
+ artifact is never repaired by writing, splitting, or renaming a review
249
+ file after the fact; report it and let the user rule — a new review cycle
250
+ at the current HEAD is the only artifact-producing remedy. The archive helper independently binds every FINAL.md
251
+ `SCn` heading id and normalized text to the archived INTENT.md; a renamed or
252
+ easier criterion blocks even if the earlier handoff gate was bypassed.
253
+ 5. Only after preflight passes, record shipment through the journaled helper;
254
+ for a program it atomically replaces both ROADMAP.md and STATE.md, setting
255
+ the current entry to `Status: shipped` with the exact `Archive:` pointer:
256
+
257
+ ```bash
258
+ python3 <absolute pipeline_state.py> record-shipment --repo <root> --archive <STATE.archive> --event "archive preflight passed; shipment recorded"
259
+ ```
260
+
261
+ Require the returned state to be `shipped/done` with the unchanged branch
262
+ and archive. When this was the last pending roadmap entry, use the event
263
+ `archive preflight passed; shipment recorded; program complete` instead.
264
+ When CHARTER.md and ROADMAP.md are both absent, this same command preserves
265
+ the single-milestone flow and updates STATE.md only.
266
+ Retry this exact command after interruption; it resumes its journal and is
267
+ idempotent after completion. Stage only
268
+ `.project/` paths, inspect the staged path list against the transaction and
269
+ create the ship phase's one commit with exact subject
270
+ `ship: M00N — <milestone-slug>` and a body of exactly two consecutive lines,
271
+ `Archive: .project/archive/<NNN>-<slug>` then
272
+ `Reviewed-HEAD: <reviewed SHA>`, with no comment lines or blank line between them
273
+ (pass the body as one `-m` value or from a message file). M00N and NNN come from STATE.archive.
274
+ There is no untracked-project exception and no product or older-archive
275
+ path may enter this commit.
276
+ 6. Immediately run `python3 <absolute archive_milestone.py> validate --repo <root>`. It requires the committed shipped state, exact archive and
277
+ manifest, valid carry-forward, no active milestone artifacts, a clean
278
+ worktree, exactly one current-milestone commit with the canonical ship
279
+ subject and body in first-parent history, only `.project/` paths in that
280
+ commit, and bound-worktree HEAD exactly equal to that ship commit. Any
281
+ later product or `.project/` commit blocks validation. A passing validate completes the
282
+ archive transaction; record its returned archive path and full commit
283
+ SHA, and link the archived MANIFEST.md as the final review surface. The
284
+ milestone is not shipped until integration below passes.
285
+ 7. Integrate only after the postcommit `validate` passes, with the recorded
286
+ ship commit and exact reviewed HEAD unchanged. Run `python3 <absolute archive_milestone.py> integrate --repo <root> --slug <STATE.milestone>`.
287
+ This helper validates the ship commit, fetches origin, requires remote
288
+ default `main`, and follows the locked `STATE.integration` mode:
289
+
290
+ - `direct` owns the resumable merge transaction. It creates the canonical
291
+ named integration worktree, performs the hook-verified `--no-ff` merge,
292
+ refuses to resolve conflicts, creates the annotated milestone tag, pushes
293
+ main then the bound branch then the tag, and removes its worktree and
294
+ branch. Before publishing the bound branch it reads the live origin ref:
295
+ absence is created with an absent-ref lease, the exact ship commit is an
296
+ idempotent success, an owner-adopted rebased milestone (archived
297
+ `build/rebase-adoption.json`) may advance the ref from the adopted head
298
+ to its immediate, canonical `.project/`-only ship child under an exact-SHA
299
+ lease after the helper proves the clean ship state, receipt, and archived
300
+ tasks. Every other value blocks. If origin/main advances
301
+ after the local merge but rejects the push, a retry may discard and
302
+ rebuild only the unpublished canonical merge and tag under the helper's
303
+ existing recovery checks.
304
+ - `pull-request` requires `gh` authentication for GitHub.com and a
305
+ GitHub.com origin. It publishes the exact ship commit, reuses only the
306
+ single PR from origin's bound branch at that commit or creates one with
307
+ the canonical integration title and body plus the GSD Path credit footer.
308
+ Any competing PR to `main` at the ship commit blocks. While the eligible
309
+ PR is open, the helper returns `status: awaiting-merge`. Present
310
+ **Outcome**, link
311
+ the returned PR as **Review**, and state in **Next** that the user must
312
+ merge it with GitHub's merge-commit method. Stop this ship invocation;
313
+ Path never enables auto-merge or merges the PR. On rerun after a human
314
+ GitHub user merges it, the helper requires the PR head to remain the ship
315
+ commit and its landing to be a two-parent merge with that ship commit as
316
+ second parent on `origin/main` first-parent history. It then writes and
317
+ pushes the annotated milestone tag containing the PR URL, ship SHA, and
318
+ landing SHA. A closed unmerged PR, squash, rebase, merge queue, moved
319
+ head, duplicate PR, or non-GitHub.com origin blocks. The remote bound
320
+ branch may be absent after a valid merge because GitHub may auto-delete it.
321
+
322
+ A passing run returns the same proof exposed by `validate-integrated`.
323
+ A non-zero result blocks; rerun the exact `integrate` command to resume a
324
+ safe partial transaction instead of repairing refs or Git state manually.
325
+ An integration conflict is not a safe retry: the helper aborts the merge
326
+ and leaves the closed milestone branch unchanged. Invoke
327
+ `$gsd-path-forensics` and obtain a user-approved recovery plan before
328
+ continuing. Never merge into or re-ship the closed branch.
329
+ For a later validation recheck with origin network access, run
330
+ `python3 <absolute archive_milestone.py> validate-integrated --repo <root> --slug <STATE.milestone>`.
331
+ Both integration modes refresh the remote-default and mirrored milestone-tag
332
+ refs when an `origin` remote exists. Without that remote, validation resolves
333
+ the existing remote-default refs locally, preserving offline direct-mode
334
+ fixtures. PR mode also revalidates the PR identity, state, merge provenance,
335
+ and live branch and tag publication.
336
+ Report shipped only when the integration result passes.
337
+ Leave the primary worktree and STATE.branch on the shipped
338
+ `gsd-path/M00N` at the ship commit. The router owns the later handoff to a
339
+ new milestone branch after this gate.
340
+ 8. If a crash occurs before STATE's atomic rename, discard only the exact
341
+ deterministic state temp through `prepare`. If it occurs after STATE becomes
342
+ `shipped/done` but before commit, run `prepare` and `preflight` under the
343
+ explicit uncommitted exception, then create the one ship commit. Resume the
344
+ named transaction even when active final-review inputs have moved. If the
345
+ target exists in HEAD, validate it rather than running `prepare` or creating
346
+ another commit. Any inconsistent committed transaction blocks; never
347
+ mutate a committed archive.
348
+ The fourth crash window is integration. Its transaction id is the ship
349
+ commit, and partial merge, tag, push, and cleanup states are resumed only by
350
+ rerunning `integrate`; it reuses NNN from STATE.archive. While integration
351
+ is pending, never report shipped or start the next milestone; route back to
352
+ ship.
353
+
354
+ ## Published validation recovery
355
+
356
+ Use this recovery only when STATE is `shipped/done`, the archive and ship
357
+ commit are already published, and `validate-integrated` is blocked by a defect
358
+ fixed in a newer trusted GSD Path checkout. Never run `prepare`,
359
+ `render-manifest`, `preflight`, `record-shipment`, or `integrate`, and never
360
+ edit the committed archive, STATE.md, Git history, or published refs and tags.
361
+ Only the validation checkout's local refs may be refreshed by the commands below.
362
+ Run this recovery setup from a separate checkout, outside the closed primary
363
+ worktree's guard.
364
+
365
+ 1. Create separate disposable trust and validation checkouts from the same
366
+ published origin and `STATE.branch`. This separation is required because a
367
+ managed runtime refresh may dirty a checkout when `.gsd-path/` is tracked,
368
+ while archive validation requires a clean checkout. Never use the primary
369
+ worktree for either role.
370
+ 2. From the trusted fixed GSD Path checkout, preview and then refresh only the
371
+ disposable trust checkout's managed trust anchor:
372
+
373
+ ```bash
374
+ node <trusted-gsd-path>/scripts/install.mjs --hooks-refresh --dry-run --project <trust-root>
375
+ node <trusted-gsd-path>/scripts/install.mjs --hooks-refresh --project <trust-root>
376
+ ```
377
+
378
+ Continue only when the preview names managed `.gsd-path/` runtime or guard
379
+ files and no `.project/` path. The installer owns the atomic refresh and
380
+ refuses unmanaged or unsafe runtime entries.
381
+ 3. Use only the refreshed project-local trust anchor to refresh publication
382
+ refs in the clean validation checkout and validate its integrated milestone:
383
+
384
+ ```bash
385
+ python3 <trust-root>/.gsd-path/runtime/archive_milestone.py refresh-origin --repo <validation-root>
386
+ python3 <trust-root>/.gsd-path/runtime/archive_milestone.py validate-integrated --repo <validation-root> --slug <STATE.milestone>
387
+ ```
388
+
389
+ 4. A pass restores the normal shipped handoff without another commit or
390
+ publication action. Remove only the disposable checkouts. A failure is a
391
+ new validation finding: report it with the primary worktree's archived
392
+ MANIFEST.md and stop. Never repair an already-committed archive to satisfy
393
+ a newer validator.
394
+
395
+ Legacy ship and integration subjects may be ignored only while scanning older
396
+ milestones. They never satisfy the current milestone transaction. Current
397
+ validation requires exactly one canonical ship commit. Direct integration
398
+ also requires the canonical integration subject and body; PR integration uses
399
+ the exact PR metadata, annotated tag metadata, and merge topology instead.
400
+
401
+ ## Rules
402
+
403
+ - Judge written expectations only: INTENT.md criteria in final mode, walked
404
+ through PLAN.md's Surface contract for every criterion covering a surface.
405
+ - Require criterion, observed result, exact file or command evidence, and fix
406
+ direction for every failure.
407
+ - Warn on ambiguity, but do not invent stronger requirements.
408
+ - Never count `unverifiable`, an unreviewed risk, or an unvalidated archive as
409
+ shipped.
410
+ - Never merge or back-merge into the bound branch; ship's integration is its
411
+ only path to the default branch. Never enter the default checkout; its
412
+ local default branch ref may lag origin.
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "GSD Path Ship"
3
+ short_description: "Verify, approve, archive, and ship"
4
+ default_prompt: "Use $gsd-path-ship to verify the completed milestone and request final shipping approval."
5
+ policy:
6
+ allow_implicit_invocation: false
@@ -0,0 +1,131 @@
1
+ # Shared Agent Skills dispatch
2
+
3
+ Apply this contract whenever a GSD Path skill delegates work from the shared
4
+ `~/.agents/skills` bundle. Inspect the advertised child-agent tool schema and
5
+ use exactly one matching branch:
6
+
7
+ - A `spawn_agent` tool exposing `task_name`, `agent_type`, and `fork_turns` is
8
+ Codex. Use `fork_turns: "none"`; coders use the built-in `worker` type and
9
+ every other role uses `default`. Reuse a completed logical target with
10
+ `followup_task`. For Codex reasoning effort, use `high` for the portable
11
+ `heavy` tier and `low` for the portable `light` tier; leave reasoning effort
12
+ unset for the session-default tier, and never pass `heavy` or `light` as a
13
+ literal Codex value.
14
+ - A `spawn_agent` tool without those Codex fields is Zed. Spawn one isolated,
15
+ full-capability child per brief. Zed children are not resumable, so retries
16
+ use a fresh child and a complete prompt.
17
+ - An `invoke_subagent` tool advertising `TypeName`, `Workspace`, and `Role` is
18
+ Antigravity. Use `TypeName: self`, the exact supplied root as `Workspace`,
19
+ and the logical task name as `Role`. Keep the returned child ID and use
20
+ `send_message` for follow-up work when available; otherwise start a fresh
21
+ child with the complete prompt.
22
+ - A `spawn_subagent` tool advertising the `general-purpose` type is Grok. Use
23
+ `subagent_type: general-purpose`, `capability_mode: all`, the exact supplied
24
+ root as `cwd`, `isolation: none`, and `background: true`. Supply the logical
25
+ task name as `description`, keep the returned ID, and use `resume_from` with
26
+ the complete new prompt for later work. Wait for a colliding active child and
27
+ collect results with `wait_commands_or_subagents`.
28
+ - A `Task` tool advertising the custom `gsd-path` subagent is Cursor. Use that
29
+ model-inheriting, full-capability child. Resume it by returned agent ID when
30
+ available; otherwise retry with a fresh child and a complete prompt.
31
+ - A `Task` tool advertising the built-in `general` subagent is OpenCode. Use
32
+ that child; if an installed OpenCode v2 host exposes the renamed `subagent`
33
+ tool instead, use its advertised schema with the built-in `general` agent.
34
+ Supply the logical task name as the child description. Reuse a returned
35
+ child-session ID only when the host advertises a resume parameter; otherwise
36
+ use a fresh `general` child and the complete prompt.
37
+ - A `task` tool advertising the `general-purpose` child is GitHub Copilot CLI.
38
+ Use that child. Keep its returned ID for follow-up while the host exposes
39
+ it; otherwise retry with a fresh child and a complete prompt.
40
+ - An `invoke_sub_agent` tool with a `general-purpose` subagent is Kiro. Use
41
+ that child for every role; there is no worker/default type split. Start a
42
+ fresh general-purpose child for every correction, retry, post-patch review,
43
+ repeated audit, or later milestone — Kiro subagents are not resumable and
44
+ disk artifacts are the source of truth. Supply the logical task name as the
45
+ task description. Set the child working directory to the exact repository or
46
+ linked-worktree root supplied by GSD Path; do not ask Kiro or the child to
47
+ create another worktree. Encode task dependencies explicitly; launch
48
+ independent children concurrently up to the host's advertised
49
+ concurrent-subagent capacity.
50
+
51
+ For every branch:
52
+
53
+ - Supply the deterministic logical task name: `inspect_codebase`,
54
+ `inspect_docs`, `docs_audit`, `research_<dimension>`, `decide`, `roadmap`,
55
+ `plan`,
56
+ `plan_patch`, `build_<task_id>`, `review_wave_<wave>_cycle_<cycle>`
57
+ (a `deep` wave review appends the lens suffix `_contract` or
58
+ `_adversarial`; an optional review panel uses
59
+ `review_wave_<wave>_cycle_<cycle>_panel_<family>`; an optional finding
60
+ skeptic uses `review_wave_<wave>_cycle_<cycle>_skeptic_<criterion_locator>`),
61
+ `review_plan_panel_<family>`,
62
+ `review_final`, or `review_gap_<number>`. Normalize variable parts to
63
+ lowercase ASCII and replace non-alphanumeric runs with one underscore.
64
+ Never add a random suffix or collide with a running logical target.
65
+ - Resolve the phase's linked role brief to an absolute path, include it in the
66
+ prompt, and require the child to read it before acting. The role brief
67
+ supplies the read-only boundary for auditors and reviewers.
68
+ - Tier hints: use the portable `heavy` tier for `plan`, `plan_patch`, `decide`,
69
+ and `roadmap`, the portable `light` tier for `inspect_docs` and `docs_audit`,
70
+ and the session-default tier for every other role. Apply the Codex mapping
71
+ above when its schema advertises reasoning-effort selection. On every other
72
+ host, use only an exact native equivalent advertised by that host; otherwise
73
+ do not override the model or reasoning effort. The only exception is a
74
+ review-panel child: when the host advertises model selection, pass the exact
75
+ slug returned by `scripts/review_panel.py resolve` for that family. Never
76
+ override the model on the canonical reviewer, planner, coder, or any other
77
+ role.
78
+ Host isolation: none. The child's working directory is the exact absolute
79
+ root GSD Path supplied; a host SHA checkout or extra worktree is a contract
80
+ failure. Never ask the host to create a worktree. Give the child the exact
81
+ repository or linked-worktree root supplied by GSD Path.
82
+ - Send a self-contained prompt with absolute input, template, and output paths
83
+ plus the child's bounded responsibility. Every brief also names the absolute
84
+ `AGENTS.md` and `WORKFLOW.md` paths (or explicitly says they are absent), the
85
+ next phase that consumes the output, the gate it must satisfy, and the
86
+ terminal result it must return. A coder prompt also names its isolated
87
+ linked-worktree root; no child may infer the primary worktree.
88
+ - The parent is the sole dispatcher and lifecycle owner. If the runtime exposes
89
+ structured Run/Task/Dispatch orchestration, bind one Run, create one Task per
90
+ independent brief with explicit dependencies, inject the brief, and wait for
91
+ every `worker_done`, `escalation`, or question before applying the gate.
92
+ Verify the task and dispatch records before reporting the work as
93
+ orchestrated. On runtimes without that layer, use the host adapter's
94
+ equivalent and preserve the same logical name, completion state,
95
+ timeout/cancellation, and cleanup rules; never silently delegate again from a
96
+ child.
97
+ - When the structured layer exposes a blocking ask/reply channel, route a
98
+ coder's `NEEDS-ORCHESTRATOR` question through it as a live question with
99
+ the worker held alive for the reply, instead of block-and-redispatch. The
100
+ answer is still appended to the task Log as
101
+ `Orchestrator answer:` so the portable on-disk record stays complete, and a
102
+ timed-out or unavailable channel falls back to the portable block path.
103
+ - A child that receives a disposable worktree stages its assigned artifact
104
+ under that root. The parent validates it and atomically transfers it to the
105
+ canonical project path before removing the exact disposable root. A child
106
+ never writes a disposable-review output directly into the primary worktree.
107
+ - Launch independent briefs concurrently up to the advertised child capacity,
108
+ batch any remainder without combining briefs, and collect every result
109
+ before applying the phase gate. Do not leave an active child, logical task, or
110
+ temporary worktree after collection; a timeout or cancellation is a blocked
111
+ result, not a silent success.
112
+ - If the tool schema is ambiguous or the required full-capability child is
113
+ unavailable, stop and report the missing capability. Do not guess the host
114
+ or silently collapse an independence boundary into the main context.
115
+
116
+ ## Configured output budgets
117
+
118
+ When the owner supplies token budgets, use the router bundle's
119
+ `scripts/token_budget.py` with the owner's exact task and session values and
120
+ quoted authority. Keep one ledger outside the worktree under the Git common
121
+ directory for the full logical session; resumptions reuse it. Record completed
122
+ parent CLI run events and each native child's session events with stable logical
123
+ task names before the next dispatch. The helper reads host counters and refuses
124
+ incomplete or ambiguous usage; never estimate tokens or reset the ledger.
125
+ Run `admit` for the next task and stop dispatch on a blocked result. Preserve
126
+ its output in the dispatch evidence. This gates observed usage only: concurrent
127
+ or in-flight work can overrun before the host reports usage. Codex CLI has no
128
+ advertised hard output cap; report that limitation once. If the owner requires
129
+ hard generation enforcement, use `admit --require-hard-cap`; unsupported means
130
+ blocked, not budget compliance. Other hosts require a verified native counter
131
+ and cap adapter before any enforcement claim.