@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,278 @@
1
+ #!/usr/bin/env python3
2
+ """Own immutable project runtimes, explicit upgrades, restoration and migration."""
3
+ import hashlib
4
+ import base64
5
+ import json
6
+ import os
7
+ from pathlib import Path
8
+ import shutil
9
+ import tempfile
10
+ from contextlib import contextmanager
11
+
12
+ try:
13
+ from . import status_runtime
14
+ except ImportError:
15
+ import status_runtime
16
+
17
+ RUNTIME_FILES = (
18
+ "pipeline_state.py", "roadmap.py", "check_handoffs.py", "check_task_briefs.py",
19
+ "isolation.py", "discussion_records.py", "pipeline_git.py", "promote_lookahead.py",
20
+ "detect_project.py", "pipeline_diagnose.py", "pipeline_undo.py", "archive_milestone.py",
21
+ "review_panel.py", "_common.py", "worktree_paths.py", "build_recovery.py",
22
+ "state_checkpoint.py", "state_promote.py", "discussion_validate.py", "integration.py",
23
+ "build_state.py", "lean_verification.py", "check_docs_audit.py",
24
+ "path_config.py", "model_policy.py", "loop_run.py",
25
+ )
26
+ GUARDS = ("guard_hook.py", "git_guard.py")
27
+
28
+
29
+ def guard_launcher(name):
30
+ if name not in GUARDS:
31
+ raise ValueError("unknown runtime guard")
32
+ return ("#!/usr/bin/env python3\n# gsd-path guard — stable runtime launcher\n"
33
+ "import sys\nsys.dont_write_bytecode = True\nfrom pathlib import Path\n"
34
+ "from status_runtime import run_guard\n"
35
+ "try:\n"
36
+ f" run_guard(Path(__file__).resolve().parent.parent, {name!r})\n"
37
+ "except (OSError, ValueError) as error:\n"
38
+ " print(str(error), file=sys.stderr)\n"
39
+ f" raise SystemExit({2 if name == 'guard_hook.py' else 1})\n")
40
+
41
+
42
+ def source_manifest(source):
43
+ version = json.loads((source / "package.json").read_text())["version"]
44
+ files = {}
45
+ for name in (*RUNTIME_FILES, *GUARDS, "status_runtime.py"):
46
+ path = source / "scripts" / name
47
+ if path.is_symlink():
48
+ raise ValueError(f"symlinked runtime source: {path}")
49
+ files[name] = hashlib.sha256(path.read_bytes()).hexdigest()
50
+ manifest = {"version": version, "files": files}
51
+ pin = {"schema": status_runtime.RUNTIME_SCHEMA, "version": version,
52
+ "digest": status_runtime.manifest_digest(manifest)}
53
+ return manifest, pin
54
+
55
+
56
+ def pin_text(pin):
57
+ return json.dumps(pin, indent=2, sort_keys=True) + "\n"
58
+
59
+
60
+ @contextmanager
61
+ def publication_lock(parent, digest):
62
+ """The OS releases this external lock even if publication is interrupted."""
63
+ lock = parent / ("." + digest + ".lock")
64
+ if lock.is_symlink():
65
+ raise ValueError(f"unsafe runtime publication lock: {lock}")
66
+ descriptor = os.open(lock, os.O_RDWR | os.O_CREAT | getattr(os, "O_NOFOLLOW", 0), 0o600)
67
+ try:
68
+ if os.name == "nt":
69
+ import msvcrt
70
+ if os.fstat(descriptor).st_size == 0:
71
+ os.write(descriptor, b"\0")
72
+ os.lseek(descriptor, 0, os.SEEK_SET)
73
+ msvcrt.locking(descriptor, msvcrt.LK_NBLCK, 1)
74
+ else:
75
+ import fcntl
76
+ fcntl.flock(descriptor, fcntl.LOCK_EX | fcntl.LOCK_NB)
77
+ yield
78
+ finally:
79
+ os.close(descriptor)
80
+
81
+
82
+ def publish(source, *, expected=None, dry_run=False, repair=False):
83
+ manifest, pin = source_manifest(source)
84
+ if expected is not None and any(pin[key] != expected.get(key) for key in pin):
85
+ raise ValueError(f"source does not match declared runtime {expected['version']} ({expected['digest']}); use its matching package")
86
+ if dry_run:
87
+ return pin
88
+ parent = status_runtime.runtime_home()
89
+ if any(p.is_symlink() for p in (parent, parent.parent)):
90
+ raise ValueError(f"unsafe runtime storage: {parent}")
91
+ parent.mkdir(parents=True, exist_ok=True)
92
+ destination = parent / pin["digest"]
93
+ if destination.is_symlink():
94
+ raise ValueError(f"unsafe runtime storage: {destination}")
95
+ if destination.exists():
96
+ try:
97
+ status_runtime.validate_runtime(pin)
98
+ return pin
99
+ except ValueError:
100
+ if not repair:
101
+ raise
102
+ with tempfile.TemporaryDirectory(prefix=".runtime-stage-", dir=parent) as temporary:
103
+ staging = Path(temporary) / "runtime"
104
+ staging.mkdir()
105
+ for name, digest in manifest["files"].items():
106
+ shutil.copyfile(source / "scripts" / name, staging / name)
107
+ if hashlib.sha256((staging / name).read_bytes()).hexdigest() != digest:
108
+ raise ValueError(f"runtime source changed while installing: {name}")
109
+ (staging / "manifest.json").write_text(pin_text(manifest), encoding="utf-8")
110
+ # Serialize publication/repair, including two explicit restorations.
111
+ previous = Path(temporary) / "previous"
112
+ with publication_lock(parent, pin["digest"]):
113
+ if destination.exists():
114
+ try:
115
+ status_runtime.validate_runtime(pin)
116
+ return pin
117
+ except ValueError:
118
+ if not repair:
119
+ raise
120
+ destination.rename(previous)
121
+ try:
122
+ staging.rename(destination)
123
+ status_runtime.validate_runtime(pin)
124
+ except BaseException:
125
+ if previous.exists() and not destination.exists():
126
+ previous.rename(destination)
127
+ raise
128
+ return pin
129
+
130
+
131
+ def prepare(source, project, *, dry_run=False):
132
+ declaration = project / ".gsd-path/runtime.json"
133
+ if os.path.lexists(declaration):
134
+ pin = status_runtime.declaration(project)
135
+ status_runtime.validate_runtime(pin)
136
+ return pin
137
+ if os.path.lexists(project / ".gsd-path/runtime"):
138
+ raise ValueError("legacy project runtime requires --runtime-migrate --project PATH; migration produces a reviewable Git diff")
139
+ return publish(source, dry_run=dry_run)
140
+
141
+
142
+ def atomic_config(path, content):
143
+ if path.is_symlink() or path.parent.is_symlink():
144
+ raise ValueError(f"unsafe project runtime configuration: {path}")
145
+ path.parent.mkdir(parents=True, exist_ok=True)
146
+ fd, name = tempfile.mkstemp(prefix=f".{path.name}.gsd-path-tmp-", dir=path.parent)
147
+ try:
148
+ with os.fdopen(fd, "wb") as handle:
149
+ handle.write(content.encode("utf-8"))
150
+ os.replace(name, path)
151
+ finally:
152
+ if os.path.exists(name):
153
+ os.unlink(name)
154
+
155
+
156
+ def migration_journal(project):
157
+ identity = hashlib.sha256(os.fsencode(project.resolve())).hexdigest()
158
+ return Path.home() / ".gsd-path" / "runtime-migrations" / (identity + ".json")
159
+
160
+
161
+ def recover_migration(project):
162
+ journal = migration_journal(project)
163
+ if not os.path.lexists(journal):
164
+ return
165
+ if journal.is_symlink():
166
+ raise ValueError(f"unsafe runtime migration journal: {journal}")
167
+ data = json.loads(journal.read_text())
168
+ recorded_project = data.get("project")
169
+ if (data.get("schema") != "gsd-path/runtime-migration/v1"
170
+ or not isinstance(recorded_project, str)
171
+ or Path(recorded_project).resolve() != project.resolve()):
172
+ raise ValueError(f"invalid runtime migration journal: {journal}")
173
+ allowed = {".gsd-path/runtime.json", ".gsd-path/status_runtime.py"}
174
+ allowed.update(".gsd-path/" + n for n in GUARDS)
175
+ allowed.update(".gsd-path/runtime/" + n for n in RUNTIME_FILES)
176
+ entries = data.get("files")
177
+ if not isinstance(entries, dict) or not set(entries) <= allowed:
178
+ raise ValueError(f"invalid runtime migration paths: {journal}")
179
+ # Refuse to overwrite edits made after interruption.
180
+ for relative, change in entries.items():
181
+ path = project / relative
182
+ if path.is_symlink() or path.parent.is_symlink():
183
+ raise ValueError(f"unsafe migration recovery path: {path}")
184
+ current = base64.b64encode(path.read_bytes()).decode() if path.exists() else None
185
+ if current not in (change["before"], change["after"]):
186
+ raise ValueError(f"migration recovery would overwrite a changed file: {path}")
187
+ for relative, change in entries.items():
188
+ path = project / relative
189
+ if change["before"] is None:
190
+ path.unlink(missing_ok=True)
191
+ else:
192
+ atomic_config(path, base64.b64decode(change["before"]).decode("utf-8"))
193
+ journal.unlink()
194
+
195
+
196
+ def operate(source, project, action, *, dry_run=False):
197
+ if project.is_symlink() or (project / ".gsd-path").is_symlink():
198
+ raise ValueError("unsafe project runtime directory")
199
+ if action == "restore":
200
+ pin = status_runtime.declaration(project)
201
+ publish(source, expected=pin, dry_run=dry_run, repair=True)
202
+ return pin
203
+ if action == "upgrade":
204
+ status_runtime.declaration(project)
205
+ pin = publish(source, dry_run=dry_run)
206
+ if not dry_run:
207
+ launcher = project / ".gsd-path/status_runtime.py"
208
+ original = launcher.read_text(encoding="utf-8")
209
+ replacement = (source / "scripts/status_runtime.py").read_text(encoding="utf-8")
210
+ # Both launchers understand the same declaration schema. Publishing
211
+ # the compatible launcher first leaves the old selection usable.
212
+ if replacement != original:
213
+ atomic_config(launcher, replacement)
214
+ try:
215
+ atomic_config(project / ".gsd-path/runtime.json", pin_text(pin))
216
+ except BaseException:
217
+ if replacement != original:
218
+ atomic_config(launcher, original)
219
+ raise
220
+ return pin
221
+ if action != "migrate":
222
+ raise ValueError("unknown runtime operation")
223
+ # Migration changes only reviewed managed files and never stages or commits.
224
+ import subprocess
225
+ if not dry_run:
226
+ recover_migration(project)
227
+ runtime = project / ".gsd-path/runtime"
228
+ if runtime.is_symlink() or not runtime.is_dir():
229
+ raise ValueError("migration requires a real legacy runtime directory")
230
+ entries = list(runtime.iterdir())
231
+ if {p.name for p in entries} - set(RUNTIME_FILES):
232
+ raise ValueError("legacy runtime contains unknown files; preserve and resolve them before migration")
233
+ managed = entries + [project / ".gsd-path/status_runtime.py"]
234
+ managed += [project / ".gsd-path" / n for n in GUARDS if (project / ".gsd-path" / n).exists()]
235
+ for path in managed:
236
+ if path.is_symlink() or not path.is_file():
237
+ raise ValueError(f"unsafe migration file: {path}")
238
+ marker = ("gsd-path project runtime" if path.parent == runtime else
239
+ "gsd-path project status launcher" if path.name == "status_runtime.py" else "gsd-path guard")
240
+ if marker not in path.read_text(encoding="utf-8"):
241
+ raise ValueError(f"unmanaged migration file: {path}")
242
+ relative = path.relative_to(project).as_posix()
243
+ tracked = subprocess.run(["git", "ls-files", "--error-unmatch", "--", relative], cwd=project, capture_output=True)
244
+ if tracked.returncode == 0:
245
+ clean = subprocess.run(["git", "status", "--porcelain", "--", relative], cwd=project, capture_output=True, check=True)
246
+ if clean.stdout:
247
+ raise ValueError(f"locally modified migration file: {path}")
248
+ elif path.read_bytes() != (source / "scripts" / path.name).read_bytes():
249
+ raise ValueError(f"untracked migration file differs from source: {path}")
250
+ pin = publish(source, dry_run=dry_run)
251
+ if dry_run:
252
+ return pin
253
+ originals = {p: p.read_bytes() for p in managed}
254
+ declaration = project / ".gsd-path/runtime.json"
255
+ if os.path.lexists(declaration):
256
+ raise ValueError("runtime declaration already exists; refusing legacy migration")
257
+ updates = {project / ".gsd-path/status_runtime.py": (source / "scripts/status_runtime.py").read_bytes(),
258
+ declaration: pin_text(pin).encode()}
259
+ updates.update({p: None for p in entries})
260
+ updates.update({p: guard_launcher(p.name).encode() for p in managed if p.name in GUARDS})
261
+ changes = {p.relative_to(project).as_posix(): {
262
+ "before": base64.b64encode(originals[p]).decode() if p in originals else None,
263
+ "after": base64.b64encode(content).decode() if content is not None else None,
264
+ } for p, content in updates.items()}
265
+ journal = migration_journal(project)
266
+ atomic_config(journal, pin_text({"schema": "gsd-path/runtime-migration/v1", "project": str(project.resolve()), "files": changes}))
267
+ try:
268
+ for path, content in updates.items():
269
+ if content is None:
270
+ path.unlink()
271
+ else:
272
+ atomic_config(path, content.decode("utf-8"))
273
+ runtime.rmdir()
274
+ except BaseException:
275
+ recover_migration(project)
276
+ raise
277
+ journal.unlink()
278
+ return pin
@@ -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,7 +46,10 @@
45
46
  "scripts/wizard.mjs",
46
47
  "scripts/skill-resources.json",
47
48
  "scripts/_common.py",
49
+ "scripts/worktree_paths.py",
50
+ "scripts/build_recovery.py",
48
51
  "scripts/state_checkpoint.py",
52
+ "scripts/roadmap.py",
49
53
  "scripts/state_promote.py",
50
54
  "scripts/discussion_validate.py",
51
55
  "scripts/integration.py",
@@ -57,7 +61,10 @@
57
61
  "scripts/check_handoffs.py",
58
62
  "scripts/check_docs_audit.py",
59
63
  "scripts/check_task_briefs.py",
64
+ "scripts/path_config.py",
65
+ "scripts/model_policy.py",
60
66
  "scripts/review_panel.py",
67
+ "scripts/jev_review.py",
61
68
  "scripts/review_findings.py",
62
69
  "scripts/check_update.py",
63
70
  "scripts/guard_hook.py",
@@ -70,11 +77,13 @@
70
77
  "scripts/loop_run.py",
71
78
  "scripts/workflow_run.py",
72
79
  "scripts/dispatch_driver.py",
80
+ "scripts/task_context.py",
73
81
  "scripts/lean_verification.py",
74
82
  "scripts/token_budget.py",
75
83
  "scripts/pipeline_undo.py",
76
84
  "scripts/pipeline_diagnose.py",
77
85
  "README.md",
86
+ "CHANGELOG.md",
78
87
  "MIGRATE.md",
79
88
  "RUNTIME.md",
80
89
  "DOCS.md",
@@ -90,43 +99,69 @@
90
99
  ],
91
100
  "phase_resources": {
92
101
  "gsd-path-build": [
102
+ "references/runtime-selection.md",
103
+ "references/build-recovery.md",
104
+ "references/build-native.md",
105
+ "references/build-abandon.md",
93
106
  "references/coder.md",
94
107
  "references/dispatch.md",
108
+ "references/model-policy.md",
95
109
  "references/reviewer.md",
110
+ "references/jev-review.md",
111
+ "references/reviewer-wave.md",
112
+ "references/reviewer-skeptic.md",
113
+ "references/reviewer-final.md",
114
+ "references/reviewer-panel.md",
115
+
96
116
  "templates/task.md",
97
117
  "templates/wave-review.md",
98
118
  "templates/wave-panel.md",
99
119
  "templates/skeptic.md"
100
120
  ],
101
121
  "gsd-path-discuss": [
122
+ "references/runtime-selection.md",
102
123
  "templates/answers.md",
103
124
  "templates/dialogue.md"
104
125
  ],
105
126
  "gsd-path-docs-audit": [
127
+ "references/runtime-selection.md",
106
128
  "references/dispatch.md",
129
+ "references/model-policy.md",
107
130
  "references/docs-auditor.md",
108
131
  "templates/docs-audit.md"
109
132
  ],
110
133
  "gsd-path-define": [
134
+ "references/runtime-selection.md",
135
+ "references/build-recovery.md",
111
136
  "templates/charter.md",
112
137
  "templates/intent.md",
113
138
  "templates/state.md"
114
139
  ],
115
140
  "gsd-path-inspect": [
141
+ "references/runtime-selection.md",
116
142
  "references/codebase-mapper.md",
117
143
  "references/dispatch.md",
144
+ "references/model-policy.md",
118
145
  "references/docs-auditor.md",
119
146
  "templates/codebase.md",
120
147
  "templates/docs-audit.md",
121
148
  "templates/state.md"
122
149
  ],
123
- "gsd-path-forensics": [],
124
- "gsd-path-migrate": [],
150
+ "gsd-path-forensics": [
151
+ "references/runtime-selection.md"
152
+ ],
153
+ "gsd-path-migrate": [
154
+ "references/runtime-selection.md"
155
+ ],
125
156
  "gsd-path-loop": [
157
+ "references/runtime-selection.md",
126
158
  "templates/loop.md"
127
159
  ],
128
160
  "gsd-path-plan": [
161
+ "references/runtime-selection.md",
162
+ "references/build-recovery.md",
129
163
  "references/dispatch.md",
164
+ "references/model-policy.md",
130
165
  "references/planner.md",
131
166
  "templates/patch-findings.md",
132
167
  "templates/plan.md",
@@ -134,19 +169,31 @@
134
169
  "templates/task.md"
135
170
  ],
136
171
  "gsd-path-research": [
172
+ "references/runtime-selection.md",
137
173
  "references/dispatch.md",
174
+ "references/model-policy.md",
138
175
  "references/researcher.md",
139
176
  "templates/evidence.md",
140
177
  "templates/research-handoff.md"
141
178
  ],
142
179
  "gsd-path-roadmap": [
180
+ "references/runtime-selection.md",
143
181
  "references/dispatch.md",
182
+ "references/model-policy.md",
144
183
  "references/roadmapper.md",
145
184
  "templates/roadmap.md"
146
185
  ],
147
186
  "gsd-path-ship": [
187
+ "references/runtime-selection.md",
148
188
  "references/dispatch.md",
189
+ "references/model-policy.md",
149
190
  "references/reviewer.md",
191
+ "references/jev-review.md",
192
+ "references/reviewer-wave.md",
193
+ "references/reviewer-skeptic.md",
194
+ "references/reviewer-final.md",
195
+ "references/reviewer-panel.md",
196
+
150
197
  "templates/archive-manifest.md",
151
198
  "templates/final-review.md",
152
199
  "templates/gap-review.md",
@@ -154,13 +201,36 @@
154
201
  "templates/wave-review.md"
155
202
  ],
156
203
  "gsd-path-decide": [
204
+ "references/runtime-selection.md",
157
205
  "references/dispatch.md",
206
+ "references/model-policy.md",
158
207
  "references/decider.md",
159
208
  "templates/synthesis.md"
160
209
  ],
161
- "gsd-path-undo": []
210
+ "gsd-path-undo": [
211
+ "references/runtime-selection.md"
212
+ ]
162
213
  },
163
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"],
164
234
  ["scripts/migrate_core.py", "skills/gsd-path-migrate/scripts/migrate_core.py"],
165
235
  ["scripts/core_hook_gate.py", "skills/gsd-path-migrate/scripts/core_hook_gate.py"],
166
236
  ["scripts/core_hook_settings.py", "skills/gsd-path-migrate/scripts/core_hook_settings.py"],
@@ -192,6 +262,43 @@
192
262
  ["scripts/detect_project.py", "skills/gsd-path/scripts/detect_project.py"],
193
263
  ["scripts/detect_project.py", "skills/gsd-path-define/scripts/detect_project.py"],
194
264
  ["scripts/detect_project.py", "skills/gsd-path-inspect/scripts/detect_project.py"],
265
+ ["scripts/promote_lookahead.py", "skills/gsd-path-build/scripts/promote_lookahead.py"],
266
+ ["scripts/detect_project.py", "skills/gsd-path-build/scripts/detect_project.py"],
267
+ ["scripts/promote_lookahead.py", "skills/gsd-path-ship/scripts/promote_lookahead.py"],
268
+ ["scripts/detect_project.py", "skills/gsd-path-ship/scripts/detect_project.py"],
269
+ ["scripts/promote_lookahead.py", "skills/gsd-path-plan/scripts/promote_lookahead.py"],
270
+ ["scripts/archive_milestone.py", "skills/gsd-path-plan/scripts/archive_milestone.py"],
271
+ ["scripts/detect_project.py", "skills/gsd-path-plan/scripts/detect_project.py"],
272
+ ["scripts/integration.py", "skills/gsd-path-plan/scripts/integration.py"],
273
+ ["scripts/discussion_validate.py", "skills/gsd-path-plan/scripts/discussion_validate.py"],
274
+ ["scripts/promote_lookahead.py", "skills/gsd-path-research/scripts/promote_lookahead.py"],
275
+ ["scripts/archive_milestone.py", "skills/gsd-path-research/scripts/archive_milestone.py"],
276
+ ["scripts/detect_project.py", "skills/gsd-path-research/scripts/detect_project.py"],
277
+ ["scripts/integration.py", "skills/gsd-path-research/scripts/integration.py"],
278
+ ["scripts/discussion_validate.py", "skills/gsd-path-research/scripts/discussion_validate.py"],
279
+ ["scripts/review_panel.py", "skills/gsd-path-research/scripts/review_panel.py"],
280
+ ["scripts/promote_lookahead.py", "skills/gsd-path-decide/scripts/promote_lookahead.py"],
281
+ ["scripts/archive_milestone.py", "skills/gsd-path-decide/scripts/archive_milestone.py"],
282
+ ["scripts/detect_project.py", "skills/gsd-path-decide/scripts/detect_project.py"],
283
+ ["scripts/integration.py", "skills/gsd-path-decide/scripts/integration.py"],
284
+ ["scripts/discussion_validate.py", "skills/gsd-path-decide/scripts/discussion_validate.py"],
285
+ ["scripts/review_panel.py", "skills/gsd-path-decide/scripts/review_panel.py"],
286
+ ["scripts/promote_lookahead.py", "skills/gsd-path-define/scripts/promote_lookahead.py"],
287
+ ["scripts/archive_milestone.py", "skills/gsd-path-define/scripts/archive_milestone.py"],
288
+ ["scripts/integration.py", "skills/gsd-path-define/scripts/integration.py"],
289
+ ["scripts/discussion_validate.py", "skills/gsd-path-define/scripts/discussion_validate.py"],
290
+ ["scripts/review_panel.py", "skills/gsd-path-define/scripts/review_panel.py"],
291
+ ["scripts/promote_lookahead.py", "skills/gsd-path-inspect/scripts/promote_lookahead.py"],
292
+ ["scripts/archive_milestone.py", "skills/gsd-path-inspect/scripts/archive_milestone.py"],
293
+ ["scripts/integration.py", "skills/gsd-path-inspect/scripts/integration.py"],
294
+ ["scripts/discussion_validate.py", "skills/gsd-path-inspect/scripts/discussion_validate.py"],
295
+ ["scripts/review_panel.py", "skills/gsd-path-inspect/scripts/review_panel.py"],
296
+ ["scripts/promote_lookahead.py", "skills/gsd-path-docs-audit/scripts/promote_lookahead.py"],
297
+ ["scripts/archive_milestone.py", "skills/gsd-path-docs-audit/scripts/archive_milestone.py"],
298
+ ["scripts/detect_project.py", "skills/gsd-path-docs-audit/scripts/detect_project.py"],
299
+ ["scripts/integration.py", "skills/gsd-path-docs-audit/scripts/integration.py"],
300
+ ["scripts/discussion_validate.py", "skills/gsd-path-docs-audit/scripts/discussion_validate.py"],
301
+ ["scripts/review_panel.py", "skills/gsd-path-docs-audit/scripts/review_panel.py"],
195
302
  ["scripts/promote_lookahead.py", "skills/gsd-path/scripts/promote_lookahead.py"],
196
303
  ["scripts/promote_lookahead.py", "skills/gsd-path-roadmap/scripts/promote_lookahead.py"],
197
304
  ["scripts/archive_milestone.py", "skills/gsd-path-roadmap/scripts/archive_milestone.py"],
@@ -258,9 +365,12 @@
258
365
  ["scripts/loop_run.py", "skills/gsd-path-build/scripts/loop_run.py"],
259
366
  ["scripts/workflow_run.py", "skills/gsd-path/scripts/workflow_run.py"],
260
367
  ["scripts/workflow_run.py", "skills/gsd-path-plan/scripts/workflow_run.py"],
368
+ ["scripts/workflow_run.py", "skills/gsd-path-inspect/scripts/workflow_run.py"],
261
369
  ["scripts/workflow_run.py", "skills/gsd-path-build/scripts/workflow_run.py"],
262
370
  ["scripts/dispatch_driver.py", "skills/gsd-path/scripts/dispatch_driver.py"],
371
+ ["scripts/task_context.py", "skills/gsd-path/scripts/task_context.py"],
263
372
  ["scripts/dispatch_driver.py", "skills/gsd-path-build/scripts/dispatch_driver.py"],
373
+ ["scripts/task_context.py", "skills/gsd-path-build/scripts/task_context.py"],
264
374
  ["scripts/workflow_run.py", "skills/gsd-path-ship/scripts/workflow_run.py"],
265
375
  ["scripts/lean_verification.py", "skills/gsd-path/scripts/lean_verification.py"],
266
376
  ["scripts/lean_verification.py", "skills/gsd-path-ship/scripts/lean_verification.py"],
@@ -290,38 +400,106 @@
290
400
  ["scripts/pipeline_git.py", "skills/gsd-path-decide/scripts/pipeline_git.py"],
291
401
  ["scripts/pipeline_git.py", "skills/gsd-path-define/scripts/pipeline_git.py"],
292
402
  ["scripts/pipeline_state.py", "skills/gsd-path/scripts/pipeline_state.py"],
403
+ ["scripts/build_recovery.py", "skills/gsd-path/scripts/build_recovery.py"],
293
404
  ["scripts/state_checkpoint.py", "skills/gsd-path/scripts/state_checkpoint.py"],
294
405
  ["scripts/state_promote.py", "skills/gsd-path/scripts/state_promote.py"],
295
406
  ["scripts/pipeline_state.py", "skills/gsd-path-build/scripts/pipeline_state.py"],
407
+ ["scripts/build_recovery.py", "skills/gsd-path-build/scripts/build_recovery.py"],
296
408
  ["scripts/state_checkpoint.py", "skills/gsd-path-build/scripts/state_checkpoint.py"],
297
409
  ["scripts/state_promote.py", "skills/gsd-path-build/scripts/state_promote.py"],
298
410
  ["scripts/pipeline_state.py", "skills/gsd-path-ship/scripts/pipeline_state.py"],
411
+ ["scripts/build_recovery.py", "skills/gsd-path-ship/scripts/build_recovery.py"],
299
412
  ["scripts/state_checkpoint.py", "skills/gsd-path-ship/scripts/state_checkpoint.py"],
300
413
  ["scripts/state_promote.py", "skills/gsd-path-ship/scripts/state_promote.py"],
301
414
  ["scripts/pipeline_state.py", "skills/gsd-path-plan/scripts/pipeline_state.py"],
415
+ ["scripts/build_recovery.py", "skills/gsd-path-plan/scripts/build_recovery.py"],
302
416
  ["scripts/state_checkpoint.py", "skills/gsd-path-plan/scripts/state_checkpoint.py"],
303
417
  ["scripts/state_promote.py", "skills/gsd-path-plan/scripts/state_promote.py"],
304
418
  ["scripts/pipeline_state.py", "skills/gsd-path-roadmap/scripts/pipeline_state.py"],
419
+ ["scripts/build_recovery.py", "skills/gsd-path-roadmap/scripts/build_recovery.py"],
305
420
  ["scripts/state_checkpoint.py", "skills/gsd-path-roadmap/scripts/state_checkpoint.py"],
306
421
  ["scripts/state_promote.py", "skills/gsd-path-roadmap/scripts/state_promote.py"],
307
422
  ["scripts/pipeline_state.py", "skills/gsd-path-research/scripts/pipeline_state.py"],
423
+ ["scripts/build_recovery.py", "skills/gsd-path-research/scripts/build_recovery.py"],
308
424
  ["scripts/state_checkpoint.py", "skills/gsd-path-research/scripts/state_checkpoint.py"],
309
425
  ["scripts/state_promote.py", "skills/gsd-path-research/scripts/state_promote.py"],
310
426
  ["scripts/pipeline_state.py", "skills/gsd-path-decide/scripts/pipeline_state.py"],
427
+ ["scripts/build_recovery.py", "skills/gsd-path-decide/scripts/build_recovery.py"],
311
428
  ["scripts/state_checkpoint.py", "skills/gsd-path-decide/scripts/state_checkpoint.py"],
312
429
  ["scripts/state_promote.py", "skills/gsd-path-decide/scripts/state_promote.py"],
313
430
  ["scripts/pipeline_state.py", "skills/gsd-path-define/scripts/pipeline_state.py"],
431
+ ["scripts/build_recovery.py", "skills/gsd-path-define/scripts/build_recovery.py"],
314
432
  ["scripts/state_checkpoint.py", "skills/gsd-path-define/scripts/state_checkpoint.py"],
315
433
  ["scripts/state_promote.py", "skills/gsd-path-define/scripts/state_promote.py"],
316
434
  ["scripts/pipeline_state.py", "skills/gsd-path-inspect/scripts/pipeline_state.py"],
435
+ ["scripts/build_recovery.py", "skills/gsd-path-inspect/scripts/build_recovery.py"],
317
436
  ["scripts/state_checkpoint.py", "skills/gsd-path-inspect/scripts/state_checkpoint.py"],
318
437
  ["scripts/state_promote.py", "skills/gsd-path-inspect/scripts/state_promote.py"],
319
438
  ["scripts/pipeline_state.py", "skills/gsd-path-docs-audit/scripts/pipeline_state.py"],
439
+ ["scripts/build_recovery.py", "skills/gsd-path-docs-audit/scripts/build_recovery.py"],
320
440
  ["scripts/state_checkpoint.py", "skills/gsd-path-docs-audit/scripts/state_checkpoint.py"],
321
441
  ["scripts/state_promote.py", "skills/gsd-path-docs-audit/scripts/state_promote.py"],
322
442
  ["scripts/build_state.py", "skills/gsd-path/scripts/build_state.py"],
323
443
  ["scripts/build_state.py", "skills/gsd-path-build/scripts/build_state.py"],
324
- ["scripts/build_state.py", "skills/gsd-path-ship/scripts/build_state.py"]
444
+ ["scripts/build_state.py", "skills/gsd-path-ship/scripts/build_state.py"],
445
+ ["scripts/roadmap.py", "skills/gsd-path-build/scripts/roadmap.py"],
446
+ ["scripts/roadmap.py", "skills/gsd-path-decide/scripts/roadmap.py"],
447
+ ["scripts/roadmap.py", "skills/gsd-path-define/scripts/roadmap.py"],
448
+ ["scripts/roadmap.py", "skills/gsd-path-docs-audit/scripts/roadmap.py"],
449
+ ["scripts/roadmap.py", "skills/gsd-path-inspect/scripts/roadmap.py"],
450
+ ["scripts/roadmap.py", "skills/gsd-path-plan/scripts/roadmap.py"],
451
+ ["scripts/roadmap.py", "skills/gsd-path-research/scripts/roadmap.py"],
452
+ ["scripts/roadmap.py", "skills/gsd-path-roadmap/scripts/roadmap.py"],
453
+ ["scripts/roadmap.py", "skills/gsd-path-ship/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"]
325
503
  ],
326
504
  "phase_contract_targets": [
327
505
  ["skills/gsd-path-build/SKILL.md", "skills/gsd-path/BUILD.md"],