@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,167 @@
1
+ ---
2
+ name: gsd-path-inspect
3
+ description: Inspect an existing codebase and its documentation to establish brownfield ground truth before intent is defined. Use only when the user explicitly invokes $gsd-path-inspect or an active $gsd-path router explicitly routes to this phase.
4
+ ---
5
+
6
+ # GSD Path Inspect Phase
7
+
8
+ Establish ground truth about an existing project before intent is defined.
9
+ Detect, scan, and audit first; recommend and question only after the evidence
10
+ is on disk. Never question a user about a codebase the pipeline has not read.
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 phase work 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 inspect is resolved through its artifact gate, or the
18
+ phase blocks.
19
+
20
+ ## Preconditions
21
+
22
+ If STATE.md is missing, run the bundled
23
+ `python3 <absolute-bundled-script> initialize --repo <absolute-root>
24
+ --template <absolute-state-template>` helper (`scripts/detect_project.py`) and
25
+ follow its returned JSON `verdict` / `route`. This is the only no-state
26
+ boundary; do not run `classify` first or classify from a directory listing or
27
+ conversation. If the command exits nonzero, returns `error`, or returns
28
+ `wrote_state: false`, report the error and block without routing or claiming
29
+ STATE.md was written.
30
+ - `owned` — continue under the existing-state rules below.
31
+ - `orphan` — return to `$gsd-path` for orphaned-state recovery instead of
32
+ initializing or overwriting it.
33
+ - `greenfield` — the helper writes STATE.md at `define/active`; skip inspection
34
+ and route to `$gsd-path-define` from this returned verdict.
35
+ - `brownfield` — require `wrote_state: true`, then continue with the helper's
36
+ STATE.md at `inspect/active`.
37
+ If `.project/STATE.md` exists, run `python3 <absolute pipeline_state.py>
38
+ validate --repo <absolute root> [--project-dir .project/next]`; a non-zero
39
+ result returns to `$gsd-path` for ownership checking. Legal entry is
40
+ `inspect/active|blocked`; `inspect/done` routes to define, and any later phase
41
+ stops. When an active router supplies `.project/next/`, require its STATE.md
42
+ to be a regular non-symlink file and apply these rules to that track state.
43
+ When an existing state records a bound branch (single-milestone restart
44
+ or program next-milestone), require the current symbolic branch to match and
45
+ preserve both `branch` and `milestone`. Do not re-enter `inspect/done` in the
46
+ same milestone; a later milestone's `inspect/active` is a new scan.
47
+
48
+ ## Process
49
+
50
+ 1. Before creating or changing `.project/` Markdown, freeze the helper's exact
51
+ stdout from `python3 <absolute check_docs_audit.py> --repo <absolute root>
52
+ --emit-inventory` in a temporary file. Do not rediscover or edit that
53
+ inventory. If STATE.md is now missing, restart Preconditions and route from
54
+ the new `initialize` result; never continue from an ignored result. Record
55
+ the SHA-256 of each existing assigned destination and preserve the existing
56
+ DOCS-AUDIT.md in a temporary prior-audit file; when it records an
57
+ `Audited HEAD` Git resolves as an ancestor of HEAD, freeze the changed set
58
+ as `$gsd-path-docs-audit` step 1 describes. Preserve an existing
59
+ router-bound branch and milestone.
60
+ 2. Dispatch two independent agents in parallel, following the local
61
+ [runtime dispatch contract](references/dispatch.md) and its deterministic
62
+ task-name rules:
63
+ - **Codebase mapper** — role
64
+ [codebase-mapper](references/codebase-mapper.md), template
65
+ [codebase](templates/codebase.md), output
66
+ `.project/research/evidence-codebase.md` (`.project/next/research/` in
67
+ Lookahead mode), task name `inspect_codebase`.
68
+ - **Docs auditor** — role
69
+ [docs-auditor](references/docs-auditor.md), template
70
+ [docs-audit](templates/docs-audit.md), output
71
+ `.project/research/DOCS-AUDIT.md` (same next/ prefix in Lookahead mode),
72
+ task name `inspect_docs`.
73
+ Give each the absolute repo root and exclusion rule. Give the auditor the
74
+ exact frozen inventory, the changed set when one exists, and `alignment
75
+ mode: false`; it audits only that
76
+ list and never rediscovers paths. The frozen inventory travels inside the
77
+ dispatch brief; never persist it as a `.project/` sidecar file. Pass an existing DOCS-AUDIT.md separately
78
+ as carry-forward input so its `## User rulings` and `planned` values remain
79
+ verbatim. When Git has a resolvable HEAD and no non-`.project` worktree
80
+ changes, the orchestrator creates a verify sidecar for each agent with
81
+ `python3 <absolute isolation.py> isolate-verify --repo <absolute primary>
82
+ --base <HEAD> --name inspect-codebase` and `--name inspect-docs`, and
83
+ includes its path and revision for project commands; expected new pipeline
84
+ artifacts do not make product code dirty. Each agent writes only its
85
+ assigned output under that sidecar and keeps it there for the gates in step
86
+ 3. Otherwise no
87
+ project command may run. The docs-auditor brief carries current HEAD as the
88
+ audit baseline only when its verify sidecar was created at HEAD; otherwise
89
+ it carries `none`. The auditor writes that baseline as `Audited HEAD`.
90
+ 3. Gate both artifacts against their templates: the codebase evidence needs
91
+ a filled `## Map` plus findings as observed — no quota, but an empty
92
+ findings section must say why; the docs audit must pass the bundled
93
+ `python3 <absolute check_docs_audit.py> --repo <docs sidecar> --audit
94
+ <track-relative DOCS-AUDIT.md> --inventory <frozen inventory file>`, where
95
+ the audit path is `.project/research/DOCS-AUDIT.md` normally and
96
+ `.project/next/research/DOCS-AUDIT.md` in Lookahead mode; add
97
+ `--prior-audit <temporary prior-audit file>` when one was preserved and
98
+ `--changed <temporary changed-set file>` when one was frozen
99
+ (disjoint `## Doc:` sections and `## Descriptive docs` equal to the frozen
100
+ inventory, every claim a valid verdict with evidence, Summary counts and
101
+ remediation queue consistent). After each artifact passes, collect it with
102
+ `python3 <absolute isolation.py> collect-artifact --repo <absolute primary>
103
+ --source <returned worktree> --base <recorded HEAD> --branch <returned
104
+ branch> --source-path <assigned track-relative path> --destination-path
105
+ <assigned track-relative path>`, adding `--expected-destination <recorded
106
+ prior SHA-256>` when that destination existed. Require the returned base,
107
+ branch, source, and destination to match. Only then retire with `python3
108
+ <absolute isolation.py> retire --repo <absolute primary> --worktree
109
+ <returned worktree> --branch <returned branch>` without `--force`.
110
+ Redispatch one complete corrected brief under the same logical task
111
+ name, following the runtime dispatch contract. If it still fails, run
112
+ `pipeline_state.py transition` with expected `inspect/active`, the exact
113
+ current branch and archive values, `--set-status blocked`, and an event
114
+ naming the failed artifact gate. Present **Outcome** with the failed gate, **Review**
115
+ linking each malformed output that exists or STATE.md when an output is
116
+ missing, and **Next** naming the one correction or user decision required;
117
+ then stop.
118
+ 4. Present the ground truth to the user, brief — a summary, not a dump:
119
+ - what the project is (stack, architecture, entry points, maturity);
120
+ - what demonstrably works (verified claims, passing verifies);
121
+ - drift: what the docs claim that the code contradicts, and what exists
122
+ with no documentation at all;
123
+ - the mapper's open questions about apparent intent.
124
+ Lead with the outcome, then provide absolute-path Markdown links to the
125
+ track's `research/evidence-codebase.md` and `research/DOCS-AUDIT.md`
126
+ (`.project/research/` normally, `.project/next/research/` in Lookahead
127
+ mode), then state that define is next.
128
+ 5. Run `python3 <absolute pipeline_state.py> transition --repo <absolute root>
129
+ [--project-dir .project/next]
130
+ --event "inspection artifacts passed" --expect-phase inspect --expect-status
131
+ active --expect-milestone <current milestone or null> --expect-branch
132
+ <current branch or null> --expect-archive <current archive or null>
133
+ --set-phase inspect --set-status done`. This helper is the only ordinary
134
+ STATE mutation; require its returned state to be `inspect/done`.
135
+ Identify `$gsd-path-define` as next. When this phase was routed by an
136
+ active `$gsd-path`, return control to that router so its bundled define
137
+ contract runs in brownfield mode (and milestone mode when ROADMAP.md
138
+ exists). When invoked directly, stop and tell the
139
+ user to explicitly invoke `$gsd-path`, which routes to define; do not invoke
140
+ an explicit-only sibling skill yourself.
141
+
142
+ ## Lookahead mode
143
+
144
+ Entered only when an active router supplies the lookahead track root
145
+ `.project/next/` while the active STATE.md is `build/active` in program
146
+ flow. Evaluate every state and artifact precondition against the track:
147
+ `.project/next/STATE.md` is the state file and the outputs are
148
+ `.project/next/research/evidence-codebase.md` and
149
+ `.project/next/research/DOCS-AUDIT.md`. Freeze the inventory from the
150
+ repository root as usual. Carry forward the active
151
+ `.project/research/DOCS-AUDIT.md` when it exists so its `## User rulings`
152
+ and `planned` values remain verbatim; otherwise carry forward a track-local
153
+ audit if present. Never write an active-path artifact.
154
+
155
+ ## Rules
156
+
157
+ - Scanning is read-only. Inspection changes nothing outside `.project/`.
158
+ - Project commands run only in agent-specific disposable verification
159
+ worktrees at a recorded clean revision; otherwise checks use static evidence
160
+ or are `unverifiable`. They never run in the source worktree.
161
+ - Report reality, not judgment: "tests exist but 3 fail" — never "test
162
+ hygiene is poor". The user may know exactly why those 3 fail.
163
+ - Doc-vs-code conflicts are surfaced, never auto-resolved; whether the doc
164
+ or the code is wrong is the user's ruling, captured while defining intent.
165
+ - Inspection evidence feeds the whole pipeline: researchers treat
166
+ `evidence-codebase.md` as a fifth standard dimension when it exists, the
167
+ planner must match its conventions, and reviewers may cite it.
@@ -0,0 +1,411 @@
1
+ ---
2
+ name: gsd-path-plan
3
+ description: Create and validate dependency-ordered GSD Path build waves and complete task contracts. Use only when the user explicitly invokes $gsd-path-plan or an active $gsd-path router explicitly routes to this phase.
4
+ ---
5
+
6
+ # GSD Path Planning Phase
7
+
8
+ Dispatch one planner, gate its artifacts, and obtain the single approval that
9
+ authorizes the build.
10
+
11
+ Routing instructions below are caller handoffs under the AGENTS.md handoff
12
+ rule; never invoke an explicit-only sibling skill yourself.
13
+
14
+ Before planning and again before approval, apply the AGENTS.md
15
+ pending-answer rule with the bundled `scripts/discussion_records.py`; a
16
+ follow-up owned by planning is resolved in PLAN.md or its tasks, or the
17
+ phase blocks.
18
+
19
+ ## Preconditions
20
+
21
+ Require `pipeline: gsd-path/v2` in `.project/STATE.md`; a missing or different
22
+ marker returns to `$gsd-path` for ownership checking. Normal-mode legal entry
23
+ is `decide/done` (transition to `plan/active`) or `plan/active|blocked`;
24
+ quick mode additionally enters from `define/done` when INTENT.md records
25
+ `Lane: quick`, and milestone mode enters from `define/done` when INTENT.md
26
+ records `Lane: milestone` (see Quick mode and Milestone mode below).
27
+ Before dispatch, enter from `decide/done` or `define/done` with
28
+ `pipeline_state.py transition`, the complete current state as expected,
29
+ `--set-phase plan --set-status active`, and event `planning started`. Resume
30
+ `plan/blocked` through the same helper with event `planning resumed`. Require
31
+ the returned track state to be `plan/active`; never edit STATE directly.
32
+ Any later phase blocks instead of replacing an approved plan. Patch mode is
33
+ the only reopen exception: require an approved plan, no in-progress task, and
34
+ state `plan/done` or `ship/blocked`; any other state blocks. `build/done` is
35
+ reserved exclusively for the build orchestrator's transition recovery and
36
+ must return there instead of reopening planning. When an active router
37
+ supplies the lookahead track root `.project/next/`, evaluate these
38
+ preconditions against the track instead; see Lookahead mode.
39
+ Require `.project/intent/INTENT.md`. Normal mode also requires
40
+ `.project/research/SYNTHESIS.md`; quick mode may enter without it because this
41
+ phase creates the Settled-only synthesis before gating. Milestone mode instead
42
+ requires the program `.project/SYNTHESIS.md` at the `.project/` top level plus
43
+ `.project/ROADMAP.md` with an entry matching the track STATE's `milestone`.
44
+ Require that entry to be `active` normally and `pending` in Lookahead mode.
45
+ Require a non-empty `## Decisions` or `## Settled` section and no unresolved
46
+ `NEEDS-USER` items before dispatching the planner. Route to the producing phase when a
47
+ precondition fails.
48
+
49
+ ## Alignment queue check
50
+
51
+ Before planning, read `research/DOCS-AUDIT.md` from the supplied track root:
52
+ `.project/research/DOCS-AUDIT.md` normally or
53
+ `.project/next/research/DOCS-AUDIT.md` in Lookahead mode. An absent
54
+ track-local audit means an empty alignment queue. If queued rulings marked
55
+ `planned: no` exist, offer once to include them:
56
+
57
+ - **Normal planning** — accepted items fold into the plan as ordinary
58
+ tasks in dependency order (evidence inlined, `fix-doc` verifies re-run
59
+ the audit's claim check), and their queue rows get the task id.
60
+ - **Patch mode** — accepted items join the patch wave alongside the
61
+ invoking findings.
62
+
63
+ Declined items stay `planned: no` and will be offered again next time. The
64
+ user picks per item or "all"/"none" — a stale backlog must never sneak into
65
+ a plan wholesale without the user seeing the list. Offer through an
66
+ interactive user-input tool when available, marking the planner's
67
+ recommended choice per item `(recommended)` with a one-line reason (age,
68
+ severity, or fit with this milestone's scope).
69
+
70
+ ## Process
71
+
72
+ Set `<track>` to `.project` for normal work and `.project/next` when the
73
+ router supplied lookahead mode. Every per-milestone path below, including
74
+ review-panel evidence, is rooted there. Program inputs remain at `.project/`
75
+ as stated in Lookahead mode.
76
+
77
+ 1. Read the local [plan template](templates/plan.md), [task template](templates/task.md),
78
+ [plan-panel template](templates/plan-panel.md), `scripts/check_handoffs.py`,
79
+ and `scripts/review_panel.py`; resolve them to absolute paths.
80
+ 2. Read the local [planner role](references/planner.md), then follow the
81
+ local [runtime dispatch contract](references/dispatch.md) with deterministic
82
+ logical task name `plan`. Give it absolute role, `AGENTS.md`, `WORKFLOW.md`,
83
+ input, template, and output paths, including `.project/LESSONS.md` when it
84
+ exists. Whenever INTENT.md records `Lane: milestone` — any entry point —
85
+ also include `.project/CHARTER.md`, `.project/ROADMAP.md`, the top-level
86
+ program `.project/SYNTHESIS.md`, and the resolved
87
+ milestone entry slug. In
88
+ final-review patch mode also include
89
+ `.project/review/PATCH-FINDINGS.md` and every source artifact it names; in
90
+ docs-audit patch mode include the selected `DOCS-AUDIT.md` rows and user
91
+ rulings.
92
+ The outputs are exactly `<track>/plan/PLAN.md` and one task
93
+ file per task at `<track>/tasks/T###-slug.md` — no other location is
94
+ canonical, and `.project/PLAN.md` is never written.
95
+ 3. Gate PLAN.md and every task file:
96
+ - Require unique task ids, and require every task's `wave` to name a
97
+ `## Wave N` heading in PLAN.md. PLAN.md carries no task table.
98
+ - Require task frontmatter fields `id`, `title`, `wave`, `deps`, `status`,
99
+ `agent`, `base`, `worktree`, `task_branch`, and `files`; require
100
+ initial `status: pending`, `agent: null`, `base: null`,
101
+ `worktree: null`, and `task_branch: null` values on every new task.
102
+ In patch mode, tasks already `done` keep their landed metadata; only
103
+ the appended patch tasks must start clean.
104
+ - Require every dependency id to exist, forbid later-wave dependencies,
105
+ detect cycles, and forbid file overlap between planned tasks in the same
106
+ wave. Same-wave dependency chains are allowed only when their files do
107
+ not overlap; the build executes them in dependency layers.
108
+ - Reject a declared dependency that carries neither data nor a prerequisite
109
+ effect. A `deps` edge is valid only when the dependent consumes a symbol,
110
+ signature, schema, endpoint, file format, or path named in that
111
+ dependency's Interface contract, the two tasks' `files` overlap, or
112
+ PLAN.md's Dependency notes name the exact landed effect the dependent
113
+ requires — a removal, a migration, a cutover — and how a reviewer sees it.
114
+ Judge each edge separately when a task lists several deps. Anything else
115
+ is narrative order, not a dependency: drop that edge and place both tasks
116
+ by the wave-order rules.
117
+ - Require non-empty Context and Approach, observable Acceptance criteria,
118
+ a Verify command that can fail when this task is skipped, that names a
119
+ path from that task's `files`, and that is not PLAN.md's project Verify
120
+ unless an owned SC names that command, an Intent coverage
121
+ section (`- None` or owned SCn ids), and Log sections.
122
+ - Require an Interface contract section in every task: `None` for
123
+ independent tasks; when tasks exchange a symbol, schema, endpoint, file
124
+ format, or path, exact shared shapes with identical text in every
125
+ involved task. Every contract line names a shape that task defines or
126
+ consumes through its own `files`; one block copied into tasks that
127
+ neither define nor consume its shapes is a gate failure, not sharing.
128
+ - Require deliverable-sized tasks naming real paths that match the existing
129
+ codebase: each task is the largest coherent vertical slice — feature plus
130
+ its tests and wiring — one agent run can complete. Reject a plan that
131
+ splits one deliverable across tasks when no file-scope, dependency, or
132
+ capacity conflict forces the split.
133
+ - Require a `Review depth` value (`full`, `deep`, or `verify-only`) on
134
+ every wave. Wave 1 and any wave touching authentication, authorization,
135
+ payments, data migration, or concurrency requires `full` or `deep`;
136
+ quick-lane single waves may use `verify-only`. The planner assigns `deep`
137
+ sparingly to waves where a wrong merge is irreversible or
138
+ security-critical.
139
+ - When INTENT.md `Surfaces:` is not `none`, require a PLAN.md
140
+ `## Surface contract` block per named surface with its Criteria, Entry,
141
+ States, Walkthrough, and the task that delivers it. Those criteria must be
142
+ among the SCn ids that task owns in its Intent coverage, and their Verify
143
+ must exercise the surface a person uses — a rendered page, a real
144
+ command's output — not an internal unit test.
145
+ Require the surface to land in the same wave as the capability behind
146
+ it, never in a later polish wave.
147
+ - Prove every intent constraint and synthesis decision is covered, that no
148
+ scope-out veto appears in a task, and that `Project verify` is a real,
149
+ non-placeholder command in PLAN.md. Every Verify — task and project —
150
+ runs in a fresh sidecar worktree with nothing installed, so a command
151
+ that needs dependencies must install them first
152
+ (`pnpm install --frozen-lockfile && ...`); a bare `pnpm typecheck` fails
153
+ there.
154
+ - For a Git-backed plan, run `python3 <absolute workflow_run.py>
155
+ gate-plan --repo <absolute repo root>` and `--project-dir .project/next`
156
+ for lookahead. Retain its JSON receipt with the plan gate evidence. It
157
+ runs pending discussion, intent coverage, task brief paths, and review
158
+ configuration gates in order; a failure stops the sequence. New declared
159
+ directories are allowed; existing ancestors must be directories at HEAD.
160
+ A task Verify must name an owned file unless its owned SC explicitly
161
+ names Project verify. Quick mode requires the review panel off.
162
+ Before Git exists, run the bundled `check_handoffs.py plan` and
163
+ `review_panel.py validate-plan` gates directly; build owns the deferred
164
+ base-dependent brief check. Approval still uses the journaled helper below.
165
+ 4. Redispatch one complete corrected brief under logical task name `plan`,
166
+ following the runtime dispatch contract and including all gate failures.
167
+ Allow one revision round. If it still fails, use `pipeline_state.py
168
+ transition` with the exact current phase, status, milestone, branch, and
169
+ archive as expected fields, `--set-phase plan --set-status blocked`, and a
170
+ one-line event naming the failed plan gates. Require returned
171
+ `plan/blocked`, then
172
+ present **Outcome** with the failed gate, **Review** linking the resolved
173
+ absolute PLAN.md path (or STATE.md when PLAN.md is missing), and **Next**
174
+ naming the one correction or user decision required. Stop.
175
+ 5. Show the wave number, goal, and task count for every wave as the outcome.
176
+ Link the resolved absolute `<track>/plan/PLAN.md` path and summarize the
177
+ linked `<track>/tasks/` task set. Then run the optional review panel
178
+ before the approval question:
179
+ - Inspect the host child-agent schema for advertised model slugs. Do not
180
+ guess slugs. Pass them to `python3 <absolute review_panel.py> resolve
181
+ --plan <absolute <track>/plan/PLAN.md> --intent <absolute
182
+ <track>/intent/INTENT.md> --advertised
183
+ <comma slugs> --parent-slug <current model slug when known>` and
184
+ `--charter <absolute .project/CHARTER.md>` when that file exists.
185
+ - `status: off` — skip the panel and remove any stale
186
+ `<track>/review/PLAN-PANEL.md` or `PLAN-PANEL.skipped.json`. The approval
187
+ question may include
188
+ `Approve with review panel (detected)` as an alternative; if chosen,
189
+ write `review_panel: detected` into PLAN.md Config, re-run resolve, and
190
+ continue this step.
191
+ - `status: skipped` — remove any stale
192
+ `<track>/review/PLAN-PANEL.md`, persist the exact JSON stdout from
193
+ `resolve` at `<track>/review/PLAN-PANEL.skipped.json`, then use
194
+ `pipeline_state.py transition` against `<track>` with the exact current
195
+ state as both expected and resulting phase/status and event `plan review
196
+ panel skipped: <helper reason>`. Require the returned unchanged
197
+ `plan/active` position and continue without a panel. Do not treat
198
+ this as a gate failure or infer enablement again from Config.
199
+ - `status: error` or exit 2 — use the same guarded transition to set
200
+ `plan/blocked` with an event naming the helper error, link PLAN.md, and stop.
201
+ A named family that is not advertised is an assertion failure.
202
+ - `status: ready` — for each selected family, spawn one independent child
203
+ with logical task name `review_plan_panel_<family>`, the reviewer role
204
+ in plan-panel mode, the plan-panel template, and the exact helper-returned
205
+ model slug when the host advertises model selection. Never override the
206
+ model on the planner. Each child stages its family file under a
207
+ disposable root; the parent validates and copies those files, removes
208
+ any stale `<track>/review/PLAN-PANEL.skipped.json`, then runs
209
+ `python3 <absolute review_panel.py> merge --kind plan --inputs <family
210
+ files> --output <absolute <track>/review/PLAN-PANEL.md> --mode
211
+ <detected|named>`. Do not average findings or auto-replan.
212
+ Before asking for approval, require exactly one panel artifact for non-off
213
+ Config: `PLAN-PANEL.md` for `ready`, or `PLAN-PANEL.skipped.json` for
214
+ `skipped`. Off Config requires neither. A mismatch blocks approval.
215
+ Ask one explicit next question: whether to approve this plan and start the
216
+ build. When PLAN-PANEL.md has `Actionable: 0` or the panel did not run,
217
+ list `Approve and start build (recommended)` first, with `Request changes`
218
+ as the alternative. When `Actionable` is greater than 0, list `Address
219
+ panel findings first (recommended)` first, then `Approve and start build`,
220
+ then `Request changes`. Link the applicable `<track>/review/PLAN-PANEL.md`
221
+ or skipped receipt. If the user
222
+ requests changes, keep `phase: plan`, `status: active`, revise, and re-gate.
223
+ 6. On approval in an established repository, record the exact full current
224
+ HEAD before changing approval metadata, then run:
225
+
226
+ ```text
227
+ python3 <absolute pipeline_state.py> approve \
228
+ --repo <absolute root> --kind plan \
229
+ --project-dir <.project or .project/next> \
230
+ --expected-head <recorded full HEAD>
231
+ ```
232
+
233
+ Before approval, the helper validates the task graph and brief paths.
234
+ Pending briefs may reference files supplied by transitive dependencies.
235
+ Landed briefs use their recorded historical base, with no dependency-file
236
+ allowance, so later file changes do not invalidate immutable briefs.
237
+ This applies to plan re-approval too; the dispatch CLI remains HEAD-only
238
+ with no overrides.
239
+
240
+ The helper journals before mutation, changes the track STATE from
241
+ `plan/active` to `plan/done` with event `plan approved`, validates that the
242
+ active worktree is on its bound branch, and checkpoints all pending
243
+ `.project/` artifacts under the top-level allowlist in
244
+ [isolation.PROJECT_ENTRIES](scripts/isolation.py)
245
+ with the canonical plan subject and body. Require its
246
+ typed result to report `schema: gsd-path/state-checkpoint/v1`, `status:
247
+ approved`, `kind: plan`, the requested `project_dir`, `state.status: done`,
248
+ and the returned current commit. Rerun the same command after interruption;
249
+ the matching journal owns recovery.
250
+
251
+ Defer that checkpoint only when the directory is not yet a Git repository
252
+ or `.project/REPOSITORY.md` records `Kind: new-github`. In that case run
253
+ the same `approve` command with `--defer-checkpoint` instead of
254
+ `--expected-head`; the helper journals the `plan approved` transition and
255
+ the build transition commit owns the pending artifacts. Patch-mode
256
+ approvals run `approve --repo <absolute root> --kind plan --patch`
257
+ (event `patch plan approved`) without a plan checkpoint because build's
258
+ patch re-entry commits the artifacts with its `build/active` transition.
259
+ `pipeline_state.py transition` never approves a plan. Confirm approval,
260
+ link PLAN.md again, and state that
261
+ build starts next. Do not add another approval gate. When routed by an
262
+ active `$gsd-path`, return control to that router so its bundled build
263
+ contract starts. When invoked directly, stop and tell the user to explicitly
264
+ invoke `$gsd-path`, which routes to build; do not invoke an explicit-only
265
+ sibling skill yourself.
266
+
267
+ ## Ordering rules
268
+
269
+ - Put plan-invalidating assumptions in wave 1.
270
+ - Produce the thinnest runnable end-to-end slice in wave 2.
271
+ - Order later features by dependency, then polish.
272
+
273
+ ## Quick mode
274
+
275
+ Legal entry: `define/done` where INTENT.md records `Lane: quick` (transition
276
+ to `plan/active`, logging that research and decide were skipped for the
277
+ quick lane). Quick mode dispatches no planner agent — the orchestrator writes
278
+ the artifacts directly:
279
+
280
+ 1. Write `.project/research/SYNTHESIS.md` containing only `## Settled` lines
281
+ citing INTENT.md constraints (and, brownfield, `evidence-codebase.md`)
282
+ plus a minimal `## For the planner` naming the walking skeleton. No
283
+ invented decisions or runner-ups.
284
+ 2. Write `.project/plan/PLAN.md` with exactly one wave — `Review depth:
285
+ verify-only` permitted — and at most two deliverable-sized task files
286
+ (project policy),
287
+ honoring every task-contract rule above and `.project/LESSONS.md` when it
288
+ exists. Write `review_panel: off` and `finding_skeptics: off` regardless
289
+ of INTENT.md.
290
+ 3. Gate exactly as step 3 above and use the same outcome, Review link, and
291
+ single approval question as normal mode.
292
+ A quick plan that cannot satisfy the gates — more than two tasks, an open
293
+ choice, a cross-wave risk — corrects INTENT.md's `Lane:` to `standard`,
294
+ tells the user why, and returns to the standard pipeline at `define/done`.
295
+
296
+ ## Milestone mode
297
+
298
+ Legal entry: `define/done` where INTENT.md records `Lane: milestone`
299
+ (transition to `plan/active`). Program decisions are already settled, so this
300
+ mode first writes the milestone's own synthesis — the archive requires
301
+ `research/SYNTHESIS.md` for every milestone, and it records exactly which
302
+ program decisions the milestone plan was built against:
303
+
304
+ 1. Require the program `.project/SYNTHESIS.md`, `.project/CHARTER.md`, and
305
+ `.project/ROADMAP.md` with an entry matching the track STATE's `milestone`;
306
+ it must be `active` normally and `pending` in Lookahead mode.
307
+ 2. Write `.project/research/SYNTHESIS.md` containing only `## Settled` lines
308
+ citing the program SYNTHESIS decisions, charter constraints, and the
309
+ resolved roadmap entry's success criteria, plus a minimal `## For the planner`
310
+ naming the milestone's walking skeleton. No invented decisions or
311
+ runner-ups.
312
+ 3. Dispatch the planner per the standard contract (the brief includes
313
+ CHARTER.md, ROADMAP.md, and the resolved entry slug), then gate and approve
314
+ exactly as normal mode.
315
+
316
+ ## Lookahead mode
317
+
318
+ Entered only when an active router supplies the lookahead track root
319
+ `.project/next/` while the active STATE.md is `build/active` in program
320
+ flow. Milestone-mode rules apply with every per-milestone path rooted at
321
+ `.project/next/`: the state file is `next/STATE.md`, INTENT.md is
322
+ `next/intent/INTENT.md`, the milestone synthesis is
323
+ `next/research/SYNTHESIS.md` (written here, per milestone mode), and the
324
+ outputs are `next/plan/PLAN.md` and `next/tasks/T###-slug.md`. Program
325
+ inputs — CHARTER.md, ROADMAP.md, the top-level SYNTHESIS.md, LESSONS.md —
326
+ are read from their active `.project/` paths. Lookahead-only differences:
327
+
328
+ - Resolve the roadmap entry only from `.project/next/STATE.md`'s `milestone`,
329
+ require that exact entry to remain `pending`, and never substitute the
330
+ building milestone's `active` entry.
331
+
332
+ - Task paths gate against the codebase at current HEAD while the active
333
+ milestone is still building. Where the building milestone's approved
334
+ PLAN.md declares paths the lookahead tasks will touch, name that overlap
335
+ in the task Context; the router's promotion and the build's normal
336
+ plan-defect repair absorb drift.
337
+ - The approval checkpoint commit stages `.project/` in full, which includes
338
+ `next/`; the deferral exceptions are unchanged. Its panel evidence is
339
+ `.project/next/review/PLAN-PANEL.md` or
340
+ `.project/next/review/PLAN-PANEL.skipped.json`, never an active-path copy.
341
+ - Patch mode is never legal in lookahead: there is no running build of the
342
+ lookahead milestone to patch. Route any such request to the active
343
+ milestone's build track.
344
+ - A promoted lookahead plan re-enters this phase as `plan/active` when the
345
+ router's promotion re-validation flags drifted task paths. Re-gate every
346
+ flagged task against current HEAD — repair contracts through documented
347
+ plan-defect repair or one planner redispatch under logical task name
348
+ `plan` — present the delta, and re-run the step 5-6 approval before
349
+ build.
350
+
351
+ Never write an active-path artifact in this mode.
352
+
353
+ ## Patch mode
354
+
355
+ Turn verified findings into one appended wave instead of replanning.
356
+ Invoked by `$gsd-path-docs-audit` (remediation rulings) or `$gsd-path-ship final`
357
+ (`not-met` criteria); the invoker names the exact ordered list of one or more
358
+ findings source files and rows.
359
+
360
+ **Preconditions.** An existing approved `.project/plan/PLAN.md`. For a
361
+ final-review patch, require a valid `.project/review/PATCH-FINDINGS.md` and the
362
+ source artifacts named there. For a docs-audit patch, require the selected
363
+ `DOCS-AUDIT.md` rows and their recorded user rulings instead. Each selected
364
+ item must carry evidence. No `.project/plan/PLAN.md` → decline and route to
365
+ the normal pipeline (this includes an archived ship, whose plan moved into
366
+ `.project/archive/`); unruled audit findings → send them back for rulings
367
+ first.
368
+
369
+ **Process.**
370
+
371
+ 1. Use `pipeline_state.py transition` with the complete `plan/done` or
372
+ `ship/blocked` state as expected, set `phase: plan`, `status: active`, and
373
+ event `patch plan reopened`. Require returned `plan/active`. A shipped
374
+ milestone cannot reopen because its plan is
375
+ archived; start a new milestone instead.
376
+ 2. In final-review patch mode, run `python3 <absolute check_handoffs.py> patch
377
+ --repo <absolute repo root>`. In docs-audit patch mode, use the selected
378
+ `DOCS-AUDIT.md` rows and rulings as the source hand-off. Dispatch the planner
379
+ per the standard contract with deterministic logical task name `plan_patch`,
380
+ adding: the applicable hand-off path, its exact ordered findings, source
381
+ paths and selected rows, the existing PLAN.md and task files, and the instruction to
382
+ append wave W+1 (highest existing wave + 1) without modifying completed
383
+ waves or existing tasks. One task per accepted finding, carrying the
384
+ finding's evidence verbatim in its Context. A finding from a failing
385
+ project Verify, or one that repeats an earlier patch finding's pattern,
386
+ gets a task whose `files` cover every site in the codebase that matches
387
+ the same pattern — the planner searches for them — and whose Verify
388
+ proves the pattern is absent codebase-wide, not only at the reported
389
+ path; a gate that fails on the first error must not cost one patch wave
390
+ per file. `fix-doc` findings are tasks
391
+ too — their Verify re-runs the audit's claim check so the corrected doc
392
+ is proven, not assumed. A patch task that repairs an SC finding lists that
393
+ SCn in its Intent coverage and adds a coverage row; other patch tasks
394
+ write `- None`. Do not edit existing coverage rows or existing task Owns.
395
+ Cross-finding dependencies stay inside the patch
396
+ wave, split into further waves only if file scopes force it.
397
+ 3. Gate exactly as in step 3 above, scoped to the new tasks plus one extra
398
+ check: patch tasks must not touch a scope-out veto or contradict a
399
+ SYNTHESIS decision — a finding that requires either goes back to the
400
+ user, not into the wave.
401
+ 4. Show the patch wave outcome (finding → task mapping), link the resolved
402
+ absolute PLAN.md and task set, and ask the same two-option approval question.
403
+ On approval, relink the approved plan, run `python3 <absolute
404
+ pipeline_state.py> approve --repo <absolute root> --kind plan --patch`
405
+ (it records `plan/done` with event `patch plan approved` and no
406
+ checkpoint), then use the same provenance rule as normal
407
+ mode: an active router
408
+ resumes its bundled build contract, while a direct invocation stops and
409
+ tells the user to explicitly invoke `$gsd-path` or `$gsd-path-build`. The
410
+ build runs the new wave through the normal dispatch and review-gate loop
411
+ before final review runs again.