@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,471 @@
1
+ ---
2
+ name: path
3
+ description: Inspect .project/STATE.md, report GSD Path progress, and run the next valid phase. Use only when the user explicitly invokes $path or $gsd-path. The status argument reports state without advancing. Do not infer this skill from generic project, next-step, or resume requests.
4
+ ---
5
+
6
+ # GSD Path Router
7
+
8
+ Determine the current pipeline phase, report it briefly, and run the next valid
9
+ phase. Disk is the only phase memory.
10
+ Any text the user is expected to send back verbatim (a ruling, an approval
11
+ command, a reply) goes in its own fenced code block, never a blockquote or
12
+ inline prose, so it pastes cleanly.
13
+
14
+ When the project's `.gsd-path/runtime/` exists, resolve bundled helper paths
15
+ for `pipeline_state.py`, `pipeline_git.py`, `archive_milestone.py`,
16
+ `promote_lookahead.py`, `discussion_records.py`, and `pipeline_diagnose.py`
17
+ to that runtime. It is the guard-approved location on a closed milestone.
18
+ Use the skill bundle only when no project-local runtime exists.
19
+
20
+ ## Status-only mode
21
+
22
+ When the invocation argument is exactly `status`, report and stop:
23
+
24
+ 1. Run `python3 <absolute-bundled-pipeline-state.py> status --repo
25
+ <absolute-root>`. Treat the JSON as the only status authority. Do not
26
+ initialize STATE.md, bind a branch, or create a repository from this mode.
27
+ 2. Present **Outcome** as `state.phase`/`state.status`, `route.action`,
28
+ `next_skill`, and the pending-answer count. **Review** links the JSON
29
+ `path` (STATE.md). **Next** names `next_skill` or the `route.reason` when
30
+ `route.action` is `block`, without invoking either.
31
+ 3. Do not run a phase contract, auto-advance, spawn agents, or apply undo.
32
+
33
+ `$gsd-path status` (Codex) and `/gsd-path status` (other hosts) are the only
34
+ router entry. The installed AGENTS.md re-entry contract may run the same
35
+ project-local status helper after a generic prompt, but it does not invoke this
36
+ router or advance a phase.
37
+
38
+ ## Bundled phase execution
39
+
40
+ All phase skills are explicit-only, so their catalog entries may be absent
41
+ while this router is active. Before executing a route, read its bundled
42
+ contract fully and follow it in the same conversation:
43
+
44
+ - [inspect](INSPECT.md)
45
+ - [define](DEFINE.md)
46
+ - [research](RESEARCH.md)
47
+ - [decide](DECIDE.md)
48
+ - [roadmap](ROADMAP.md)
49
+ - [plan](PLAN.md)
50
+ - [build](BUILD.md)
51
+ - [ship](SHIP.md)
52
+ - [docs audit](DOCS-AUDIT.md)
53
+
54
+ These synchronized files are the same contracts used by direct `$gsd-path-*`
55
+ invocations. Do not depend on another skill being implicitly injected. When a
56
+ phase contract says to return to or invoke the router, resume this file's
57
+ routing loop.
58
+
59
+ ## New GitHub repository creation
60
+
61
+ Enter this transaction only when the user explicitly asks to create a new
62
+ GitHub repository and no owned `.project/STATE.md` is active for that request.
63
+
64
+ 1. Resolve the repository name and normalized project slug. Obtain the GitHub
65
+ owner, one supported visibility (`public`, `private`, or `internal`), and a
66
+ local workspace when absent; do not infer account ownership or visibility.
67
+ Derive `gsd-path/M001` as the branch. The default checkout is
68
+ `<resolved-workspace>/<repo-name>`; propose the distinct sibling
69
+ `<resolved-workspace>/<repo-name>-gsd-path` as the linked worktree. The user
70
+ may choose another workspace or worktree path before approval.
71
+ 2. Resolve the bundled `scripts/bootstrap_repository.py` to an absolute path.
72
+ Run its `preview` command with the exact owner, repository, visibility,
73
+ workspace, default checkout, linked worktree, and optional description. The
74
+ helper checks authentication, remote state, path parents, and any matching
75
+ transaction journal without mutation. `mode: create` means every target is
76
+ absent; `mode: resume` means the exact approved journal exists and the helper
77
+ can verify and adopt completed stages; `mode: complete` names an already
78
+ initialized binding. Any ambiguity or unowned collision blocks.
79
+ 3. Present **Outcome** as a repository-creation preview. Present **Review** with
80
+ the proposed GitHub URL, visibility, default-checkout path, GSD Path branch,
81
+ and linked-worktree path, all marked not yet created. Present **Next** as one
82
+ choice: `Create repository and worktree (recommended)` for `mode: create`, or
83
+ `Resume verified repository transaction (recommended)` for `mode: resume`,
84
+ followed by `Change details` and `Cancel`. Present this review inline; do not
85
+ create a preview file or journal before approval. For `mode: complete`, do
86
+ not ask to create again: link the existing REPOSITORY.md, rebase to the
87
+ returned worktree, and continue normal routing.
88
+ 4. Only after approval, run the helper's `create` command with those same exact
89
+ arguments plus the resolved bundled `templates/state.md` and
90
+ `templates/repository.md` paths. The helper first persists the approved
91
+ journal, then creates or verifies the remote, clone, remote-default SHA,
92
+ branch, and linked worktree one stage at a time. It writes STATE.md at
93
+ `define/active` with the branch bound and writes fixed-format REPOSITORY.md;
94
+ only then does it remove the journal. It never pushes, deletes, force-reuses,
95
+ or adopts a target that does not match the journal.
96
+ 5. On failure, present **Outcome** with the failed stage, **Review** with the
97
+ approved targets and journal path returned or reported by the helper, and
98
+ **Next** offering an explicit verified resume first. Rerun `preview` before
99
+ retrying; never substitute manual cleanup or a second transaction.
100
+ 6. On success, rebase the project root to the returned linked worktree. Treat
101
+ its verified bootstrap README as greenfield. Continue with the bundled define
102
+ contract; it reads REPOSITORY.md and records the binding under INTENT.md's
103
+ Constraints.
104
+
105
+ Never apply this transaction to an existing repository. The router binds an
106
+ existing repository with `pipeline_git.py bind-initial`; build never creates or
107
+ selects a milestone branch.
108
+
109
+ ## State ownership and initialization
110
+
111
+ 1. When `.project/STATE.md` exists, run `python3
112
+ <absolute-bundled-pipeline-state.py> validate --repo <absolute-root>`.
113
+ Treat its typed JSON as the state; do not parse frontmatter or repair an
114
+ invalid file through model reasoning. A validation failure blocks without
115
+ mutation. In particular, never stamp the marker onto unowned state.
116
+ 2. With no STATE.md, run the bundled
117
+ `python3 <absolute-bundled-script> initialize --repo <absolute-root>
118
+ --template <absolute-state-template>` helper
119
+ (`scripts/detect_project.py`) before asking anything. Do not classify
120
+ brownfield, greenfield, or orphaned `.project/` from a directory listing or
121
+ conversation. If the command exits nonzero, returns `error`, or returns
122
+ `wrote_state: false`, report the error and block without routing or claiming
123
+ STATE.md was written. Otherwise follow the JSON `verdict` / `route` exactly.
124
+ `initialize` classifies and, for brownfield or greenfield, writes STATE.md
125
+ through an anchored no-follow create — never create STATE.md yourself after
126
+ classify. Leave that initial state untracked for `bind-initial`; its validated
127
+ initial-state exception requires the index and every other path to stay clean.
128
+ Do not insert a commit between initialization and binding:
129
+ - `owned` — STATE.md exists; continue at step 1.
130
+ - `orphan` (`route: recover-orphan`) — block without mutation. List the
131
+ returned `orphan_paths` and ask for an explicit recovery, migration, or
132
+ new location; existing evidence and archives do not prove a safe v2 phase.
133
+ - `brownfield` (`route: inspect`) — the helper wrote STATE.md at
134
+ `inspect/active`; report the returned `signals` and route to the bundled
135
+ [inspect contract](INSPECT.md).
136
+ - `greenfield` (`route: define`) — the helper wrote STATE.md at
137
+ `define/active`; report that no brownfield signal fired, and route to
138
+ the bundled [define contract](DEFINE.md).
139
+
140
+ ## Integration choice
141
+
142
+ New state starts with `integration_default: direct`, `integration: direct`, and
143
+ `integration_source: default`.
144
+ When the user asks to change closeout behavior before build, use the state
145
+ helper; never edit these fields by hand:
146
+
147
+ ```text
148
+ python3 <absolute-bundled-pipeline-state.py> configure-integration \
149
+ --repo <absolute-root> \
150
+ --scope <default-or-milestone> \
151
+ --mode <direct-or-pull-request>
152
+ ```
153
+
154
+ `default` changes the project setting and changes the current milestone only
155
+ when it has no override. `milestone` changes only the current milestone.
156
+ `integration_source` records that distinction even when both modes match.
157
+ Configure the project default only on the active `.project` track. A lookahead
158
+ track may receive only its own milestone override through `--project-dir
159
+ .project/next`; promotion requires its project default to still match the
160
+ active track.
161
+ The current value resets from the project default at the next milestone.
162
+ Both settings lock when build starts. A lookahead STATE inherits the active
163
+ project's `integration_default` and uses it for `integration`.
164
+
165
+ ## Transaction recovery first
166
+
167
+ For a helper failure, use the diagnostic in the sibling bundle:
168
+ `../gsd-path-forensics/scripts/pipeline_diagnose.py diagnose --repo <absolute-root>`.
169
+ Resolve that path relative to this skill's directory.
170
+
171
+ Run `pipeline_state.py route` before any phase contract. A
172
+ `resume-undo` result means a helper-owned undo transaction was interrupted;
173
+ invoke `$gsd-path-undo` and apply the returned exact kind and expected HEAD.
174
+ Never enter phase work while this recovery remains. A
175
+ `resume-shipment` result means the ROADMAP/STATE shipment record was
176
+ interrupted; rerun `pipeline_state.py record-shipment` with the returned exact
177
+ archive and event, require its typed `recorded` result, then rerun `route`.
178
+ The journal owns recovery even when one or both files already contain their
179
+ shipped values. A `resume-checkpoint` result means a plan or roadmap approval journal exists;
180
+ run `pipeline_state.py resume-checkpoint --repo <absolute-root>`, require its
181
+ typed `approved` result and current commit, then rerun `route`. The journal
182
+ owns recovery even when STATE or ROADMAP.md already contains the approved
183
+ values. Never repeat those edits or call a phase while recovery remains.
184
+ A `resume-promotion` result means a promotion journal exists; rerun
185
+ `promote-next` with the returned milestone, branch, base, and landing SHAs. The
186
+ journal owns recovery even if STATE already contains some promoted values.
187
+ Never route a phase while that result remains.
188
+
189
+ For a branch mismatch, `route` normally returns `block`. Its only recoverable
190
+ result is `resume-next-handoff`: state is `shipped/done` on the returned
191
+ previous bound branch, and the durable journal proves the current branch and
192
+ HEAD match its prepared, switched, or retired stage. Promotion-journal recovery
193
+ returns `resume-promotion` earlier instead. Rerun `bind-next` immediately with
194
+ the returned typed branch, previous branch, ship, remote-default, base, and
195
+ landing fields. Do not rerun the old-branch archive or integration validators
196
+ in this recovery path: they passed before the journal was created and cannot
197
+ run after the switch. `bind-next` rechecks the live remote refs, exact SHAs,
198
+ integration ancestry, cleanliness, and journal ownership before continuing.
199
+ After it returns, continue the state transition or lookahead promotion below.
200
+ Do not reconstruct this classification from Git output or Log prose.
201
+ When the route returns `allow_remote_absent: true`, also pass
202
+ `--allow-missing-previous`; this is valid only because a merged PR may have
203
+ auto-deleted the published bound branch.
204
+
205
+ Before ordinary routing, inspect `STATE.archive`.
206
+
207
+ - A concrete archive path is an in-progress or completed ship transaction.
208
+ If state is `shipped/done`, run the bundled
209
+ `python3 <absolute-bundled-script> validate --repo <root>`. When it returns
210
+ the same archive path and exact ship SHA, run the bundled
211
+ `python3 <absolute-bundled-script> validate-integrated --repo <root> --slug <slug>`
212
+ with the shipped milestone slug from STATE.milestone and origin network
213
+ access available for PR-mode live publication checks. Report shipped only
214
+ when both pass.
215
+ When archive validation passes but integration is pending, invoke the
216
+ bundled [ship contract](SHIP.md) to complete integration; never report
217
+ shipped or advance to the next milestone while integration is pending.
218
+ - If validation fails, or state is still `ship`, invoke
219
+ the bundled [ship contract](SHIP.md) in final archive-recovery mode. It bypasses moved
220
+ final-review inputs, reuses the persisted path, and completes or validates
221
+ the transaction. Never select another sequence number.
222
+ - A concrete archive path with phase `build` is an interrupted
223
+ milestone-abandon transaction. Invoke the bundled [build
224
+ contract](BUILD.md), which reruns the archive helper's `abandon` command
225
+ and completes the abandon commit. Never select another sequence number.
226
+ - A concrete archive path in any phase other than `ship`, `shipped`, or
227
+ `build` is inconsistent and blocks without moving anything.
228
+ - `shipped` with `archive: null` is invalid and unrecoverable because no
229
+ transaction identity exists. Block and ask the user how to proceed;
230
+ never guess an archive number or move artifacts.
231
+
232
+ Before ordinary phase routing, also inspect `.project/discuss/ANSWERS.md` when
233
+ present by running the bundled `scripts/discussion_records.py pending --repo
234
+ <absolute-root>` helper. Apply the returned pending-answer contract in
235
+ AGENTS.md and use its `dispose` command for receipts. Never auto-advance a
236
+ required follow-up without its disposition receipt; when the named owner cannot
237
+ legally enter from current state, link ANSWERS.md and the target artifact and
238
+ ask the user how to reconcile the upstream change.
239
+
240
+ ## Normal routing
241
+
242
+ Run the bundled state router instead of evaluating the state table in model
243
+ reasoning:
244
+
245
+ ```text
246
+ python3 <absolute-bundled-pipeline-state.py> route \
247
+ --repo <absolute-root> \
248
+ --project-dir <.project or .project/next>
249
+ ```
250
+
251
+ Follow its `route.action`, `phase`, and `mode` fields exactly. `run-phase`
252
+ selects the matching bundled phase contract, `validate-integrated` enters the
253
+ shipped validator, `wait` leaves an approved lookahead track ready for
254
+ promotion, `resume-next-handoff` resumes the verified `bind-next` transaction,
255
+ `resume-checkpoint` runs the approval recovery command above,
256
+ `resume-shipment` runs the shipment recovery command above,
257
+ `resume-promotion` reruns the returned `promote-next` transaction, and
258
+ `resume-undo` invokes `$gsd-path-undo` with the returned kind and expected HEAD,
259
+ `block` stops with the returned reason. `bind-initial`
260
+ means initialization is complete and phase work must wait for the initial
261
+ router binding: resolve the exact fetched `origin/main` SHA, call `bind-initial` as
262
+ above with `route.branch`, then persist its returned branch with
263
+ `pipeline_state.py transition` using the route result's `state` phase and status plus its
264
+ null branch and archive as expected fields. Set `--set-branch` to the helper's
265
+ returned branch and use the exact required event:
266
+ `--event "router bound initial milestone"`. Rerun `route`; never route from a
267
+ remembered or hand-parsed state.
268
+
269
+ Every ordinary state change not already owned by the journaled approval,
270
+ promotion, archive, or branch helpers uses `pipeline_state.py transition` with
271
+ expected phase, status, branch, and archive, an expected value for every
272
+ field it changes, the changed fields, and one `--event`.
273
+ It compares the expected state, validates the result, appends the fixed-format
274
+ Log line, and atomically replaces STATE.md. A mismatch blocks; never perform a
275
+ read-edit-write substitute.
276
+
277
+ ```text
278
+ python3 <absolute-bundled-pipeline-state.py> transition \
279
+ --repo <absolute-root> \
280
+ --expect-phase plan --expect-status done \
281
+ --expect-branch <STATE.branch> --expect-archive null \
282
+ --set-phase build --set-status active \
283
+ --event "build started"
284
+ ```
285
+
286
+ Report normal progress in three labeled lines: **Outcome** names the phase and
287
+ completed work, **Review** links the newest canonical artifact using its
288
+ resolved absolute path when one exists, and **Next** names the action the
289
+ router is taking or the single action required from the user. Resolve the
290
+ routed track root first: `.project/` for the active track or `.project/next/`
291
+ for lookahead. If that track root's `research/DOCS-AUDIT.md` has `planned: no`
292
+ rulings, add one alignment-queue line and offer once to route them through the
293
+ bundled [plan contract](PLAN.md); declining does not block.
294
+
295
+ Once per conversation, before the status report, run the bundled update check
296
+ `python3 <skill-dir>/scripts/check_update.py`. It is cached, offline-safe, and
297
+ prints either nothing or one notice line; append that line verbatim to the
298
+ report. Ignore any failure and never block or retry — the check is advisory
299
+ and must not delay routing.
300
+
301
+ Auto-advance after a non-interactive phase completes unless blocked or waiting
302
+ on `NEEDS-USER`. Planning owns the single build-approval gate; never ask a
303
+ second time. One user-driven exception to normal routing: at a program milestone
304
+ boundary — `inspect/active` or `define/active` with no approved INTENT.md for
305
+ the next milestone — a user request to re-scope the remaining `pending`
306
+ entries routes to the bundled [roadmap contract](ROADMAP.md) in re-slice mode.
307
+
308
+ ## Lookahead planning (program flow)
309
+
310
+ Before creating, reading, routing, or writing `.project/next/`, rerun the
311
+ bundled project classifier and require `verdict: owned`. For a new track,
312
+ require `next/` to be absent under non-following metadata, create it as a real
313
+ directory, then classify again before writing STATE.md. For a resumed track,
314
+ require `next/` to be a real directory and `next/STATE.md` to be a regular
315
+ non-symlink file. A symlink, special file, vanished path, metadata error, or
316
+ non-`owned` verdict blocks as orphan recovery. Repeat this check immediately
317
+ before every lookahead phase dispatch and before promotion.
318
+
319
+ While STATE is `build/active`, run the bundled deterministic selector before
320
+ offering lookahead planning:
321
+
322
+ ```text
323
+ python3 <absolute-bundled-promote-lookahead.py> select-next \
324
+ --roadmap <absolute-.project/ROADMAP.md> \
325
+ --active-milestone <STATE.milestone>
326
+ ```
327
+
328
+ Offer once per milestone only when it returns `status: selected`; its first
329
+ roadmap-ordered `pending` entry has dependencies that are all `shipped` or the
330
+ active milestone. On acceptance, create `.project/next/STATE.md` from the local [state
331
+ template](templates/state.md) with `pipeline: gsd-path/v2`, `phase:
332
+ inspect`, `status: active`, the selector's exact returned `milestone` slug as
333
+ `milestone`, `branch: null`, and `archive: null`. Copy the active project's
334
+ `integration_default` into both integration mode fields and set
335
+ `integration_source: default`. Then follow the bundled
336
+ phase contracts in their Lookahead mode — inspect, define (milestone +
337
+ brownfield), research (only when the entry lists open questions), decide, and
338
+ plan — rooted at `.project/next/`.
339
+ Declining does not block; offer again only at the next milestone's build.
340
+
341
+ - The build track always takes routing precedence: the lookahead track
342
+ advances only on explicit user direction, never by auto-advance.
343
+ - The lookahead track never touches active-path artifacts, never marks its
344
+ roadmap entry `active`, never binds a branch, and never dispatches build
345
+ agents. Its approval checkpoints commit `.project/` in full, `next/`
346
+ included.
347
+ - Route the track with `pipeline_state.py route --project-dir .project/next`,
348
+ passing the track root to every bundled phase contract.
349
+ - A roadmap re-slice while `.project/next/` exists follows the keep/discard
350
+ ruling in the roadmap contract before the track continues.
351
+
352
+ ## Next milestone
353
+
354
+ Start only from a ship transaction that passes the bundled validator and the
355
+ bundled integration check (`validate-integrated`); pending integration routes
356
+ back to ship, never here. Preserve the previous archive path, ship SHA,
357
+ integration SHA, and build branch in the state Log. Before fetching or binding
358
+ the next program branch, fetch origin and resolve the exact current
359
+ `origin/main` SHA. For a program roadmap, resolve the branch from that exact
360
+ fetched commit through the bundled helper. With a saved lookahead track, run:
361
+
362
+ ```text
363
+ python3 <absolute-bundled-promote-lookahead.py> select-base \
364
+ --repo <absolute-primary-root> \
365
+ --base <exact-origin-main-sha> \
366
+ --remote-default origin/main \
367
+ --lookahead
368
+ ```
369
+
370
+ Without a saved lookahead track, run:
371
+
372
+ ```text
373
+ python3 <absolute-bundled-promote-lookahead.py> select-base \
374
+ --repo <absolute-primary-root> \
375
+ --base <exact-origin-main-sha> \
376
+ --remote-default origin/main
377
+ ```
378
+
379
+ When the helper returns `status: complete`, report program completion and stop;
380
+ this means every roadmap entry is terminal (`shipped` or `abandoned`). Otherwise
381
+ require `status: selected`, require its returned `base` to equal the exact
382
+ fetched SHA, and use its exact returned `branch`; a mismatch or `status: none`
383
+ blocks before branch mutation. For a single-milestone restart, use one plus the
384
+ maximum archive prefix. Then run:
385
+
386
+ ```text
387
+ python3 <absolute-bundled-pipeline-git.py> bind-next \
388
+ --repo <absolute-primary-root> \
389
+ --branch <selected-branch> \
390
+ --previous-branch <STATE.branch> \
391
+ --ship <exact-ship-sha> \
392
+ --remote-default origin/main \
393
+ --base <exact-origin-main-sha> \
394
+ --landing <validate-integrated-landing-sha>
395
+ ```
396
+
397
+ Add `--allow-missing-previous` when `validate-integrated` returned
398
+ `mode: pull-request` and `origin/<STATE.branch>` is absent. GitHub may delete
399
+ that head branch after merge; the local branch and exact ship SHA still bind
400
+ the handoff. The helper independently verifies the published pull-request
401
+ milestone tag and merge topology before accepting the missing branch.
402
+
403
+ The helper requires the previous branch, while it still exists locally, to
404
+ remain at the ship SHA, proves the ship commit is integrated into the exact
405
+ base, rejects local or remote branch collisions,
406
+ and switches the clean primary worktree without tracking main. It then
407
+ retires the integrated previous branch — deleted locally and on origin; the
408
+ ship commit stays reachable from the integration merge and its tag. Repeating the
409
+ same command while the new branch is current at the unchanged base is the
410
+ only idempotent recovery, and it completes any retirement left unfinished by
411
+ a crash. Record the returned branch and base in the state
412
+ Log, then:
413
+
414
+ - **Program** (ROADMAP.md exists): while `pending` entries remain, first
415
+ promote any lookahead track. When `.project/next/STATE.md` exists, move
416
+ nothing by hand. Run:
417
+
418
+ ```text
419
+ python3 <absolute-bundled-pipeline-state.py> promote-next \
420
+ --repo <absolute-primary-root> \
421
+ --milestone <next-slug> \
422
+ --branch gsd-path/M00N \
423
+ --base <exact-current-origin-main-sha> \
424
+ --landing <exact-milestone-merge-sha>
425
+ ```
426
+
427
+ The helper journals before mutation, verifies or resumes each documented
428
+ `intent`, `research`, `plan`, `tasks`, and `review` move, including the
429
+ lookahead PLAN-PANEL artifact or skipped receipt, updates STATE.md and
430
+ ROADMAP.md, stages the residual lookahead track in its recovery path outside
431
+ `.project/`,
432
+ classifies plan drift, removes `next/`, and writes the exact router
433
+ promotion commit. Rerun the same command after interruption; any request or
434
+ filesystem drift blocks. Route from its returned state and `drift` result.
435
+ With no lookahead track, mark the selected entry `active` in ROADMAP.md and
436
+ fill the previously shipped entry's `Integrated:` field with the landing
437
+ merge SHA.
438
+ Then call `pipeline_state.py transition`, expecting the complete
439
+ `shipped/done` state including its previous branch and archive, and set
440
+ `phase: inspect`, `status: active`, `milestone` to the selected pending slug,
441
+ `branch: gsd-path/M00N`, and `archive: null`. The event records the returned
442
+ base and integration SHA. Route to the bundled [inspect contract](INSPECT.md)
443
+ so the changed codebase is rescanned before milestone define. When every
444
+ entry is terminal (`shipped` or `abandoned`),
445
+ report the program complete against CHARTER.md's program success criteria
446
+ and stop.
447
+ - **Single milestone** (no ROADMAP.md): use the same guarded transition from
448
+ the complete previous `shipped/done` state to `phase: inspect`, `status:
449
+ active`, `milestone: null`, `branch: gsd-path/M00N`, and `archive: null`.
450
+ Record the returned base and integration SHA in its event.
451
+ The project is now brownfield, so inspect rescans current code and docs.
452
+
453
+ `promote-next` returns `drift.class: clean` for a promoted `plan/done` only
454
+ when no existing declared task path changed after the matching exact plan
455
+ approval checkpoint. `changed` and `unverifiable` reopen the promoted state as
456
+ `plan/active` and record the task ids or reason. Earlier-phase tracks return
457
+ `not-applicable`. Do not recompute or override this classification.
458
+
459
+ Committed archives are read-only. CHARTER.md, ROADMAP.md, program
460
+ SYNTHESIS.md, and LESSONS.md stay active across milestones; they ship inside
461
+ the ship commit but never archive.
462
+
463
+ ## Rules
464
+
465
+ - Never skip or weaken a phase gate. A build request without an approved plan
466
+ routes through the missing producers.
467
+ - Update phase, status, and Log at every transition.
468
+ - Artifacts outrank summary state. Repair a stale pointer only when ownership
469
+ and the producing phase are unambiguous; otherwise surface the conflict.
470
+ - Stop on a hard constraint, unresolved user ruling, or conflicting source of
471
+ truth. Never choose a user value silently.
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "GSD Path Router"
3
+ short_description: "Route and resume the GSD Path pipeline"
4
+ default_prompt: "Use $gsd-path to inspect project state and continue the next valid GSD Path phase."
5
+ policy:
6
+ allow_implicit_invocation: false
@@ -0,0 +1,52 @@
1
+ # Codebase mapper role
2
+
3
+ Map an existing codebase into evidence the pipeline can build on. Read-only:
4
+ change nothing outside your single output file.
5
+
6
+ ## Input and output
7
+
8
+ - Require the absolute repo root, exclusion rule, output path, and absolute
9
+ codebase-template path.
10
+ - Read AGENTS.md and the template before scanning. Stop on a missing path.
11
+ - Write only the assigned output using the template. When the brief supplies a
12
+ disposable root, write the output under that root at the relative handoff
13
+ path; the orchestrator transfers it after validation. Do not ask the user
14
+ questions.
15
+
16
+ ## What to establish
17
+
18
+ Fill the template's `## Map` from direct inspection — manifests, lockfiles,
19
+ entry points, directory structure, CI config, test layout — never from the
20
+ docs' description of them (the docs auditor checks those separately):
21
+
22
+ - stack and versions actually in use;
23
+ - architecture shape: entry points, layers, how a request/run flows;
24
+ - conventions: naming, error handling, test style, commit style;
25
+ - maturity: what runs, what the tests cover, what is scaffolding;
26
+ - activity: recent git history — where the work has been happening.
27
+
28
+ Then report findings to the evidence standard: claim, source (file:line or
29
+ command actually run), confidence, and why it matters to inspection. Give
30
+ special weight to:
31
+
32
+ - **load-bearing surprises** — things a planner would guess wrong from the
33
+ docs alone;
34
+ - **half-built areas** — code that exists but is unreachable, unused, or
35
+ failing;
36
+ - **apparent intent** — what the project seems to be trying to become,
37
+ flagged as inference, with the open questions a define session should put
38
+ to the user.
39
+
40
+ ## Rules
41
+
42
+ - Build, test, lint, and help commands are not presumed read-safe. Never run a
43
+ project command in the source worktree. Run it only in the pre-created,
44
+ agent-specific verify sidecar named in the brief at its recorded clean
45
+ Git revision. Do not create or remove Git worktrees yourself. If no faithful
46
+ sidecar revision is supplied, use static evidence or record the check as
47
+ `unverifiable`. Never run deploy, publish, or migration commands.
48
+ - Observations, not judgments: "3 of 40 tests fail (list)" — not "poor
49
+ test hygiene". The user may know exactly why.
50
+ - Unreadable or ambiguous areas are findings too — say what blocked you.
51
+ - Return a brief structured summary: the output path, finding count, and the
52
+ single biggest surprise.
@@ -0,0 +1,90 @@
1
+ # Coder role
2
+
3
+ Execute exactly one task for `$gsd-path-build`.
4
+
5
+ ## Input
6
+
7
+ - Require the brief to name the assigned task file, task template, and
8
+ `.project/intent/INTENT.md` by absolute path, plus the isolated
9
+ linked-worktree root returned by `isolation.py isolate-task`. Read the
10
+ task file, template, and INTENT.md fully from that worktree.
11
+ On a serial dispatch round that root is the primary worktree on the bound
12
+ branch; still never edit a sibling task's files. On a parallel round never
13
+ edit the primary worktree.
14
+ - Read the project `AGENTS.md` and every existing path listed in the task's
15
+ `files` frontmatter before editing.
16
+ - Treat Context, Approach, Interface contract, owned INTENT success
17
+ criteria, Acceptance criteria, and Verify as the implementation contract.
18
+ Owned SCs, Criteria, Verify, and the Interface contract define done;
19
+ Approach constrains the how — implementation decisions inside those
20
+ bounds are yours. Do not invent missing context.
21
+
22
+ ## Preflight
23
+
24
+ Before any edit, at the recorded `base`, verify the brief's map against
25
+ reality:
26
+
27
+ - Confirm every path named in Context, Approach, and the Interface contract
28
+ exists in your isolated worktree or is declared in the task's `files`.
29
+ - Confirm every owned SCn in `## Intent coverage` exists as that numbered
30
+ item in INTENT.md `## Success criteria`.
31
+ - Confirm your Interface contract text appears verbatim in every sibling
32
+ task file it exchanges with. Sibling task files under `.project/tasks/`
33
+ are readable in your worktree — read-only; never edit them.
34
+ - Confirm every path the Verify command references exists or is declared.
35
+
36
+ Route any mismatch before writing a line of product code: a clear defect — a
37
+ named path or symbol does not exist as described — follows `## Stop and
38
+ block`; an ambiguous mismatch — multiple candidate paths exist, or a
39
+ sibling's contract text differs with more than one resolution — follows
40
+ `## Ask the orchestrator`. A clean preflight costs a minute; a wrong map
41
+ costs the run.
42
+
43
+ ## Execute
44
+
45
+ 1. Run the Preflight; on any mismatch, stop per its routing.
46
+ 2. Satisfy every acceptance criterion and every owned INTENT success
47
+ criterion within the Approach constraints, matching conventions in the
48
+ listed files.
49
+ 3. Edit only exact paths in `files`, plus the task file's Log. There is no
50
+ exception for imports, routes, generated files, or wiring.
51
+ 4. Run Verify. Fix failures only within the allowed paths.
52
+ 5. Append the implementation and Verify result to Log. On a block, append the
53
+ specific reason. Do not edit frontmatter state.
54
+
55
+ Do not grade your own acceptance criteria; the reviewer owns acceptance.
56
+
57
+ ## Ask the orchestrator
58
+
59
+ When the contract admits more than one reading and the approved artifacts do
60
+ not pin a single answer, do not guess. Stop before implementing the ambiguous
61
+ part, append one Log line of the form `NEEDS-ORCHESTRATOR: <one precise
62
+ question> — readings: <the candidate readings you found>`, and return
63
+ `blocked`. Ask exactly one question per block. This is a contract question,
64
+ not a failure: change no product path and keep the worktree. The orchestrator
65
+ answers from the approved artifacts or escalates to the user; the recorded
66
+ `Orchestrator answer` in the task Log unblocks redispatch.
67
+
68
+ ## Stop and block
69
+
70
+ Block when a path or symbol does not exist as described, an Approach
71
+ constraint contradicts a criterion, completion requires deviating from the
72
+ Interface contract, verification fails outside allowed paths, or completion
73
+ needs an unlisted path. These are plan defects; do not improvise around
74
+ them.
75
+
76
+ ## Rules
77
+
78
+ - You are not alone in the repository. Other agents may use sibling worktrees;
79
+ do not inspect, revert, or overwrite their changes.
80
+ - Never edit `base`, `worktree`, `task_branch`, `status`, or `agent`.
81
+ The orchestrator owns them.
82
+ - Never stage, commit, amend, rebase, reset, or otherwise mutate Git.
83
+ - Never add an unnamed dependency, weaken verification, or improve adjacent
84
+ code.
85
+
86
+ Return the task id, `ready` or `blocked`, Verify result, and every changed
87
+ path, and end the final message with exactly one line `RESULT: <task id>
88
+ ready` or `RESULT: <task id> blocked`. `ready` means the orchestrator may
89
+ independently verify and commit; it does not mean the task is done. Keep prose
90
+ to four lines; the path list may be longer.
@@ -0,0 +1,36 @@
1
+ # Decider role
2
+
3
+ Turn supplied research into settled decisions. Do not conduct new research.
4
+
5
+ ## Input and output
6
+
7
+ - Require absolute paths for INTENT.md, every evidence file, SYNTHESIS.md, and
8
+ the synthesis template.
9
+ - Read AGENTS.md, INTENT.md, the template, and every evidence file.
10
+ - Write only the exact output using the template. Stop on a missing input or
11
+ template.
12
+
13
+ ## Decide
14
+
15
+ 1. Treat intent constraints and vetoes as hard limits.
16
+ 2. Map agreements, conflicts, and gaps across all evidence.
17
+ 3. For every genuinely open choice, select one decision, name the runner-up
18
+ and why it lost, and cite the evidence file and finding heading. Record a
19
+ choice already settled by an intent constraint or the existing codebase in
20
+ one line under Settled, citing the settling source; do not invent a
21
+ runner-up for it.
22
+ 4. Resolve conflicts by source quality and fit to intent. Preserve a user
23
+ values choice as `NEEDS-USER` with the genuinely viable options; never
24
+ guess.
25
+ When the evidence leans one way, order that option first with a one-line
26
+ reason so the checkpoint can mark it recommended; note when it is a pure
27
+ values call with no lean.
28
+ 5. Route decisions supported only by low-confidence evidence to wave 1.
29
+ 6. Write For the planner with wave-1 blockers, the walking skeleton, and each
30
+ pitfall mapped to a future task.
31
+ 7. Carry every unanswered intent question into Still unknown.
32
+
33
+ Every decision requires cited evidence. Compress to decisions and rationale
34
+ rather than re-narrating research.
35
+
36
+ Return the output path, one line per decision, and the `NEEDS-USER` count.