@opengsd/gsd-path 1.0.0 → 1.2.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 (498) hide show
  1. package/AGENTS.md +33 -13
  2. package/CHANGELOG.md +68 -0
  3. package/DOCS.md +75 -6
  4. package/FULL.md +12 -15
  5. package/HOOKS.md +18 -9
  6. package/QUICK.md +8 -6
  7. package/README.md +218 -14
  8. package/RUNTIME.md +16 -5
  9. package/UPDATE.md +30 -11
  10. package/WORKFLOW.md +35 -16
  11. package/package.json +23 -1
  12. package/platforms/claude/dispatch.md +4 -4
  13. package/platforms/copilot/dispatch.md +4 -4
  14. package/platforms/cursor/dispatch.md +5 -10
  15. package/platforms/grok/dispatch.md +4 -6
  16. package/platforms/kimi/dispatch.md +4 -4
  17. package/platforms/kiro/dispatch.md +4 -6
  18. package/platforms/opencode/dispatch.md +4 -4
  19. package/platforms/qwen/dispatch.md +4 -4
  20. package/platforms/shared-agents/dispatch.md +12 -19
  21. package/scripts/_common.py +5 -0
  22. package/scripts/archive_milestone.py +30 -124
  23. package/scripts/bootstrap_repository.py +33 -4
  24. package/scripts/build_recovery.py +292 -0
  25. package/scripts/build_state.py +2 -0
  26. package/scripts/check_docs_audit.py +7 -3
  27. package/scripts/check_handoffs.py +7 -1
  28. package/scripts/check_task_briefs.py +3 -0
  29. package/scripts/detect_project.py +22 -3
  30. package/scripts/discussion_records.py +3 -0
  31. package/scripts/discussion_validate.py +8 -3
  32. package/scripts/dispatch_driver.py +233 -22
  33. package/scripts/git_guard.py +14 -5
  34. package/scripts/guard_hook.py +11 -1
  35. package/scripts/install.mjs +54 -1448
  36. package/scripts/install.py +155 -188
  37. package/scripts/integration.py +54 -28
  38. package/scripts/isolation.py +24 -6
  39. package/scripts/jev_review.py +138 -0
  40. package/scripts/lean_verification.py +3 -1
  41. package/scripts/loop_run.py +2 -0
  42. package/scripts/model_policy.py +279 -0
  43. package/scripts/path_config.py +248 -0
  44. package/scripts/pipeline_diagnose.py +15 -3
  45. package/scripts/pipeline_git.py +3 -0
  46. package/scripts/pipeline_state.py +117 -186
  47. package/scripts/pipeline_undo.py +14 -7
  48. package/scripts/promote_lookahead.py +33 -162
  49. package/scripts/review_panel.py +11 -0
  50. package/scripts/roadmap.py +326 -0
  51. package/scripts/runtime_store.py +278 -0
  52. package/scripts/skill-resources.json +182 -4
  53. package/scripts/state_checkpoint.py +114 -72
  54. package/scripts/state_promote.py +47 -44
  55. package/scripts/status_runtime.py +92 -6
  56. package/scripts/task_context.py +73 -0
  57. package/scripts/token_budget.py +40 -1
  58. package/scripts/workflow_run.py +128 -8
  59. package/scripts/worktree_paths.py +94 -0
  60. package/skills/gsd-path/BUILD.md +54 -575
  61. package/skills/gsd-path/DECIDE.md +4 -6
  62. package/skills/gsd-path/DEFINE.md +23 -21
  63. package/skills/gsd-path/DOCS-AUDIT.md +2 -0
  64. package/skills/gsd-path/INSPECT.md +32 -8
  65. package/skills/gsd-path/PLAN.md +29 -19
  66. package/skills/gsd-path/RESEARCH.md +5 -6
  67. package/skills/gsd-path/ROADMAP.md +24 -58
  68. package/skills/gsd-path/SHIP.md +29 -17
  69. package/skills/gsd-path/SKILL.md +46 -22
  70. package/skills/gsd-path/references/build-abandon.md +33 -0
  71. package/skills/gsd-path/references/build-native.md +502 -0
  72. package/skills/gsd-path/references/build-recovery.md +78 -0
  73. package/skills/gsd-path/references/coder.md +8 -3
  74. package/skills/gsd-path/references/config.md +57 -0
  75. package/skills/gsd-path/references/dispatch.md +12 -19
  76. package/skills/gsd-path/references/docs-auditor.md +14 -0
  77. package/skills/gsd-path/references/jev-review.md +82 -0
  78. package/skills/gsd-path/references/model-policy.md +139 -0
  79. package/skills/gsd-path/references/reviewer-final.md +21 -0
  80. package/skills/gsd-path/references/reviewer-panel.md +17 -0
  81. package/skills/gsd-path/references/reviewer-skeptic.md +20 -0
  82. package/skills/gsd-path/references/reviewer-wave.md +89 -0
  83. package/skills/gsd-path/references/reviewer.md +12 -148
  84. package/skills/gsd-path/references/runtime-selection.md +25 -0
  85. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  86. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  87. package/skills/gsd-path/scripts/_common.py +5 -0
  88. package/skills/gsd-path/scripts/archive_milestone.py +30 -124
  89. package/skills/gsd-path/scripts/bootstrap_repository.py +33 -4
  90. package/skills/gsd-path/scripts/build_recovery.py +292 -0
  91. package/skills/gsd-path/scripts/build_state.py +2 -0
  92. package/skills/gsd-path/scripts/check_docs_audit.py +7 -3
  93. package/skills/gsd-path/scripts/check_handoffs.py +7 -1
  94. package/skills/gsd-path/scripts/check_task_briefs.py +3 -0
  95. package/skills/gsd-path/scripts/detect_project.py +22 -3
  96. package/skills/gsd-path/scripts/discussion_records.py +3 -0
  97. package/skills/gsd-path/scripts/discussion_validate.py +8 -3
  98. package/skills/gsd-path/scripts/dispatch_driver.py +233 -22
  99. package/skills/gsd-path/scripts/git_guard.py +768 -0
  100. package/skills/gsd-path/scripts/integration.py +54 -28
  101. package/skills/gsd-path/scripts/isolation.py +24 -6
  102. package/skills/gsd-path/scripts/jev_review.py +138 -0
  103. package/skills/gsd-path/scripts/lean_verification.py +3 -1
  104. package/skills/gsd-path/scripts/loop_run.py +2 -0
  105. package/skills/gsd-path/scripts/model_policy.py +279 -0
  106. package/skills/gsd-path/scripts/path_config.py +248 -0
  107. package/skills/gsd-path/scripts/pipeline_git.py +3 -0
  108. package/skills/gsd-path/scripts/pipeline_state.py +117 -186
  109. package/skills/gsd-path/scripts/promote_lookahead.py +33 -162
  110. package/skills/gsd-path/scripts/review_panel.py +11 -0
  111. package/skills/gsd-path/scripts/roadmap.py +326 -0
  112. package/skills/gsd-path/scripts/state_checkpoint.py +114 -72
  113. package/skills/gsd-path/scripts/state_promote.py +47 -44
  114. package/skills/gsd-path/scripts/status_runtime.py +208 -0
  115. package/skills/gsd-path/scripts/task_context.py +73 -0
  116. package/skills/gsd-path/scripts/token_budget.py +40 -1
  117. package/skills/gsd-path/scripts/workflow_run.py +128 -8
  118. package/skills/gsd-path/scripts/worktree_paths.py +94 -0
  119. package/skills/gsd-path/templates/skeptic.md +1 -1
  120. package/skills/gsd-path/templates/task.md +2 -0
  121. package/skills/gsd-path/templates/wave-panel.md +1 -1
  122. package/skills/gsd-path/templates/wave-review.md +1 -1
  123. package/skills/gsd-path-build/SKILL.md +54 -575
  124. package/skills/gsd-path-build/references/build-abandon.md +33 -0
  125. package/skills/gsd-path-build/references/build-native.md +502 -0
  126. package/skills/gsd-path-build/references/build-recovery.md +78 -0
  127. package/skills/gsd-path-build/references/coder.md +8 -3
  128. package/skills/gsd-path-build/references/dispatch.md +12 -19
  129. package/skills/gsd-path-build/references/jev-review.md +82 -0
  130. package/skills/gsd-path-build/references/model-policy.md +139 -0
  131. package/skills/gsd-path-build/references/reviewer-final.md +21 -0
  132. package/skills/gsd-path-build/references/reviewer-panel.md +17 -0
  133. package/skills/gsd-path-build/references/reviewer-skeptic.md +20 -0
  134. package/skills/gsd-path-build/references/reviewer-wave.md +89 -0
  135. package/skills/gsd-path-build/references/reviewer.md +12 -148
  136. package/skills/gsd-path-build/references/runtime-selection.md +25 -0
  137. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  138. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  139. package/skills/gsd-path-build/scripts/_common.py +5 -0
  140. package/skills/gsd-path-build/scripts/archive_milestone.py +30 -124
  141. package/skills/gsd-path-build/scripts/build_recovery.py +292 -0
  142. package/skills/gsd-path-build/scripts/build_state.py +2 -0
  143. package/skills/gsd-path-build/scripts/check_handoffs.py +7 -1
  144. package/skills/gsd-path-build/scripts/check_task_briefs.py +3 -0
  145. package/skills/gsd-path-build/scripts/detect_project.py +1536 -0
  146. package/skills/gsd-path-build/scripts/discussion_records.py +3 -0
  147. package/skills/gsd-path-build/scripts/discussion_validate.py +8 -3
  148. package/skills/gsd-path-build/scripts/dispatch_driver.py +233 -22
  149. package/skills/gsd-path-build/scripts/integration.py +54 -28
  150. package/skills/gsd-path-build/scripts/isolation.py +24 -6
  151. package/skills/gsd-path-build/scripts/jev_review.py +138 -0
  152. package/skills/gsd-path-build/scripts/loop_run.py +2 -0
  153. package/skills/gsd-path-build/scripts/model_policy.py +279 -0
  154. package/skills/gsd-path-build/scripts/path_config.py +248 -0
  155. package/skills/gsd-path-build/scripts/pipeline_git.py +3 -0
  156. package/skills/gsd-path-build/scripts/pipeline_state.py +117 -186
  157. package/skills/gsd-path-build/scripts/promote_lookahead.py +286 -0
  158. package/skills/gsd-path-build/scripts/review_panel.py +11 -0
  159. package/skills/gsd-path-build/scripts/roadmap.py +326 -0
  160. package/skills/gsd-path-build/scripts/state_checkpoint.py +114 -72
  161. package/skills/gsd-path-build/scripts/state_promote.py +47 -44
  162. package/skills/gsd-path-build/scripts/task_context.py +73 -0
  163. package/skills/gsd-path-build/scripts/token_budget.py +40 -1
  164. package/skills/gsd-path-build/scripts/workflow_run.py +128 -8
  165. package/skills/gsd-path-build/scripts/worktree_paths.py +94 -0
  166. package/skills/gsd-path-build/templates/skeptic.md +1 -1
  167. package/skills/gsd-path-build/templates/task.md +2 -0
  168. package/skills/gsd-path-build/templates/wave-panel.md +1 -1
  169. package/skills/gsd-path-build/templates/wave-review.md +1 -1
  170. package/skills/gsd-path-decide/SKILL.md +4 -6
  171. package/skills/gsd-path-decide/references/dispatch.md +12 -19
  172. package/skills/gsd-path-decide/references/model-policy.md +139 -0
  173. package/skills/gsd-path-decide/references/runtime-selection.md +25 -0
  174. package/skills/gsd-path-decide/scripts/_common.py +5 -0
  175. package/skills/gsd-path-decide/scripts/archive_milestone.py +2171 -0
  176. package/skills/gsd-path-decide/scripts/build_recovery.py +292 -0
  177. package/skills/gsd-path-decide/scripts/check_handoffs.py +7 -1
  178. package/skills/gsd-path-decide/scripts/check_task_briefs.py +3 -0
  179. package/skills/gsd-path-decide/scripts/detect_project.py +1536 -0
  180. package/skills/gsd-path-decide/scripts/discussion_records.py +3 -0
  181. package/skills/gsd-path-decide/scripts/discussion_validate.py +1326 -0
  182. package/skills/gsd-path-decide/scripts/integration.py +1459 -0
  183. package/skills/gsd-path-decide/scripts/isolation.py +24 -6
  184. package/skills/gsd-path-decide/scripts/loop_run.py +839 -0
  185. package/skills/gsd-path-decide/scripts/model_policy.py +279 -0
  186. package/skills/gsd-path-decide/scripts/path_config.py +248 -0
  187. package/skills/gsd-path-decide/scripts/pipeline_git.py +3 -0
  188. package/skills/gsd-path-decide/scripts/pipeline_state.py +117 -186
  189. package/skills/gsd-path-decide/scripts/promote_lookahead.py +286 -0
  190. package/skills/gsd-path-decide/scripts/review_panel.py +564 -0
  191. package/skills/gsd-path-decide/scripts/roadmap.py +326 -0
  192. package/skills/gsd-path-decide/scripts/state_checkpoint.py +114 -72
  193. package/skills/gsd-path-decide/scripts/state_promote.py +47 -44
  194. package/skills/gsd-path-decide/scripts/worktree_paths.py +94 -0
  195. package/skills/gsd-path-define/SKILL.md +23 -21
  196. package/skills/gsd-path-define/references/build-recovery.md +78 -0
  197. package/skills/gsd-path-define/references/runtime-selection.md +25 -0
  198. package/skills/gsd-path-define/scripts/_common.py +5 -0
  199. package/skills/gsd-path-define/scripts/archive_milestone.py +2171 -0
  200. package/skills/gsd-path-define/scripts/build_recovery.py +292 -0
  201. package/skills/gsd-path-define/scripts/check_handoffs.py +7 -1
  202. package/skills/gsd-path-define/scripts/check_task_briefs.py +3 -0
  203. package/skills/gsd-path-define/scripts/detect_project.py +22 -3
  204. package/skills/gsd-path-define/scripts/discussion_records.py +3 -0
  205. package/skills/gsd-path-define/scripts/discussion_validate.py +1326 -0
  206. package/skills/gsd-path-define/scripts/integration.py +1459 -0
  207. package/skills/gsd-path-define/scripts/isolation.py +24 -6
  208. package/skills/gsd-path-define/scripts/loop_run.py +839 -0
  209. package/skills/gsd-path-define/scripts/model_policy.py +279 -0
  210. package/skills/gsd-path-define/scripts/path_config.py +248 -0
  211. package/skills/gsd-path-define/scripts/pipeline_git.py +3 -0
  212. package/skills/gsd-path-define/scripts/pipeline_state.py +117 -186
  213. package/skills/gsd-path-define/scripts/promote_lookahead.py +286 -0
  214. package/skills/gsd-path-define/scripts/review_panel.py +564 -0
  215. package/skills/gsd-path-define/scripts/roadmap.py +326 -0
  216. package/skills/gsd-path-define/scripts/state_checkpoint.py +114 -72
  217. package/skills/gsd-path-define/scripts/state_promote.py +47 -44
  218. package/skills/gsd-path-define/scripts/worktree_paths.py +94 -0
  219. package/skills/gsd-path-discuss/SKILL.md +2 -0
  220. package/skills/gsd-path-discuss/references/runtime-selection.md +25 -0
  221. package/skills/gsd-path-discuss/scripts/_common.py +5 -0
  222. package/skills/gsd-path-discuss/scripts/discussion_records.py +3 -0
  223. package/skills/gsd-path-discuss/scripts/loop_run.py +839 -0
  224. package/skills/gsd-path-discuss/scripts/model_policy.py +279 -0
  225. package/skills/gsd-path-discuss/scripts/path_config.py +248 -0
  226. package/skills/gsd-path-discuss/scripts/review_panel.py +564 -0
  227. package/skills/gsd-path-discuss/scripts/worktree_paths.py +94 -0
  228. package/skills/gsd-path-docs-audit/SKILL.md +2 -0
  229. package/skills/gsd-path-docs-audit/references/dispatch.md +12 -19
  230. package/skills/gsd-path-docs-audit/references/docs-auditor.md +14 -0
  231. package/skills/gsd-path-docs-audit/references/model-policy.md +139 -0
  232. package/skills/gsd-path-docs-audit/references/runtime-selection.md +25 -0
  233. package/skills/gsd-path-docs-audit/scripts/_common.py +5 -0
  234. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +2171 -0
  235. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +292 -0
  236. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +7 -3
  237. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +7 -1
  238. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +3 -0
  239. package/skills/gsd-path-docs-audit/scripts/detect_project.py +1536 -0
  240. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +3 -0
  241. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +1326 -0
  242. package/skills/gsd-path-docs-audit/scripts/integration.py +1459 -0
  243. package/skills/gsd-path-docs-audit/scripts/isolation.py +24 -6
  244. package/skills/gsd-path-docs-audit/scripts/loop_run.py +839 -0
  245. package/skills/gsd-path-docs-audit/scripts/model_policy.py +279 -0
  246. package/skills/gsd-path-docs-audit/scripts/path_config.py +248 -0
  247. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +3 -0
  248. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +117 -186
  249. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +286 -0
  250. package/skills/gsd-path-docs-audit/scripts/review_panel.py +564 -0
  251. package/skills/gsd-path-docs-audit/scripts/roadmap.py +326 -0
  252. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +114 -72
  253. package/skills/gsd-path-docs-audit/scripts/state_promote.py +47 -44
  254. package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +94 -0
  255. package/skills/gsd-path-forensics/SKILL.md +9 -5
  256. package/skills/gsd-path-forensics/references/runtime-selection.md +25 -0
  257. package/skills/gsd-path-forensics/scripts/_common.py +5 -0
  258. package/skills/gsd-path-forensics/scripts/discussion_records.py +3 -0
  259. package/skills/gsd-path-forensics/scripts/loop_run.py +839 -0
  260. package/skills/gsd-path-forensics/scripts/model_policy.py +279 -0
  261. package/skills/gsd-path-forensics/scripts/path_config.py +248 -0
  262. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +15 -3
  263. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +14 -7
  264. package/skills/gsd-path-forensics/scripts/review_panel.py +564 -0
  265. package/skills/gsd-path-forensics/scripts/worktree_paths.py +94 -0
  266. package/skills/gsd-path-inspect/SKILL.md +32 -8
  267. package/skills/gsd-path-inspect/references/dispatch.md +12 -19
  268. package/skills/gsd-path-inspect/references/docs-auditor.md +14 -0
  269. package/skills/gsd-path-inspect/references/model-policy.md +139 -0
  270. package/skills/gsd-path-inspect/references/runtime-selection.md +25 -0
  271. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  272. package/skills/gsd-path-inspect/scripts/_common.py +5 -0
  273. package/skills/gsd-path-inspect/scripts/archive_milestone.py +2171 -0
  274. package/skills/gsd-path-inspect/scripts/build_recovery.py +292 -0
  275. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +7 -3
  276. package/skills/gsd-path-inspect/scripts/check_handoffs.py +7 -1
  277. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +3 -0
  278. package/skills/gsd-path-inspect/scripts/detect_project.py +22 -3
  279. package/skills/gsd-path-inspect/scripts/discussion_records.py +3 -0
  280. package/skills/gsd-path-inspect/scripts/discussion_validate.py +1326 -0
  281. package/skills/gsd-path-inspect/scripts/integration.py +1459 -0
  282. package/skills/gsd-path-inspect/scripts/isolation.py +24 -6
  283. package/skills/gsd-path-inspect/scripts/loop_run.py +839 -0
  284. package/skills/gsd-path-inspect/scripts/model_policy.py +279 -0
  285. package/skills/gsd-path-inspect/scripts/path_config.py +248 -0
  286. package/skills/gsd-path-inspect/scripts/pipeline_git.py +3 -0
  287. package/skills/gsd-path-inspect/scripts/pipeline_state.py +117 -186
  288. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +286 -0
  289. package/skills/gsd-path-inspect/scripts/review_panel.py +564 -0
  290. package/skills/gsd-path-inspect/scripts/roadmap.py +326 -0
  291. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +114 -72
  292. package/skills/gsd-path-inspect/scripts/state_promote.py +47 -44
  293. package/skills/gsd-path-inspect/scripts/workflow_run.py +237 -0
  294. package/skills/gsd-path-inspect/scripts/worktree_paths.py +94 -0
  295. package/skills/gsd-path-loop/SKILL.md +2 -0
  296. package/skills/gsd-path-loop/references/runtime-selection.md +25 -0
  297. package/skills/gsd-path-loop/scripts/_common.py +5 -0
  298. package/skills/gsd-path-loop/scripts/discussion_records.py +3 -0
  299. package/skills/gsd-path-loop/scripts/loop_run.py +2 -0
  300. package/skills/gsd-path-loop/scripts/model_policy.py +279 -0
  301. package/skills/gsd-path-loop/scripts/path_config.py +248 -0
  302. package/skills/gsd-path-loop/scripts/review_panel.py +564 -0
  303. package/skills/gsd-path-loop/scripts/worktree_paths.py +94 -0
  304. package/skills/gsd-path-migrate/SKILL.md +2 -0
  305. package/skills/gsd-path-migrate/references/runtime-selection.md +25 -0
  306. package/skills/gsd-path-migrate/scripts/_common.py +185 -0
  307. package/skills/gsd-path-migrate/scripts/discussion_records.py +3 -0
  308. package/skills/gsd-path-migrate/scripts/loop_run.py +839 -0
  309. package/skills/gsd-path-migrate/scripts/model_policy.py +279 -0
  310. package/skills/gsd-path-migrate/scripts/path_config.py +248 -0
  311. package/skills/gsd-path-migrate/scripts/review_panel.py +564 -0
  312. package/skills/gsd-path-plan/SKILL.md +29 -19
  313. package/skills/gsd-path-plan/references/build-recovery.md +78 -0
  314. package/skills/gsd-path-plan/references/dispatch.md +12 -19
  315. package/skills/gsd-path-plan/references/model-policy.md +139 -0
  316. package/skills/gsd-path-plan/references/runtime-selection.md +25 -0
  317. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  318. package/skills/gsd-path-plan/scripts/_common.py +5 -0
  319. package/skills/gsd-path-plan/scripts/archive_milestone.py +2171 -0
  320. package/skills/gsd-path-plan/scripts/build_recovery.py +292 -0
  321. package/skills/gsd-path-plan/scripts/check_handoffs.py +7 -1
  322. package/skills/gsd-path-plan/scripts/check_task_briefs.py +3 -0
  323. package/skills/gsd-path-plan/scripts/detect_project.py +1536 -0
  324. package/skills/gsd-path-plan/scripts/discussion_records.py +3 -0
  325. package/skills/gsd-path-plan/scripts/discussion_validate.py +1326 -0
  326. package/skills/gsd-path-plan/scripts/integration.py +1459 -0
  327. package/skills/gsd-path-plan/scripts/isolation.py +24 -6
  328. package/skills/gsd-path-plan/scripts/loop_run.py +839 -0
  329. package/skills/gsd-path-plan/scripts/model_policy.py +279 -0
  330. package/skills/gsd-path-plan/scripts/path_config.py +248 -0
  331. package/skills/gsd-path-plan/scripts/pipeline_git.py +3 -0
  332. package/skills/gsd-path-plan/scripts/pipeline_state.py +117 -186
  333. package/skills/gsd-path-plan/scripts/promote_lookahead.py +286 -0
  334. package/skills/gsd-path-plan/scripts/review_panel.py +11 -0
  335. package/skills/gsd-path-plan/scripts/roadmap.py +326 -0
  336. package/skills/gsd-path-plan/scripts/state_checkpoint.py +114 -72
  337. package/skills/gsd-path-plan/scripts/state_promote.py +47 -44
  338. package/skills/gsd-path-plan/scripts/workflow_run.py +128 -8
  339. package/skills/gsd-path-plan/scripts/worktree_paths.py +94 -0
  340. package/skills/gsd-path-plan/templates/task.md +2 -0
  341. package/skills/gsd-path-research/SKILL.md +5 -6
  342. package/skills/gsd-path-research/references/dispatch.md +12 -19
  343. package/skills/gsd-path-research/references/model-policy.md +139 -0
  344. package/skills/gsd-path-research/references/runtime-selection.md +25 -0
  345. package/skills/gsd-path-research/scripts/_common.py +5 -0
  346. package/skills/gsd-path-research/scripts/archive_milestone.py +2171 -0
  347. package/skills/gsd-path-research/scripts/build_recovery.py +292 -0
  348. package/skills/gsd-path-research/scripts/check_handoffs.py +7 -1
  349. package/skills/gsd-path-research/scripts/check_task_briefs.py +3 -0
  350. package/skills/gsd-path-research/scripts/detect_project.py +1536 -0
  351. package/skills/gsd-path-research/scripts/discussion_records.py +3 -0
  352. package/skills/gsd-path-research/scripts/discussion_validate.py +1326 -0
  353. package/skills/gsd-path-research/scripts/integration.py +1459 -0
  354. package/skills/gsd-path-research/scripts/isolation.py +24 -6
  355. package/skills/gsd-path-research/scripts/loop_run.py +839 -0
  356. package/skills/gsd-path-research/scripts/model_policy.py +279 -0
  357. package/skills/gsd-path-research/scripts/path_config.py +248 -0
  358. package/skills/gsd-path-research/scripts/pipeline_git.py +3 -0
  359. package/skills/gsd-path-research/scripts/pipeline_state.py +117 -186
  360. package/skills/gsd-path-research/scripts/promote_lookahead.py +286 -0
  361. package/skills/gsd-path-research/scripts/review_panel.py +564 -0
  362. package/skills/gsd-path-research/scripts/roadmap.py +326 -0
  363. package/skills/gsd-path-research/scripts/state_checkpoint.py +114 -72
  364. package/skills/gsd-path-research/scripts/state_promote.py +47 -44
  365. package/skills/gsd-path-research/scripts/worktree_paths.py +94 -0
  366. package/skills/gsd-path-roadmap/SKILL.md +24 -58
  367. package/skills/gsd-path-roadmap/references/dispatch.md +12 -19
  368. package/skills/gsd-path-roadmap/references/model-policy.md +139 -0
  369. package/skills/gsd-path-roadmap/references/runtime-selection.md +25 -0
  370. package/skills/gsd-path-roadmap/scripts/_common.py +5 -0
  371. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +30 -124
  372. package/skills/gsd-path-roadmap/scripts/build_recovery.py +292 -0
  373. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +7 -1
  374. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +3 -0
  375. package/skills/gsd-path-roadmap/scripts/detect_project.py +22 -3
  376. package/skills/gsd-path-roadmap/scripts/discussion_records.py +3 -0
  377. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +8 -3
  378. package/skills/gsd-path-roadmap/scripts/integration.py +54 -28
  379. package/skills/gsd-path-roadmap/scripts/isolation.py +24 -6
  380. package/skills/gsd-path-roadmap/scripts/loop_run.py +839 -0
  381. package/skills/gsd-path-roadmap/scripts/model_policy.py +279 -0
  382. package/skills/gsd-path-roadmap/scripts/path_config.py +248 -0
  383. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +3 -0
  384. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +117 -186
  385. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +33 -162
  386. package/skills/gsd-path-roadmap/scripts/review_panel.py +11 -0
  387. package/skills/gsd-path-roadmap/scripts/roadmap.py +326 -0
  388. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +114 -72
  389. package/skills/gsd-path-roadmap/scripts/state_promote.py +47 -44
  390. package/skills/gsd-path-roadmap/scripts/worktree_paths.py +94 -0
  391. package/skills/gsd-path-ship/SKILL.md +29 -17
  392. package/skills/gsd-path-ship/references/dispatch.md +12 -19
  393. package/skills/gsd-path-ship/references/jev-review.md +82 -0
  394. package/skills/gsd-path-ship/references/model-policy.md +139 -0
  395. package/skills/gsd-path-ship/references/reviewer-final.md +21 -0
  396. package/skills/gsd-path-ship/references/reviewer-panel.md +17 -0
  397. package/skills/gsd-path-ship/references/reviewer-skeptic.md +20 -0
  398. package/skills/gsd-path-ship/references/reviewer-wave.md +89 -0
  399. package/skills/gsd-path-ship/references/reviewer.md +12 -148
  400. package/skills/gsd-path-ship/references/runtime-selection.md +25 -0
  401. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  402. package/skills/gsd-path-ship/scripts/_common.py +5 -0
  403. package/skills/gsd-path-ship/scripts/archive_milestone.py +30 -124
  404. package/skills/gsd-path-ship/scripts/build_recovery.py +292 -0
  405. package/skills/gsd-path-ship/scripts/build_state.py +2 -0
  406. package/skills/gsd-path-ship/scripts/check_handoffs.py +7 -1
  407. package/skills/gsd-path-ship/scripts/check_task_briefs.py +3 -0
  408. package/skills/gsd-path-ship/scripts/detect_project.py +1536 -0
  409. package/skills/gsd-path-ship/scripts/discussion_records.py +3 -0
  410. package/skills/gsd-path-ship/scripts/discussion_validate.py +8 -3
  411. package/skills/gsd-path-ship/scripts/integration.py +54 -28
  412. package/skills/gsd-path-ship/scripts/isolation.py +24 -6
  413. package/skills/gsd-path-ship/scripts/jev_review.py +138 -0
  414. package/skills/gsd-path-ship/scripts/lean_verification.py +3 -1
  415. package/skills/gsd-path-ship/scripts/loop_run.py +839 -0
  416. package/skills/gsd-path-ship/scripts/model_policy.py +279 -0
  417. package/skills/gsd-path-ship/scripts/path_config.py +248 -0
  418. package/skills/gsd-path-ship/scripts/pipeline_git.py +3 -0
  419. package/skills/gsd-path-ship/scripts/pipeline_state.py +117 -186
  420. package/skills/gsd-path-ship/scripts/promote_lookahead.py +286 -0
  421. package/skills/gsd-path-ship/scripts/review_panel.py +11 -0
  422. package/skills/gsd-path-ship/scripts/roadmap.py +326 -0
  423. package/skills/gsd-path-ship/scripts/state_checkpoint.py +114 -72
  424. package/skills/gsd-path-ship/scripts/state_promote.py +47 -44
  425. package/skills/gsd-path-ship/scripts/workflow_run.py +128 -8
  426. package/skills/gsd-path-ship/scripts/worktree_paths.py +94 -0
  427. package/skills/gsd-path-ship/templates/wave-review.md +1 -1
  428. package/skills/gsd-path-undo/SKILL.md +2 -0
  429. package/skills/gsd-path-undo/references/runtime-selection.md +25 -0
  430. package/skills/gsd-path-undo/scripts/_common.py +5 -0
  431. package/skills/gsd-path-undo/scripts/discussion_records.py +3 -0
  432. package/skills/gsd-path-undo/scripts/loop_run.py +839 -0
  433. package/skills/gsd-path-undo/scripts/model_policy.py +279 -0
  434. package/skills/gsd-path-undo/scripts/path_config.py +248 -0
  435. package/skills/gsd-path-undo/scripts/pipeline_undo.py +14 -7
  436. package/skills/gsd-path-undo/scripts/review_panel.py +564 -0
  437. package/skills/gsd-path-undo/scripts/worktree_paths.py +94 -0
  438. package/skills/path/BUILD.md +54 -575
  439. package/skills/path/DECIDE.md +4 -6
  440. package/skills/path/DEFINE.md +23 -21
  441. package/skills/path/DOCS-AUDIT.md +2 -0
  442. package/skills/path/INSPECT.md +32 -8
  443. package/skills/path/PLAN.md +29 -19
  444. package/skills/path/RESEARCH.md +5 -6
  445. package/skills/path/ROADMAP.md +24 -58
  446. package/skills/path/SHIP.md +29 -17
  447. package/skills/path/SKILL.md +46 -22
  448. package/skills/path/references/build-abandon.md +33 -0
  449. package/skills/path/references/build-native.md +502 -0
  450. package/skills/path/references/build-recovery.md +78 -0
  451. package/skills/path/references/coder.md +8 -3
  452. package/skills/path/references/config.md +57 -0
  453. package/skills/path/references/dispatch.md +12 -19
  454. package/skills/path/references/docs-auditor.md +14 -0
  455. package/skills/path/references/jev-review.md +82 -0
  456. package/skills/path/references/model-policy.md +139 -0
  457. package/skills/path/references/reviewer-final.md +21 -0
  458. package/skills/path/references/reviewer-panel.md +17 -0
  459. package/skills/path/references/reviewer-skeptic.md +20 -0
  460. package/skills/path/references/reviewer-wave.md +89 -0
  461. package/skills/path/references/reviewer.md +12 -148
  462. package/skills/path/references/runtime-selection.md +25 -0
  463. package/skills/path/scripts/_common.py +5 -0
  464. package/skills/path/scripts/archive_milestone.py +30 -124
  465. package/skills/path/scripts/bootstrap_repository.py +33 -4
  466. package/skills/path/scripts/build_recovery.py +292 -0
  467. package/skills/path/scripts/build_state.py +2 -0
  468. package/skills/path/scripts/check_docs_audit.py +7 -3
  469. package/skills/path/scripts/check_handoffs.py +7 -1
  470. package/skills/path/scripts/check_task_briefs.py +3 -0
  471. package/skills/path/scripts/detect_project.py +22 -3
  472. package/skills/path/scripts/discussion_records.py +3 -0
  473. package/skills/path/scripts/discussion_validate.py +8 -3
  474. package/skills/path/scripts/dispatch_driver.py +233 -22
  475. package/skills/path/scripts/git_guard.py +768 -0
  476. package/skills/path/scripts/integration.py +54 -28
  477. package/skills/path/scripts/isolation.py +24 -6
  478. package/skills/path/scripts/jev_review.py +138 -0
  479. package/skills/path/scripts/lean_verification.py +3 -1
  480. package/skills/path/scripts/loop_run.py +2 -0
  481. package/skills/path/scripts/model_policy.py +279 -0
  482. package/skills/path/scripts/path_config.py +248 -0
  483. package/skills/path/scripts/pipeline_git.py +3 -0
  484. package/skills/path/scripts/pipeline_state.py +117 -186
  485. package/skills/path/scripts/promote_lookahead.py +33 -162
  486. package/skills/path/scripts/review_panel.py +11 -0
  487. package/skills/path/scripts/roadmap.py +326 -0
  488. package/skills/path/scripts/state_checkpoint.py +114 -72
  489. package/skills/path/scripts/state_promote.py +47 -44
  490. package/skills/path/scripts/status_runtime.py +208 -0
  491. package/skills/path/scripts/task_context.py +73 -0
  492. package/skills/path/scripts/token_budget.py +40 -1
  493. package/skills/path/scripts/workflow_run.py +128 -8
  494. package/skills/path/scripts/worktree_paths.py +94 -0
  495. package/skills/path/templates/skeptic.md +1 -1
  496. package/skills/path/templates/task.md +2 -0
  497. package/skills/path/templates/wave-panel.md +1 -1
  498. package/skills/path/templates/wave-review.md +1 -1
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env python3
2
+ # gsd-path project runtime
3
+ """Placement shared by task isolation, verification, and integration."""
4
+
5
+ import sys
6
+
7
+ # Runtime helpers must not modify their immutable installation.
8
+ sys.dont_write_bytecode = True
9
+
10
+ import hashlib
11
+ import json
12
+ import os
13
+ import tempfile
14
+ from pathlib import Path
15
+
16
+ try:
17
+ import _common
18
+ except ImportError:
19
+ from scripts import _common
20
+
21
+
22
+ def _git(primary: Path, *args: str) -> str:
23
+ result = _common.run_git(primary, *args)
24
+ if result.returncode:
25
+ raise ValueError(result.stderr.strip() or "cannot inspect worktree placement")
26
+ return result.stdout.rstrip("\n")
27
+
28
+
29
+ def _identity(path: Path) -> str:
30
+ return hashlib.sha256(os.fsencode(path)).hexdigest()
31
+
32
+
33
+ def _workspace(primary: Path, pin: bool) -> Path:
34
+ common = Path(_git(primary, "rev-parse", "--git-common-dir"))
35
+ common = (primary / common).resolve()
36
+ identity = _identity(primary)
37
+ receipt = common / "gsd-path" / "workspaces" / f"{identity}.json"
38
+ try:
39
+ data = json.loads(receipt.read_text(encoding="utf-8"))
40
+ except FileNotFoundError:
41
+ pass
42
+ else:
43
+ if (not isinstance(data, dict) or data.get("primary") != str(primary)
44
+ or not isinstance(data.get("root"), str)
45
+ or not Path(data["root"]).is_absolute()):
46
+ raise ValueError(f"invalid worktree placement receipt: {receipt}")
47
+ return Path(data["root"])
48
+
49
+ root = Path(os.environ.get("GSD_PATH_WORKTREE_ROOT") or Path.home() / ".gsd-path" / "projects").expanduser()
50
+ if not root.is_absolute():
51
+ raise ValueError("GSD_PATH_WORKTREE_ROOT must be absolute")
52
+ root = root.resolve()
53
+ parent = root
54
+ while not parent.exists():
55
+ parent = parent.parent
56
+ ancestor = _common.run_git(parent, "rev-parse", "--git-common-dir")
57
+ same_repository = (
58
+ ancestor.returncode == 0
59
+ and (parent / ancestor.stdout.strip()).resolve() == common
60
+ )
61
+ if root.is_relative_to(primary) or same_repository:
62
+ raise ValueError(f"managed worktree root must be outside this repository's worktrees: {root}")
63
+ workspace = root / _identity(common) / identity
64
+ if pin:
65
+ receipt.parent.mkdir(parents=True, exist_ok=True)
66
+ fd, temporary = tempfile.mkstemp(dir=receipt.parent)
67
+ try:
68
+ with os.fdopen(fd, "w", encoding="utf-8") as handle:
69
+ json.dump({"primary": str(primary), "root": str(workspace)}, handle)
70
+ try:
71
+ os.link(temporary, receipt)
72
+ except FileExistsError:
73
+ return _workspace(primary, False)
74
+ finally:
75
+ os.unlink(temporary)
76
+ return workspace
77
+
78
+
79
+ def worktree_path(primary: Path, kind: str, name: str, *, pin: bool = False) -> Path:
80
+ primary = primary.resolve()
81
+ if kind not in {"task", "verify", "integrate"} or not name or Path(name).name != name or name in {".", ".."}:
82
+ raise ValueError("invalid managed worktree kind or name")
83
+ legacy = (primary.parent / f".{primary.name}-gsd-path-integrate-{name}"
84
+ if kind == "integrate" else primary.parent / f"{primary.name}.gsd-path" / kind / name)
85
+ branch = f"refs/heads/gsd-path-{kind}/{name}"
86
+ records = _git(primary, "worktree", "list", "--porcelain", "-z").split("\0\0")
87
+ for record in records:
88
+ fields = record.split("\0")
89
+ if f"worktree {legacy}" in fields and f"branch {branch}" in fields:
90
+ return legacy
91
+ # Keep collision checks and missing-directory recovery at the old location.
92
+ if os.path.lexists(legacy):
93
+ return legacy
94
+ return _workspace(primary, pin) / kind / name
@@ -3,6 +3,8 @@ name: gsd-path-inspect
3
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
4
  ---
5
5
 
6
+ Before executing project helpers, read [runtime selection](references/runtime-selection.md).
7
+
6
8
  # GSD Path Inspect Phase
7
9
 
8
10
  Establish ground truth about an existing project before intent is defined.
@@ -21,10 +23,12 @@ phase blocks.
21
23
 
22
24
  If STATE.md is missing, run the bundled
23
25
  `python3 <absolute-bundled-script> initialize --repo <absolute-root>
24
- --template <absolute-state-template>` helper (`scripts/detect_project.py`) and
26
+ --template <absolute-state-template> --require-git` helper (`scripts/detect_project.py`) and
25
27
  follow its returned JSON `verdict` / `route`. This is the only no-state
26
28
  boundary; do not run `classify` first or classify from a directory listing or
27
- conversation. If the command exits nonzero, returns `error`, or returns
29
+ conversation. Handle `route: setup-repository` before the write gate: preserve
30
+ the folder unchanged and return to `$gsd-path` for repository setup; no state
31
+ was written. If the command exits nonzero, returns `error`, or returns
28
32
  `wrote_state: false`, report the error and block without routing or claiming
29
33
  STATE.md was written.
30
34
  - `owned` — continue under the existing-state rules below.
@@ -47,6 +51,31 @@ same milestone; a later milestone's `inspect/active` is a new scan.
47
51
 
48
52
  ## Process
49
53
 
54
+ For an initial `inspect/active` inspection on the `.project` track, with neither output
55
+ artifact present and a clean Git product at the recorded HEAD, run the bundled
56
+ `python3 <absolute workflow_run.py> prepare-inspect --repo <absolute root>
57
+ --expected-head <recorded HEAD>` first. It performs the inventory freeze and
58
+ both sidecar preparations from steps 1–2 and writes complete assignment briefs.
59
+ Its state validation and pending-answer check satisfy those entry checks;
60
+ reuse their results at this boundary.
61
+ Use its returned `inspection.inventory_file` for the gate. Before dispatch, read
62
+ and apply the [runtime dispatch contract](references/dispatch.md), including its
63
+ host-specific context isolation. Dispatch each returned logical `task_name` in a fresh context with its `brief_file` path and the current
64
+ user constraints, including configured budgets. The child reads that file;
65
+ the parent does not read or rewrite the roles, templates, or generated briefs.
66
+ When both children return, review the mapper's Map and Findings against its
67
+ template as in step 3. After that review passes, run the bundled
68
+ `python3 <absolute workflow_run.py> finish-inspect --repo <absolute root>
69
+ --expected-head <recorded HEAD> --inspection <returned receipt_file>
70
+ --mapper-reviewed`. This runs the docs gate, checks the audit baseline,
71
+ collects and retires both sidecars, checks pending discussion, and records
72
+ `inspect/done` through the canonical transition. Do not repeat those operations.
73
+ Present step 4's ground truth and use step 5's caller handoff. A failure uses
74
+ step 3's failure contract and the returned step evidence; do not blindly rerun
75
+ the completion command or repeat already proven steps.
76
+ Prior evidence, lookahead, or a dirty/non-Git product uses steps 1–2 below.
77
+ Preparation never changes phase state; neither command dispatches agents.
78
+
50
79
  1. Before creating or changing `.project/` Markdown, freeze the helper's exact
51
80
  stdout from `python3 <absolute check_docs_audit.py> --repo <absolute root>
52
81
  --emit-inventory` in a temporary file. Do not rediscover or edit that
@@ -132,12 +161,7 @@ same milestone; a later milestone's `inspect/active` is a new scan.
132
161
  <current branch or null> --expect-archive <current archive or null>
133
162
  --set-phase inspect --set-status done`. This helper is the only ordinary
134
163
  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.
164
+ Use the executable phase handoff in AGENTS.md.
141
165
 
142
166
  ## Lookahead mode
143
167
 
@@ -7,10 +7,7 @@ use exactly one matching branch:
7
7
  - A `spawn_agent` tool exposing `task_name`, `agent_type`, and `fork_turns` is
8
8
  Codex. Use `fork_turns: "none"`; coders use the built-in `worker` type and
9
9
  every other role uses `default`. Reuse a completed logical target with
10
- `followup_task`. For Codex reasoning effort, use `high` for the portable
11
- `heavy` tier and `low` for the portable `light` tier; leave reasoning effort
12
- unset for the session-default tier, and never pass `heavy` or `light` as a
13
- literal Codex value.
10
+ `followup_task`.
14
11
  - A `spawn_agent` tool without those Codex fields is Zed. Spawn one isolated,
15
12
  full-capability child per brief. Zed children are not resumable, so retries
16
13
  use a fresh child and a complete prompt.
@@ -26,7 +23,7 @@ use exactly one matching branch:
26
23
  the complete new prompt for later work. Wait for a colliding active child and
27
24
  collect results with `wait_commands_or_subagents`.
28
25
  - A `Task` tool advertising the custom `gsd-path` subagent is Cursor. Use that
29
- model-inheriting, full-capability child. Resume it by returned agent ID when
26
+ full-capability child. Resume it by returned agent ID when
30
27
  available; otherwise retry with a fresh child and a complete prompt.
31
28
  - A `Task` tool advertising the built-in `general` subagent is OpenCode. Use
32
29
  that child; if an installed OpenCode v2 host exposes the renamed `subagent`
@@ -65,20 +62,10 @@ For every branch:
65
62
  - Resolve the phase's linked role brief to an absolute path, include it in the
66
63
  prompt, and require the child to read it before acting. The role brief
67
64
  supplies the read-only boundary for auditors and reviewers.
68
- - Tier hints: use the portable `heavy` tier for `plan`, `plan_patch`, `decide`,
69
- and `roadmap`, the portable `light` tier for `inspect_docs` and `docs_audit`,
70
- and the session-default tier for every other role. Apply the Codex mapping
71
- above when its schema advertises reasoning-effort selection. On every other
72
- host, use only an exact native equivalent advertised by that host; otherwise
73
- do not override the model or reasoning effort. The only exception is a
74
- review-panel child: when the host advertises model selection, pass the exact
75
- slug returned by `scripts/review_panel.py resolve` for that family. Never
76
- override the model on the canonical reviewer, planner, coder, or any other
77
- role.
78
- Host isolation: none. The child's working directory is the exact absolute
79
- root GSD Path supplied; a host SHA checkout or extra worktree is a contract
80
- failure. Never ask the host to create a worktree. Give the child the exact
81
- repository or linked-worktree root supplied by GSD Path.
65
+ - Model selection: before every child launch or continuation, follow
66
+ [the model-policy contract](model-policy.md) and apply its recorded
67
+ native arguments. It owns defaults, project settings, task overrides,
68
+ capability failures, and reassignment. Host isolation: none. Use the exact GSD Path supplied root; create no extra checkout.
82
69
  - Send a self-contained prompt with absolute input, template, and output paths
83
70
  plus the child's bounded responsibility. Every brief also names the absolute
84
71
  `AGENTS.md` and `WORKFLOW.md` paths (or explicitly says they are absent), the
@@ -122,6 +109,12 @@ directory for the full logical session; resumptions reuse it. Record completed
122
109
  parent CLI run events and each native child's session events with stable logical
123
110
  task names before the next dispatch. The helper reads host counters and refuses
124
111
  incomplete or ambiguous usage; never estimate tokens or reset the ledger.
112
+ When the verified CLI adapter reports cumulative counters across `resume`, record
113
+ each later invocation with `--previous-events <previous recorded CLI events>`.
114
+ The helper checks thread identity and records only the new output, preserving the
115
+ raw total and predecessor. Keep that chain in order; never sum cumulative totals.
116
+ Use ordinary `record` for per-invocation counters. An unknown counter convention
117
+ is unproven usage, not permission to guess.
125
118
  Run `admit` for the next task and stop dispatch on a blocked result. Preserve
126
119
  its output in the dispatch evidence. This gates observed usage only: concurrent
127
120
  or in-flight work can overrun before the host reports usage. Codex CLI has no
@@ -24,6 +24,20 @@ actually does. Read-only: change nothing outside your single output file.
24
24
  `## Descriptive docs` list — never its own section, never skipped.
25
25
  2. **Extract claims** — statements reality can contradict: commands,
26
26
  features, structure, status/checkboxes, config, integrations.
27
+ Scope each claim to this repository's product. An exclusion is a scope
28
+ boundary, not an evidence gap: do not create `unverifiable` findings or
29
+ remediation rows for the implementation of an excluded dependency. In an
30
+ application that installs GSD Path, descriptions of GSD Path's source
31
+ distribution and pipeline internals are such dependency claims. In GSD
32
+ Path's own source repository, they are product claims and must be audited.
33
+ Keep application commands, configuration, and integration promises in
34
+ scope even when they use a dependency. In a mixed document, audit those
35
+ product claims; if none remain, list its exact inventory path alone in
36
+ Descriptive docs. Put a short scope reason in a separate paragraph, never
37
+ on a path bullet. Remediation Doc cells also use exact inventory paths;
38
+ copy each non-verified Claim cell verbatim into its remediation row, and
39
+ put line numbers in Evidence. This never exempts instructions from being
40
+ followed or conflicting instructions from being surfaced.
27
41
  3. **Verify each claim** by the cheapest sufficient method: run the
28
42
  command, read the named code, run the relevant test, check git history.
29
43
  Record the evidence (file:line, or command + result) with the verdict:
@@ -0,0 +1,139 @@
1
+ # Dispatch model policy
2
+
3
+ Before native dispatch, run the bundled `scripts/model_policy.py`. CLI dispatch
4
+ uses the same resolver inside `dispatch_driver.py`. The helper owns model and
5
+ effort decisions; apply its output instead of choosing again in prose.
6
+
7
+ ## Project choices
8
+
9
+ Use `<repo>/.project/model-policy.json`, including when the active track is
10
+ `.project/next`. This file owns project overrides. It is not phase status.
11
+ No file is required to retain existing behavior. `path config` can also set user
12
+ defaults in `~/.gsd-path/config.json` under `models`. Project common roles override
13
+ user host and common roles. Within each scope, host roles override common roles.
14
+ Task overrides still win, and recorded assignments stay pinned.
15
+
16
+ ```json
17
+ {
18
+ "roles": {"coder": {"model": "inherit"}},
19
+ "hosts": {"codex": {"plan": {"effort": "high"}}}
20
+ }
21
+ ```
22
+
23
+ Values are exact advertised model/effort strings or `inherit`. This example
24
+ illustrates configuration; it is not a cost-saving preset. Set concrete models
25
+ only from the current host's advertised choices. Host-specific role settings
26
+ override common role settings. Task settings override both, independently for
27
+ model and effort; omitted fields retain the next applicable value. Explicit
28
+ `inherit` removes that field's override. There are no automatic fallbacks.
29
+
30
+ Role keys are `coder`, `reviewer` (wave, final, and gap review), `review_panel`,
31
+ `skeptic`, `inspect_codebase`, `inspect_docs`, `docs_audit`, `research`, `decide`,
32
+ `roadmap`, `plan`, and `plan_patch`. Use the logical task name as the assignment,
33
+ not as the role. Keep each panel family and review lens a distinct assignment.
34
+
35
+ The helper retains heavy effort hints for plan, plan_patch, decide, and roadmap;
36
+ light hints for inspect_docs and docs_audit; otherwise effort inherits. Codex
37
+ maps these hints to high/low. Other hosts use only advertised equivalents.
38
+ Hints are conditional; unsupported explicit settings stop the affected child.
39
+
40
+ Coders may have scalar `model:` and `effort:` fields in their task frontmatter.
41
+ These are part of the approved task contract. Pass the task file with `--task`.
42
+ For other roles, pass assignment-specific `--model` or `--effort` when the owner
43
+ explicitly overrides the role choice. Coder settings do not affect reviewers.
44
+
45
+ ## Advertised capabilities
46
+
47
+ Capture the current child tool's schema and advertised choices in a JSON file
48
+ outside the product tree. For each supported control, provide its native field,
49
+ allowed values, and, for CLI dispatch, its documented argument template. Omit
50
+ unsupported controls. The values below are fixture examples, not a host catalog:
51
+
52
+ ```json
53
+ {
54
+ "host": "codex",
55
+ "model": {"field": "model", "values": ["example-model"],
56
+ "args": ["--model", "{value}"]},
57
+ "effort": {"field": "reasoning_effort", "values": ["low", "high"],
58
+ "args": ["-c", "model_reasoning_effort={value}"]}
59
+ }
60
+ ```
61
+
62
+ `effort_hints` may map heavy/light to exact advertised equivalents. Supply
63
+ `inherited_model` only when the host exposes its identity. Never infer models,
64
+ fields, or CLI flags from a host name. Every existing host uses this contract,
65
+ including hosts with no model or effort controls. Their explicit unsupported
66
+ settings block; their default inheritance remains usable.
67
+
68
+ ## Native lifecycle
69
+
70
+ Resolve the bundled helper to an absolute path. Use one record under the Git
71
+ common directory's `gsd-path/model-selection/` directory per assignment. Scope
72
+ the path and `--scope` to the milestone, active/lookahead track, and review cycle
73
+ where applicable; later work must not reuse an earlier record.
74
+
75
+ ```text
76
+ python3 -B <helper> resolve --repo <primary> --scope <milestone/track/cycle> --assignment <logical-name> --role <role> --record <absolute-record> --capabilities <advertised-json>
77
+ ```
78
+
79
+ Only `status: ready` authorizes launch. Apply `selection.native` exactly to
80
+ the advertised child tool, preserving the host adapter's other controls and
81
+ GSD Path task isolation. The recorded selection applies to a fresh child too.
82
+ If an existing child is still active, reattach or send its continuation;
83
+ resolving again does not authorize launching a second copy. When a host cannot
84
+ change model/effort on a resumed child, a changed selection requires a fresh
85
+ child after terminal completion of the earlier one.
86
+
87
+ After terminal completion, release the assignment with `release` using the
88
+ same identity arguments and `--terminal-result <host-completion-evidence>`.
89
+ To change the selection, use `reassign` with the same identity, current
90
+ capabilities, explicit model/effort changes, and `--ruling <verbatim-owner-ruling>`.
91
+ It requires an inactive assignment and preserves prior selection history.
92
+ Resolve again before starting the replacement. A project-policy edit alone
93
+ does not change an existing selection. Task-contract edits still require their
94
+ legal pipeline path.
95
+
96
+ For panel children, first resolve membership with `review_panel.py resolve`,
97
+ passing `--parent-slug` when known and repeating `--exclude-family` for every
98
+ known parent and canonical-reviewer family (including all deep review lenses).
99
+ Apply these exclusions before persisting membership. Detected membership skips
100
+ excluded families; explicitly named conflicts block. Pass its selected model through `--panel-model`, and pass `--panel-family` plus
101
+ `--exclude-family` for known parent and
102
+ canonical-reviewer families. Persist and reuse the panel roster. Policy cannot
103
+ waive family independence or change canonical review authority. A changed
104
+ panel roster requires a new legal review assignment.
105
+
106
+ Requested controls are durable evidence. When the host hides the inherited
107
+ model identity, exact effective-model continuity across fresh children remains
108
+ unproven; report that limitation rather than asserting an identity.
109
+
110
+ ## CLI lifecycle
111
+
112
+ Pass `--model-capabilities <advertised-json>` to the driver. Commands use whole
113
+ argument slots `{model_args}` and `{effort_args}`; the resolver expands these
114
+ to argument arrays. They are not shell substitutions. Remove fixed model and
115
+ effort flags when using these slots; conflicting controls block dispatch.
116
+ Commands with explicit policy choices must expose the corresponding slots,
117
+ including when an explicit choice is `inherit`. Unconfigured legacy commands
118
+ without a capability file retain their existing behavior.
119
+ An existing legacy assignment with no recorded selection keeps its saved
120
+ command across retries, even if project policy or capabilities are later added.
121
+ It cannot use `reassign-model`; model controls require a new explicit assignment.
122
+
123
+ Review and skeptic commands accept `--model` and `--effort` for that assignment.
124
+ For distinct panel families or review lenses, pass `--model-overrides <json>`:
125
+ a mapping from exact logical assignment names to model/effort objects. Each
126
+ entry applies only to its named assignment; conflicting explicit inputs block.
127
+ A common panel model must satisfy every selected family, so use these scoped
128
+ overrides when families need different models. Family checks remain mandatory.
129
+ Coders read their task overrides. Panels with capabilities use the argument
130
+ slots; legacy panel commands may retain their existing `{model}` placeholder.
131
+
132
+ The driver persists selection before launch and retains it on retry. Use
133
+ `dispatch_driver.py reassign-model --repo <primary> --task-id <logical-name>
134
+ --model-capabilities <advertised-json> --model <slug> --ruling <owner-ruling>`
135
+ for an inactive unfinished assignment. Finished work and pinned panel rosters
136
+ require a new legal assignment. Earlier attempt evidence is retained.
137
+
138
+ Compare total cost only with observed usage and outcomes, including retries.
139
+ These controls do not establish cost savings, pricing, or quality rankings.
@@ -0,0 +1,25 @@
1
+ # Project runtime selection
2
+
3
+ Before running a project runtime helper, check for
4
+ `<absolute-project>/.gsd-path/runtime.json`. When present, run the stable launcher:
5
+
6
+ ```sh
7
+ python3 -B <absolute-project>/.gsd-path/status_runtime.py --repo <absolute-project> --runtime-path
8
+ ```
9
+
10
+ Use `python` only when it is the compatible Python 3.9+ interpreter. A failure
11
+ stops helper execution: follow the exact-version restore action in the error.
12
+ Do not install, upgrade, or fall back to the current plugin's runtime implicitly.
13
+
14
+ The returned directory is the verified Project runtime. Resolve helper names
15
+ present in its `manifest.json` from that directory, including status, state,
16
+ isolation, integration, archive, recovery, build-state, final-verification, and guard helpers.
17
+ The workflow runner resolves its subprocess helpers from this same directory;
18
+ helper imports stay within the selected runtime. This rule overrides
19
+ references to bundled copies of those helpers. Other skill helpers, templates,
20
+ and role briefs remain in the installed skill bundle. Pass `-B` to Python helper
21
+ invocations so execution does not create bytecode in the runtime store.
22
+
23
+ With no declaration, retain the legacy helper lookup. An existing
24
+ `.gsd-path/runtime/` requires the explicit `--runtime-migrate --project PATH`
25
+ operation before adopting external storage; review the resulting Git diff.
@@ -9,6 +9,11 @@ consuming module keep working.
9
9
 
10
10
  from __future__ import annotations
11
11
 
12
+ import sys
13
+
14
+ # Runtime helpers must not modify their immutable installation.
15
+ sys.dont_write_bytecode = True
16
+
12
17
  import json
13
18
  import os
14
19
  import re