@opengsd/gsd-path 1.0.0 → 1.1.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 (395) hide show
  1. package/AGENTS.md +28 -11
  2. package/DOCS.md +6 -5
  3. package/FULL.md +9 -13
  4. package/QUICK.md +3 -3
  5. package/README.md +151 -14
  6. package/RUNTIME.md +7 -1
  7. package/WORKFLOW.md +30 -14
  8. package/package.json +15 -1
  9. package/platforms/shared-agents/dispatch.md +6 -0
  10. package/scripts/archive_milestone.py +10 -118
  11. package/scripts/bootstrap_repository.py +25 -3
  12. package/scripts/build_recovery.py +287 -0
  13. package/scripts/check_docs_audit.py +5 -3
  14. package/scripts/check_handoffs.py +1 -1
  15. package/scripts/detect_project.py +11 -2
  16. package/scripts/dispatch_driver.py +4 -2
  17. package/scripts/git_guard.py +2 -1
  18. package/scripts/install.mjs +2 -0
  19. package/scripts/install.py +2 -0
  20. package/scripts/integration.py +28 -22
  21. package/scripts/isolation.py +9 -1
  22. package/scripts/lean_verification.py +1 -1
  23. package/scripts/pipeline_diagnose.py +12 -3
  24. package/scripts/pipeline_state.py +114 -186
  25. package/scripts/pipeline_undo.py +11 -7
  26. package/scripts/promote_lookahead.py +30 -162
  27. package/scripts/roadmap.py +321 -0
  28. package/scripts/skill-resources.json +79 -1
  29. package/scripts/state_checkpoint.py +109 -72
  30. package/scripts/state_promote.py +42 -44
  31. package/scripts/task_context.py +73 -0
  32. package/scripts/token_budget.py +40 -1
  33. package/scripts/workflow_run.py +116 -7
  34. package/skills/gsd-path/BUILD.md +47 -575
  35. package/skills/gsd-path/DECIDE.md +2 -6
  36. package/skills/gsd-path/DEFINE.md +10 -14
  37. package/skills/gsd-path/INSPECT.md +30 -8
  38. package/skills/gsd-path/PLAN.md +25 -17
  39. package/skills/gsd-path/RESEARCH.md +3 -6
  40. package/skills/gsd-path/ROADMAP.md +22 -58
  41. package/skills/gsd-path/SHIP.md +5 -4
  42. package/skills/gsd-path/SKILL.md +24 -14
  43. package/skills/gsd-path/references/build-abandon.md +33 -0
  44. package/skills/gsd-path/references/build-native.md +494 -0
  45. package/skills/gsd-path/references/build-recovery.md +78 -0
  46. package/skills/gsd-path/references/coder.md +8 -3
  47. package/skills/gsd-path/references/dispatch.md +6 -0
  48. package/skills/gsd-path/references/docs-auditor.md +14 -0
  49. package/skills/gsd-path/references/reviewer-final.md +21 -0
  50. package/skills/gsd-path/references/reviewer-panel.md +17 -0
  51. package/skills/gsd-path/references/reviewer-skeptic.md +20 -0
  52. package/skills/gsd-path/references/reviewer-wave.md +89 -0
  53. package/skills/gsd-path/references/reviewer.md +12 -150
  54. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  55. package/skills/gsd-path/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  56. package/skills/gsd-path/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  57. package/skills/gsd-path/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  58. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  59. package/skills/gsd-path/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  60. package/skills/gsd-path/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  61. package/skills/gsd-path/scripts/__pycache__/discussion_records.cpython-312.pyc +0 -0
  62. package/skills/gsd-path/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  63. package/skills/gsd-path/scripts/__pycache__/integration.cpython-312.pyc +0 -0
  64. package/skills/gsd-path/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  65. package/skills/gsd-path/scripts/__pycache__/loop_run.cpython-312.pyc +0 -0
  66. package/skills/gsd-path/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  67. package/skills/gsd-path/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  68. package/skills/gsd-path/scripts/__pycache__/review_findings.cpython-312.pyc +0 -0
  69. package/skills/gsd-path/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  70. package/skills/gsd-path/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  71. package/skills/gsd-path/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  72. package/skills/gsd-path/scripts/__pycache__/task_context.cpython-312.pyc +0 -0
  73. package/skills/gsd-path/scripts/__pycache__/workflow_run.cpython-312.pyc +0 -0
  74. package/skills/gsd-path/scripts/archive_milestone.py +10 -118
  75. package/skills/gsd-path/scripts/bootstrap_repository.py +25 -3
  76. package/skills/gsd-path/scripts/build_recovery.py +287 -0
  77. package/skills/gsd-path/scripts/check_docs_audit.py +5 -3
  78. package/skills/gsd-path/scripts/check_handoffs.py +1 -1
  79. package/skills/gsd-path/scripts/detect_project.py +11 -2
  80. package/skills/gsd-path/scripts/dispatch_driver.py +4 -2
  81. package/skills/gsd-path/scripts/integration.py +28 -22
  82. package/skills/gsd-path/scripts/isolation.py +9 -1
  83. package/skills/gsd-path/scripts/lean_verification.py +1 -1
  84. package/skills/gsd-path/scripts/pipeline_state.py +114 -186
  85. package/skills/gsd-path/scripts/promote_lookahead.py +30 -162
  86. package/skills/gsd-path/scripts/roadmap.py +321 -0
  87. package/skills/gsd-path/scripts/state_checkpoint.py +109 -72
  88. package/skills/gsd-path/scripts/state_promote.py +42 -44
  89. package/skills/gsd-path/scripts/task_context.py +73 -0
  90. package/skills/gsd-path/scripts/token_budget.py +40 -1
  91. package/skills/gsd-path/scripts/workflow_run.py +116 -7
  92. package/skills/gsd-path/templates/wave-review.md +1 -1
  93. package/skills/gsd-path-build/SKILL.md +47 -575
  94. package/skills/gsd-path-build/references/build-abandon.md +33 -0
  95. package/skills/gsd-path-build/references/build-native.md +494 -0
  96. package/skills/gsd-path-build/references/build-recovery.md +78 -0
  97. package/skills/gsd-path-build/references/coder.md +8 -3
  98. package/skills/gsd-path-build/references/dispatch.md +6 -0
  99. package/skills/gsd-path-build/references/reviewer-final.md +21 -0
  100. package/skills/gsd-path-build/references/reviewer-panel.md +17 -0
  101. package/skills/gsd-path-build/references/reviewer-skeptic.md +20 -0
  102. package/skills/gsd-path-build/references/reviewer-wave.md +89 -0
  103. package/skills/gsd-path-build/references/reviewer.md +12 -150
  104. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  105. package/skills/gsd-path-build/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  106. package/skills/gsd-path-build/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  107. package/skills/gsd-path-build/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  108. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  109. package/skills/gsd-path-build/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  110. package/skills/gsd-path-build/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  111. package/skills/gsd-path-build/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  112. package/skills/gsd-path-build/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  113. package/skills/gsd-path-build/scripts/__pycache__/loop_run.cpython-312.pyc +0 -0
  114. package/skills/gsd-path-build/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  115. package/skills/gsd-path-build/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  116. package/skills/gsd-path-build/scripts/__pycache__/review_findings.cpython-312.pyc +0 -0
  117. package/skills/gsd-path-build/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  118. package/skills/gsd-path-build/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  119. package/skills/gsd-path-build/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  120. package/skills/gsd-path-build/scripts/__pycache__/task_context.cpython-312.pyc +0 -0
  121. package/skills/gsd-path-build/scripts/__pycache__/workflow_run.cpython-312.pyc +0 -0
  122. package/skills/gsd-path-build/scripts/archive_milestone.py +10 -118
  123. package/skills/gsd-path-build/scripts/build_recovery.py +287 -0
  124. package/skills/gsd-path-build/scripts/check_handoffs.py +1 -1
  125. package/skills/gsd-path-build/scripts/detect_project.py +1526 -0
  126. package/skills/gsd-path-build/scripts/dispatch_driver.py +4 -2
  127. package/skills/gsd-path-build/scripts/integration.py +28 -22
  128. package/skills/gsd-path-build/scripts/isolation.py +9 -1
  129. package/skills/gsd-path-build/scripts/pipeline_state.py +114 -186
  130. package/skills/gsd-path-build/scripts/promote_lookahead.py +283 -0
  131. package/skills/gsd-path-build/scripts/roadmap.py +321 -0
  132. package/skills/gsd-path-build/scripts/state_checkpoint.py +109 -72
  133. package/skills/gsd-path-build/scripts/state_promote.py +42 -44
  134. package/skills/gsd-path-build/scripts/task_context.py +73 -0
  135. package/skills/gsd-path-build/scripts/token_budget.py +40 -1
  136. package/skills/gsd-path-build/scripts/workflow_run.py +116 -7
  137. package/skills/gsd-path-build/templates/wave-review.md +1 -1
  138. package/skills/gsd-path-decide/SKILL.md +2 -6
  139. package/skills/gsd-path-decide/references/dispatch.md +6 -0
  140. package/skills/gsd-path-decide/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  141. package/skills/gsd-path-decide/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  142. package/skills/gsd-path-decide/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  143. package/skills/gsd-path-decide/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  144. package/skills/gsd-path-decide/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  145. package/skills/gsd-path-decide/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  146. package/skills/gsd-path-decide/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  147. package/skills/gsd-path-decide/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  148. package/skills/gsd-path-decide/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  149. package/skills/gsd-path-decide/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  150. package/skills/gsd-path-decide/scripts/archive_milestone.py +2157 -0
  151. package/skills/gsd-path-decide/scripts/build_recovery.py +287 -0
  152. package/skills/gsd-path-decide/scripts/check_handoffs.py +1 -1
  153. package/skills/gsd-path-decide/scripts/detect_project.py +1526 -0
  154. package/skills/gsd-path-decide/scripts/discussion_validate.py +1321 -0
  155. package/skills/gsd-path-decide/scripts/integration.py +1439 -0
  156. package/skills/gsd-path-decide/scripts/isolation.py +9 -1
  157. package/skills/gsd-path-decide/scripts/pipeline_state.py +114 -186
  158. package/skills/gsd-path-decide/scripts/promote_lookahead.py +283 -0
  159. package/skills/gsd-path-decide/scripts/review_panel.py +553 -0
  160. package/skills/gsd-path-decide/scripts/roadmap.py +321 -0
  161. package/skills/gsd-path-decide/scripts/state_checkpoint.py +109 -72
  162. package/skills/gsd-path-decide/scripts/state_promote.py +42 -44
  163. package/skills/gsd-path-define/SKILL.md +10 -14
  164. package/skills/gsd-path-define/references/build-recovery.md +78 -0
  165. package/skills/gsd-path-define/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  166. package/skills/gsd-path-define/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  167. package/skills/gsd-path-define/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  168. package/skills/gsd-path-define/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  169. package/skills/gsd-path-define/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  170. package/skills/gsd-path-define/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  171. package/skills/gsd-path-define/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  172. package/skills/gsd-path-define/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  173. package/skills/gsd-path-define/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  174. package/skills/gsd-path-define/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  175. package/skills/gsd-path-define/scripts/archive_milestone.py +2157 -0
  176. package/skills/gsd-path-define/scripts/build_recovery.py +287 -0
  177. package/skills/gsd-path-define/scripts/check_handoffs.py +1 -1
  178. package/skills/gsd-path-define/scripts/detect_project.py +11 -2
  179. package/skills/gsd-path-define/scripts/discussion_validate.py +1321 -0
  180. package/skills/gsd-path-define/scripts/integration.py +1439 -0
  181. package/skills/gsd-path-define/scripts/isolation.py +9 -1
  182. package/skills/gsd-path-define/scripts/pipeline_state.py +114 -186
  183. package/skills/gsd-path-define/scripts/promote_lookahead.py +283 -0
  184. package/skills/gsd-path-define/scripts/review_panel.py +553 -0
  185. package/skills/gsd-path-define/scripts/roadmap.py +321 -0
  186. package/skills/gsd-path-define/scripts/state_checkpoint.py +109 -72
  187. package/skills/gsd-path-define/scripts/state_promote.py +42 -44
  188. package/skills/gsd-path-docs-audit/references/dispatch.md +6 -0
  189. package/skills/gsd-path-docs-audit/references/docs-auditor.md +14 -0
  190. package/skills/gsd-path-docs-audit/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  191. package/skills/gsd-path-docs-audit/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  192. package/skills/gsd-path-docs-audit/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  193. package/skills/gsd-path-docs-audit/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  194. package/skills/gsd-path-docs-audit/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  195. package/skills/gsd-path-docs-audit/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  196. package/skills/gsd-path-docs-audit/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  197. package/skills/gsd-path-docs-audit/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  198. package/skills/gsd-path-docs-audit/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  199. package/skills/gsd-path-docs-audit/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  200. package/skills/gsd-path-docs-audit/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  201. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +2157 -0
  202. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +287 -0
  203. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +5 -3
  204. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +1 -1
  205. package/skills/gsd-path-docs-audit/scripts/detect_project.py +1526 -0
  206. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +1321 -0
  207. package/skills/gsd-path-docs-audit/scripts/integration.py +1439 -0
  208. package/skills/gsd-path-docs-audit/scripts/isolation.py +9 -1
  209. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +114 -186
  210. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +283 -0
  211. package/skills/gsd-path-docs-audit/scripts/review_panel.py +553 -0
  212. package/skills/gsd-path-docs-audit/scripts/roadmap.py +321 -0
  213. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +109 -72
  214. package/skills/gsd-path-docs-audit/scripts/state_promote.py +42 -44
  215. package/skills/gsd-path-forensics/scripts/__pycache__/pipeline_undo.cpython-312.pyc +0 -0
  216. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +12 -3
  217. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +11 -7
  218. package/skills/gsd-path-inspect/SKILL.md +30 -8
  219. package/skills/gsd-path-inspect/references/dispatch.md +6 -0
  220. package/skills/gsd-path-inspect/references/docs-auditor.md +14 -0
  221. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  222. package/skills/gsd-path-inspect/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  223. package/skills/gsd-path-inspect/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  224. package/skills/gsd-path-inspect/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  225. package/skills/gsd-path-inspect/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  226. package/skills/gsd-path-inspect/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  227. package/skills/gsd-path-inspect/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  228. package/skills/gsd-path-inspect/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  229. package/skills/gsd-path-inspect/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  230. package/skills/gsd-path-inspect/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  231. package/skills/gsd-path-inspect/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  232. package/skills/gsd-path-inspect/scripts/archive_milestone.py +2157 -0
  233. package/skills/gsd-path-inspect/scripts/build_recovery.py +287 -0
  234. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +5 -3
  235. package/skills/gsd-path-inspect/scripts/check_handoffs.py +1 -1
  236. package/skills/gsd-path-inspect/scripts/detect_project.py +11 -2
  237. package/skills/gsd-path-inspect/scripts/discussion_validate.py +1321 -0
  238. package/skills/gsd-path-inspect/scripts/integration.py +1439 -0
  239. package/skills/gsd-path-inspect/scripts/isolation.py +9 -1
  240. package/skills/gsd-path-inspect/scripts/pipeline_state.py +114 -186
  241. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +283 -0
  242. package/skills/gsd-path-inspect/scripts/review_panel.py +553 -0
  243. package/skills/gsd-path-inspect/scripts/roadmap.py +321 -0
  244. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +109 -72
  245. package/skills/gsd-path-inspect/scripts/state_promote.py +42 -44
  246. package/skills/gsd-path-inspect/scripts/workflow_run.py +226 -0
  247. package/skills/gsd-path-plan/SKILL.md +25 -17
  248. package/skills/gsd-path-plan/references/build-recovery.md +78 -0
  249. package/skills/gsd-path-plan/references/dispatch.md +6 -0
  250. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  251. package/skills/gsd-path-plan/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  252. package/skills/gsd-path-plan/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  253. package/skills/gsd-path-plan/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  254. package/skills/gsd-path-plan/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  255. package/skills/gsd-path-plan/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  256. package/skills/gsd-path-plan/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  257. package/skills/gsd-path-plan/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  258. package/skills/gsd-path-plan/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  259. package/skills/gsd-path-plan/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  260. package/skills/gsd-path-plan/scripts/archive_milestone.py +2157 -0
  261. package/skills/gsd-path-plan/scripts/build_recovery.py +287 -0
  262. package/skills/gsd-path-plan/scripts/check_handoffs.py +1 -1
  263. package/skills/gsd-path-plan/scripts/detect_project.py +1526 -0
  264. package/skills/gsd-path-plan/scripts/discussion_validate.py +1321 -0
  265. package/skills/gsd-path-plan/scripts/integration.py +1439 -0
  266. package/skills/gsd-path-plan/scripts/isolation.py +9 -1
  267. package/skills/gsd-path-plan/scripts/pipeline_state.py +114 -186
  268. package/skills/gsd-path-plan/scripts/promote_lookahead.py +283 -0
  269. package/skills/gsd-path-plan/scripts/roadmap.py +321 -0
  270. package/skills/gsd-path-plan/scripts/state_checkpoint.py +109 -72
  271. package/skills/gsd-path-plan/scripts/state_promote.py +42 -44
  272. package/skills/gsd-path-plan/scripts/workflow_run.py +116 -7
  273. package/skills/gsd-path-research/SKILL.md +3 -6
  274. package/skills/gsd-path-research/references/dispatch.md +6 -0
  275. package/skills/gsd-path-research/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  276. package/skills/gsd-path-research/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  277. package/skills/gsd-path-research/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  278. package/skills/gsd-path-research/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  279. package/skills/gsd-path-research/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  280. package/skills/gsd-path-research/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  281. package/skills/gsd-path-research/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  282. package/skills/gsd-path-research/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  283. package/skills/gsd-path-research/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  284. package/skills/gsd-path-research/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  285. package/skills/gsd-path-research/scripts/archive_milestone.py +2157 -0
  286. package/skills/gsd-path-research/scripts/build_recovery.py +287 -0
  287. package/skills/gsd-path-research/scripts/check_handoffs.py +1 -1
  288. package/skills/gsd-path-research/scripts/detect_project.py +1526 -0
  289. package/skills/gsd-path-research/scripts/discussion_validate.py +1321 -0
  290. package/skills/gsd-path-research/scripts/integration.py +1439 -0
  291. package/skills/gsd-path-research/scripts/isolation.py +9 -1
  292. package/skills/gsd-path-research/scripts/pipeline_state.py +114 -186
  293. package/skills/gsd-path-research/scripts/promote_lookahead.py +283 -0
  294. package/skills/gsd-path-research/scripts/review_panel.py +553 -0
  295. package/skills/gsd-path-research/scripts/roadmap.py +321 -0
  296. package/skills/gsd-path-research/scripts/state_checkpoint.py +109 -72
  297. package/skills/gsd-path-research/scripts/state_promote.py +42 -44
  298. package/skills/gsd-path-roadmap/SKILL.md +22 -58
  299. package/skills/gsd-path-roadmap/references/dispatch.md +6 -0
  300. package/skills/gsd-path-roadmap/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  301. package/skills/gsd-path-roadmap/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  302. package/skills/gsd-path-roadmap/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  303. package/skills/gsd-path-roadmap/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  304. package/skills/gsd-path-roadmap/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  305. package/skills/gsd-path-roadmap/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  306. package/skills/gsd-path-roadmap/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  307. package/skills/gsd-path-roadmap/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  308. package/skills/gsd-path-roadmap/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  309. package/skills/gsd-path-roadmap/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  310. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +10 -118
  311. package/skills/gsd-path-roadmap/scripts/build_recovery.py +287 -0
  312. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +1 -1
  313. package/skills/gsd-path-roadmap/scripts/detect_project.py +11 -2
  314. package/skills/gsd-path-roadmap/scripts/integration.py +28 -22
  315. package/skills/gsd-path-roadmap/scripts/isolation.py +9 -1
  316. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +114 -186
  317. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +30 -162
  318. package/skills/gsd-path-roadmap/scripts/roadmap.py +321 -0
  319. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +109 -72
  320. package/skills/gsd-path-roadmap/scripts/state_promote.py +42 -44
  321. package/skills/gsd-path-ship/SKILL.md +5 -4
  322. package/skills/gsd-path-ship/references/dispatch.md +6 -0
  323. package/skills/gsd-path-ship/references/reviewer-final.md +21 -0
  324. package/skills/gsd-path-ship/references/reviewer-panel.md +17 -0
  325. package/skills/gsd-path-ship/references/reviewer-skeptic.md +20 -0
  326. package/skills/gsd-path-ship/references/reviewer-wave.md +89 -0
  327. package/skills/gsd-path-ship/references/reviewer.md +12 -150
  328. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  329. package/skills/gsd-path-ship/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
  330. package/skills/gsd-path-ship/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
  331. package/skills/gsd-path-ship/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
  332. package/skills/gsd-path-ship/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  333. package/skills/gsd-path-ship/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
  334. package/skills/gsd-path-ship/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
  335. package/skills/gsd-path-ship/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
  336. package/skills/gsd-path-ship/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
  337. package/skills/gsd-path-ship/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
  338. package/skills/gsd-path-ship/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
  339. package/skills/gsd-path-ship/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
  340. package/skills/gsd-path-ship/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
  341. package/skills/gsd-path-ship/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
  342. package/skills/gsd-path-ship/scripts/archive_milestone.py +10 -118
  343. package/skills/gsd-path-ship/scripts/build_recovery.py +287 -0
  344. package/skills/gsd-path-ship/scripts/check_handoffs.py +1 -1
  345. package/skills/gsd-path-ship/scripts/detect_project.py +1526 -0
  346. package/skills/gsd-path-ship/scripts/integration.py +28 -22
  347. package/skills/gsd-path-ship/scripts/isolation.py +9 -1
  348. package/skills/gsd-path-ship/scripts/lean_verification.py +1 -1
  349. package/skills/gsd-path-ship/scripts/pipeline_state.py +114 -186
  350. package/skills/gsd-path-ship/scripts/promote_lookahead.py +283 -0
  351. package/skills/gsd-path-ship/scripts/roadmap.py +321 -0
  352. package/skills/gsd-path-ship/scripts/state_checkpoint.py +109 -72
  353. package/skills/gsd-path-ship/scripts/state_promote.py +42 -44
  354. package/skills/gsd-path-ship/scripts/workflow_run.py +116 -7
  355. package/skills/gsd-path-ship/templates/wave-review.md +1 -1
  356. package/skills/gsd-path-undo/scripts/pipeline_undo.py +11 -7
  357. package/skills/path/BUILD.md +47 -575
  358. package/skills/path/DECIDE.md +2 -6
  359. package/skills/path/DEFINE.md +10 -14
  360. package/skills/path/INSPECT.md +30 -8
  361. package/skills/path/PLAN.md +25 -17
  362. package/skills/path/RESEARCH.md +3 -6
  363. package/skills/path/ROADMAP.md +22 -58
  364. package/skills/path/SHIP.md +5 -4
  365. package/skills/path/SKILL.md +24 -14
  366. package/skills/path/references/build-abandon.md +33 -0
  367. package/skills/path/references/build-native.md +494 -0
  368. package/skills/path/references/build-recovery.md +78 -0
  369. package/skills/path/references/coder.md +8 -3
  370. package/skills/path/references/dispatch.md +6 -0
  371. package/skills/path/references/docs-auditor.md +14 -0
  372. package/skills/path/references/reviewer-final.md +21 -0
  373. package/skills/path/references/reviewer-panel.md +17 -0
  374. package/skills/path/references/reviewer-skeptic.md +20 -0
  375. package/skills/path/references/reviewer-wave.md +89 -0
  376. package/skills/path/references/reviewer.md +12 -150
  377. package/skills/path/scripts/archive_milestone.py +10 -118
  378. package/skills/path/scripts/bootstrap_repository.py +25 -3
  379. package/skills/path/scripts/build_recovery.py +287 -0
  380. package/skills/path/scripts/check_docs_audit.py +5 -3
  381. package/skills/path/scripts/check_handoffs.py +1 -1
  382. package/skills/path/scripts/detect_project.py +11 -2
  383. package/skills/path/scripts/dispatch_driver.py +4 -2
  384. package/skills/path/scripts/integration.py +28 -22
  385. package/skills/path/scripts/isolation.py +9 -1
  386. package/skills/path/scripts/lean_verification.py +1 -1
  387. package/skills/path/scripts/pipeline_state.py +114 -186
  388. package/skills/path/scripts/promote_lookahead.py +30 -162
  389. package/skills/path/scripts/roadmap.py +321 -0
  390. package/skills/path/scripts/state_checkpoint.py +109 -72
  391. package/skills/path/scripts/state_promote.py +42 -44
  392. package/skills/path/scripts/task_context.py +73 -0
  393. package/skills/path/scripts/token_budget.py +40 -1
  394. package/skills/path/scripts/workflow_run.py +116 -7
  395. package/skills/path/templates/wave-review.md +1 -1
@@ -11,6 +11,31 @@ from pathlib import Path, PurePosixPath
11
11
  from typing import Mapping, Optional
12
12
 
13
13
 
14
+ if __package__: # imported as scripts.state_promote
15
+ from . import pipeline_state, state_checkpoint
16
+ from .pipeline_state import (
17
+ NULL,
18
+ PROMOTION_RESIDUAL,
19
+ PROMOTION_SCHEMA,
20
+ PROMOTION_TRACKS,
21
+ SLUG_RE,
22
+ PipelineState,
23
+ PipelineStateError,
24
+ )
25
+ else: # standalone script or sibling import
26
+ import pipeline_state
27
+ import state_checkpoint
28
+ from pipeline_state import (
29
+ NULL,
30
+ PROMOTION_RESIDUAL,
31
+ PROMOTION_SCHEMA,
32
+ PROMOTION_TRACKS,
33
+ SLUG_RE,
34
+ PipelineState,
35
+ PipelineStateError,
36
+ )
37
+
38
+
14
39
  def _render_roadmap(
15
40
  text: str,
16
41
  previous_milestone: str,
@@ -243,9 +268,9 @@ def _completed_promotion(
243
268
  if _head_with_exact_message(repo, subject, fields) != head:
244
269
  raise PipelineStateError("completed promotion has the wrong commit message")
245
270
 
246
- active_text = pipeline_state._git_text_at(repo, base, ".project/STATE.md")
247
- next_text = pipeline_state._git_text_at(repo, base, ".project/next/STATE.md")
248
- roadmap_text = pipeline_state._git_text_at(repo, base, ".project/ROADMAP.md")
271
+ active_text = state_checkpoint._git_text_at(repo, base, ".project/STATE.md")
272
+ next_text = state_checkpoint._git_text_at(repo, base, ".project/next/STATE.md")
273
+ roadmap_text = state_checkpoint._git_text_at(repo, base, ".project/ROADMAP.md")
249
274
  if active_text is None or next_text is None or roadmap_text is None:
250
275
  raise PipelineStateError("promotion parent is missing required metadata")
251
276
  active_state = pipeline_state._state_from_text(active_text, "promotion parent STATE.md")
@@ -265,7 +290,7 @@ def _completed_promotion(
265
290
  )
266
291
 
267
292
  _promotion_tree_mapping(repo, base, head)
268
- drift = pipeline_state._classify_plan_drift(repo, next_state, base, landing)
293
+ drift = state_checkpoint._classify_plan_drift(repo, next_state, base, landing)
269
294
  expected_roadmap = _render_roadmap(
270
295
  roadmap_text,
271
296
  active_state.milestone,
@@ -273,11 +298,11 @@ def _completed_promotion(
273
298
  branch,
274
299
  landing,
275
300
  )
276
- current_roadmap = pipeline_state._git_text_at(repo, head, ".project/ROADMAP.md")
301
+ current_roadmap = state_checkpoint._git_text_at(repo, head, ".project/ROADMAP.md")
277
302
  if current_roadmap != expected_roadmap:
278
303
  raise PipelineStateError("completed promotion has invalid ROADMAP.md")
279
304
 
280
- current_state = pipeline_state._git_text_at(repo, head, ".project/STATE.md")
305
+ current_state = state_checkpoint._git_text_at(repo, head, ".project/STATE.md")
281
306
  if current_state is None:
282
307
  raise PipelineStateError("completed promotion has no STATE.md")
283
308
  event = re.escape(_promotion_event(drift, branch, landing, base))
@@ -438,10 +463,10 @@ def _prepare_promotion(
438
463
  if source.exists() or source.is_symlink():
439
464
  if destination.exists() or destination.is_symlink():
440
465
  raise PipelineStateError(f"promotion destination already exists: {destination}")
441
- tracks[name] = pipeline_state._tree_digest(source)
466
+ tracks[name] = state_checkpoint._tree_digest(source)
442
467
  if not tracks:
443
468
  raise PipelineStateError("lookahead track has no promotable artifacts")
444
- drift = pipeline_state._classify_plan_drift(repo, next_state, base, landing)
469
+ drift = state_checkpoint._classify_plan_drift(repo, next_state, base, landing)
445
470
  roadmap_path = project / "ROADMAP.md"
446
471
  roadmap_text = pipeline_state._read_real_file(roadmap_path, "ROADMAP.md")
447
472
  target_state = _promotion_state(
@@ -464,10 +489,10 @@ def _prepare_promotion(
464
489
  "landing": landing,
465
490
  "base": base,
466
491
  "tracks": tracks,
467
- "residual_sha256": pipeline_state._tree_digest(next_root, tuple(tracks)),
468
- "next_state_sha256": pipeline_state._sha256(next_text),
469
- "active_state_sha256": pipeline_state._sha256(active_text),
470
- "roadmap_sha256": pipeline_state._sha256(roadmap_text),
492
+ "residual_sha256": state_checkpoint._tree_digest(next_root, tuple(tracks)),
493
+ "next_state_sha256": state_checkpoint._sha256(next_text),
494
+ "active_state_sha256": state_checkpoint._sha256(active_text),
495
+ "roadmap_sha256": state_checkpoint._sha256(roadmap_text),
471
496
  "target_state": target_state,
472
497
  "target_roadmap": target_roadmap,
473
498
  "drift": drift,
@@ -521,7 +546,7 @@ def _resume_track_moves(project: Path, journal: dict[str, object], path: Path) -
521
546
  if not source_exists and not destination_exists:
522
547
  raise PipelineStateError(f"promotion lost both source and destination: {name}")
523
548
  candidate = source if source_exists else destination
524
- if pipeline_state._tree_digest(candidate) != expected_digest:
549
+ if state_checkpoint._tree_digest(candidate) != expected_digest:
525
550
  raise PipelineStateError(f"promotion track drifted: {name}")
526
551
  if source_exists:
527
552
  source.rename(destination)
@@ -542,7 +567,7 @@ def _resume_metadata(project: Path, journal: dict[str, object], path: Path) -> N
542
567
  raise PipelineStateError("promotion journal has invalid metadata")
543
568
  if current == desired:
544
569
  continue
545
- if pipeline_state._sha256(current) != expected_original:
570
+ if state_checkpoint._sha256(current) != expected_original:
546
571
  raise PipelineStateError(f"promotion metadata drifted: {target}")
547
572
  pipeline_state._atomic_write(target, desired)
548
573
  journal["stage"] = f"updated:{target.name}"
@@ -560,9 +585,9 @@ def _resume_next_removal(
560
585
  if residual.exists() or residual.is_symlink():
561
586
  raise PipelineStateError("promotion has both next track and residual staging")
562
587
  next_text = pipeline_state._read_real_file(next_root / "STATE.md", "next/STATE.md")
563
- if pipeline_state._sha256(next_text) != journal.get("next_state_sha256"):
588
+ if state_checkpoint._sha256(next_text) != journal.get("next_state_sha256"):
564
589
  raise PipelineStateError("lookahead STATE drifted during promotion")
565
- if pipeline_state._tree_digest(next_root) != journal.get("residual_sha256"):
590
+ if state_checkpoint._tree_digest(next_root) != journal.get("residual_sha256"):
566
591
  raise PipelineStateError("lookahead residual drifted during promotion")
567
592
  next_root.rename(residual)
568
593
  journal["stage"] = "next-staged"
@@ -574,7 +599,7 @@ def _resume_next_removal(
574
599
  raise PipelineStateError("promotion lost next track and residual staging")
575
600
  if residual.is_symlink() or not residual.is_dir():
576
601
  raise PipelineStateError(f"promotion residual must be a real directory: {residual}")
577
- if pipeline_state._tree_digest(residual) != journal.get("residual_sha256"):
602
+ if state_checkpoint._tree_digest(residual) != journal.get("residual_sha256"):
578
603
  raise PipelineStateError("staged lookahead residual drifted during promotion")
579
604
 
580
605
 
@@ -714,30 +739,3 @@ def promote_next(
714
739
  "commit": commit,
715
740
  "drift": journal["drift"],
716
741
  }
717
-
718
-
719
- # pipeline_state imports this module, so the parent is resolved after the
720
- # definitions above. Parent functions are looked up on the module at call time
721
- # so patches applied to pipeline_state stay visible here.
722
- if __package__: # imported as scripts.state_promote
723
- from . import pipeline_state
724
- from .pipeline_state import (
725
- NULL,
726
- PROMOTION_RESIDUAL,
727
- PROMOTION_SCHEMA,
728
- PROMOTION_TRACKS,
729
- SLUG_RE,
730
- PipelineState,
731
- PipelineStateError,
732
- )
733
- else: # standalone script or sibling import
734
- import pipeline_state
735
- from pipeline_state import (
736
- NULL,
737
- PROMOTION_RESIDUAL,
738
- PROMOTION_SCHEMA,
739
- PROMOTION_TRACKS,
740
- SLUG_RE,
741
- PipelineState,
742
- PipelineStateError,
743
- )
@@ -143,69 +143,33 @@ precondition fails.
143
143
  retain the entering state for a milestone-boundary re-slice; otherwise keep
144
144
  `phase: roadmap`, `status: active`. Retain the baseline, revise, and re-gate
145
145
  against that same baseline.
146
- 7. On approval in an established repository, record the exact full current
147
- HEAD before changing ROADMAP.md or STATE.md. For a milestone-boundary
148
- re-slice, keep its matching roadmap entry `active`, use `pipeline_state.py
149
- transition` to record `program roadmap re-slice approved` while expecting
150
- and retaining the complete entering `inspect/active` or `define/active`
151
- state, then checkpoint the pending `.project/` artifacts with:
152
-
153
- ```text
154
- python3 <absolute isolation.py> checkpoint \
155
- --repo <absolute root> --expected-head <recorded full HEAD> \
156
- --subject "roadmap: program roadmap approved" \
157
- --body "Why: approved roadmap checkpoint" \
158
- --allow-path .project
159
- ```
160
-
161
- On a post-abandon re-slice, mark only the helper-selected pending entry
162
- `active`, use `pipeline_state.py transition` with the complete current
163
- `roadmap/active` state as expected to set `phase: inspect`, `status: active`,
164
- `milestone` to the selected slug, preserve the bound branch, and set
165
- `archive: null`, with an event naming the abandoned predecessor. Then use
166
- the same `isolation.py checkpoint` command above. For a first roadmap
167
- approval, run:
146
+ 7. On approval, record the full current HEAD and use the bundled approval
147
+ module. For a first roadmap approval use `--kind roadmap`; for either
148
+ re-slice use `--kind roadmap-reslice`. In a milestone-boundary re-slice,
149
+ `--milestone` is the unchanged active milestone; after abandon, it is the
150
+ helper-selected pending milestone reviewed by the user.
168
151
 
169
152
  ```text
170
153
  python3 <absolute pipeline_state.py> approve \
171
- --repo <absolute root> --kind roadmap \
172
- --milestone <selected first pending slug> \
173
- --expected-head <recorded full HEAD>
154
+ --repo <absolute root> --kind roadmap-reslice \
155
+ --milestone <reviewed milestone slug> --expected-head <recorded full HEAD>
174
156
  ```
175
157
 
176
- The helper journals before mutation, proves the selected entry is pending
177
- and no entry is already active, marks it active, changes STATE from
178
- `roadmap/active` to `roadmap/done` with that milestone and event `program
179
- roadmap approved`, and checkpoints all pending `.project/` artifacts with
180
- the canonical roadmap subject and body, subject to the
181
- top-level allowlist in
182
- [isolation.PROJECT_ENTRIES](scripts/isolation.py). Require its typed result to report
183
- `schema: gsd-path/state-checkpoint/v1`, `status: approved`, `kind: roadmap`,
184
- `project_dir: .project`, `state.status: done`, the selected milestone, and
185
- the returned current commit. Rerun the same command after interruption; the
186
- matching journal owns recovery.
187
-
188
- For every re-slice, remove `.project/ROADMAP.before-reslice.md` only after
189
- the state transition succeeds and before the checkpoint. Retain it through
190
- every requested revision and failed approval attempt.
191
-
192
- Defer either checkpoint only when the directory is not yet a Git repository
193
- or `.project/REPOSITORY.md` records `Kind: new-github`. For a normal
194
- approval, run the same `approve` command with `--defer-checkpoint` instead
195
- of `--expected-head`; it marks the selected entry active and records
196
- `roadmap/done` with event `program roadmap approved`. `pipeline_state.py
197
- transition` never approves a roadmap. For
198
- a milestone-boundary re-slice, use the retaining transition above; for a
199
- post-abandon re-slice, use its transition above. The build transition
200
- commit owns the pending artifacts. Confirm approval and link ROADMAP.md again. For
201
- a milestone-boundary re-slice, state that the preserved inspect or define
202
- phase resumes; for a post-abandon re-slice, state that inspect is next;
203
- otherwise state that define (milestone mode) is next. Do not
204
- add another approval gate. When routed by an active `$gsd-path`, return
205
- control to that router so it routes the resulting state; never name define
206
- as next when inspect was preserved or selected. When invoked directly, stop
207
- and tell the user to explicitly invoke `$gsd-path`, which routes the same
208
- result; do not invoke an explicit-only sibling skill yourself.
158
+ The helper owns roadmap selection, expected state, baseline cleanup and
159
+ the approval checkpoint. It journals before mutation, retains the baseline
160
+ bytes for recovery, and refuses changes to settled or active entries.
161
+ A milestone-boundary re-slice retains Inspect or Define; a post-abandon
162
+ re-slice enters Inspect. Require its typed result to report `status:
163
+ approved`, the requested kind, milestone and returned commit. After an
164
+ interruption, follow the router's `resume-checkpoint` action; do not edit
165
+ state, delete the baseline or checkpoint separately.
166
+
167
+ Before Git exists, or during a `Kind: new-github` transaction, use the same
168
+ approval command with `--defer-checkpoint` instead of `--expected-head`.
169
+ That existing deferred path writes the metadata without a Git journal or
170
+ commit; the next build checkpoint owns it. Retain the baseline through
171
+ revisions and rejected approvals. Confirm approval, link ROADMAP.md again,
172
+ and use the executable phase handoff in AGENTS.md without another gate.
209
173
 
210
174
  ## Rules
211
175
 
@@ -122,6 +122,12 @@ directory for the full logical session; resumptions reuse it. Record completed
122
122
  parent CLI run events and each native child's session events with stable logical
123
123
  task names before the next dispatch. The helper reads host counters and refuses
124
124
  incomplete or ambiguous usage; never estimate tokens or reset the ledger.
125
+ When the verified CLI adapter reports cumulative counters across `resume`, record
126
+ each later invocation with `--previous-events <previous recorded CLI events>`.
127
+ The helper checks thread identity and records only the new output, preserving the
128
+ raw total and predecessor. Keep that chain in order; never sum cumulative totals.
129
+ Use ordinary `record` for per-invocation counters. An unknown counter convention
130
+ is unproven usage, not permission to guess.
125
131
  Run `admit` for the next task and stop dispatch on a blocked result. Preserve
126
132
  its output in the dispatch evidence. This gates observed usage only: concurrent
127
133
  or in-flight work can overrun before the host reports usage. Codex CLI has no
@@ -239,15 +239,10 @@ class ArchiveError(RuntimeError):
239
239
 
240
240
 
241
241
  PIPELINE_MARKER = _common.PIPELINE_MARKER
242
- PR_CREDIT_LINE = (
243
- "PR prepared with [GSD Path](https://github.com/open-gsd/gsd-path)."
244
- )
245
- GITHUB_HOST = "github.com"
246
242
 
247
243
 
248
- # discussion_validate and integration call back into this module through a
249
- # module reference and import the constants and ArchiveError above, so this
250
- # import must stay below those definitions.
244
+ # discussion_validate calls back into this module and imports its constants
245
+ # and ArchiveError, so this import must stay below those definitions.
251
246
  if __package__: # imported as scripts.archive_milestone
252
247
  from .discussion_validate import (
253
248
  record_sections,
@@ -280,42 +275,6 @@ if __package__: # imported as scripts.archive_milestone
280
275
  render_manifest,
281
276
  validate_manifest,
282
277
  )
283
- from .integration import (
284
- resolve_remote_default,
285
- live_remote_ref,
286
- publish_bound_branch,
287
- refresh_origin,
288
- optional_ref,
289
- integration_names,
290
- registered_worktree,
291
- remove_registered_worktree,
292
- delete_integration_branch,
293
- require_generated_integration_commit,
294
- discard_unpublished_stale_integration,
295
- create_integration_merge,
296
- require_annotated_tag,
297
- ensure_integration_tag,
298
- github_repository,
299
- require_github_authentication,
300
- github_api_json,
301
- require_pull_request_shape,
302
- require_pull_request_pages,
303
- pull_request_head_matches_repository,
304
- require_pull_request_identity,
305
- find_pull_request,
306
- pull_request_body,
307
- update_pull_request_body,
308
- create_pull_request,
309
- pull_request_tag_message,
310
- pull_request_tag_metadata,
311
- require_pull_request_merge,
312
- require_pull_request_merge_provenance,
313
- integrate_pull_request,
314
- integrate,
315
- find_integrate_commit,
316
- validate_integrated,
317
- require_published_integration,
318
- )
319
278
  else: # standalone script or sibling import
320
279
  if __name__ == "__main__":
321
280
  sys.modules.setdefault("archive_milestone", sys.modules[__name__])
@@ -351,42 +310,6 @@ else: # standalone script or sibling import
351
310
  render_manifest,
352
311
  validate_manifest,
353
312
  )
354
- from integration import (
355
- resolve_remote_default,
356
- live_remote_ref,
357
- publish_bound_branch,
358
- refresh_origin,
359
- optional_ref,
360
- integration_names,
361
- registered_worktree,
362
- remove_registered_worktree,
363
- delete_integration_branch,
364
- require_generated_integration_commit,
365
- discard_unpublished_stale_integration,
366
- create_integration_merge,
367
- require_annotated_tag,
368
- ensure_integration_tag,
369
- github_repository,
370
- require_github_authentication,
371
- github_api_json,
372
- require_pull_request_shape,
373
- require_pull_request_pages,
374
- pull_request_head_matches_repository,
375
- require_pull_request_identity,
376
- find_pull_request,
377
- pull_request_body,
378
- update_pull_request_body,
379
- create_pull_request,
380
- pull_request_tag_message,
381
- pull_request_tag_metadata,
382
- require_pull_request_merge,
383
- require_pull_request_merge_provenance,
384
- integrate_pull_request,
385
- integrate,
386
- find_integrate_commit,
387
- validate_integrated,
388
- require_published_integration,
389
- )
390
313
  except ImportError: # pragma: no cover - package import used by tests
391
314
  from scripts.discussion_validate import (
392
315
  record_sections,
@@ -419,42 +342,6 @@ else: # standalone script or sibling import
419
342
  render_manifest,
420
343
  validate_manifest,
421
344
  )
422
- from scripts.integration import (
423
- resolve_remote_default,
424
- live_remote_ref,
425
- publish_bound_branch,
426
- refresh_origin,
427
- optional_ref,
428
- integration_names,
429
- registered_worktree,
430
- remove_registered_worktree,
431
- delete_integration_branch,
432
- require_generated_integration_commit,
433
- discard_unpublished_stale_integration,
434
- create_integration_merge,
435
- require_annotated_tag,
436
- ensure_integration_tag,
437
- github_repository,
438
- require_github_authentication,
439
- github_api_json,
440
- require_pull_request_shape,
441
- require_pull_request_pages,
442
- pull_request_head_matches_repository,
443
- require_pull_request_identity,
444
- find_pull_request,
445
- pull_request_body,
446
- update_pull_request_body,
447
- create_pull_request,
448
- pull_request_tag_message,
449
- pull_request_tag_metadata,
450
- require_pull_request_merge,
451
- require_pull_request_merge_provenance,
452
- integrate_pull_request,
453
- integrate,
454
- find_integrate_commit,
455
- validate_integrated,
456
- require_published_integration,
457
- )
458
345
 
459
346
 
460
347
  @contextmanager
@@ -2238,6 +2125,11 @@ def parser() -> argparse.ArgumentParser:
2238
2125
  def main(argv: Optional[Sequence[str]] = None) -> int:
2239
2126
  arguments = parser().parse_args(argv)
2240
2127
  try:
2128
+ if arguments.command in {"validate-integrated", "refresh-origin", "integrate"}:
2129
+ if __package__:
2130
+ from . import integration
2131
+ else:
2132
+ import integration
2241
2133
  if arguments.command == "prepare":
2242
2134
  result = prepare(arguments.repo, arguments.slug)
2243
2135
  elif arguments.command == "render-manifest":
@@ -2247,11 +2139,11 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
2247
2139
  elif arguments.command == "abandon":
2248
2140
  result = abandon(arguments.repo, arguments.slug, arguments.reason)
2249
2141
  elif arguments.command == "validate-integrated":
2250
- result = validate_integrated(arguments.repo, arguments.slug)
2142
+ result = integration.validate_integrated(arguments.repo, arguments.slug)
2251
2143
  elif arguments.command == "refresh-origin":
2252
- result = refresh_origin(arguments.repo)
2144
+ result = integration.refresh_origin(arguments.repo)
2253
2145
  elif arguments.command == "integrate":
2254
- result = integrate(arguments.repo, arguments.slug)
2146
+ result = integration.integrate(arguments.repo, arguments.slug)
2255
2147
  else:
2256
2148
  result = validate(arguments.repo)
2257
2149
  except (ArchiveError, OSError) as error: