@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,146 @@
1
+ #!/usr/bin/env python3
2
+ """Persist observed Codex output usage and block admission after exhaustion.
3
+
4
+ This is an admission gate, not an in-flight generation cap. Codex CLI does not
5
+ expose a hard output-token cap. Unobserved calls are not budget evidence.
6
+ """
7
+
8
+ import argparse
9
+ import json
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ try:
14
+ from _common import atomic_write
15
+ from loop_run import log_lock
16
+ except ModuleNotFoundError: # pragma: no cover - package imports
17
+ from scripts._common import atomic_write
18
+ from scripts.loop_run import log_lock
19
+
20
+
21
+ SCHEMA = "gsd-path/token-budget/v1"
22
+
23
+
24
+ def positive(value):
25
+ result = int(value)
26
+ if result <= 0:
27
+ raise argparse.ArgumentTypeError("budget must be positive")
28
+ return result
29
+
30
+
31
+ def output_usage(path: Path) -> int:
32
+ usages = []
33
+ child_usage = None
34
+ child = False
35
+ starts = 0
36
+ complete = False
37
+ text = path.read_text(encoding="utf-8")
38
+ try:
39
+ document = json.loads(text)
40
+ except ValueError:
41
+ document = None
42
+ if isinstance(document, dict) and isinstance(document.get("usage"), dict):
43
+ # Claude Code `-p --output-format json`: one document with the run's usage.
44
+ usages.append(document["usage"].get("output_tokens"))
45
+ text = ""
46
+ for line in text.splitlines():
47
+ event = json.loads(line)
48
+ if "raw" in event:
49
+ event = json.loads(event["raw"])
50
+ if event.get("type") == "turn.completed":
51
+ usages.append(event["usage"]["output_tokens"])
52
+ payload = event.get("payload", {})
53
+ if event.get("type") == "session_meta":
54
+ source = payload.get("source", {})
55
+ child = isinstance(source, dict) and "subagent" in source
56
+ if event.get("type") == "event_msg":
57
+ if payload.get("type") == "task_started":
58
+ starts += 1
59
+ complete = False
60
+ elif payload.get("type") == "token_count" and payload.get("info"):
61
+ child_usage = payload["info"]["total_token_usage"]["output_tokens"]
62
+ elif payload.get("type") == "task_complete":
63
+ complete = True
64
+ if not usages and child and starts == 1 and complete and child_usage is not None:
65
+ # Only a single native invocation has an unambiguous cumulative counter.
66
+ usages = [child_usage]
67
+ if not usages or any(type(value) is not int or value < 0 for value in usages):
68
+ raise ValueError("complete supported output usage is unavailable; budget is unproven")
69
+ return sum(usages)
70
+
71
+
72
+ def operate(args):
73
+ ledger = args.ledger.absolute()
74
+ if ledger.is_symlink():
75
+ raise ValueError("ledger must be a real file")
76
+ with log_lock({"log": str(ledger)}):
77
+ if args.action == "configure":
78
+ policy = {"schema": SCHEMA, "host": "codex-cli", "metric": "output_tokens",
79
+ "task_limit": args.task_limit, "session_limit": args.session_limit,
80
+ "authority": args.authority}
81
+ if ledger.exists():
82
+ data = json.loads(ledger.read_text())
83
+ if any(data.get(key) != value for key, value in policy.items()):
84
+ raise ValueError("existing session policy differs; configuration cannot reset usage")
85
+ else:
86
+ data = {**policy, "observations": {}}
87
+ atomic_write(ledger, json.dumps(data, indent=2) + "\n")
88
+ return {"status": "configured", "hard_cap_supported": False}
89
+ data = json.loads(ledger.read_text())
90
+ if data.get("schema") != SCHEMA or data.get("host") != "codex-cli":
91
+ raise ValueError("unsupported budget ledger")
92
+ if args.action == "record":
93
+ source = str(args.events.resolve())
94
+ observation = {"task": args.task, "output_tokens": output_usage(args.events)}
95
+ previous = data["observations"].get(source)
96
+ if previous and (previous["task"] != args.task or
97
+ previous["output_tokens"] > observation["output_tokens"]):
98
+ raise ValueError("observation cannot change task or reduce recorded usage")
99
+ data["observations"][source] = observation
100
+ atomic_write(ledger, json.dumps(data, indent=2) + "\n")
101
+ return {"status": "recorded", **observation, "hard_cap_supported": False}
102
+ observations = data["observations"].values()
103
+ task_used = sum(row["output_tokens"] for row in observations if row["task"] == args.task)
104
+ session_used = sum(row["output_tokens"] for row in observations)
105
+ task_remaining = max(0, data["task_limit"] - task_used)
106
+ session_remaining = max(0, data["session_limit"] - session_used)
107
+ reason = "observed usage is within budget; unobserved and in-flight usage is unproven"
108
+ blocked = not task_remaining or not session_remaining
109
+ if blocked:
110
+ reason = "observed output budget exhausted"
111
+ if args.require_hard_cap:
112
+ blocked = True
113
+ reason = "hard generation cap unsupported by Codex CLI"
114
+ return {"decision": "blocked" if blocked else "admit", "reason": reason,
115
+ "task_output_tokens": task_used, "session_output_tokens": session_used,
116
+ "task_remaining": task_remaining, "session_remaining": session_remaining,
117
+ "hard_cap_supported": False, "enforcement": "observed-admission-only"}
118
+
119
+
120
+ def main(argv=None):
121
+ parser = argparse.ArgumentParser(description=__doc__)
122
+ subparsers = parser.add_subparsers(dest="action", required=True)
123
+ for name in ("configure", "record", "admit"):
124
+ command = subparsers.add_parser(name)
125
+ command.add_argument("--ledger", type=Path, required=True)
126
+ if name == "configure":
127
+ command.add_argument("--task-limit", type=positive, required=True)
128
+ command.add_argument("--session-limit", type=positive, required=True)
129
+ command.add_argument("--authority", required=True)
130
+ else:
131
+ command.add_argument("--task", required=True)
132
+ if name == "record":
133
+ command.add_argument("--events", type=Path, required=True)
134
+ if name == "admit":
135
+ command.add_argument("--require-hard-cap", action="store_true")
136
+ try:
137
+ result = operate(parser.parse_args(argv))
138
+ except (ValueError, OSError, KeyError, TypeError) as error:
139
+ print(json.dumps({"decision": "blocked", "reason": str(error)}))
140
+ return 1
141
+ print(json.dumps(result, sort_keys=True))
142
+ return 1 if result.get("decision") == "blocked" else 0
143
+
144
+
145
+ if __name__ == "__main__":
146
+ raise SystemExit(main())
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env python3
2
+ """Run canonical workflow helpers with fixed arguments and fail-stop receipts."""
3
+
4
+ import argparse
5
+ import json
6
+ import subprocess
7
+ import sys
8
+ from pathlib import Path
9
+
10
+ try:
11
+ from scripts import _common
12
+ except ImportError: # bundled copy inside a skill's scripts directory
13
+ import _common
14
+
15
+
16
+ class StepFailed(RuntimeError):
17
+ pass
18
+
19
+
20
+ def run_workflow(repo: Path, action: str, project_dir: str, expected_head: str = None,
21
+ task_id: str = None, round_size: int = None) -> dict:
22
+ steps = []
23
+ scripts = Path(__file__).resolve().parent
24
+
25
+ def step(script, *arguments):
26
+ command = [sys.executable, "-B", str(scripts / script), *arguments]
27
+ completed = subprocess.run(command, cwd=repo, capture_output=True, text=True)
28
+ receipt = {"script": script, "command": command, "exit_code": completed.returncode,
29
+ "stdout": completed.stdout, "stderr": completed.stderr}
30
+ steps.append(receipt)
31
+ if completed.stderr:
32
+ sys.stderr.write(completed.stderr)
33
+ if completed.returncode:
34
+ raise StepFailed(script)
35
+ try:
36
+ receipt["result"] = json.loads(completed.stdout)
37
+ except json.JSONDecodeError as error:
38
+ raise StepFailed(f"{script} did not return JSON") from error
39
+ return receipt["result"]
40
+
41
+ common = ["--repo", str(repo), "--project-dir", project_dir]
42
+ try:
43
+ if action == "route":
44
+ step("pipeline_state.py", "route", *common)
45
+ elif action == "lint-round":
46
+ head = subprocess.run(["git", "rev-parse", "--verify", "HEAD"],
47
+ cwd=repo, capture_output=True, text=True, check=True).stdout.strip()
48
+ step("check_task_briefs.py", "--repo", str(repo), "--base", head,
49
+ "--tasks-dir", f"{project_dir}/tasks")
50
+ step("check_handoffs.py", "plan", *common)
51
+ elif action == "prepare-task":
52
+ task = step("isolation.py", "isolate-task", "--repo", str(repo),
53
+ "--base", expected_head, "--task-id", task_id,
54
+ "--round-size", str(round_size))
55
+ if task["mode"] == "serial":
56
+ step("isolation.py", "isolate-verify", "--repo", str(repo),
57
+ "--base", expected_head, "--name", f"task-{task_id.lower()}-verify")
58
+ elif action == "build-evidence":
59
+ proof = step("build_state.py", "verify-landed", *common, "--head", expected_head)
60
+ # The landing proof has one canonical home; lean final-review reuse allows only this path.
61
+ evidence = repo / project_dir / "build" / "evidence.json"
62
+ _common.atomic_write(evidence, json.dumps(proof, indent=2, sort_keys=True) + "\n")
63
+ steps.append({"script": "workflow_run.py", "evidence": str(evidence)})
64
+ elif action == "prepare-final":
65
+ if project_dir != ".project":
66
+ raise StepFailed("final review requires the active milestone")
67
+ pending = step("discussion_records.py", "pending", "--repo", str(repo))
68
+ if pending["pending"]:
69
+ raise StepFailed("pending discussion requires its owner disposition")
70
+ step("build_state.py", "verify-landed", *common, "--head", expected_head)
71
+ step("lean_verification.py", "--repo", str(repo), "--expected-head", expected_head)
72
+ else:
73
+ pending = step("discussion_records.py", "pending", "--repo", str(repo))
74
+ if pending["pending"]:
75
+ raise StepFailed("pending discussion requires its owner disposition")
76
+ step("check_handoffs.py", "plan", *common)
77
+ head = subprocess.run(["git", "rev-parse", "--verify", "HEAD"],
78
+ cwd=repo, capture_output=True, text=True, check=True).stdout.strip()
79
+ step("check_task_briefs.py", "--repo", str(repo), "--base", head,
80
+ "--tasks-dir", f"{project_dir}/tasks")
81
+ panel = ["validate-plan", "--plan", str(repo / project_dir / "plan/PLAN.md"),
82
+ "--intent", str(repo / project_dir / "intent/INTENT.md")]
83
+ charter = repo / ".project/CHARTER.md"
84
+ if charter.exists():
85
+ panel += ["--charter", str(charter)]
86
+ step("review_panel.py", *panel)
87
+ if action == "approve-plan":
88
+ step("pipeline_state.py", "approve", *common, "--kind", "plan",
89
+ "--expected-head", expected_head)
90
+ except (StepFailed, OSError, subprocess.CalledProcessError) as error:
91
+ return {"status": "blocked", "reason": str(error), "steps": steps,
92
+ "next": "$gsd-path-forensics"}
93
+ return {"status": "complete", "steps": steps}
94
+
95
+
96
+ def main(argv=None):
97
+ parser = argparse.ArgumentParser(description=__doc__)
98
+ parser.add_argument("action", choices=("route", "gate-plan", "approve-plan", "build-evidence", "lint-round", "prepare-task", "prepare-final"))
99
+ parser.add_argument("--repo", type=Path, required=True)
100
+ parser.add_argument("--project-dir", choices=(".project", ".project/next"), default=".project")
101
+ parser.add_argument("--expected-head")
102
+ parser.add_argument("--task-id")
103
+ parser.add_argument("--round-size", type=int)
104
+ arguments = parser.parse_args(argv)
105
+ if arguments.action in {"approve-plan", "build-evidence", "prepare-task", "prepare-final"} and not arguments.expected_head:
106
+ parser.error(f"{arguments.action} requires --expected-head")
107
+ if arguments.action == "prepare-task" and (not arguments.task_id or arguments.round_size is None):
108
+ parser.error("prepare-task requires --task-id and --round-size")
109
+ result = run_workflow(arguments.repo.resolve(), arguments.action,
110
+ arguments.project_dir, arguments.expected_head,
111
+ arguments.task_id, arguments.round_size)
112
+ print(json.dumps(result, sort_keys=True))
113
+ return 0 if result["status"] == "complete" else 1
114
+
115
+
116
+ if __name__ == "__main__":
117
+ raise SystemExit(main())
@@ -0,0 +1,29 @@
1
+ # GSD Path Discussion — Answers
2
+
3
+ <!-- Written by $gsd-path-discuss. Append one record per turn; never rewrite prior answers. -->
4
+
5
+ ## Answer A001 — <YYYY-MM-DD> — <topic>
6
+
7
+ - **Thread**: T001
8
+ - **Turn**: D001
9
+ - **Supersedes**: none | A###
10
+ - **Question**: <the question being answered>
11
+ - **Status**: working | NEEDS-USER | final
12
+ - **Phase/status**: <phase>/<status>
13
+ - **Conclusion**: <answer first>
14
+ - **Reasoning / pushback**: <why, including rejected premise or safer alternative>
15
+ - **Evidence**: <exact repository paths and line references; commands only if run>
16
+ - **Research**: <not needed — reason, or query, checked sources, and confidence>
17
+ - **Confidence**: high | medium | low | unverifiable
18
+ - **Unresolved**: <none, or NEEDS-USER / RESEARCH question>
19
+ - **Next owner**: <none, user, or named GSD Path phase>
20
+ - **Target artifact**: <none or canonical .project path>
21
+ - **Follow-up**: none | required
22
+
23
+ ## Disposition X001 — <YYYY-MM-DD>
24
+
25
+ - **Answer**: A###
26
+ - **Status**: applied | acknowledged-no-change | superseded | rejected-by-user
27
+ - **Owner**: <phase or router>
28
+ - **Artifact**: <canonical path or none>
29
+ - **Evidence**: <what was changed, why no change was needed, or the user ruling>
@@ -0,0 +1,37 @@
1
+ # Archive — <NNN>-<milestone-slug>
2
+
3
+ <!-- Written at ship time by $gsd-path-ship final. The archive's table of
4
+ contents: a future audit must be able to reconstruct the milestone
5
+ from this file. Append-only once written. The validator requires
6
+ "Final verdict:" to be exactly the string shown below. -->
7
+
8
+ Milestone: <name>
9
+ Shipped: <date>
10
+ Final verdict: all criteria met; project verify passed
11
+ Waves: <n> Tasks: <n> done / <n> total Review cycles used: <per wave, e.g. 1/2/1>
12
+ Carried forward: <none, or "N DOCS-AUDIT ruling(s)">
13
+
14
+ ## Success criteria at ship
15
+
16
+ <!-- Evidence is copied verbatim from FINAL.md; escape a literal pipe as
17
+ \| so the row keeps its three cells. -->
18
+
19
+ | Criterion | Verdict | Evidence |
20
+ |-----------|---------|----------|
21
+ | <criterion copied from FINAL.md> | met | <FINAL Reference; else Check; else Observed> |
22
+
23
+ ## Contents
24
+
25
+ <!-- Every file moved into this archive, one per line, relative paths. -->
26
+ - intent/INTENT.md
27
+ - research/...
28
+ - plan/PLAN.md
29
+ - tasks/...
30
+ - review/...
31
+
32
+ ## Notes
33
+
34
+ <!-- Anything the next milestone should know: escalations that shaped the
35
+ build, accepted drift, known debt. Write at least one substantive bullet;
36
+ use "none" if clean. -->
37
+ - <note>
@@ -0,0 +1,50 @@
1
+ # Charter — <program name>
2
+
3
+ <!-- Written by $gsd-path-define program mode. Enduring program intent:
4
+ vetoes and constraints here override every milestone. Amended only by an
5
+ explicit user ruling recorded under Corrections. Lives at .project/
6
+ top level and persists across milestones; it never archives. -->
7
+
8
+ Review panel: off <!-- off | detected | claude,gpt,grok,composer,gemini,
9
+ deepseek,kimi,qwen — durable
10
+ program default for optional cross-model plan and
11
+ wave review. Milestone INTENT copies this value and
12
+ may override it. off is the default. Named values
13
+ name at most 3 families. -->
14
+
15
+ ## Vision
16
+
17
+ <2–4 sentences: the program's end state and why it matters.>
18
+
19
+ ## Full scope: in
20
+
21
+ <!-- Everything the program will deliver, grouped by capability area. The
22
+ roadmap slices this list; every item must map to at least one milestone. -->
23
+ - <capability area>: <what it includes>
24
+
25
+ ## Full scope: out (vetoes)
26
+
27
+ <!-- Hard limits. No milestone, research dispatch, plan, or task may include
28
+ these. -->
29
+ - <vetoed item> — <user's stated reason, verbatim where possible>
30
+
31
+ ## Constraints
32
+
33
+ <Program-level stack, budget, deadline, integrations, compliance.>
34
+
35
+ ## Program success criteria
36
+
37
+ <!-- Observable statements checked when the last milestone ships. -->
38
+ 1. <criterion — a thing you can run/measure/see>
39
+
40
+ ## Open questions
41
+
42
+ <!-- Unresolved at program define end. Tags: RESEARCH (program research
43
+ answers it), NEEDS-USER (a human decision, surface at next checkpoint). -->
44
+ - [RESEARCH] <question>
45
+ - [NEEDS-USER] <question>
46
+
47
+ ## Corrections
48
+
49
+ <!-- Verbatim user rulings that amend this charter. Append-only. -->
50
+ - <date>: "<what the user said>"
@@ -0,0 +1,46 @@
1
+ # Evidence — codebase
2
+
3
+ <!-- Written by the codebase mapper during $gsd-path-inspect. Read by define
4
+ (brownfield mode), researchers (fifth standard dimension), the planner
5
+ (conventions are binding), and reviewers. -->
6
+
7
+ Repo root: <absolute path>
8
+ Scanned: <date>
9
+ Checks run: <exact commands run and their results, e.g. `npm test` → 37/40 pass>
10
+
11
+ ## Map
12
+
13
+ - **Stack**: <languages, frameworks, versions actually in use, from manifests>
14
+ - **Entry points**: <binaries, main modules, routes — how this thing starts>
15
+ - **Architecture**: <layers and flow in 3–5 sentences>
16
+ - **Conventions**: <naming, error handling, test style, commit style — binding on the planner>
17
+ - **Maturity**: <what runs, test coverage shape, what is scaffolding>
18
+ - **Recent activity**: <where the last N commits cluster — what was being worked on>
19
+
20
+ ## Finding: <short claim as heading>
21
+
22
+ - **Claim**: <one specific, falsifiable statement about this codebase>
23
+ - **Source**: <file:line or command actually run>
24
+ - **Confidence**: <high | medium | low>
25
+ - **Why it matters here**: <what inspection/planning gets wrong without this>
26
+
27
+ <!-- Record every load-bearing surprise or half-built area observed. There is
28
+ no minimum finding quota; explain an empty section if none were found. -->
29
+
30
+ ## Apparent intent
31
+
32
+ <!-- Inference, clearly flagged — what the project seems to be becoming. -->
33
+
34
+ - <inference> — based on <evidence>
35
+
36
+ ## Open questions for define
37
+
38
+ <!-- What only the user can settle about this codebase. -->
39
+
40
+ - <question>
41
+
42
+ ## Blocked areas
43
+
44
+ <!-- What could not be inspected and why. "none" if clean. -->
45
+
46
+ - <area> — <what blocked inspection>
@@ -0,0 +1,21 @@
1
+ # GSD Path Discussion — Dialogue
2
+
3
+ <!-- Written by $gsd-path-discuss. Append turns; never rewrite prior turns. -->
4
+
5
+ ## Turns
6
+
7
+ ### D001 — <YYYY-MM-DD> — <phase>/<status> — <topic>
8
+
9
+ - **Thread**: T001
10
+ - **Reply to**: none | D###
11
+ - **User (verbatim)**:
12
+
13
+ > <copy the user's message exactly>
14
+
15
+ - **Assistant**:
16
+
17
+ <copy the answer returned to the user>
18
+
19
+ - **Evidence checked**: <repository paths, line references, commands actually run, or none>
20
+ - **Research**: <not needed — reason, or query/sources/confidence>
21
+ - **Thread status**: working | NEEDS-USER | final
@@ -0,0 +1,69 @@
1
+ # Docs Audit
2
+
3
+ <!-- Written by the docs auditor ($gsd-path-docs-audit or $gsd-path-inspect).
4
+ Every verdict carries evidence; a verdict without evidence is a defect. -->
5
+
6
+ Repo root: <absolute path>
7
+ Audited: <date>
8
+ Audited HEAD: <40-hex commit the claims were checked at, or none>
9
+ Alignment mode: <yes | no — yes when .project/ artifacts were also audited>
10
+
11
+ ## Summary
12
+
13
+ | Verdict | Count |
14
+ |---------|-------|
15
+ | verified | <n> |
16
+ | stale | <n> |
17
+ | aspirational | <n> |
18
+ | unverifiable | <n> |
19
+ | descriptive docs (no testable claims) | <n> |
20
+
21
+ Worst drift: <one sentence — the most misleading claim found>
22
+
23
+ ## Doc: <path/to/doc.md>
24
+
25
+ | Claim | Type | Verdict | Evidence |
26
+ |-------|------|---------|----------|
27
+ | "<claim, short-quoted>" | command \| feature \| structure \| status \| config \| integration | verified \| stale \| aspirational \| unverifiable | <file:line or command → result> |
28
+
29
+ <!-- One section per doc that has at least one testable claim. Docs without
30
+ testable claims go in the Descriptive docs list below, never in their
31
+ own section. Evidence with exactly one `unchanged: ` prefix marks a row
32
+ carried from the prior audit under the role's delta rule. Copy an
33
+ already-carried row verbatim without adding another prefix. -->
34
+
35
+ ## Descriptive docs
36
+
37
+ <!-- Every inventoried doc with no testable claims, one path per line.
38
+ The union of this list and the Doc section paths must equal the frozen
39
+ inventory exactly. -->
40
+
41
+ - <path/to/doc.md>
42
+
43
+ ## Alignment (alignment mode only)
44
+
45
+ - **INTENT success criteria**: <each → met so far | not yet | contradicted, with evidence>
46
+ - **Done tasks**: <each status:done task → recover-proven landing SHA? Verify re-run result?>
47
+ - **SYNTHESIS decisions**: <each → code conforms? evidence>
48
+ - **STATE vs frontmatter**: <agree | discrepancies listed>
49
+
50
+ ## User rulings
51
+
52
+ <!-- Appended after the ruling walk (standalone runs). Verbatim, append-only.
53
+ accept-drift rulings suppress the item in future audits.
54
+ `planned: no` rows are the alignment queue: $gsd-path and $gsd-path-plan offer
55
+ to absorb them until drained. When a ruling becomes a task, set
56
+ planned to the task id — never delete the row. -->
57
+
58
+ | Queue # | Ruling | User's words | Planned |
59
+ |---------|--------|--------------|---------|
60
+ | 1 | fix-code \| fix-doc \| accept-drift | "<verbatim>" | no \| <task id> \| n/a (accept-drift) |
61
+
62
+ ## Remediation queue
63
+
64
+ <!-- Every non-verified claim, classified. The user rules on this queue;
65
+ the auditor never fixes anything. -->
66
+
67
+ | # | Doc | Claim | Verdict | Class | Suggested action |
68
+ |---|-----|-------|---------|-------|------------------|
69
+ | 1 | <doc> | <claim> | stale | fix-doc \| fix-code \| NEEDS-USER | <one line> |
@@ -0,0 +1,24 @@
1
+ # Evidence — <dimension>
2
+
3
+ <!-- Written by one researcher role. Consumed by the decider. -->
4
+
5
+ Dimension: <domain | stack | pitfalls | similar | custom>
6
+ Questions assigned: <exact RESEARCH questions joined by "; ", or "none">
7
+
8
+ ## Finding: <short claim as heading>
9
+
10
+ - **Claim**: <one specific, falsifiable statement>
11
+ - **Source**: <URL / doc / repo path actually opened>
12
+ - **Confidence**: <high | medium | low>
13
+ - **Why it matters here**: <one line tying this to INTENT.md>
14
+
15
+ <!-- One block per load-bearing finding — no quota. Repeat as needed. -->
16
+
17
+ ## Assigned questions — answers
18
+
19
+ - <question> → <answer with source, or "no reliable source found">
20
+
21
+ ## Dead ends
22
+
23
+ <!-- What was checked and didn't pan out, so nobody re-treads it. -->
24
+ - <path explored> — <why it's a dead end>
@@ -0,0 +1,27 @@
1
+ # Final Review — <project name>
2
+
3
+ <!-- Authorship and evidence reuse follow the ship phase contract. Each INTENT.md success
4
+ criterion appears exactly once and carries checked evidence. A criterion
5
+ listed in PLAN.md's Surface contract also names its Surface, and its
6
+ Check is the walkthrough performed — never internal test output. Embedded
7
+ angle brackets are valid in concrete Check and Observed values. -->
8
+
9
+ Reviewed HEAD: <full SHA>
10
+ Overall verdict: <pass | blocked>
11
+
12
+ <!-- pass only when every criterion is met; blocked when any criterion is
13
+ not-met or unverifiable. -->
14
+
15
+ ## Success criteria
16
+
17
+ ### SC1 — <criterion copied verbatim from INTENT.md>
18
+
19
+ - **Verdict**: <met | not-met | unverifiable>
20
+ - **Surface**: <the surface PLAN.md's Surface contract lists this criterion under; omit the whole field for any other criterion>
21
+ - **Check**: `<command actually run, or "none">`
22
+ - **Observed**: <relevant output or observed behavior>
23
+ - **Reference**: <file:line, artifact path, or "none">
24
+ - **Finding**: <none, or what was found instead>
25
+ - **Fix direction**: <none, or concrete direction for a patch task>
26
+
27
+ <!-- Repeat once per success criterion, preserving INTENT.md order. -->
@@ -0,0 +1,20 @@
1
+ # Gap Review — <N>: <risk identity>
2
+
3
+ <!-- Written by one final gap reviewer. This file covers exactly one
4
+ cross-wave integration risk named in the review brief. -->
5
+
6
+ Reviewed HEAD: <full SHA>
7
+ Gap verdict: <pass | blocked>
8
+ Risk: <same risk identity as the heading>
9
+ Waves checked: <wave numbers>
10
+
11
+ ## Checked evidence
12
+
13
+ - **Check**: `<command actually run, or "none">`
14
+ - **Observed**: <relevant output or observed behavior>
15
+ - **Reference**: <file:line, artifact path, or "none">
16
+
17
+ ## Finding
18
+
19
+ - **Found**: <evidence-backed result>
20
+ - **Fix direction**: <none when pass; concrete direction when blocked>