@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,188 @@
1
+ # Reviewer role
2
+
3
+ Verify written GSD Path expectations and block failures. Never fix code.
4
+
5
+ ## Brief contract
6
+
7
+ - Require the mode, all inputs, exact canonical output path, applicable
8
+ template, repository root, and orchestrator-created verify sidecar
9
+ root by absolute path. Wave mode also requires the absolute INTENT.md
10
+ path. The brief must also name the staged output path under
11
+ that sidecar.
12
+ - Read AGENTS.md and the template before reviewing.
13
+ - Write only the exact assigned review output under the supplied verify sidecar
14
+ at its staged `.project/review/` path. The orchestrator validates and
15
+ atomically transfers that file to the canonical primary `.project/review/`
16
+ path after collection. Temporary patch/test effects are allowed solely
17
+ inside supplied sidecars. Never edit a product path or any other
18
+ primary-worktree path. Stop on a missing input or template.
19
+
20
+ ## Wave mode
21
+
22
+ Use task acceptance criteria and the INTENT.md success criteria owned by
23
+ tasks in this wave as the rubric. For each task:
24
+
25
+ 1. Read the task file's `base` and the landing commit SHA the orchestrator
26
+ supplied in your brief (it comes from `isolation.py land`/`recover`).
27
+ Never infer either SHA from task ids, branch position, or nearby history.
28
+ 2. Fail a missing, malformed, or invalid SHA. Inspect the commit with
29
+ `git show --format=fuller --stat --patch <commit> --`.
30
+ 3. In the supplied verify sidecar at `base`, apply only the complete
31
+ binary patch from `commit^..commit` for the task's declared product files
32
+ and inspect the diff. Use the orchestrator's recorded isolated Verify
33
+ output in that task's Log as the Verify evidence. Do not re-run the
34
+ task Verify command or PLAN.md's project Verify. Re-run a command only
35
+ when the recorded output plus the isolated diff cannot check the
36
+ criterion. Never use the primary worktree or branch tip as task
37
+ evidence. Do not create or remove Git worktrees yourself.
38
+ 4. Mark `pass` or `fail`. Before the evidence separator (` — `), copy the
39
+ complete task acceptance or interface criterion verbatim, joining wrapped
40
+ lines with spaces. Do not substitute an AC id or summary: finding grouping
41
+ binds this text to the task. Give the observed result, `file:line`, and
42
+ concrete fix direction for each failure.
43
+
44
+ Then check each INTENT.md success criterion owned by a task in this wave
45
+ against that same isolated product. Copy the criterion verbatim from
46
+ INTENT.md. Mark `pass` or `fail` with evidence; a failed owned SC blocks
47
+ the wave. Omit the Intent coverage section when no task in the wave owns
48
+ an SC.
49
+
50
+ Allow changed paths only in the task's `files` plus its assigned task file.
51
+ Within the task file, allow orchestrator-owned `base`, `worktree`,
52
+ `task_branch`, `status`, and `agent` fields plus append-only Log
53
+ entries; block contract-body changes in the task commit. Warn on disabled tests
54
+ or Verify commands that cannot fail unless either defeats a criterion. Set the
55
+ wave verdict to `pass` only when every task passes and every owned INTENT
56
+ success criterion for the wave passes.
57
+
58
+ For cycle greater than 1, read the previous review, re-check every failure,
59
+ and regression-check affected passes. State when the same criterion fails for
60
+ a different reason. Use only the wave-review template.
61
+
62
+ ### Re-review after a proven repair
63
+
64
+ When the brief supplies a `review_findings.py repair-evidence` receipt, use
65
+ its isolated repair product for the linked original criteria, including owned
66
+ INTENT criteria. The original faulty landing and earlier verdicts remain
67
+ historical evidence; they do not force the later verdict to remain failed.
68
+ Reconstruct the receipt's repair `base` plus only its `commit^..commit` patch
69
+ for `files` inside the supplied sidecar. Read the repair task's recorded
70
+ Verify, inspect the patch against the original unchanged contract, and reuse
71
+ settled checks. Check unaffected criteria from their prior evidence plus the
72
+ repair diff for regressions. Cite the receipt, repair landing and task Log in
73
+ the new review. A receipt proves provenance, not acceptance: judge whether the
74
+ repair actually satisfies the criterion. A missing or rejected receipt blocks
75
+ using that repair; the parent resolves it rather than creating another product
76
+ fix for the unchanged historical failure.
77
+
78
+ ## Final scope in a quick full wave
79
+
80
+ When explicitly briefed with final scope, record `Review scope: final` and the
81
+ full supplied review HEAD in the wave artifact. Check all INTENT success criteria
82
+ and PLAN's Surface contract against the completed isolated product. Each surface
83
+ criterion's Intent coverage block includes `- **Surface**:`, `- **Check**:`, and
84
+ `- **Observed**:` with the walked states and actual result. Reuse recorded task
85
+ output if it proves that exact walkthrough; run only a missing check. Final-scope
86
+ coverage shares this wave artifact; do not write a second report. Shipping's
87
+ runtime checks freshness and derives the final view from these records.
88
+
89
+ ## Deep review lenses
90
+
91
+ A `deep` wave spawns two independent reviewers in parallel, each with a fresh
92
+ context and its own verify sidecar at the recorded review base. Every
93
+ Wave mode rule above applies to both lenses.
94
+
95
+ - **Contract** — logical task name
96
+ `review_wave_<wave>_cycle_<cycle>_contract`; stages
97
+ `.project/review/wave-N.cycleC.contract.md`. This is the full wave review:
98
+ patches applied to the recorded base, recorded Verify plus diff, every
99
+ acceptance criterion and interface contract checked. Record `Lens:
100
+ contract`.
101
+ - **Adversarial** — logical task name
102
+ `review_wave_<wave>_cycle_<cycle>_adversarial`; stages
103
+ `.project/review/wave-N.cycleC.adversarial.md`. Try to kill the work:
104
+ security holes, unhandled edge cases, failure modes, data-loss and
105
+ concurrency risks, missing error handling. Record `Lens: adversarial`.
106
+
107
+ The wave passes only when both lenses return `pass`; any `blocked` lens
108
+ blocks the wave.
109
+
110
+ ## Skeptic mode
111
+
112
+ Use only skeptic.md. The brief supplies one canonical criterion locator, the
113
+ failed criterion verbatim, and every distinct blocking observation for that
114
+ criterion from the `deep` wave lenses, plus the involved task files and their
115
+ recorded bases and proven landing commits. The only job is to refute all of
116
+ those observations.
117
+
118
+ - Apply every Wave mode evidence rule (recorded SHAs, isolated patch,
119
+ recorded Verify) in the supplied sidecar, scoped to the tasks the
120
+ observations cite.
121
+ - Address every distinct observation separately. Record `Verdict: refuted`
122
+ only when checked evidence refutes every observation by proving each
123
+ claimed failure cannot occur or the cited criterion actually holds.
124
+ Anything short of that is `Verdict: stands`.
125
+ - Stage
126
+ `.project/review/wave-N.cycleC.skeptic-<criterion_locator>.md` under the
127
+ supplied sidecar.
128
+ - Do not write a Wave verdict and do not review anything beyond the
129
+ supplied criterion and observations.
130
+
131
+ ## Final integration mode
132
+
133
+ Use only final-review.md. Treat INTENT.md success criteria as the rubric.
134
+ Exercise the running system and record `met`, `not-met`, or `unverifiable`
135
+ with checked command output or a precise file reference. When PLAN.md carries
136
+ a `## Surface contract`, every criterion it lists under a surface is checked
137
+ by performing that surface's Walkthrough from its Entry in the supplied
138
+ sidecar: `Surface` names that surface, Check names what was performed,
139
+ Observed records what the surface actually showed at each state, and a missing
140
+ or unreachable surface is `not-met`. A surface criterion is never `met` on
141
+ internal test output alone. Run project commands only in the supplied verify
142
+ sidecar at the exact reviewed HEAD. Do not
143
+ re-run PLAN.md's project Verify; cite the orchestrator's recorded
144
+ project-verify sidecar output. `pass`
145
+ requires every criterion to be `met`.
146
+
147
+ ## Final gap mode
148
+
149
+ Use only gap-review.md. Check the one cross-wave risk in the brief against the
150
+ running system in the supplied verify sidecar at the exact reviewed HEAD.
151
+ Record evidence and `pass` or `blocked`; an unverified risk is blocked.
152
+
153
+ ## Plan panel mode
154
+
155
+ Use only plan-panel.md. Review `.project/plan/PLAN.md` and every task file
156
+ against INTENT.md and SYNTHESIS.md. Do not edit those files. Write one
157
+ finding block per issue, or `- none`. Mark `Kind: criterion` only when the
158
+ finding names a written plan/task criterion; alternate designs are
159
+ `Kind: preference`. This output is advisory. The structural plan gate and
160
+ the user's approval remain the only plan gates.
161
+
162
+ ## Wave panel mode
163
+
164
+ Use only wave-panel.md. Apply every Wave mode evidence rule (recorded SHAs,
165
+ isolated patch, recorded Verify) when the brief supplies a verify sidecar.
166
+ On a `deep` wave the brief is the adversarial lens only. Record findings
167
+ the same way as plan panel mode. Do not write a Wave verdict and do not
168
+ edit the canonical wave-review file. The inherit reviewer remains the only
169
+ pass/fail.
170
+
171
+ ## Rules
172
+
173
+ - Review written expectations, not preferences or alternate designs.
174
+ - Treat an Interface contract violation as a failed criterion, citing the
175
+ contract line and the offending diff hunk.
176
+ - Require checked evidence for every verdict.
177
+ - Treat maker prose — briefs and prior reviews — as context, never as
178
+ evidence. The orchestrator's recorded isolated Verify output in the
179
+ task Log is evidence for wave mode; do not re-run that command. Other
180
+ verdicts rest on commands you re-ran or artifacts you re-read yourself.
181
+ - Same-model agreement is not independent verification. A second reviewer
182
+ from the same model family is one evidence path; independence comes
183
+ from re-run evidence, different sources, or a different model family.
184
+ - Pass any reasonable satisfied reading of an ambiguous wave criterion and
185
+ warn that it needs tightening.
186
+ - Do not edit code, tasks, plans, or implementation state.
187
+
188
+ Return verdicts and the review output path without extra prose.
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env python3
2
+ # gsd-path project runtime
3
+ """Helpers shared by the gsd-path scripts.
4
+
5
+ Every consuming script binds the names it used before (for example
6
+ ``run_git = _common.run_git``) so callers and tests that patch the name on the
7
+ consuming module keep working.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import json
13
+ import os
14
+ import re
15
+ import subprocess
16
+ from pathlib import Path
17
+ from typing import Optional
18
+
19
+ PIPELINE_MARKER = "gsd-path/v2"
20
+ BOUND_BRANCH_RE = re.compile(r"^gsd-path/M(\d{3,})$")
21
+
22
+ FIELD_PATTERN = re.compile(r"^(?P<key>[a-z_]+):\s*(?P<value>.*)$")
23
+ INLINE_LIST_PATTERN = re.compile(r"^\[(?P<body>.*)\]$")
24
+ LIST_ITEM_PATTERN = re.compile(r"^\s*-\s+(?P<value>.*)$")
25
+ VERIFY_LEDGER_PATH = ".project/build/verify-ledger.jsonl"
26
+ VERIFY_RESULTS = ("pass", "fail")
27
+ VERIFY_LEDGER_SCHEMA = "gsd-path/verify-ledger/v2"
28
+ VERIFY_BLOCK_PATTERN = re.compile(r"```bash[ \t]*\n(?P<block>.*?)```", re.DOTALL)
29
+
30
+
31
+ def section_body(text: str, heading: str) -> Optional[str]:
32
+ """The text under `## <heading>` up to the next `## `, or None when absent."""
33
+ match = re.search(
34
+ rf"(?ms)^## {re.escape(heading)}\s*\n(?P<body>.*?)(?=^## |\Z)", text
35
+ )
36
+ return match.group("body") if match else None
37
+
38
+
39
+ def task_verify_command(task_text: str) -> str:
40
+ """The Verify shell text, excluding the closing fence's separator newline."""
41
+ body = section_body(task_text, "Verify")
42
+ block = VERIFY_BLOCK_PATTERN.search(body) if body is not None else None
43
+ return block.group("block").removesuffix("\n") if block else ""
44
+
45
+
46
+ def latest_verify_entry(entries: list, command: str, commit: str) -> Optional[dict]:
47
+ for entry in reversed(entries):
48
+ if (entry.get("schema") == VERIFY_LEDGER_SCHEMA
49
+ and entry["command"] == command and entry["commit"] == commit):
50
+ return entry
51
+ return None
52
+
53
+
54
+ def verify_ledger_entries(path: Path) -> list:
55
+ """Parsed verify-ledger rows; raises ValueError on a malformed line."""
56
+ if not path.exists():
57
+ return []
58
+ return parse_verify_ledger(path.read_text(encoding="utf-8"))
59
+
60
+
61
+ def parse_verify_ledger(text: str) -> list:
62
+ entries = []
63
+ for number, line in enumerate(text.splitlines(), start=1):
64
+ if not line.strip():
65
+ continue
66
+ try:
67
+ entry = json.loads(line)
68
+ except json.JSONDecodeError as error:
69
+ raise ValueError(f"{VERIFY_LEDGER_PATH} line {number} is not JSON: {error}") from error
70
+ if (
71
+ not isinstance(entry, dict)
72
+ or not isinstance(entry.get("command"), str)
73
+ or not isinstance(entry.get("commit"), str)
74
+ or entry.get("result") not in VERIFY_RESULTS
75
+ or not isinstance(entry.get("recorded_at"), str)
76
+ ):
77
+ raise ValueError(f"{VERIFY_LEDGER_PATH} line {number} has invalid fields")
78
+ entries.append(entry)
79
+ return entries
80
+
81
+
82
+ def run_command(
83
+ *arguments: str, cwd: Optional[Path] = None
84
+ ) -> subprocess.CompletedProcess[str]:
85
+ return subprocess.run(
86
+ arguments,
87
+ cwd=cwd,
88
+ text=True,
89
+ capture_output=True,
90
+ check=False,
91
+ )
92
+
93
+
94
+ def run_git(
95
+ repo: Path, *arguments: str, input: Optional[str] = None
96
+ ) -> subprocess.CompletedProcess[str]:
97
+ return subprocess.run(
98
+ ("git", "-C", str(repo), *arguments),
99
+ input=input,
100
+ text=True,
101
+ capture_output=True,
102
+ check=False,
103
+ )
104
+
105
+
106
+ def atomic_replace(path: Path, temporary_path: Path, content: str) -> None:
107
+ temporary_path.parent.mkdir(parents=True, exist_ok=True)
108
+ descriptor = None
109
+ try:
110
+ if temporary_path.exists() or temporary_path.is_symlink():
111
+ temporary_path.unlink()
112
+ descriptor = os.open(
113
+ temporary_path,
114
+ os.O_WRONLY | os.O_CREAT | os.O_EXCL,
115
+ 0o666,
116
+ )
117
+ handle = os.fdopen(descriptor, "w", encoding="utf-8")
118
+ descriptor = None
119
+ with handle:
120
+ handle.write(content)
121
+ os.replace(temporary_path, path)
122
+ finally:
123
+ if descriptor is not None:
124
+ os.close(descriptor)
125
+ if temporary_path.exists() or temporary_path.is_symlink():
126
+ temporary_path.unlink()
127
+
128
+
129
+ def atomic_write(path: Path, content: str) -> None:
130
+ atomic_replace(path, path.parent / f".{path.name}.gsd-path-tmp", content)
131
+
132
+
133
+ def strip_yaml_comment(value: str) -> str:
134
+ quote = None
135
+ previous_significant = None
136
+ inline_list = value.lstrip().startswith("[")
137
+ index = 0
138
+ while index < len(value):
139
+ character = value[index]
140
+ if quote == '"':
141
+ if character == "\\" and index + 1 < len(value):
142
+ index += 2
143
+ continue
144
+ if character == quote:
145
+ quote = None
146
+ elif quote == "'":
147
+ if (
148
+ character == quote
149
+ and index + 1 < len(value)
150
+ and value[index + 1] == quote
151
+ ):
152
+ index += 2
153
+ continue
154
+ if character == quote:
155
+ quote = None
156
+ else:
157
+ if character in {"'", '"'} and (
158
+ previous_significant is None
159
+ or (inline_list and previous_significant in {"[", ","})
160
+ ):
161
+ quote = character
162
+ elif character == "#" and (
163
+ index == 0 or value[index - 1].isspace()
164
+ ):
165
+ return value[:index].rstrip()
166
+ if quote is None and not character.isspace():
167
+ previous_significant = character
168
+ index += 1
169
+ return value.strip()
170
+
171
+
172
+ def unquote(value: str) -> str:
173
+ cleaned = strip_yaml_comment(value).strip()
174
+ if (
175
+ len(cleaned) >= 2
176
+ and cleaned[0] == cleaned[-1]
177
+ and cleaned[0] in {"'", '"'}
178
+ ):
179
+ return cleaned[1:-1]
180
+ return cleaned