@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,159 @@
1
+ ---
2
+ name: gsd-path-research
3
+ description: Dispatch parallel researchers and collect cited GSD Path evidence about domain, stack, pitfalls, and comparable products. Use only when the user explicitly invokes $gsd-path-research or an active $gsd-path router explicitly routes to this phase.
4
+ ---
5
+
6
+ # GSD Path Research Phase
7
+
8
+ Dispatch independent researchers and gate their evidence. Keep synthesis out
9
+ of this phase. The durable output is a research dispatch manifest plus one
10
+ evidence file per dispatched dimension.
11
+
12
+ Routing instructions below are caller handoffs under the AGENTS.md handoff
13
+ rule; never invoke an explicit-only sibling skill yourself.
14
+
15
+ Before dispatch and again before completion, apply the AGENTS.md
16
+ pending-answer rule with the bundled `scripts/discussion_records.py`; a
17
+ follow-up owned by research is resolved through its evidence handoff, or
18
+ the phase blocks.
19
+
20
+ ## Preconditions
21
+
22
+ Require `pipeline_state.py validate --repo <absolute root> [--project-dir
23
+ .project/next]` to pass; otherwise return to `$gsd-path` for ownership
24
+ checking. Legal entry is `define/done` or `research/active|blocked`. On
25
+ `define/done`, enter with `pipeline_state.py transition`, expected phase/status
26
+ `define/done`, exact branch and archive values, event `research started`, and
27
+ set phase/status `research/active` (plus the same `--project-dir` in
28
+ lookahead); never edit STATE directly. `research/done`
29
+ `research/done` or any later phase blocks rather than replacing settled
30
+ evidence beneath downstream artifacts. When an active router supplies the
31
+ lookahead track root `.project/next/`, evaluate these preconditions against
32
+ the track instead; see Lookahead mode. Require
33
+ `.project/intent/INTENT.md` — or, in program flow, `.project/CHARTER.md` when
34
+ the router dispatched program-scope research before any milestone INTENT
35
+ exists. If neither exists, stop and route to
36
+ `$gsd-path-define`. Confirm live search or web-reading capability before
37
+ dispatch; if unavailable, block rather than allowing memory-based citations.
38
+
39
+ Program scope: when working from CHARTER.md, dimensions decompose the full
40
+ charter scope, not one milestone. Add program dimensions such as
41
+ `domain-decomposition` (capability areas and their boundaries) and
42
+ `capability-map` (what exists vs. what must be built) as custom dimensions
43
+ alongside the standard set, so the roadmap phase inherits a complete scope
44
+ map. The manifest's `Intent:` line names `.project/CHARTER.md` in this flow.
45
+
46
+ ## Lookahead mode
47
+
48
+ Entered only when an active router supplies the lookahead track root
49
+ `.project/next/` while the active STATE.md is `build/active` in program
50
+ flow. Evaluate every state and artifact precondition against the track:
51
+ `.project/next/STATE.md` is the state file, INTENT.md is
52
+ `.project/next/intent/INTENT.md`, and the manifest and evidence files live
53
+ under `.project/next/research/`. Program-level inputs (CHARTER.md,
54
+ ROADMAP.md, top-level SYNTHESIS.md) are read from their active `.project/`
55
+ paths. Brownfield input is the track's
56
+ `.project/next/research/evidence-codebase.md` after lookahead inspect;
57
+ do not substitute the building milestone's map. Archived evidence from
58
+ earlier milestones uses the same archived-manifest rule as the roadmap
59
+ phase. Validate the handoff with
60
+ `python3 <absolute check_handoffs.py> research --repo <absolute repo root>
61
+ --project-dir .project/next`. Dispatch, gates, and completion rules are
62
+ unchanged; never write an active-path artifact.
63
+
64
+ ## Dispatch contract
65
+
66
+ Read the local [researcher role](references/researcher.md), then follow the
67
+ local [runtime dispatch contract](references/dispatch.md). Resolve the local
68
+ [evidence template](templates/evidence.md), research-handoff template
69
+ (`templates/research-handoff.md`), and `scripts/check_handoffs.py` to absolute
70
+ paths. Include the role, `AGENTS.md`, `WORKFLOW.md`, INTENT.md, manifest,
71
+ dimension, assigned questions, deterministic logical task name
72
+ `research_<dimension>`, and exact output path in every brief. When
73
+ `evidence-codebase.md` exists, include its absolute path in every brief as
74
+ settled brownfield input.
75
+
76
+ ## Process
77
+
78
+ 1. Read INTENT.md — or CHARTER.md in program flow. Extract constraints,
79
+ vetoes, risks, and `RESEARCH`
80
+ questions. Create `.project/research/RESEARCH.md` from the local handoff
81
+ template before dispatch. Record every standard dimension exactly once as
82
+ `dispatched` or `skipped` with a reason, and assign every research question
83
+ to at least one dispatched dimension. No question may remain unassigned.
84
+ 2. Decide which standard dimensions have work: dispatch a dimension only when
85
+ it has at least one assigned `RESEARCH` question from INTENT.md or
86
+ CHARTER.md. Unsettled choices and risks need that source question before
87
+ dispatch. Skip a dimension
88
+ with nothing to answer — never spawn a researcher to fill a file — and
89
+ record every skipped dimension with its reason in `RESEARCH.md`. The
90
+ standard dimensions:
91
+
92
+ | Dimension | Output file | Focus |
93
+ | --- | --- | --- |
94
+ | domain | `evidence-domain.md` | prior art, domain rules, terminology, practitioner expectations |
95
+ | stack | `evidence-stack.md` | two or three viable stacks against the constraints |
96
+ | pitfalls | `evidence-pitfalls.md` | security, scale, reliability, and UX failure modes |
97
+ | similar | `evidence-similar.md` | comparable products and reusable lessons |
98
+
99
+ Dispatch up to the available child capacity, then dispatch each remaining
100
+ dimension when a slot opens. A pending corrected redispatch takes the slot
101
+ before any queued not-yet-dispatched dimension. Keep all briefs independent.
102
+ A custom fifth dimension supplements at least one dispatched standard
103
+ dimension; it never replaces the standard set.
104
+
105
+ In brownfield work, require stack research to weigh migration cost and
106
+ pitfalls research to check which failure modes already exist in the mapped
107
+ codebase.
108
+
109
+ 3. If a risk needs a distinct dimension, add one researcher, up to five total
110
+ (project policy).
111
+ Derive its filename deterministically as `evidence-<dimension-slug>.md`:
112
+ lowercase the label, replace non-alphanumeric runs with one hyphen, and
113
+ trim hyphens. Append `-2` only if it collides with an existing dimension.
114
+ 4. Validate each dispatched evidence file as its researcher returns. Require
115
+ at least one `## Finding` — a documented `no reliable source found` null
116
+ result recorded as a finding satisfies this gate, with the searches that
117
+ came up empty noted as its evidence — require Claim, Source, Confidence,
118
+ and Why it matters fields for every finding, and require an answer for
119
+ every question assigned to that dimension. For a missing or invalid file,
120
+ redispatch one complete corrected brief under the same logical task name,
121
+ following the runtime dispatch contract, as soon as a child slot allows —
122
+ never held until the remaining dimensions settle.
123
+ 5. After every dimension settles — validated, or its one corrected
124
+ redispatch collected — confirm every extracted `RESEARCH` question was
125
+ assigned to a dispatched dimension. Then run:
126
+
127
+ `python3 <absolute check_handoffs.py> research --repo <absolute repo root>`
128
+
129
+ The manifest is the source of truth for dispatched and skipped dimensions;
130
+ the STATE log records only a human-readable summary.
131
+ If any expected file still fails after its one corrected redispatch,
132
+ run `pipeline_state.py transition` with
133
+ expected `research/active`, exact branch and archive values,
134
+ `--set-status blocked`, and an event listing the failed evidence gate; then
135
+ present **Outcome** with the
136
+ failed gate, **Review** linking RESEARCH.md or STATE.md when the manifest is
137
+ missing, and **Next** naming the one correction or user decision required.
138
+ Stop; never advance with partial research.
139
+ 6. When all dispatched files and `RESEARCH.md` pass, run
140
+ `pipeline_state.py transition` with expected `research/active`, exact
141
+ branch and archive values, `--set-phase research --set-status done`, and
142
+ an event naming the manifest path, dispatched dimensions, skipped
143
+ dimensions, and question count. Include `--project-dir .project/next` for
144
+ lookahead. Require the returned state to be `research/done`. Report the
145
+ outcome, link the resolved absolute `RESEARCH.md` path,
146
+ summarize the dispatched evidence files, and name the decide phase as next.
147
+ The decide phase reads the manifest; it must not infer dispatch state from
148
+ a glob or free-form log. When routed by an active
149
+ `$gsd-path`, return control to that router. When invoked directly, stop and
150
+ tell the user to explicitly invoke `$gsd-path`, which routes to decide; do
151
+ not invoke an explicit-only sibling skill yourself.
152
+
153
+ ## Rules
154
+
155
+ - Require evidence, not opinion: every claim needs a source actually checked
156
+ and a one-line tie-back to this project's intent.
157
+ - Record conflicting sources rather than resolving them here.
158
+ - Preserve dead ends and explicit `no reliable source found` answers.
159
+ - Do not summarize the evidence; `$gsd-path-decide` owns that work.
@@ -0,0 +1,215 @@
1
+ ---
2
+ name: gsd-path-roadmap
3
+ description: Slice an approved GSD Path program charter into a dependency-ordered roadmap of independently shippable milestones. Use only when the user explicitly invokes $gsd-path-roadmap or an active $gsd-path router explicitly routes to this phase.
4
+ ---
5
+
6
+ # GSD Path Roadmap Phase
7
+
8
+ Dispatch one roadmapper, gate its roadmap, and obtain the single approval that
9
+ authorizes milestone planning. Rolling-wave: the roadmap scopes every
10
+ milestone; waves and tasks belong to `$gsd-path-plan`.
11
+
12
+ Routing instructions below are caller handoffs under the AGENTS.md handoff
13
+ rule; never invoke an explicit-only sibling skill yourself.
14
+
15
+ Before dispatch and again before approval, apply the AGENTS.md
16
+ pending-answer rule with the bundled `scripts/discussion_records.py`; a
17
+ follow-up owned by roadmap is resolved in ROADMAP.md, or the phase blocks.
18
+
19
+ ## Preconditions
20
+
21
+ Require `pipeline_state.py validate --repo <absolute root>` to pass; otherwise
22
+ return to `$gsd-path` for ownership checking. Legal entry is
23
+ `decide/done` with an existing `.project/CHARTER.md` and no `.project/ROADMAP.md`
24
+ yet, `roadmap/active|blocked`, or a
25
+ milestone-boundary re-slice: `inspect/active` or `define/active` with no
26
+ approved INTENT.md for the next milestone and a user request to re-scope the
27
+ remaining `pending` entries,
28
+ or `roadmap/active` with STATE.milestone null and an `abandoned` entry in
29
+ ROADMAP.md (the post-abandon re-slice the build orchestrator hands off).
30
+ Enter from `decide/done` only with `pipeline_state.py transition`, exact
31
+ expected phase/status/milestone/branch/archive fields, event `roadmap started`,
32
+ and `--set-phase roadmap --set-status active`; never edit STATE directly. In a
33
+ milestone-boundary re-slice, preserve the entering `inspect/active` or
34
+ `define/active` state throughout the re-slice.
35
+ Any later phase blocks; mid-milestone
36
+ re-scope is never legal — finish or ship the active milestone first. A
37
+ `decide/done` state with ROADMAP.md already present is milestone-scope decide;
38
+ route to `$gsd-path-plan`, never regenerate the roadmap beneath it. Absent
39
+ CHARTER.md, this is not a program: route to `$gsd-path`, which continues the
40
+ single-milestone flow at plan. Before dispatching every re-slice, run the
41
+ bundled `scripts/promote_lookahead.py snapshot-roadmap --roadmap
42
+ .project/ROADMAP.md --snapshot .project/ROADMAP.before-reslice.md` helper.
43
+ Create the baseline once and retain it through every revision; an `existing`
44
+ result is recovery evidence and must never be replaced from the current
45
+ candidate. When `.project/next/` holds a lookahead track, also save its
46
+ milestone slug. Do not ask for the keep/discard ruling until the candidate
47
+ roadmap has been generated and passed its gate.
48
+
49
+ Require `.project/CHARTER.md` and `.project/SYNTHESIS.md` (program scope) with
50
+ a non-empty `## Decisions` or `## Settled` section and no unresolved
51
+ `NEEDS-USER` items before dispatch. Route to the producing phase when a
52
+ precondition fails.
53
+
54
+ ## Process
55
+
56
+ 1. Read the local [roadmap template](templates/roadmap.md) and resolve it to an
57
+ absolute path.
58
+ 2. Read the local [roadmapper role](references/roadmapper.md), then follow the
59
+ local [runtime dispatch contract](references/dispatch.md) with deterministic
60
+ logical task name `roadmap` and a `heavy` tier hint. Give it absolute role,
61
+ `AGENTS.md`, `WORKFLOW.md`, CHARTER.md, SYNTHESIS.md, every dispatched
62
+ evidence file named in `.project/research/RESEARCH.md` — after milestone
63
+ archival has moved the active research directory, name the read-only
64
+ archived manifest and evidence copies under their
65
+ `.project/archive/<NNN>-<slug>/research/` paths
66
+ instead — template, and output
67
+ paths, including `.project/LESSONS.md` when it exists. On a re-slice, also
68
+ give `.project/ROADMAP.before-reslice.md` with the instruction to preserve
69
+ `shipped` entries byte-for-byte except Status/Archive/Integrated fields and
70
+ to never modify `abandoned` entries at all. For a milestone-boundary
71
+ re-slice, also preserve the existing `active` entry byte-for-byte; only
72
+ `pending` entries are in scope.
73
+ The output is exactly `.project/ROADMAP.md` — no other location is
74
+ canonical.
75
+ 3. Gate ROADMAP.md:
76
+ First run `python3 <absolute check_handoffs.py> roadmap --repo <absolute
77
+ root>`; its structural result is required in addition to the semantic
78
+ checks below.
79
+ - Every CHARTER.md `Full scope: in` item maps to at least one milestone,
80
+ and every milestone traces back to charter scope.
81
+ - Every milestone entry has Goal, Depends on, Surfaces, Status, Archive,
82
+ Scope in/out, Success criteria, Risks, and Open questions fields; ids are
83
+ unique and ordered.
84
+ - Every milestone whose Surfaces is not `none` has at least one success
85
+ criterion observable at each named surface. A milestone that delivers
86
+ something a person uses never carries `Surfaces: none`.
87
+ - Dependencies reference earlier milestone ids and form an acyclic graph.
88
+ - M001 is the thinnest end-to-end skeleton that burns the riskiest
89
+ synthesis decisions.
90
+ - Rolling-wave: no waves, tasks, or file lists anywhere in the roadmap.
91
+ - No scope-out veto appears in any milestone; every synthesis decision is
92
+ honored by at least one milestone's scope.
93
+ - On a re-slice, `shipped` entries differ from
94
+ `.project/ROADMAP.before-reslice.md` only in Status/Archive/Integrated;
95
+ `abandoned` entries are byte-for-byte identical.
96
+ - On a milestone-boundary re-slice, the prior `active` entry is byte-for-byte
97
+ identical to `.project/ROADMAP.before-reslice.md`.
98
+ 4. Redispatch one complete corrected brief under logical task name `roadmap`,
99
+ following the runtime dispatch contract and including all gate failures.
100
+ Allow one revision round. If it still fails, keep the entering
101
+ `inspect/active` or `define/active` state for a milestone-boundary re-slice
102
+ and use `pipeline_state.py transition` with that complete state as both the
103
+ expected and retained state and an event naming the failed roadmap gate.
104
+ Otherwise use the helper with expected `roadmap/active`, exact milestone,
105
+ branch, and archive values, `--set-status blocked`, and the same event. Then
106
+ present **Outcome** with the failed gate, **Review** linking the resolved
107
+ absolute ROADMAP.md path (or STATE.md when ROADMAP.md is missing), and
108
+ **Next** naming the one correction or user decision required. Stop.
109
+ 5. On a re-slice with a saved lookahead track, run the bundled
110
+ `scripts/promote_lookahead.py compare-entry --before
111
+ .project/ROADMAP.before-reslice.md --after .project/ROADMAP.md --milestone
112
+ <lookahead-slug>` helper now. When STATE.milestone is set, append
113
+ `--active-milestone <STATE.milestone>`; when it is unset, omit that option.
114
+ It compares every plan-binding part of the entry while ignoring only
115
+ Status, Archive, and Integrated, and requires that entry to remain the
116
+ candidate roadmap's first dependency-ready milestone. When it returns
117
+ `status: unchanged`, ask
118
+ the user to choose
119
+ `Keep the unchanged lookahead track (recommended)` or `Discard and
120
+ regenerate the lookahead track`. When it returns `status: changed`, offer
121
+ `Discard and regenerate the lookahead track (recommended)` or `Request
122
+ roadmap changes`; keeping the stale track is not valid. Apply the ruling
123
+ and record the helper result and ruling with `pipeline_state.py transition`,
124
+ expecting and retaining the complete entering state with event `lookahead
125
+ re-slice ruling: <ruling>`; never append it directly. Retain the baseline
126
+ through any requested roadmap revisions and the final approval decision.
127
+ 6. On a post-abandon re-slice, first run the bundled
128
+ `scripts/promote_lookahead.py select-next --roadmap .project/ROADMAP.md`
129
+ helper against the gated candidate. When it returns `status: complete`,
130
+ report program completion against CHARTER.md's program success criteria and
131
+ stop without offering a pending-milestone approval. When it returns
132
+ `status: selected`, use only its exact milestone in the approval and
133
+ transition below. A `status: none` result blocks without mutation.
134
+ Show every milestone id, goal, and dependency summary as the outcome. Link
135
+ the resolved absolute `.project/ROADMAP.md` path, then ask one explicit next
136
+ question. For a milestone-boundary re-slice, list `Approve roadmap and
137
+ resume the active milestone (recommended)` first. For a post-abandon
138
+ re-slice, list
139
+ `Approve roadmap and inspect <selected-milestone> (recommended)` first.
140
+ Otherwise list `Approve roadmap and start the first
141
+ pending milestone (recommended)` first. In every case, list `Request
142
+ changes` as the alternative. If the user requests changes,
143
+ retain the entering state for a milestone-boundary re-slice; otherwise keep
144
+ `phase: roadmap`, `status: active`. Retain the baseline, revise, and re-gate
145
+ against that same baseline.
146
+ 7. On approval in an established repository, record the exact full current
147
+ HEAD before changing ROADMAP.md or STATE.md. For a milestone-boundary
148
+ re-slice, keep its matching roadmap entry `active`, use `pipeline_state.py
149
+ transition` to record `program roadmap re-slice approved` while expecting
150
+ and retaining the complete entering `inspect/active` or `define/active`
151
+ state, then checkpoint the pending `.project/` artifacts with:
152
+
153
+ ```text
154
+ python3 <absolute isolation.py> checkpoint \
155
+ --repo <absolute root> --expected-head <recorded full HEAD> \
156
+ --subject "roadmap: program roadmap approved" \
157
+ --body "Why: approved roadmap checkpoint" \
158
+ --allow-path .project
159
+ ```
160
+
161
+ On a post-abandon re-slice, mark only the helper-selected pending entry
162
+ `active`, use `pipeline_state.py transition` with the complete current
163
+ `roadmap/active` state as expected to set `phase: inspect`, `status: active`,
164
+ `milestone` to the selected slug, preserve the bound branch, and set
165
+ `archive: null`, with an event naming the abandoned predecessor. Then use
166
+ the same `isolation.py checkpoint` command above. For a first roadmap
167
+ approval, run:
168
+
169
+ ```text
170
+ python3 <absolute pipeline_state.py> approve \
171
+ --repo <absolute root> --kind roadmap \
172
+ --milestone <selected first pending slug> \
173
+ --expected-head <recorded full HEAD>
174
+ ```
175
+
176
+ The helper journals before mutation, proves the selected entry is pending
177
+ and no entry is already active, marks it active, changes STATE from
178
+ `roadmap/active` to `roadmap/done` with that milestone and event `program
179
+ roadmap approved`, and checkpoints all pending `.project/` artifacts with
180
+ the canonical roadmap subject and body, subject to the
181
+ top-level allowlist in
182
+ [isolation.PROJECT_ENTRIES](scripts/isolation.py). Require its typed result to report
183
+ `schema: gsd-path/state-checkpoint/v1`, `status: approved`, `kind: roadmap`,
184
+ `project_dir: .project`, `state.status: done`, the selected milestone, and
185
+ the returned current commit. Rerun the same command after interruption; the
186
+ matching journal owns recovery.
187
+
188
+ For every re-slice, remove `.project/ROADMAP.before-reslice.md` only after
189
+ the state transition succeeds and before the checkpoint. Retain it through
190
+ every requested revision and failed approval attempt.
191
+
192
+ Defer either checkpoint only when the directory is not yet a Git repository
193
+ or `.project/REPOSITORY.md` records `Kind: new-github`. For a normal
194
+ approval, run the same `approve` command with `--defer-checkpoint` instead
195
+ of `--expected-head`; it marks the selected entry active and records
196
+ `roadmap/done` with event `program roadmap approved`. `pipeline_state.py
197
+ transition` never approves a roadmap. For
198
+ a milestone-boundary re-slice, use the retaining transition above; for a
199
+ post-abandon re-slice, use its transition above. The build transition
200
+ commit owns the pending artifacts. Confirm approval and link ROADMAP.md again. For
201
+ a milestone-boundary re-slice, state that the preserved inspect or define
202
+ phase resumes; for a post-abandon re-slice, state that inspect is next;
203
+ otherwise state that define (milestone mode) is next. Do not
204
+ add another approval gate. When routed by an active `$gsd-path`, return
205
+ control to that router so it routes the resulting state; never name define
206
+ as next when inspect was preserved or selected. When invoked directly, stop
207
+ and tell the user to explicitly invoke `$gsd-path`, which routes the same
208
+ result; do not invoke an explicit-only sibling skill yourself.
209
+
210
+ ## Rules
211
+
212
+ - Cover the charter exactly: no unmapped scope, no unscoped milestones.
213
+ - Milestone granularity only; never drift into waves, tasks, or file scopes.
214
+ - Every milestone must be shippable on its own stated dependencies.
215
+ - Surface scope cuts as `NEEDS-USER`; never drop charter scope silently.