@opengsd/gsd-path 1.1.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 (577) hide show
  1. package/AGENTS.md +5 -2
  2. package/CHANGELOG.md +68 -0
  3. package/DOCS.md +69 -1
  4. package/FULL.md +3 -2
  5. package/HOOKS.md +18 -9
  6. package/QUICK.md +5 -3
  7. package/README.md +72 -5
  8. package/RUNTIME.md +9 -4
  9. package/UPDATE.md +30 -11
  10. package/WORKFLOW.md +5 -2
  11. package/package.json +9 -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 +6 -19
  21. package/scripts/_common.py +5 -0
  22. package/scripts/archive_milestone.py +20 -6
  23. package/scripts/bootstrap_repository.py +8 -1
  24. package/scripts/build_recovery.py +5 -0
  25. package/scripts/build_state.py +2 -0
  26. package/scripts/check_docs_audit.py +2 -0
  27. package/scripts/check_handoffs.py +6 -0
  28. package/scripts/check_task_briefs.py +3 -0
  29. package/scripts/detect_project.py +11 -1
  30. package/scripts/discussion_records.py +3 -0
  31. package/scripts/discussion_validate.py +8 -3
  32. package/scripts/dispatch_driver.py +230 -21
  33. package/scripts/git_guard.py +12 -4
  34. package/scripts/guard_hook.py +11 -1
  35. package/scripts/install.mjs +52 -1448
  36. package/scripts/install.py +155 -190
  37. package/scripts/integration.py +28 -8
  38. package/scripts/isolation.py +15 -5
  39. package/scripts/jev_review.py +138 -0
  40. package/scripts/lean_verification.py +2 -0
  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 +3 -0
  45. package/scripts/pipeline_git.py +3 -0
  46. package/scripts/pipeline_state.py +4 -1
  47. package/scripts/pipeline_undo.py +3 -0
  48. package/scripts/promote_lookahead.py +3 -0
  49. package/scripts/review_panel.py +11 -0
  50. package/scripts/roadmap.py +5 -0
  51. package/scripts/runtime_store.py +278 -0
  52. package/scripts/skill-resources.json +104 -4
  53. package/scripts/state_checkpoint.py +5 -0
  54. package/scripts/state_promote.py +5 -0
  55. package/scripts/status_runtime.py +92 -6
  56. package/scripts/workflow_run.py +12 -1
  57. package/scripts/worktree_paths.py +94 -0
  58. package/skills/gsd-path/BUILD.md +7 -0
  59. package/skills/gsd-path/DECIDE.md +2 -0
  60. package/skills/gsd-path/DEFINE.md +13 -7
  61. package/skills/gsd-path/DOCS-AUDIT.md +2 -0
  62. package/skills/gsd-path/INSPECT.md +2 -0
  63. package/skills/gsd-path/PLAN.md +4 -2
  64. package/skills/gsd-path/RESEARCH.md +2 -0
  65. package/skills/gsd-path/ROADMAP.md +2 -0
  66. package/skills/gsd-path/SHIP.md +24 -13
  67. package/skills/gsd-path/SKILL.md +23 -9
  68. package/skills/gsd-path/references/build-native.md +15 -7
  69. package/skills/gsd-path/references/config.md +57 -0
  70. package/skills/gsd-path/references/dispatch.md +6 -19
  71. package/skills/gsd-path/references/jev-review.md +82 -0
  72. package/skills/gsd-path/references/model-policy.md +139 -0
  73. package/skills/gsd-path/references/reviewer-panel.md +1 -1
  74. package/skills/gsd-path/references/reviewer.md +2 -0
  75. package/skills/gsd-path/references/runtime-selection.md +25 -0
  76. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  77. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  78. package/skills/gsd-path/scripts/_common.py +5 -0
  79. package/skills/gsd-path/scripts/archive_milestone.py +20 -6
  80. package/skills/gsd-path/scripts/bootstrap_repository.py +8 -1
  81. package/skills/gsd-path/scripts/build_recovery.py +5 -0
  82. package/skills/gsd-path/scripts/build_state.py +2 -0
  83. package/skills/gsd-path/scripts/check_docs_audit.py +2 -0
  84. package/skills/gsd-path/scripts/check_handoffs.py +6 -0
  85. package/skills/gsd-path/scripts/check_task_briefs.py +3 -0
  86. package/skills/gsd-path/scripts/detect_project.py +11 -1
  87. package/skills/gsd-path/scripts/discussion_records.py +3 -0
  88. package/skills/gsd-path/scripts/discussion_validate.py +8 -3
  89. package/skills/gsd-path/scripts/dispatch_driver.py +230 -21
  90. package/skills/gsd-path/scripts/git_guard.py +768 -0
  91. package/skills/gsd-path/scripts/integration.py +28 -8
  92. package/skills/gsd-path/scripts/isolation.py +15 -5
  93. package/skills/gsd-path/scripts/jev_review.py +138 -0
  94. package/skills/gsd-path/scripts/lean_verification.py +2 -0
  95. package/skills/gsd-path/scripts/loop_run.py +2 -0
  96. package/skills/gsd-path/scripts/model_policy.py +279 -0
  97. package/skills/gsd-path/scripts/path_config.py +248 -0
  98. package/skills/gsd-path/scripts/pipeline_git.py +3 -0
  99. package/skills/gsd-path/scripts/pipeline_state.py +4 -1
  100. package/skills/gsd-path/scripts/promote_lookahead.py +3 -0
  101. package/skills/gsd-path/scripts/review_panel.py +11 -0
  102. package/skills/gsd-path/scripts/roadmap.py +5 -0
  103. package/skills/gsd-path/scripts/state_checkpoint.py +5 -0
  104. package/skills/gsd-path/scripts/state_promote.py +5 -0
  105. package/skills/gsd-path/scripts/status_runtime.py +208 -0
  106. package/skills/gsd-path/scripts/workflow_run.py +12 -1
  107. package/skills/gsd-path/scripts/worktree_paths.py +94 -0
  108. package/skills/gsd-path/templates/skeptic.md +1 -1
  109. package/skills/gsd-path/templates/task.md +2 -0
  110. package/skills/gsd-path/templates/wave-panel.md +1 -1
  111. package/skills/gsd-path-build/SKILL.md +7 -0
  112. package/skills/gsd-path-build/references/build-native.md +15 -7
  113. package/skills/gsd-path-build/references/dispatch.md +6 -19
  114. package/skills/gsd-path-build/references/jev-review.md +82 -0
  115. package/skills/gsd-path-build/references/model-policy.md +139 -0
  116. package/skills/gsd-path-build/references/reviewer-panel.md +1 -1
  117. package/skills/gsd-path-build/references/reviewer.md +2 -0
  118. package/skills/gsd-path-build/references/runtime-selection.md +25 -0
  119. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  120. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  121. package/skills/gsd-path-build/scripts/_common.py +5 -0
  122. package/skills/gsd-path-build/scripts/archive_milestone.py +20 -6
  123. package/skills/gsd-path-build/scripts/build_recovery.py +5 -0
  124. package/skills/gsd-path-build/scripts/build_state.py +2 -0
  125. package/skills/gsd-path-build/scripts/check_handoffs.py +6 -0
  126. package/skills/gsd-path-build/scripts/check_task_briefs.py +3 -0
  127. package/skills/gsd-path-build/scripts/detect_project.py +11 -1
  128. package/skills/gsd-path-build/scripts/discussion_records.py +3 -0
  129. package/skills/gsd-path-build/scripts/discussion_validate.py +8 -3
  130. package/skills/gsd-path-build/scripts/dispatch_driver.py +230 -21
  131. package/skills/gsd-path-build/scripts/integration.py +28 -8
  132. package/skills/gsd-path-build/scripts/isolation.py +15 -5
  133. package/skills/gsd-path-build/scripts/jev_review.py +138 -0
  134. package/skills/gsd-path-build/scripts/loop_run.py +2 -0
  135. package/skills/gsd-path-build/scripts/model_policy.py +279 -0
  136. package/skills/gsd-path-build/scripts/path_config.py +248 -0
  137. package/skills/gsd-path-build/scripts/pipeline_git.py +3 -0
  138. package/skills/gsd-path-build/scripts/pipeline_state.py +4 -1
  139. package/skills/gsd-path-build/scripts/promote_lookahead.py +3 -0
  140. package/skills/gsd-path-build/scripts/review_panel.py +11 -0
  141. package/skills/gsd-path-build/scripts/roadmap.py +5 -0
  142. package/skills/gsd-path-build/scripts/state_checkpoint.py +5 -0
  143. package/skills/gsd-path-build/scripts/state_promote.py +5 -0
  144. package/skills/gsd-path-build/scripts/workflow_run.py +12 -1
  145. package/skills/gsd-path-build/scripts/worktree_paths.py +94 -0
  146. package/skills/gsd-path-build/templates/skeptic.md +1 -1
  147. package/skills/gsd-path-build/templates/task.md +2 -0
  148. package/skills/gsd-path-build/templates/wave-panel.md +1 -1
  149. package/skills/gsd-path-decide/SKILL.md +2 -0
  150. package/skills/gsd-path-decide/references/dispatch.md +6 -19
  151. package/skills/gsd-path-decide/references/model-policy.md +139 -0
  152. package/skills/gsd-path-decide/references/runtime-selection.md +25 -0
  153. package/skills/gsd-path-decide/scripts/_common.py +5 -0
  154. package/skills/gsd-path-decide/scripts/archive_milestone.py +20 -6
  155. package/skills/gsd-path-decide/scripts/build_recovery.py +5 -0
  156. package/skills/gsd-path-decide/scripts/check_handoffs.py +6 -0
  157. package/skills/gsd-path-decide/scripts/check_task_briefs.py +3 -0
  158. package/skills/gsd-path-decide/scripts/detect_project.py +11 -1
  159. package/skills/gsd-path-decide/scripts/discussion_records.py +3 -0
  160. package/skills/gsd-path-decide/scripts/discussion_validate.py +8 -3
  161. package/skills/gsd-path-decide/scripts/integration.py +28 -8
  162. package/skills/gsd-path-decide/scripts/isolation.py +15 -5
  163. package/skills/gsd-path-decide/scripts/loop_run.py +839 -0
  164. package/skills/gsd-path-decide/scripts/model_policy.py +279 -0
  165. package/skills/gsd-path-decide/scripts/path_config.py +248 -0
  166. package/skills/gsd-path-decide/scripts/pipeline_git.py +3 -0
  167. package/skills/gsd-path-decide/scripts/pipeline_state.py +4 -1
  168. package/skills/gsd-path-decide/scripts/promote_lookahead.py +3 -0
  169. package/skills/gsd-path-decide/scripts/review_panel.py +11 -0
  170. package/skills/gsd-path-decide/scripts/roadmap.py +5 -0
  171. package/skills/gsd-path-decide/scripts/state_checkpoint.py +5 -0
  172. package/skills/gsd-path-decide/scripts/state_promote.py +5 -0
  173. package/skills/gsd-path-decide/scripts/worktree_paths.py +94 -0
  174. package/skills/gsd-path-define/SKILL.md +13 -7
  175. package/skills/gsd-path-define/references/runtime-selection.md +25 -0
  176. package/skills/gsd-path-define/scripts/_common.py +5 -0
  177. package/skills/gsd-path-define/scripts/archive_milestone.py +20 -6
  178. package/skills/gsd-path-define/scripts/build_recovery.py +5 -0
  179. package/skills/gsd-path-define/scripts/check_handoffs.py +6 -0
  180. package/skills/gsd-path-define/scripts/check_task_briefs.py +3 -0
  181. package/skills/gsd-path-define/scripts/detect_project.py +11 -1
  182. package/skills/gsd-path-define/scripts/discussion_records.py +3 -0
  183. package/skills/gsd-path-define/scripts/discussion_validate.py +8 -3
  184. package/skills/gsd-path-define/scripts/integration.py +28 -8
  185. package/skills/gsd-path-define/scripts/isolation.py +15 -5
  186. package/skills/gsd-path-define/scripts/loop_run.py +839 -0
  187. package/skills/gsd-path-define/scripts/model_policy.py +279 -0
  188. package/skills/gsd-path-define/scripts/path_config.py +248 -0
  189. package/skills/gsd-path-define/scripts/pipeline_git.py +3 -0
  190. package/skills/gsd-path-define/scripts/pipeline_state.py +4 -1
  191. package/skills/gsd-path-define/scripts/promote_lookahead.py +3 -0
  192. package/skills/gsd-path-define/scripts/review_panel.py +11 -0
  193. package/skills/gsd-path-define/scripts/roadmap.py +5 -0
  194. package/skills/gsd-path-define/scripts/state_checkpoint.py +5 -0
  195. package/skills/gsd-path-define/scripts/state_promote.py +5 -0
  196. package/skills/gsd-path-define/scripts/worktree_paths.py +94 -0
  197. package/skills/gsd-path-discuss/SKILL.md +2 -0
  198. package/skills/gsd-path-discuss/references/runtime-selection.md +25 -0
  199. package/skills/gsd-path-discuss/scripts/_common.py +5 -0
  200. package/skills/gsd-path-discuss/scripts/discussion_records.py +3 -0
  201. package/skills/gsd-path-discuss/scripts/loop_run.py +839 -0
  202. package/skills/gsd-path-discuss/scripts/model_policy.py +279 -0
  203. package/skills/gsd-path-discuss/scripts/path_config.py +248 -0
  204. package/skills/gsd-path-discuss/scripts/review_panel.py +564 -0
  205. package/skills/gsd-path-discuss/scripts/worktree_paths.py +94 -0
  206. package/skills/gsd-path-docs-audit/SKILL.md +2 -0
  207. package/skills/gsd-path-docs-audit/references/dispatch.md +6 -19
  208. package/skills/gsd-path-docs-audit/references/model-policy.md +139 -0
  209. package/skills/gsd-path-docs-audit/references/runtime-selection.md +25 -0
  210. package/skills/gsd-path-docs-audit/scripts/_common.py +5 -0
  211. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +20 -6
  212. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +5 -0
  213. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +2 -0
  214. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +6 -0
  215. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +3 -0
  216. package/skills/gsd-path-docs-audit/scripts/detect_project.py +11 -1
  217. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +3 -0
  218. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +8 -3
  219. package/skills/gsd-path-docs-audit/scripts/integration.py +28 -8
  220. package/skills/gsd-path-docs-audit/scripts/isolation.py +15 -5
  221. package/skills/gsd-path-docs-audit/scripts/loop_run.py +839 -0
  222. package/skills/gsd-path-docs-audit/scripts/model_policy.py +279 -0
  223. package/skills/gsd-path-docs-audit/scripts/path_config.py +248 -0
  224. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +3 -0
  225. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +4 -1
  226. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +3 -0
  227. package/skills/gsd-path-docs-audit/scripts/review_panel.py +11 -0
  228. package/skills/gsd-path-docs-audit/scripts/roadmap.py +5 -0
  229. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +5 -0
  230. package/skills/gsd-path-docs-audit/scripts/state_promote.py +5 -0
  231. package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +94 -0
  232. package/skills/gsd-path-forensics/SKILL.md +9 -5
  233. package/skills/gsd-path-forensics/references/runtime-selection.md +25 -0
  234. package/skills/gsd-path-forensics/scripts/_common.py +5 -0
  235. package/skills/gsd-path-forensics/scripts/discussion_records.py +3 -0
  236. package/skills/gsd-path-forensics/scripts/loop_run.py +839 -0
  237. package/skills/gsd-path-forensics/scripts/model_policy.py +279 -0
  238. package/skills/gsd-path-forensics/scripts/path_config.py +248 -0
  239. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +3 -0
  240. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +3 -0
  241. package/skills/gsd-path-forensics/scripts/review_panel.py +564 -0
  242. package/skills/gsd-path-forensics/scripts/worktree_paths.py +94 -0
  243. package/skills/gsd-path-inspect/SKILL.md +2 -0
  244. package/skills/gsd-path-inspect/references/dispatch.md +6 -19
  245. package/skills/gsd-path-inspect/references/model-policy.md +139 -0
  246. package/skills/gsd-path-inspect/references/runtime-selection.md +25 -0
  247. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  248. package/skills/gsd-path-inspect/scripts/_common.py +5 -0
  249. package/skills/gsd-path-inspect/scripts/archive_milestone.py +20 -6
  250. package/skills/gsd-path-inspect/scripts/build_recovery.py +5 -0
  251. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +2 -0
  252. package/skills/gsd-path-inspect/scripts/check_handoffs.py +6 -0
  253. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +3 -0
  254. package/skills/gsd-path-inspect/scripts/detect_project.py +11 -1
  255. package/skills/gsd-path-inspect/scripts/discussion_records.py +3 -0
  256. package/skills/gsd-path-inspect/scripts/discussion_validate.py +8 -3
  257. package/skills/gsd-path-inspect/scripts/integration.py +28 -8
  258. package/skills/gsd-path-inspect/scripts/isolation.py +15 -5
  259. package/skills/gsd-path-inspect/scripts/loop_run.py +839 -0
  260. package/skills/gsd-path-inspect/scripts/model_policy.py +279 -0
  261. package/skills/gsd-path-inspect/scripts/path_config.py +248 -0
  262. package/skills/gsd-path-inspect/scripts/pipeline_git.py +3 -0
  263. package/skills/gsd-path-inspect/scripts/pipeline_state.py +4 -1
  264. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +3 -0
  265. package/skills/gsd-path-inspect/scripts/review_panel.py +11 -0
  266. package/skills/gsd-path-inspect/scripts/roadmap.py +5 -0
  267. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +5 -0
  268. package/skills/gsd-path-inspect/scripts/state_promote.py +5 -0
  269. package/skills/gsd-path-inspect/scripts/workflow_run.py +12 -1
  270. package/skills/gsd-path-inspect/scripts/worktree_paths.py +94 -0
  271. package/skills/gsd-path-loop/SKILL.md +2 -0
  272. package/skills/gsd-path-loop/references/runtime-selection.md +25 -0
  273. package/skills/gsd-path-loop/scripts/_common.py +5 -0
  274. package/skills/gsd-path-loop/scripts/discussion_records.py +3 -0
  275. package/skills/gsd-path-loop/scripts/loop_run.py +2 -0
  276. package/skills/gsd-path-loop/scripts/model_policy.py +279 -0
  277. package/skills/gsd-path-loop/scripts/path_config.py +248 -0
  278. package/skills/gsd-path-loop/scripts/review_panel.py +564 -0
  279. package/skills/gsd-path-loop/scripts/worktree_paths.py +94 -0
  280. package/skills/gsd-path-migrate/SKILL.md +2 -0
  281. package/skills/gsd-path-migrate/references/runtime-selection.md +25 -0
  282. package/skills/gsd-path-migrate/scripts/_common.py +185 -0
  283. package/skills/gsd-path-migrate/scripts/discussion_records.py +3 -0
  284. package/skills/gsd-path-migrate/scripts/loop_run.py +839 -0
  285. package/skills/gsd-path-migrate/scripts/model_policy.py +279 -0
  286. package/skills/gsd-path-migrate/scripts/path_config.py +248 -0
  287. package/skills/gsd-path-migrate/scripts/review_panel.py +564 -0
  288. package/skills/gsd-path-plan/SKILL.md +4 -2
  289. package/skills/gsd-path-plan/references/dispatch.md +6 -19
  290. package/skills/gsd-path-plan/references/model-policy.md +139 -0
  291. package/skills/gsd-path-plan/references/runtime-selection.md +25 -0
  292. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  293. package/skills/gsd-path-plan/scripts/_common.py +5 -0
  294. package/skills/gsd-path-plan/scripts/archive_milestone.py +20 -6
  295. package/skills/gsd-path-plan/scripts/build_recovery.py +5 -0
  296. package/skills/gsd-path-plan/scripts/check_handoffs.py +6 -0
  297. package/skills/gsd-path-plan/scripts/check_task_briefs.py +3 -0
  298. package/skills/gsd-path-plan/scripts/detect_project.py +11 -1
  299. package/skills/gsd-path-plan/scripts/discussion_records.py +3 -0
  300. package/skills/gsd-path-plan/scripts/discussion_validate.py +8 -3
  301. package/skills/gsd-path-plan/scripts/integration.py +28 -8
  302. package/skills/gsd-path-plan/scripts/isolation.py +15 -5
  303. package/skills/gsd-path-plan/scripts/loop_run.py +839 -0
  304. package/skills/gsd-path-plan/scripts/model_policy.py +279 -0
  305. package/skills/gsd-path-plan/scripts/path_config.py +248 -0
  306. package/skills/gsd-path-plan/scripts/pipeline_git.py +3 -0
  307. package/skills/gsd-path-plan/scripts/pipeline_state.py +4 -1
  308. package/skills/gsd-path-plan/scripts/promote_lookahead.py +3 -0
  309. package/skills/gsd-path-plan/scripts/review_panel.py +11 -0
  310. package/skills/gsd-path-plan/scripts/roadmap.py +5 -0
  311. package/skills/gsd-path-plan/scripts/state_checkpoint.py +5 -0
  312. package/skills/gsd-path-plan/scripts/state_promote.py +5 -0
  313. package/skills/gsd-path-plan/scripts/workflow_run.py +12 -1
  314. package/skills/gsd-path-plan/scripts/worktree_paths.py +94 -0
  315. package/skills/gsd-path-plan/templates/task.md +2 -0
  316. package/skills/gsd-path-research/SKILL.md +2 -0
  317. package/skills/gsd-path-research/references/dispatch.md +6 -19
  318. package/skills/gsd-path-research/references/model-policy.md +139 -0
  319. package/skills/gsd-path-research/references/runtime-selection.md +25 -0
  320. package/skills/gsd-path-research/scripts/_common.py +5 -0
  321. package/skills/gsd-path-research/scripts/archive_milestone.py +20 -6
  322. package/skills/gsd-path-research/scripts/build_recovery.py +5 -0
  323. package/skills/gsd-path-research/scripts/check_handoffs.py +6 -0
  324. package/skills/gsd-path-research/scripts/check_task_briefs.py +3 -0
  325. package/skills/gsd-path-research/scripts/detect_project.py +11 -1
  326. package/skills/gsd-path-research/scripts/discussion_records.py +3 -0
  327. package/skills/gsd-path-research/scripts/discussion_validate.py +8 -3
  328. package/skills/gsd-path-research/scripts/integration.py +28 -8
  329. package/skills/gsd-path-research/scripts/isolation.py +15 -5
  330. package/skills/gsd-path-research/scripts/loop_run.py +839 -0
  331. package/skills/gsd-path-research/scripts/model_policy.py +279 -0
  332. package/skills/gsd-path-research/scripts/path_config.py +248 -0
  333. package/skills/gsd-path-research/scripts/pipeline_git.py +3 -0
  334. package/skills/gsd-path-research/scripts/pipeline_state.py +4 -1
  335. package/skills/gsd-path-research/scripts/promote_lookahead.py +3 -0
  336. package/skills/gsd-path-research/scripts/review_panel.py +11 -0
  337. package/skills/gsd-path-research/scripts/roadmap.py +5 -0
  338. package/skills/gsd-path-research/scripts/state_checkpoint.py +5 -0
  339. package/skills/gsd-path-research/scripts/state_promote.py +5 -0
  340. package/skills/gsd-path-research/scripts/worktree_paths.py +94 -0
  341. package/skills/gsd-path-roadmap/SKILL.md +2 -0
  342. package/skills/gsd-path-roadmap/references/dispatch.md +6 -19
  343. package/skills/gsd-path-roadmap/references/model-policy.md +139 -0
  344. package/skills/gsd-path-roadmap/references/runtime-selection.md +25 -0
  345. package/skills/gsd-path-roadmap/scripts/_common.py +5 -0
  346. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +20 -6
  347. package/skills/gsd-path-roadmap/scripts/build_recovery.py +5 -0
  348. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +6 -0
  349. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +3 -0
  350. package/skills/gsd-path-roadmap/scripts/detect_project.py +11 -1
  351. package/skills/gsd-path-roadmap/scripts/discussion_records.py +3 -0
  352. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +8 -3
  353. package/skills/gsd-path-roadmap/scripts/integration.py +28 -8
  354. package/skills/gsd-path-roadmap/scripts/isolation.py +15 -5
  355. package/skills/gsd-path-roadmap/scripts/loop_run.py +839 -0
  356. package/skills/gsd-path-roadmap/scripts/model_policy.py +279 -0
  357. package/skills/gsd-path-roadmap/scripts/path_config.py +248 -0
  358. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +3 -0
  359. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +4 -1
  360. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +3 -0
  361. package/skills/gsd-path-roadmap/scripts/review_panel.py +11 -0
  362. package/skills/gsd-path-roadmap/scripts/roadmap.py +5 -0
  363. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +5 -0
  364. package/skills/gsd-path-roadmap/scripts/state_promote.py +5 -0
  365. package/skills/gsd-path-roadmap/scripts/worktree_paths.py +94 -0
  366. package/skills/gsd-path-ship/SKILL.md +24 -13
  367. package/skills/gsd-path-ship/references/dispatch.md +6 -19
  368. package/skills/gsd-path-ship/references/jev-review.md +82 -0
  369. package/skills/gsd-path-ship/references/model-policy.md +139 -0
  370. package/skills/gsd-path-ship/references/reviewer-panel.md +1 -1
  371. package/skills/gsd-path-ship/references/reviewer.md +2 -0
  372. package/skills/gsd-path-ship/references/runtime-selection.md +25 -0
  373. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  374. package/skills/gsd-path-ship/scripts/_common.py +5 -0
  375. package/skills/gsd-path-ship/scripts/archive_milestone.py +20 -6
  376. package/skills/gsd-path-ship/scripts/build_recovery.py +5 -0
  377. package/skills/gsd-path-ship/scripts/build_state.py +2 -0
  378. package/skills/gsd-path-ship/scripts/check_handoffs.py +6 -0
  379. package/skills/gsd-path-ship/scripts/check_task_briefs.py +3 -0
  380. package/skills/gsd-path-ship/scripts/detect_project.py +11 -1
  381. package/skills/gsd-path-ship/scripts/discussion_records.py +3 -0
  382. package/skills/gsd-path-ship/scripts/discussion_validate.py +8 -3
  383. package/skills/gsd-path-ship/scripts/integration.py +28 -8
  384. package/skills/gsd-path-ship/scripts/isolation.py +15 -5
  385. package/skills/gsd-path-ship/scripts/jev_review.py +138 -0
  386. package/skills/gsd-path-ship/scripts/lean_verification.py +2 -0
  387. package/skills/gsd-path-ship/scripts/loop_run.py +839 -0
  388. package/skills/gsd-path-ship/scripts/model_policy.py +279 -0
  389. package/skills/gsd-path-ship/scripts/path_config.py +248 -0
  390. package/skills/gsd-path-ship/scripts/pipeline_git.py +3 -0
  391. package/skills/gsd-path-ship/scripts/pipeline_state.py +4 -1
  392. package/skills/gsd-path-ship/scripts/promote_lookahead.py +3 -0
  393. package/skills/gsd-path-ship/scripts/review_panel.py +11 -0
  394. package/skills/gsd-path-ship/scripts/roadmap.py +5 -0
  395. package/skills/gsd-path-ship/scripts/state_checkpoint.py +5 -0
  396. package/skills/gsd-path-ship/scripts/state_promote.py +5 -0
  397. package/skills/gsd-path-ship/scripts/workflow_run.py +12 -1
  398. package/skills/gsd-path-ship/scripts/worktree_paths.py +94 -0
  399. package/skills/gsd-path-undo/SKILL.md +2 -0
  400. package/skills/gsd-path-undo/references/runtime-selection.md +25 -0
  401. package/skills/gsd-path-undo/scripts/_common.py +5 -0
  402. package/skills/gsd-path-undo/scripts/discussion_records.py +3 -0
  403. package/skills/gsd-path-undo/scripts/loop_run.py +839 -0
  404. package/skills/gsd-path-undo/scripts/model_policy.py +279 -0
  405. package/skills/gsd-path-undo/scripts/path_config.py +248 -0
  406. package/skills/gsd-path-undo/scripts/pipeline_undo.py +3 -0
  407. package/skills/gsd-path-undo/scripts/review_panel.py +564 -0
  408. package/skills/gsd-path-undo/scripts/worktree_paths.py +94 -0
  409. package/skills/path/BUILD.md +7 -0
  410. package/skills/path/DECIDE.md +2 -0
  411. package/skills/path/DEFINE.md +13 -7
  412. package/skills/path/DOCS-AUDIT.md +2 -0
  413. package/skills/path/INSPECT.md +2 -0
  414. package/skills/path/PLAN.md +4 -2
  415. package/skills/path/RESEARCH.md +2 -0
  416. package/skills/path/ROADMAP.md +2 -0
  417. package/skills/path/SHIP.md +24 -13
  418. package/skills/path/SKILL.md +23 -9
  419. package/skills/path/references/build-native.md +15 -7
  420. package/skills/path/references/config.md +57 -0
  421. package/skills/path/references/dispatch.md +6 -19
  422. package/skills/path/references/jev-review.md +82 -0
  423. package/skills/path/references/model-policy.md +139 -0
  424. package/skills/path/references/reviewer-panel.md +1 -1
  425. package/skills/path/references/reviewer.md +2 -0
  426. package/skills/path/references/runtime-selection.md +25 -0
  427. package/skills/path/scripts/_common.py +5 -0
  428. package/skills/path/scripts/archive_milestone.py +20 -6
  429. package/skills/path/scripts/bootstrap_repository.py +8 -1
  430. package/skills/path/scripts/build_recovery.py +5 -0
  431. package/skills/path/scripts/build_state.py +2 -0
  432. package/skills/path/scripts/check_docs_audit.py +2 -0
  433. package/skills/path/scripts/check_handoffs.py +6 -0
  434. package/skills/path/scripts/check_task_briefs.py +3 -0
  435. package/skills/path/scripts/detect_project.py +11 -1
  436. package/skills/path/scripts/discussion_records.py +3 -0
  437. package/skills/path/scripts/discussion_validate.py +8 -3
  438. package/skills/path/scripts/dispatch_driver.py +230 -21
  439. package/skills/path/scripts/git_guard.py +768 -0
  440. package/skills/path/scripts/integration.py +28 -8
  441. package/skills/path/scripts/isolation.py +15 -5
  442. package/skills/path/scripts/jev_review.py +138 -0
  443. package/skills/path/scripts/lean_verification.py +2 -0
  444. package/skills/path/scripts/loop_run.py +2 -0
  445. package/skills/path/scripts/model_policy.py +279 -0
  446. package/skills/path/scripts/path_config.py +248 -0
  447. package/skills/path/scripts/pipeline_git.py +3 -0
  448. package/skills/path/scripts/pipeline_state.py +4 -1
  449. package/skills/path/scripts/promote_lookahead.py +3 -0
  450. package/skills/path/scripts/review_panel.py +11 -0
  451. package/skills/path/scripts/roadmap.py +5 -0
  452. package/skills/path/scripts/state_checkpoint.py +5 -0
  453. package/skills/path/scripts/state_promote.py +5 -0
  454. package/skills/path/scripts/status_runtime.py +208 -0
  455. package/skills/path/scripts/workflow_run.py +12 -1
  456. package/skills/path/scripts/worktree_paths.py +94 -0
  457. package/skills/path/templates/skeptic.md +1 -1
  458. package/skills/path/templates/task.md +2 -0
  459. package/skills/path/templates/wave-panel.md +1 -1
  460. package/skills/gsd-path/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  461. package/skills/gsd-path/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  462. package/skills/gsd-path/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  463. package/skills/gsd-path/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  464. package/skills/gsd-path/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  465. package/skills/gsd-path/scripts/__pycache__/discussion_records.cpython-312.pyc +0 -0
  466. package/skills/gsd-path/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  467. package/skills/gsd-path/scripts/__pycache__/integration.cpython-312.pyc +0 -0
  468. package/skills/gsd-path/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  469. package/skills/gsd-path/scripts/__pycache__/loop_run.cpython-312.pyc +0 -0
  470. package/skills/gsd-path/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  471. package/skills/gsd-path/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  472. package/skills/gsd-path/scripts/__pycache__/review_findings.cpython-312.pyc +0 -0
  473. package/skills/gsd-path/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  474. package/skills/gsd-path/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  475. package/skills/gsd-path/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  476. package/skills/gsd-path/scripts/__pycache__/task_context.cpython-312.pyc +0 -0
  477. package/skills/gsd-path/scripts/__pycache__/workflow_run.cpython-312.pyc +0 -0
  478. package/skills/gsd-path-build/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  479. package/skills/gsd-path-build/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  480. package/skills/gsd-path-build/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  481. package/skills/gsd-path-build/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  482. package/skills/gsd-path-build/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  483. package/skills/gsd-path-build/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  484. package/skills/gsd-path-build/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  485. package/skills/gsd-path-build/scripts/__pycache__/loop_run.cpython-312.pyc +0 -0
  486. package/skills/gsd-path-build/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  487. package/skills/gsd-path-build/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  488. package/skills/gsd-path-build/scripts/__pycache__/review_findings.cpython-312.pyc +0 -0
  489. package/skills/gsd-path-build/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  490. package/skills/gsd-path-build/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  491. package/skills/gsd-path-build/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  492. package/skills/gsd-path-build/scripts/__pycache__/task_context.cpython-312.pyc +0 -0
  493. package/skills/gsd-path-build/scripts/__pycache__/workflow_run.cpython-312.pyc +0 -0
  494. package/skills/gsd-path-decide/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  495. package/skills/gsd-path-decide/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  496. package/skills/gsd-path-decide/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  497. package/skills/gsd-path-decide/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  498. package/skills/gsd-path-decide/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  499. package/skills/gsd-path-decide/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  500. package/skills/gsd-path-decide/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  501. package/skills/gsd-path-decide/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  502. package/skills/gsd-path-decide/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  503. package/skills/gsd-path-decide/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  504. package/skills/gsd-path-define/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  505. package/skills/gsd-path-define/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  506. package/skills/gsd-path-define/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  507. package/skills/gsd-path-define/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  508. package/skills/gsd-path-define/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  509. package/skills/gsd-path-define/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  510. package/skills/gsd-path-define/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  511. package/skills/gsd-path-define/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  512. package/skills/gsd-path-define/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  513. package/skills/gsd-path-define/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  514. package/skills/gsd-path-docs-audit/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  515. package/skills/gsd-path-docs-audit/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  516. package/skills/gsd-path-docs-audit/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  517. package/skills/gsd-path-docs-audit/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  518. package/skills/gsd-path-docs-audit/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  519. package/skills/gsd-path-docs-audit/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  520. package/skills/gsd-path-docs-audit/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  521. package/skills/gsd-path-docs-audit/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  522. package/skills/gsd-path-docs-audit/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  523. package/skills/gsd-path-docs-audit/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  524. package/skills/gsd-path-docs-audit/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  525. package/skills/gsd-path-forensics/scripts/__pycache__/pipeline_undo.cpython-312.pyc +0 -0
  526. package/skills/gsd-path-inspect/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  527. package/skills/gsd-path-inspect/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  528. package/skills/gsd-path-inspect/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  529. package/skills/gsd-path-inspect/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  530. package/skills/gsd-path-inspect/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  531. package/skills/gsd-path-inspect/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  532. package/skills/gsd-path-inspect/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  533. package/skills/gsd-path-inspect/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  534. package/skills/gsd-path-inspect/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  535. package/skills/gsd-path-inspect/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  536. package/skills/gsd-path-plan/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  537. package/skills/gsd-path-plan/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  538. package/skills/gsd-path-plan/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  539. package/skills/gsd-path-plan/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  540. package/skills/gsd-path-plan/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  541. package/skills/gsd-path-plan/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  542. package/skills/gsd-path-plan/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  543. package/skills/gsd-path-plan/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  544. package/skills/gsd-path-plan/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  545. package/skills/gsd-path-research/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  546. package/skills/gsd-path-research/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  547. package/skills/gsd-path-research/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  548. package/skills/gsd-path-research/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  549. package/skills/gsd-path-research/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  550. package/skills/gsd-path-research/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  551. package/skills/gsd-path-research/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  552. package/skills/gsd-path-research/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  553. package/skills/gsd-path-research/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  554. package/skills/gsd-path-research/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  555. package/skills/gsd-path-roadmap/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  556. package/skills/gsd-path-roadmap/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  557. package/skills/gsd-path-roadmap/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  558. package/skills/gsd-path-roadmap/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  559. package/skills/gsd-path-roadmap/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  560. package/skills/gsd-path-roadmap/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  561. package/skills/gsd-path-roadmap/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  562. package/skills/gsd-path-roadmap/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  563. package/skills/gsd-path-roadmap/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  564. package/skills/gsd-path-roadmap/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  565. package/skills/gsd-path-ship/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  566. package/skills/gsd-path-ship/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  567. package/skills/gsd-path-ship/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  568. package/skills/gsd-path-ship/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  569. package/skills/gsd-path-ship/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  570. package/skills/gsd-path-ship/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  571. package/skills/gsd-path-ship/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  572. package/skills/gsd-path-ship/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  573. package/skills/gsd-path-ship/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  574. package/skills/gsd-path-ship/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  575. package/skills/gsd-path-ship/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  576. package/skills/gsd-path-ship/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  577. package/skills/gsd-path-ship/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
@@ -38,6 +38,7 @@
38
38
  "plugin.json",
39
39
  "scripts/install.mjs",
40
40
  "scripts/install.py",
41
+ "scripts/runtime_store.py",
41
42
  "scripts/migrate_core.py",
42
43
  "scripts/core_hook_gate.py",
43
44
  "scripts/core_hook_settings.py",
@@ -45,6 +46,7 @@
45
46
  "scripts/wizard.mjs",
46
47
  "scripts/skill-resources.json",
47
48
  "scripts/_common.py",
49
+ "scripts/worktree_paths.py",
48
50
  "scripts/build_recovery.py",
49
51
  "scripts/state_checkpoint.py",
50
52
  "scripts/roadmap.py",
@@ -59,7 +61,10 @@
59
61
  "scripts/check_handoffs.py",
60
62
  "scripts/check_docs_audit.py",
61
63
  "scripts/check_task_briefs.py",
64
+ "scripts/path_config.py",
65
+ "scripts/model_policy.py",
62
66
  "scripts/review_panel.py",
67
+ "scripts/jev_review.py",
63
68
  "scripts/review_findings.py",
64
69
  "scripts/check_update.py",
65
70
  "scripts/guard_hook.py",
@@ -78,6 +83,7 @@
78
83
  "scripts/pipeline_undo.py",
79
84
  "scripts/pipeline_diagnose.py",
80
85
  "README.md",
86
+ "CHANGELOG.md",
81
87
  "MIGRATE.md",
82
88
  "RUNTIME.md",
83
89
  "DOCS.md",
@@ -93,12 +99,15 @@
93
99
  ],
94
100
  "phase_resources": {
95
101
  "gsd-path-build": [
102
+ "references/runtime-selection.md",
96
103
  "references/build-recovery.md",
97
104
  "references/build-native.md",
98
105
  "references/build-abandon.md",
99
106
  "references/coder.md",
100
107
  "references/dispatch.md",
108
+ "references/model-policy.md",
101
109
  "references/reviewer.md",
110
+ "references/jev-review.md",
102
111
  "references/reviewer-wave.md",
103
112
  "references/reviewer-skeptic.md",
104
113
  "references/reviewer-final.md",
@@ -110,36 +119,49 @@
110
119
  "templates/skeptic.md"
111
120
  ],
112
121
  "gsd-path-discuss": [
122
+ "references/runtime-selection.md",
113
123
  "templates/answers.md",
114
124
  "templates/dialogue.md"
115
125
  ],
116
126
  "gsd-path-docs-audit": [
127
+ "references/runtime-selection.md",
117
128
  "references/dispatch.md",
129
+ "references/model-policy.md",
118
130
  "references/docs-auditor.md",
119
131
  "templates/docs-audit.md"
120
132
  ],
121
133
  "gsd-path-define": [
134
+ "references/runtime-selection.md",
122
135
  "references/build-recovery.md",
123
136
  "templates/charter.md",
124
137
  "templates/intent.md",
125
138
  "templates/state.md"
126
139
  ],
127
140
  "gsd-path-inspect": [
141
+ "references/runtime-selection.md",
128
142
  "references/codebase-mapper.md",
129
143
  "references/dispatch.md",
144
+ "references/model-policy.md",
130
145
  "references/docs-auditor.md",
131
146
  "templates/codebase.md",
132
147
  "templates/docs-audit.md",
133
148
  "templates/state.md"
134
149
  ],
135
- "gsd-path-forensics": [],
136
- "gsd-path-migrate": [],
150
+ "gsd-path-forensics": [
151
+ "references/runtime-selection.md"
152
+ ],
153
+ "gsd-path-migrate": [
154
+ "references/runtime-selection.md"
155
+ ],
137
156
  "gsd-path-loop": [
157
+ "references/runtime-selection.md",
138
158
  "templates/loop.md"
139
159
  ],
140
160
  "gsd-path-plan": [
161
+ "references/runtime-selection.md",
141
162
  "references/build-recovery.md",
142
163
  "references/dispatch.md",
164
+ "references/model-policy.md",
143
165
  "references/planner.md",
144
166
  "templates/patch-findings.md",
145
167
  "templates/plan.md",
@@ -147,19 +169,26 @@
147
169
  "templates/task.md"
148
170
  ],
149
171
  "gsd-path-research": [
172
+ "references/runtime-selection.md",
150
173
  "references/dispatch.md",
174
+ "references/model-policy.md",
151
175
  "references/researcher.md",
152
176
  "templates/evidence.md",
153
177
  "templates/research-handoff.md"
154
178
  ],
155
179
  "gsd-path-roadmap": [
180
+ "references/runtime-selection.md",
156
181
  "references/dispatch.md",
182
+ "references/model-policy.md",
157
183
  "references/roadmapper.md",
158
184
  "templates/roadmap.md"
159
185
  ],
160
186
  "gsd-path-ship": [
187
+ "references/runtime-selection.md",
161
188
  "references/dispatch.md",
189
+ "references/model-policy.md",
162
190
  "references/reviewer.md",
191
+ "references/jev-review.md",
163
192
  "references/reviewer-wave.md",
164
193
  "references/reviewer-skeptic.md",
165
194
  "references/reviewer-final.md",
@@ -172,13 +201,36 @@
172
201
  "templates/wave-review.md"
173
202
  ],
174
203
  "gsd-path-decide": [
204
+ "references/runtime-selection.md",
175
205
  "references/dispatch.md",
206
+ "references/model-policy.md",
176
207
  "references/decider.md",
177
208
  "templates/synthesis.md"
178
209
  ],
179
- "gsd-path-undo": []
210
+ "gsd-path-undo": [
211
+ "references/runtime-selection.md"
212
+ ]
180
213
  },
181
214
  "script_targets": [
215
+ ["scripts/status_runtime.py", "skills/gsd-path/scripts/status_runtime.py"],
216
+ ["scripts/git_guard.py", "skills/gsd-path/scripts/git_guard.py"],
217
+ ["scripts/jev_review.py", "skills/gsd-path/scripts/jev_review.py"],
218
+ ["scripts/jev_review.py", "skills/gsd-path-build/scripts/jev_review.py"],
219
+ ["scripts/jev_review.py", "skills/gsd-path-ship/scripts/jev_review.py"],
220
+ ["scripts/worktree_paths.py", "skills/gsd-path/scripts/worktree_paths.py"],
221
+ ["scripts/worktree_paths.py", "skills/gsd-path-build/scripts/worktree_paths.py"],
222
+ ["scripts/worktree_paths.py", "skills/gsd-path-decide/scripts/worktree_paths.py"],
223
+ ["scripts/worktree_paths.py", "skills/gsd-path-define/scripts/worktree_paths.py"],
224
+ ["scripts/worktree_paths.py", "skills/gsd-path-discuss/scripts/worktree_paths.py"],
225
+ ["scripts/worktree_paths.py", "skills/gsd-path-docs-audit/scripts/worktree_paths.py"],
226
+ ["scripts/worktree_paths.py", "skills/gsd-path-forensics/scripts/worktree_paths.py"],
227
+ ["scripts/worktree_paths.py", "skills/gsd-path-inspect/scripts/worktree_paths.py"],
228
+ ["scripts/worktree_paths.py", "skills/gsd-path-loop/scripts/worktree_paths.py"],
229
+ ["scripts/worktree_paths.py", "skills/gsd-path-plan/scripts/worktree_paths.py"],
230
+ ["scripts/worktree_paths.py", "skills/gsd-path-research/scripts/worktree_paths.py"],
231
+ ["scripts/worktree_paths.py", "skills/gsd-path-roadmap/scripts/worktree_paths.py"],
232
+ ["scripts/worktree_paths.py", "skills/gsd-path-ship/scripts/worktree_paths.py"],
233
+ ["scripts/worktree_paths.py", "skills/gsd-path-undo/scripts/worktree_paths.py"],
182
234
  ["scripts/migrate_core.py", "skills/gsd-path-migrate/scripts/migrate_core.py"],
183
235
  ["scripts/core_hook_gate.py", "skills/gsd-path-migrate/scripts/core_hook_gate.py"],
184
236
  ["scripts/core_hook_settings.py", "skills/gsd-path-migrate/scripts/core_hook_settings.py"],
@@ -399,7 +451,55 @@
399
451
  ["scripts/roadmap.py", "skills/gsd-path-research/scripts/roadmap.py"],
400
452
  ["scripts/roadmap.py", "skills/gsd-path-roadmap/scripts/roadmap.py"],
401
453
  ["scripts/roadmap.py", "skills/gsd-path-ship/scripts/roadmap.py"],
402
- ["scripts/roadmap.py", "skills/gsd-path/scripts/roadmap.py"]
454
+ ["scripts/roadmap.py", "skills/gsd-path/scripts/roadmap.py"],
455
+ ["scripts/model_policy.py", "skills/gsd-path/scripts/model_policy.py"],
456
+ ["scripts/model_policy.py", "skills/gsd-path-build/scripts/model_policy.py"],
457
+ ["scripts/model_policy.py", "skills/gsd-path-decide/scripts/model_policy.py"],
458
+ ["scripts/loop_run.py", "skills/gsd-path-decide/scripts/loop_run.py"],
459
+ ["scripts/model_policy.py", "skills/gsd-path-define/scripts/model_policy.py"],
460
+ ["scripts/loop_run.py", "skills/gsd-path-define/scripts/loop_run.py"],
461
+ ["scripts/model_policy.py", "skills/gsd-path-discuss/scripts/model_policy.py"],
462
+ ["scripts/loop_run.py", "skills/gsd-path-discuss/scripts/loop_run.py"],
463
+ ["scripts/review_panel.py", "skills/gsd-path-discuss/scripts/review_panel.py"],
464
+ ["scripts/model_policy.py", "skills/gsd-path-docs-audit/scripts/model_policy.py"],
465
+ ["scripts/loop_run.py", "skills/gsd-path-docs-audit/scripts/loop_run.py"],
466
+ ["scripts/model_policy.py", "skills/gsd-path-forensics/scripts/model_policy.py"],
467
+ ["scripts/loop_run.py", "skills/gsd-path-forensics/scripts/loop_run.py"],
468
+ ["scripts/review_panel.py", "skills/gsd-path-forensics/scripts/review_panel.py"],
469
+ ["scripts/model_policy.py", "skills/gsd-path-inspect/scripts/model_policy.py"],
470
+ ["scripts/loop_run.py", "skills/gsd-path-inspect/scripts/loop_run.py"],
471
+ ["scripts/model_policy.py", "skills/gsd-path-loop/scripts/model_policy.py"],
472
+ ["scripts/review_panel.py", "skills/gsd-path-loop/scripts/review_panel.py"],
473
+ ["scripts/model_policy.py", "skills/gsd-path-migrate/scripts/model_policy.py"],
474
+ ["scripts/_common.py", "skills/gsd-path-migrate/scripts/_common.py"],
475
+ ["scripts/loop_run.py", "skills/gsd-path-migrate/scripts/loop_run.py"],
476
+ ["scripts/review_panel.py", "skills/gsd-path-migrate/scripts/review_panel.py"],
477
+ ["scripts/model_policy.py", "skills/gsd-path-plan/scripts/model_policy.py"],
478
+ ["scripts/loop_run.py", "skills/gsd-path-plan/scripts/loop_run.py"],
479
+ ["scripts/model_policy.py", "skills/gsd-path-research/scripts/model_policy.py"],
480
+ ["scripts/loop_run.py", "skills/gsd-path-research/scripts/loop_run.py"],
481
+ ["scripts/model_policy.py", "skills/gsd-path-roadmap/scripts/model_policy.py"],
482
+ ["scripts/loop_run.py", "skills/gsd-path-roadmap/scripts/loop_run.py"],
483
+ ["scripts/model_policy.py", "skills/gsd-path-ship/scripts/model_policy.py"],
484
+ ["scripts/loop_run.py", "skills/gsd-path-ship/scripts/loop_run.py"],
485
+ ["scripts/model_policy.py", "skills/gsd-path-undo/scripts/model_policy.py"],
486
+ ["scripts/loop_run.py", "skills/gsd-path-undo/scripts/loop_run.py"],
487
+ ["scripts/review_panel.py", "skills/gsd-path-undo/scripts/review_panel.py"],
488
+ ["scripts/path_config.py", "skills/gsd-path-build/scripts/path_config.py"],
489
+ ["scripts/path_config.py", "skills/gsd-path-decide/scripts/path_config.py"],
490
+ ["scripts/path_config.py", "skills/gsd-path-define/scripts/path_config.py"],
491
+ ["scripts/path_config.py", "skills/gsd-path-discuss/scripts/path_config.py"],
492
+ ["scripts/path_config.py", "skills/gsd-path-docs-audit/scripts/path_config.py"],
493
+ ["scripts/path_config.py", "skills/gsd-path-forensics/scripts/path_config.py"],
494
+ ["scripts/path_config.py", "skills/gsd-path-inspect/scripts/path_config.py"],
495
+ ["scripts/path_config.py", "skills/gsd-path-loop/scripts/path_config.py"],
496
+ ["scripts/path_config.py", "skills/gsd-path-migrate/scripts/path_config.py"],
497
+ ["scripts/path_config.py", "skills/gsd-path-plan/scripts/path_config.py"],
498
+ ["scripts/path_config.py", "skills/gsd-path-research/scripts/path_config.py"],
499
+ ["scripts/path_config.py", "skills/gsd-path-roadmap/scripts/path_config.py"],
500
+ ["scripts/path_config.py", "skills/gsd-path-ship/scripts/path_config.py"],
501
+ ["scripts/path_config.py", "skills/gsd-path-undo/scripts/path_config.py"],
502
+ ["scripts/path_config.py", "skills/gsd-path/scripts/path_config.py"]
403
503
  ],
404
504
  "phase_contract_targets": [
405
505
  ["skills/gsd-path-build/SKILL.md", "skills/gsd-path/BUILD.md"],
@@ -4,6 +4,11 @@
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
+ import sys
8
+
9
+ # Runtime helpers must not modify their immutable installation.
10
+ sys.dont_write_bytecode = True
11
+
7
12
  import hashlib
8
13
  import json
9
14
  import os
@@ -4,6 +4,11 @@
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
+ import sys
8
+
9
+ # Runtime helpers must not modify their immutable installation.
10
+ sys.dont_write_bytecode = True
11
+
7
12
  import json
8
13
  import re
9
14
  import shutil
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env python3
2
2
  """Launch the project status runtime across an atomic refresh handoff."""
3
3
 
4
+ import argparse
5
+ import hashlib
4
6
  import errno
5
7
  import json
6
8
  import os
@@ -72,8 +74,85 @@ def install_lock_active(lock: Path) -> bool:
72
74
  return current_identity == identity
73
75
 
74
76
 
77
+ RUNTIME_SCHEMA = "gsd-path/runtime/v1"
78
+
79
+
80
+ def runtime_home() -> Path:
81
+ return Path.home() / ".gsd-path" / "runtimes"
82
+
83
+
84
+ def declaration(repo: Path) -> dict:
85
+ path = repo / ".gsd-path" / "runtime.json"
86
+ if path.is_symlink() or path.parent.is_symlink():
87
+ raise ValueError(f"unsafe runtime declaration: {path}")
88
+ data = json.loads(path.read_text(encoding="utf-8"))
89
+ if (not isinstance(data, dict) or data.get("schema") != RUNTIME_SCHEMA
90
+ or not isinstance(data.get("version"), str)
91
+ or not isinstance(data.get("digest"), str)
92
+ or len(data["digest"]) != 64
93
+ or any(c not in "0123456789abcdef" for c in data["digest"])):
94
+ raise ValueError(f"invalid runtime declaration: {path}")
95
+ return data
96
+
97
+
98
+ def manifest_digest(manifest: dict) -> str:
99
+ return hashlib.sha256(json.dumps(manifest, sort_keys=True, separators=(",", ":")).encode()).hexdigest()
100
+
101
+
102
+ def validate_runtime(data: dict) -> Path:
103
+ root = runtime_home() / data["digest"]
104
+ hint = (f"Runtime {data['version']} ({data['digest']}) is unavailable or invalid at {root}. "
105
+ "Run gsd-path --runtime-restore --project <project-root> "
106
+ "--source-root <matching-package-root> to restore this exact runtime.")
107
+ try:
108
+ if any(p.is_symlink() for p in (root, root.parent, root.parent.parent)):
109
+ raise ValueError("symlinked runtime storage")
110
+ manifest_path = root / "manifest.json"
111
+ if manifest_path.is_symlink():
112
+ raise ValueError("symlinked manifest")
113
+ manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
114
+ if (not isinstance(manifest, dict) or manifest_digest(manifest) != data["digest"]
115
+ or manifest.get("version") != data["version"]):
116
+ raise ValueError("manifest identity mismatch")
117
+ files = manifest.get("files")
118
+ if not isinstance(files, dict) or "pipeline_state.py" not in files:
119
+ raise ValueError("invalid runtime file inventory")
120
+ for name, expected in files.items():
121
+ if Path(name).name != name or not name.endswith(".py"):
122
+ raise ValueError("invalid runtime file name")
123
+ path = root / name
124
+ if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest() != expected:
125
+ raise ValueError(f"runtime file changed: {name}")
126
+ if set(p.name for p in root.iterdir()) != set(files) | {"manifest.json"}:
127
+ raise ValueError("unexpected runtime files")
128
+ except (OSError, ValueError, TypeError) as error:
129
+ raise ValueError(hint + f" ({error})") from error
130
+ return root
131
+
132
+
133
+ def resolve_runtime(repo: Path) -> Path:
134
+ return validate_runtime(declaration(repo))
135
+
136
+
137
+ def run_guard(repo: Path, name: str) -> None:
138
+ # Keep the guard's project identity while executing verified external bytes.
139
+ root = resolve_runtime(repo)
140
+ sys.dont_write_bytecode = True
141
+ sys.path.insert(0, str(root))
142
+ code = compile((root / name).read_bytes(), str(root / name), "exec")
143
+ exec(code, {"__name__": "__main__", "__file__": str(repo / ".gsd-path" / name)})
144
+
145
+
75
146
  def launch(repo: Path) -> int:
76
147
  parent = repo / ".gsd-path"
148
+ if os.path.lexists(parent / "runtime.json"):
149
+ try:
150
+ runtime = resolve_runtime(repo) / "pipeline_state.py"
151
+ except (OSError, ValueError) as error:
152
+ print(str(error), file=sys.stderr)
153
+ return 2
154
+ return subprocess.call([sys.executable, "-B", str(runtime), "status", "--repo", str(repo)],
155
+ env={**os.environ, "GIT_OPTIONAL_LOCKS": "0"})
77
156
  runtime = parent / "runtime" / "pipeline_state.py"
78
157
  lock = repo / ".gsd-path-install-lock"
79
158
  command = [sys.executable, "-B", str(runtime), "status", "--repo", str(repo)]
@@ -108,14 +187,21 @@ def launch(repo: Path) -> int:
108
187
 
109
188
 
110
189
  def main(argv: Sequence[str] = sys.argv[1:]) -> int:
111
- if len(argv) != 2 or argv[0] != "--repo":
112
- print("usage: status_runtime.py --repo <absolute-root>", file=sys.stderr)
113
- return 2
114
- repo = Path(argv[1])
115
- if not repo.is_absolute():
190
+ parser = argparse.ArgumentParser(description=__doc__)
191
+ parser.add_argument("--repo", required=True, type=Path)
192
+ parser.add_argument("--runtime-path", action="store_true")
193
+ args = parser.parse_args(argv)
194
+ if not args.repo.is_absolute():
116
195
  print("GSD Path status repository must be absolute", file=sys.stderr)
117
196
  return 2
118
- return launch(repo.resolve())
197
+ if args.runtime_path:
198
+ try:
199
+ print(resolve_runtime(args.repo.resolve()))
200
+ return 0
201
+ except (OSError, ValueError) as error:
202
+ print(str(error), file=sys.stderr)
203
+ return 2
204
+ return launch(args.repo.resolve())
119
205
 
120
206
 
121
207
  if __name__ == "__main__":
@@ -4,6 +4,7 @@
4
4
  import argparse
5
5
  import hashlib
6
6
  import json
7
+ import os
7
8
  import subprocess
8
9
  import sys
9
10
  import tempfile
@@ -28,9 +29,10 @@ def run_workflow(repo: Path, action: str, project_dir: str, expected_head: str =
28
29
  steps = []
29
30
  outputs = {}
30
31
  scripts = Path(__file__).resolve().parent
32
+ helpers = scripts
31
33
 
32
34
  def step(script, *arguments, raw=False):
33
- command = [sys.executable, "-B", str(scripts / script), *arguments]
35
+ command = [sys.executable, "-B", str(helpers / script), *arguments]
34
36
  completed = subprocess.run(command, cwd=repo, capture_output=True, text=True)
35
37
  receipt = {"script": script, "command": command, "exit_code": completed.returncode,
36
38
  "stdout": completed.stdout, "stderr": completed.stderr}
@@ -49,6 +51,15 @@ def run_workflow(repo: Path, action: str, project_dir: str, expected_head: str =
49
51
 
50
52
  common = ["--repo", str(repo), "--project-dir", project_dir]
51
53
  try:
54
+ if os.path.lexists(repo / ".gsd-path/runtime.json"):
55
+ resolved = subprocess.run(
56
+ [sys.executable, "-B", str(repo / ".gsd-path/status_runtime.py"),
57
+ "--repo", str(repo), "--runtime-path"],
58
+ cwd=repo, capture_output=True, text=True)
59
+ if resolved.returncode:
60
+ sys.stderr.write(resolved.stderr)
61
+ raise StepFailed(resolved.stderr.strip())
62
+ helpers = Path(resolved.stdout.strip())
52
63
  if action == "route":
53
64
  step("pipeline_state.py", "route", *common)
54
65
  elif action == "prepare-inspect":
@@ -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-build
3
3
  description: Execute or resume an approved GSD Path plan with isolated task worktrees, deterministic commits, and independent wave review. Use only when the user explicitly invokes $gsd-path-build 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 Build Orchestrator
7
9
 
8
10
  Orchestrate coders, task landing, and reviewers from the main conversation.
@@ -98,6 +100,11 @@ rule; never invoke an explicit-only sibling skill yourself.
98
100
  checkpoint `.project/` records uses this helper. Record the exact full HEAD
99
101
  before the first metadata change in that checkpoint, then run:
100
102
 
103
+ Explicit configuration edits in `.project/config.json` and
104
+ `.project/model-policy.json` are expected bookkeeping. Include them in the next
105
+ normal checkpoint before a clean dispatch base; they may remain pending while
106
+ an already dispatched task lands. Existing model selections stay pinned.
107
+
101
108
  ```text
102
109
  python3 <absolute isolation.py> checkpoint \
103
110
  --repo <absolute primary> \
@@ -3,6 +3,8 @@ name: gsd-path-decide
3
3
  description: Decide implementation direction from approved intent and complete research evidence, recording settled choices in SYNTHESIS.md. Use only when the user explicitly invokes $gsd-path-decide 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 Decide Phase
7
9
 
8
10
  Dispatch one reasoning-intensive decider and validate its decision artifact.
@@ -3,6 +3,8 @@ name: gsd-path-define
3
3
  description: Define and approve project or milestone intent through an interview or milestone confirmation, writing .project/CHARTER.md or .project/intent/INTENT.md. Use only when the user explicitly invokes $gsd-path-define 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 Define Phase
7
9
 
8
10
  Turn a project idea or approved roadmap entry into an approved intent artifact.
@@ -110,12 +112,13 @@ the charter instead of the single-milestone checklist:
110
112
  4. **Constraints** — program-level stack, budget, deadline, integrations.
111
113
  5. **Program success criteria** — observable when the last milestone ships.
112
114
  6. **Review panel** — optional durable default (`off` | `detected` | named
113
- families). Default `off`. This value persists on CHARTER.md; later
115
+ families). Use the configured future preference unless the user chooses
116
+ otherwise (see Output contract). This value persists on CHARTER.md; later
114
117
  milestone INTENT files copy it and may override.
115
118
 
116
119
  Read the local [charter template](templates/charter.md), write the approval
117
- draft to `.project/CHARTER.md` including `Review panel:` (default `off`;
118
- never invent `detected` or a named list), and run the same playback-approval
120
+ draft to `.project/CHARTER.md` including the configured or explicitly chosen
121
+ `Review panel:` value, and run the same playback-approval
119
122
  loop as the standard Process. On approval, retain the reviewed
120
123
  `Review panel:` value on CHARTER.md, run `pipeline_state.py transition` with
121
124
  expected `define/active`, milestone/branch/archive all at their exact current
@@ -144,7 +147,7 @@ State ownership. There is no re-interview of charter or roadmap scope:
144
147
  Risks and Open questions from the entry (tagged `RESEARCH`/`NEEDS-USER`),
145
148
  `Lane: milestone`, `Surfaces:` copied verbatim from the entry, and
146
149
  `Review panel:` copied from CHARTER.md (default
147
- `off` when CHARTER omits it). The confirmation may override the copied
150
+ the configured preference when CHARTER omits it). The confirmation may override the copied
148
151
  panel value; do not invent `detected` or a named list. When brownfield,
149
152
  fill `## Current state` from the map, record doc-vs-code rulings as in
150
153
  Brownfield mode, and add protected existing behavior under Scope out.
@@ -271,9 +274,12 @@ question. The rules change for every primary mode:
271
274
  ## Output contract
272
275
 
273
276
  At approval, retain the already reviewed `Lane:` value and its one-line reason.
274
- Retain `Review panel:` as reviewed: the CHARTER copy or the user's override
275
- in milestone/lookahead mode, the CHARTER value in program mode, or `off`
276
- when the user did not choose a panel and no CHARTER default exists.
277
+ Before presenting an approval draft without a CHARTER or explicit panel choice,
278
+ read `settings.review_panel.value` from the selected runtime's `path_config.py
279
+ show --repo <absolute-root>` (bundle for legacy projects; off for older selected
280
+ runtimes without config support). Include that preference in the draft.
281
+ Retain `Review panel:` as reviewed: the CHARTER copy, the explicit user choice,
282
+ or the configured future preference. Quick lane keeps the panel off.
277
283
 
278
284
  After approval, finalize `.project/intent/INTENT.md` and run
279
285
  `pipeline_state.py transition` with expected `define/active`, the exact
@@ -3,6 +3,8 @@ name: gsd-path-docs-audit
3
3
  description: Verify Markdown claims against the actual code, commands, and GSD Path artifacts. Use only when the user explicitly invokes $gsd-path-docs-audit 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 Docs Audit
7
9
 
8
10
  Answer one question with evidence: **does the project do what its documents
@@ -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.
@@ -3,6 +3,8 @@ name: gsd-path-plan
3
3
  description: Create and validate dependency-ordered GSD Path build waves and complete task contracts. Use only when the user explicitly invokes $gsd-path-plan or an active $gsd-path router explicitly routes to this phase.
4
4
  ---
5
5
 
6
+ Before executing project helpers, read [runtime selection](references/runtime-selection.md).
7
+
6
8
  # GSD Path Planning Phase
7
9
 
8
10
  Dispatch one planner, gate its artifacts, and obtain the single approval that
@@ -214,8 +216,8 @@ as stated in Lookahead mode.
214
216
  statuses do not load this template. For each selected family, spawn one independent child
215
217
  with logical task name `review_plan_panel_<family>`, the reviewer role
216
218
  in plan-panel mode, the plan-panel template, and the exact helper-returned
217
- model slug when the host advertises model selection. Never override the
218
- model on the planner. Each child stages its family file under a
219
+ model slug through the dispatch model-policy contract. Planner choices
220
+ use that same contract. Each child stages its family file under a
219
221
  disposable root; the parent validates and copies those files, removes
220
222
  any stale `<track>/review/PLAN-PANEL.skipped.json`, then runs
221
223
  `python3 <absolute review_panel.py> merge --kind plan --inputs <family
@@ -3,6 +3,8 @@ name: gsd-path-research
3
3
  description: Dispatch parallel researchers and collect cited GSD Path evidence about domain, stack, pitfalls, and comparable products. Use only when the user explicitly invokes $gsd-path-research 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 Research Phase
7
9
 
8
10
  Dispatch independent researchers and gate their evidence. Keep synthesis out
@@ -3,6 +3,8 @@ name: gsd-path-roadmap
3
3
  description: Slice an approved GSD Path program charter into a dependency-ordered roadmap of independently shippable milestones. Use only when the user explicitly invokes $gsd-path-roadmap 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 Roadmap Phase
7
9
 
8
10
  Dispatch one roadmapper, gate its roadmap, and obtain the single approval that