@opengsd/gsd-path 1.4.0 → 1.6.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 (476) hide show
  1. package/CHANGELOG.md +460 -341
  2. package/DOCS.md +16 -5
  3. package/FULL.md +67 -6
  4. package/HOOKS.md +158 -10
  5. package/MIGRATE.md +12 -0
  6. package/QUICK.md +4 -2
  7. package/README.md +136 -116
  8. package/RUNTIME.md +24 -6
  9. package/UPDATE.md +39 -3
  10. package/WORKFLOW.md +80 -4
  11. package/package.json +5 -2
  12. package/platforms/shared-agents/dispatch.md +13 -0
  13. package/scripts/_common.py +256 -2
  14. package/scripts/archive_milestone.py +14 -13
  15. package/scripts/build_recovery.py +155 -58
  16. package/scripts/build_state.py +274 -8
  17. package/scripts/check_docs_audit.py +77 -4
  18. package/scripts/check_handoffs.py +635 -57
  19. package/scripts/check_task_briefs.py +293 -32
  20. package/scripts/detect_project.py +260 -20
  21. package/scripts/discussion_records.py +9 -1
  22. package/scripts/discussion_validate.py +93 -35
  23. package/scripts/dispatch_driver.py +549 -53
  24. package/scripts/git_guard.py +27 -8
  25. package/scripts/guard_hook.py +2630 -210
  26. package/scripts/install.mjs +99 -11
  27. package/scripts/install.py +231 -46
  28. package/scripts/integration.py +244 -65
  29. package/scripts/isolation.py +539 -70
  30. package/scripts/loop_run.py +16 -4
  31. package/scripts/members.py +77 -32
  32. package/scripts/migrate_core.py +2 -0
  33. package/scripts/model_policy.py +5 -1
  34. package/scripts/path_config.py +3 -3
  35. package/scripts/pipeline_diagnose.py +17 -2
  36. package/scripts/pipeline_git.py +131 -42
  37. package/scripts/pipeline_state.py +139 -39
  38. package/scripts/pipeline_undo.py +118 -16
  39. package/scripts/promote_lookahead.py +3 -3
  40. package/scripts/review_findings.py +180 -44
  41. package/scripts/roadmap.py +9 -1
  42. package/scripts/runtime_store.py +21 -2
  43. package/scripts/skill-resources.json +9 -2
  44. package/scripts/state_checkpoint.py +39 -36
  45. package/scripts/state_promote.py +15 -4
  46. package/scripts/status_runtime.py +22 -4
  47. package/scripts/task_context.py +14 -3
  48. package/scripts/wizard.mjs +1 -0
  49. package/scripts/workflow_run.py +14 -4
  50. package/scripts/worktree_paths.py +54 -2
  51. package/skills/gsd-path/DEFINE.md +34 -5
  52. package/skills/gsd-path/PLAN.md +14 -3
  53. package/skills/gsd-path/RESEARCH.md +11 -0
  54. package/skills/gsd-path/ROADMAP.md +16 -6
  55. package/skills/gsd-path/SHIP.md +32 -5
  56. package/skills/gsd-path/SKILL.md +52 -24
  57. package/skills/gsd-path/references/build-native.md +112 -10
  58. package/skills/gsd-path/references/build-recovery.md +13 -0
  59. package/skills/gsd-path/references/coder.md +7 -3
  60. package/skills/gsd-path/references/dispatch.md +13 -0
  61. package/skills/gsd-path/references/docs-auditor.md +5 -0
  62. package/skills/gsd-path/references/operating-rules.md +11 -3
  63. package/skills/gsd-path/references/planner.md +26 -4
  64. package/skills/gsd-path/references/reviewer-final.md +20 -2
  65. package/skills/gsd-path/references/reviewer-wave.md +56 -12
  66. package/skills/gsd-path/references/reviewer.md +3 -1
  67. package/skills/gsd-path/references/runtime-selection.md +9 -0
  68. package/skills/gsd-path/references/spec-probes.md +150 -0
  69. package/skills/gsd-path/scripts/_common.py +256 -2
  70. package/skills/gsd-path/scripts/archive_milestone.py +14 -13
  71. package/skills/gsd-path/scripts/build_recovery.py +155 -58
  72. package/skills/gsd-path/scripts/build_state.py +274 -8
  73. package/skills/gsd-path/scripts/check_docs_audit.py +77 -4
  74. package/skills/gsd-path/scripts/check_handoffs.py +635 -57
  75. package/skills/gsd-path/scripts/check_task_briefs.py +293 -32
  76. package/skills/gsd-path/scripts/detect_project.py +260 -20
  77. package/skills/gsd-path/scripts/discussion_records.py +9 -1
  78. package/skills/gsd-path/scripts/discussion_validate.py +93 -35
  79. package/skills/gsd-path/scripts/dispatch_driver.py +549 -53
  80. package/skills/gsd-path/scripts/git_guard.py +27 -8
  81. package/skills/gsd-path/scripts/integration.py +244 -65
  82. package/skills/gsd-path/scripts/isolation.py +539 -70
  83. package/skills/gsd-path/scripts/loop_run.py +16 -4
  84. package/skills/gsd-path/scripts/members.py +77 -32
  85. package/skills/gsd-path/scripts/model_policy.py +5 -1
  86. package/skills/gsd-path/scripts/path_config.py +3 -3
  87. package/skills/gsd-path/scripts/pipeline_git.py +131 -42
  88. package/skills/gsd-path/scripts/pipeline_state.py +139 -39
  89. package/skills/gsd-path/scripts/promote_lookahead.py +3 -3
  90. package/skills/gsd-path/scripts/review_findings.py +180 -44
  91. package/skills/gsd-path/scripts/roadmap.py +9 -1
  92. package/skills/gsd-path/scripts/state_checkpoint.py +39 -36
  93. package/skills/gsd-path/scripts/state_promote.py +15 -4
  94. package/skills/gsd-path/scripts/status_runtime.py +22 -4
  95. package/skills/gsd-path/scripts/task_context.py +14 -3
  96. package/skills/gsd-path/scripts/workflow_run.py +14 -4
  97. package/skills/gsd-path/scripts/worktree_paths.py +54 -2
  98. package/skills/gsd-path/templates/docs-audit.md +5 -1
  99. package/skills/gsd-path/templates/final-review.md +11 -2
  100. package/skills/gsd-path/templates/intent.md +30 -0
  101. package/skills/gsd-path/templates/patch-findings.md +3 -3
  102. package/skills/gsd-path/templates/plan.md +17 -2
  103. package/skills/gsd-path/templates/research-handoff.md +14 -3
  104. package/skills/gsd-path/templates/state.md +2 -1
  105. package/skills/gsd-path/templates/task.md +1 -0
  106. package/skills/gsd-path/templates/wave-review.md +28 -9
  107. package/skills/gsd-path-build/references/build-native.md +112 -10
  108. package/skills/gsd-path-build/references/build-recovery.md +13 -0
  109. package/skills/gsd-path-build/references/coder.md +7 -3
  110. package/skills/gsd-path-build/references/dispatch.md +13 -0
  111. package/skills/gsd-path-build/references/operating-rules.md +11 -3
  112. package/skills/gsd-path-build/references/reviewer-final.md +20 -2
  113. package/skills/gsd-path-build/references/reviewer-wave.md +56 -12
  114. package/skills/gsd-path-build/references/reviewer.md +3 -1
  115. package/skills/gsd-path-build/references/runtime-selection.md +9 -0
  116. package/skills/gsd-path-build/references/spec-probes.md +150 -0
  117. package/skills/gsd-path-build/scripts/_common.py +256 -2
  118. package/skills/gsd-path-build/scripts/archive_milestone.py +14 -13
  119. package/skills/gsd-path-build/scripts/build_recovery.py +155 -58
  120. package/skills/gsd-path-build/scripts/build_state.py +274 -8
  121. package/skills/gsd-path-build/scripts/check_handoffs.py +635 -57
  122. package/skills/gsd-path-build/scripts/check_task_briefs.py +293 -32
  123. package/skills/gsd-path-build/scripts/detect_project.py +260 -20
  124. package/skills/gsd-path-build/scripts/discussion_records.py +9 -1
  125. package/skills/gsd-path-build/scripts/discussion_validate.py +93 -35
  126. package/skills/gsd-path-build/scripts/dispatch_driver.py +549 -53
  127. package/skills/gsd-path-build/scripts/integration.py +244 -65
  128. package/skills/gsd-path-build/scripts/isolation.py +539 -70
  129. package/skills/gsd-path-build/scripts/loop_run.py +16 -4
  130. package/skills/gsd-path-build/scripts/members.py +77 -32
  131. package/skills/gsd-path-build/scripts/model_policy.py +5 -1
  132. package/skills/gsd-path-build/scripts/path_config.py +3 -3
  133. package/skills/gsd-path-build/scripts/pipeline_git.py +131 -42
  134. package/skills/gsd-path-build/scripts/pipeline_state.py +139 -39
  135. package/skills/gsd-path-build/scripts/promote_lookahead.py +3 -3
  136. package/skills/gsd-path-build/scripts/review_findings.py +180 -44
  137. package/skills/gsd-path-build/scripts/roadmap.py +9 -1
  138. package/skills/gsd-path-build/scripts/state_checkpoint.py +39 -36
  139. package/skills/gsd-path-build/scripts/state_promote.py +15 -4
  140. package/skills/gsd-path-build/scripts/task_context.py +14 -3
  141. package/skills/gsd-path-build/scripts/workflow_run.py +14 -4
  142. package/skills/gsd-path-build/scripts/worktree_paths.py +54 -2
  143. package/skills/gsd-path-build/templates/task.md +1 -0
  144. package/skills/gsd-path-build/templates/wave-review.md +28 -9
  145. package/skills/gsd-path-decide/references/dispatch.md +13 -0
  146. package/skills/gsd-path-decide/references/operating-rules.md +11 -3
  147. package/skills/gsd-path-decide/references/runtime-selection.md +9 -0
  148. package/skills/gsd-path-decide/scripts/_common.py +256 -2
  149. package/skills/gsd-path-decide/scripts/archive_milestone.py +14 -13
  150. package/skills/gsd-path-decide/scripts/build_recovery.py +155 -58
  151. package/skills/gsd-path-decide/scripts/check_handoffs.py +635 -57
  152. package/skills/gsd-path-decide/scripts/check_task_briefs.py +293 -32
  153. package/skills/gsd-path-decide/scripts/detect_project.py +260 -20
  154. package/skills/gsd-path-decide/scripts/discussion_records.py +9 -1
  155. package/skills/gsd-path-decide/scripts/discussion_validate.py +93 -35
  156. package/skills/gsd-path-decide/scripts/integration.py +244 -65
  157. package/skills/gsd-path-decide/scripts/isolation.py +539 -70
  158. package/skills/gsd-path-decide/scripts/loop_run.py +16 -4
  159. package/skills/gsd-path-decide/scripts/members.py +77 -32
  160. package/skills/gsd-path-decide/scripts/model_policy.py +5 -1
  161. package/skills/gsd-path-decide/scripts/path_config.py +3 -3
  162. package/skills/gsd-path-decide/scripts/pipeline_git.py +131 -42
  163. package/skills/gsd-path-decide/scripts/pipeline_state.py +139 -39
  164. package/skills/gsd-path-decide/scripts/promote_lookahead.py +3 -3
  165. package/skills/gsd-path-decide/scripts/roadmap.py +9 -1
  166. package/skills/gsd-path-decide/scripts/state_checkpoint.py +39 -36
  167. package/skills/gsd-path-decide/scripts/state_promote.py +15 -4
  168. package/skills/gsd-path-decide/scripts/worktree_paths.py +54 -2
  169. package/skills/gsd-path-define/SKILL.md +34 -5
  170. package/skills/gsd-path-define/references/build-recovery.md +13 -0
  171. package/skills/gsd-path-define/references/operating-rules.md +11 -3
  172. package/skills/gsd-path-define/references/runtime-selection.md +9 -0
  173. package/skills/gsd-path-define/references/spec-probes.md +150 -0
  174. package/skills/gsd-path-define/scripts/_common.py +256 -2
  175. package/skills/gsd-path-define/scripts/archive_milestone.py +14 -13
  176. package/skills/gsd-path-define/scripts/build_recovery.py +155 -58
  177. package/skills/gsd-path-define/scripts/check_handoffs.py +635 -57
  178. package/skills/gsd-path-define/scripts/check_task_briefs.py +293 -32
  179. package/skills/gsd-path-define/scripts/detect_project.py +260 -20
  180. package/skills/gsd-path-define/scripts/discussion_records.py +9 -1
  181. package/skills/gsd-path-define/scripts/discussion_validate.py +93 -35
  182. package/skills/gsd-path-define/scripts/integration.py +244 -65
  183. package/skills/gsd-path-define/scripts/isolation.py +539 -70
  184. package/skills/gsd-path-define/scripts/loop_run.py +16 -4
  185. package/skills/gsd-path-define/scripts/members.py +77 -32
  186. package/skills/gsd-path-define/scripts/model_policy.py +5 -1
  187. package/skills/gsd-path-define/scripts/path_config.py +3 -3
  188. package/skills/gsd-path-define/scripts/pipeline_git.py +131 -42
  189. package/skills/gsd-path-define/scripts/pipeline_state.py +139 -39
  190. package/skills/gsd-path-define/scripts/promote_lookahead.py +3 -3
  191. package/skills/gsd-path-define/scripts/roadmap.py +9 -1
  192. package/skills/gsd-path-define/scripts/state_checkpoint.py +39 -36
  193. package/skills/gsd-path-define/scripts/state_promote.py +15 -4
  194. package/skills/gsd-path-define/scripts/worktree_paths.py +54 -2
  195. package/skills/gsd-path-define/templates/intent.md +30 -0
  196. package/skills/gsd-path-define/templates/state.md +2 -1
  197. package/skills/gsd-path-discuss/references/operating-rules.md +11 -3
  198. package/skills/gsd-path-discuss/references/runtime-selection.md +9 -0
  199. package/skills/gsd-path-discuss/scripts/_common.py +256 -2
  200. package/skills/gsd-path-discuss/scripts/discussion_records.py +9 -1
  201. package/skills/gsd-path-discuss/scripts/loop_run.py +16 -4
  202. package/skills/gsd-path-discuss/scripts/model_policy.py +5 -1
  203. package/skills/gsd-path-discuss/scripts/path_config.py +3 -3
  204. package/skills/gsd-path-discuss/scripts/worktree_paths.py +54 -2
  205. package/skills/gsd-path-docs-audit/references/dispatch.md +13 -0
  206. package/skills/gsd-path-docs-audit/references/docs-auditor.md +5 -0
  207. package/skills/gsd-path-docs-audit/references/operating-rules.md +11 -3
  208. package/skills/gsd-path-docs-audit/references/runtime-selection.md +9 -0
  209. package/skills/gsd-path-docs-audit/scripts/_common.py +256 -2
  210. package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +14 -13
  211. package/skills/gsd-path-docs-audit/scripts/build_recovery.py +155 -58
  212. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +77 -4
  213. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +635 -57
  214. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +293 -32
  215. package/skills/gsd-path-docs-audit/scripts/detect_project.py +260 -20
  216. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +9 -1
  217. package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +93 -35
  218. package/skills/gsd-path-docs-audit/scripts/integration.py +244 -65
  219. package/skills/gsd-path-docs-audit/scripts/isolation.py +539 -70
  220. package/skills/gsd-path-docs-audit/scripts/loop_run.py +16 -4
  221. package/skills/gsd-path-docs-audit/scripts/members.py +77 -32
  222. package/skills/gsd-path-docs-audit/scripts/model_policy.py +5 -1
  223. package/skills/gsd-path-docs-audit/scripts/path_config.py +3 -3
  224. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +131 -42
  225. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +139 -39
  226. package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +3 -3
  227. package/skills/gsd-path-docs-audit/scripts/roadmap.py +9 -1
  228. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +39 -36
  229. package/skills/gsd-path-docs-audit/scripts/state_promote.py +15 -4
  230. package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +54 -2
  231. package/skills/gsd-path-docs-audit/templates/docs-audit.md +5 -1
  232. package/skills/gsd-path-forensics/references/operating-rules.md +11 -3
  233. package/skills/gsd-path-forensics/references/runtime-selection.md +9 -0
  234. package/skills/gsd-path-forensics/scripts/_common.py +256 -2
  235. package/skills/gsd-path-forensics/scripts/discussion_records.py +9 -1
  236. package/skills/gsd-path-forensics/scripts/loop_run.py +16 -4
  237. package/skills/gsd-path-forensics/scripts/model_policy.py +5 -1
  238. package/skills/gsd-path-forensics/scripts/path_config.py +3 -3
  239. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +17 -2
  240. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +118 -16
  241. package/skills/gsd-path-forensics/scripts/worktree_paths.py +54 -2
  242. package/skills/gsd-path-inspect/references/dispatch.md +13 -0
  243. package/skills/gsd-path-inspect/references/docs-auditor.md +5 -0
  244. package/skills/gsd-path-inspect/references/operating-rules.md +11 -3
  245. package/skills/gsd-path-inspect/references/runtime-selection.md +9 -0
  246. package/skills/gsd-path-inspect/scripts/_common.py +256 -2
  247. package/skills/gsd-path-inspect/scripts/archive_milestone.py +14 -13
  248. package/skills/gsd-path-inspect/scripts/build_recovery.py +155 -58
  249. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +77 -4
  250. package/skills/gsd-path-inspect/scripts/check_handoffs.py +635 -57
  251. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +293 -32
  252. package/skills/gsd-path-inspect/scripts/detect_project.py +260 -20
  253. package/skills/gsd-path-inspect/scripts/discussion_records.py +9 -1
  254. package/skills/gsd-path-inspect/scripts/discussion_validate.py +93 -35
  255. package/skills/gsd-path-inspect/scripts/integration.py +244 -65
  256. package/skills/gsd-path-inspect/scripts/isolation.py +539 -70
  257. package/skills/gsd-path-inspect/scripts/loop_run.py +16 -4
  258. package/skills/gsd-path-inspect/scripts/members.py +77 -32
  259. package/skills/gsd-path-inspect/scripts/model_policy.py +5 -1
  260. package/skills/gsd-path-inspect/scripts/path_config.py +3 -3
  261. package/skills/gsd-path-inspect/scripts/pipeline_git.py +131 -42
  262. package/skills/gsd-path-inspect/scripts/pipeline_state.py +139 -39
  263. package/skills/gsd-path-inspect/scripts/promote_lookahead.py +3 -3
  264. package/skills/gsd-path-inspect/scripts/roadmap.py +9 -1
  265. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +39 -36
  266. package/skills/gsd-path-inspect/scripts/state_promote.py +15 -4
  267. package/skills/gsd-path-inspect/scripts/workflow_run.py +14 -4
  268. package/skills/gsd-path-inspect/scripts/worktree_paths.py +54 -2
  269. package/skills/gsd-path-inspect/templates/docs-audit.md +5 -1
  270. package/skills/gsd-path-inspect/templates/state.md +2 -1
  271. package/skills/gsd-path-loop/references/operating-rules.md +11 -3
  272. package/skills/gsd-path-loop/references/runtime-selection.md +9 -0
  273. package/skills/gsd-path-loop/scripts/_common.py +256 -2
  274. package/skills/gsd-path-loop/scripts/discussion_records.py +9 -1
  275. package/skills/gsd-path-loop/scripts/loop_run.py +16 -4
  276. package/skills/gsd-path-loop/scripts/model_policy.py +5 -1
  277. package/skills/gsd-path-loop/scripts/path_config.py +3 -3
  278. package/skills/gsd-path-loop/scripts/worktree_paths.py +54 -2
  279. package/skills/gsd-path-migrate/SKILL.md +8 -0
  280. package/skills/gsd-path-migrate/references/operating-rules.md +11 -3
  281. package/skills/gsd-path-migrate/references/runtime-selection.md +9 -0
  282. package/skills/gsd-path-migrate/scripts/_common.py +256 -2
  283. package/skills/gsd-path-migrate/scripts/discussion_records.py +9 -1
  284. package/skills/gsd-path-migrate/scripts/loop_run.py +16 -4
  285. package/skills/gsd-path-migrate/scripts/migrate_core.py +2 -0
  286. package/skills/gsd-path-migrate/scripts/model_policy.py +5 -1
  287. package/skills/gsd-path-migrate/scripts/path_config.py +3 -3
  288. package/skills/gsd-path-plan/SKILL.md +14 -3
  289. package/skills/gsd-path-plan/references/build-recovery.md +13 -0
  290. package/skills/gsd-path-plan/references/dispatch.md +13 -0
  291. package/skills/gsd-path-plan/references/operating-rules.md +11 -3
  292. package/skills/gsd-path-plan/references/planner.md +26 -4
  293. package/skills/gsd-path-plan/references/runtime-selection.md +9 -0
  294. package/skills/gsd-path-plan/references/spec-probes.md +150 -0
  295. package/skills/gsd-path-plan/scripts/_common.py +256 -2
  296. package/skills/gsd-path-plan/scripts/archive_milestone.py +14 -13
  297. package/skills/gsd-path-plan/scripts/build_recovery.py +155 -58
  298. package/skills/gsd-path-plan/scripts/check_handoffs.py +635 -57
  299. package/skills/gsd-path-plan/scripts/check_task_briefs.py +293 -32
  300. package/skills/gsd-path-plan/scripts/detect_project.py +260 -20
  301. package/skills/gsd-path-plan/scripts/discussion_records.py +9 -1
  302. package/skills/gsd-path-plan/scripts/discussion_validate.py +93 -35
  303. package/skills/gsd-path-plan/scripts/integration.py +244 -65
  304. package/skills/gsd-path-plan/scripts/isolation.py +539 -70
  305. package/skills/gsd-path-plan/scripts/loop_run.py +16 -4
  306. package/skills/gsd-path-plan/scripts/members.py +77 -32
  307. package/skills/gsd-path-plan/scripts/model_policy.py +5 -1
  308. package/skills/gsd-path-plan/scripts/path_config.py +3 -3
  309. package/skills/gsd-path-plan/scripts/pipeline_git.py +131 -42
  310. package/skills/gsd-path-plan/scripts/pipeline_state.py +139 -39
  311. package/skills/gsd-path-plan/scripts/promote_lookahead.py +3 -3
  312. package/skills/gsd-path-plan/scripts/roadmap.py +9 -1
  313. package/skills/gsd-path-plan/scripts/state_checkpoint.py +39 -36
  314. package/skills/gsd-path-plan/scripts/state_promote.py +15 -4
  315. package/skills/gsd-path-plan/scripts/workflow_run.py +14 -4
  316. package/skills/gsd-path-plan/scripts/worktree_paths.py +54 -2
  317. package/skills/gsd-path-plan/templates/patch-findings.md +3 -3
  318. package/skills/gsd-path-plan/templates/plan.md +17 -2
  319. package/skills/gsd-path-plan/templates/task.md +1 -0
  320. package/skills/gsd-path-research/SKILL.md +11 -0
  321. package/skills/gsd-path-research/references/dispatch.md +13 -0
  322. package/skills/gsd-path-research/references/operating-rules.md +11 -3
  323. package/skills/gsd-path-research/references/runtime-selection.md +9 -0
  324. package/skills/gsd-path-research/scripts/_common.py +256 -2
  325. package/skills/gsd-path-research/scripts/archive_milestone.py +14 -13
  326. package/skills/gsd-path-research/scripts/build_recovery.py +155 -58
  327. package/skills/gsd-path-research/scripts/check_handoffs.py +635 -57
  328. package/skills/gsd-path-research/scripts/check_task_briefs.py +293 -32
  329. package/skills/gsd-path-research/scripts/detect_project.py +260 -20
  330. package/skills/gsd-path-research/scripts/discussion_records.py +9 -1
  331. package/skills/gsd-path-research/scripts/discussion_validate.py +93 -35
  332. package/skills/gsd-path-research/scripts/integration.py +244 -65
  333. package/skills/gsd-path-research/scripts/isolation.py +539 -70
  334. package/skills/gsd-path-research/scripts/loop_run.py +16 -4
  335. package/skills/gsd-path-research/scripts/members.py +77 -32
  336. package/skills/gsd-path-research/scripts/model_policy.py +5 -1
  337. package/skills/gsd-path-research/scripts/path_config.py +3 -3
  338. package/skills/gsd-path-research/scripts/pipeline_git.py +131 -42
  339. package/skills/gsd-path-research/scripts/pipeline_state.py +139 -39
  340. package/skills/gsd-path-research/scripts/promote_lookahead.py +3 -3
  341. package/skills/gsd-path-research/scripts/roadmap.py +9 -1
  342. package/skills/gsd-path-research/scripts/state_checkpoint.py +39 -36
  343. package/skills/gsd-path-research/scripts/state_promote.py +15 -4
  344. package/skills/gsd-path-research/scripts/worktree_paths.py +54 -2
  345. package/skills/gsd-path-research/templates/research-handoff.md +14 -3
  346. package/skills/gsd-path-roadmap/SKILL.md +16 -6
  347. package/skills/gsd-path-roadmap/references/dispatch.md +13 -0
  348. package/skills/gsd-path-roadmap/references/operating-rules.md +11 -3
  349. package/skills/gsd-path-roadmap/references/runtime-selection.md +9 -0
  350. package/skills/gsd-path-roadmap/scripts/_common.py +256 -2
  351. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +14 -13
  352. package/skills/gsd-path-roadmap/scripts/build_recovery.py +155 -58
  353. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +635 -57
  354. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +293 -32
  355. package/skills/gsd-path-roadmap/scripts/detect_project.py +260 -20
  356. package/skills/gsd-path-roadmap/scripts/discussion_records.py +9 -1
  357. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +93 -35
  358. package/skills/gsd-path-roadmap/scripts/integration.py +244 -65
  359. package/skills/gsd-path-roadmap/scripts/isolation.py +539 -70
  360. package/skills/gsd-path-roadmap/scripts/loop_run.py +16 -4
  361. package/skills/gsd-path-roadmap/scripts/members.py +77 -32
  362. package/skills/gsd-path-roadmap/scripts/model_policy.py +5 -1
  363. package/skills/gsd-path-roadmap/scripts/path_config.py +3 -3
  364. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +131 -42
  365. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +139 -39
  366. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +3 -3
  367. package/skills/gsd-path-roadmap/scripts/roadmap.py +9 -1
  368. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +39 -36
  369. package/skills/gsd-path-roadmap/scripts/state_promote.py +15 -4
  370. package/skills/gsd-path-roadmap/scripts/worktree_paths.py +54 -2
  371. package/skills/gsd-path-ship/SKILL.md +32 -5
  372. package/skills/gsd-path-ship/references/dispatch.md +13 -0
  373. package/skills/gsd-path-ship/references/operating-rules.md +11 -3
  374. package/skills/gsd-path-ship/references/reviewer-final.md +20 -2
  375. package/skills/gsd-path-ship/references/reviewer-wave.md +56 -12
  376. package/skills/gsd-path-ship/references/reviewer.md +3 -1
  377. package/skills/gsd-path-ship/references/runtime-selection.md +9 -0
  378. package/skills/gsd-path-ship/references/spec-probes.md +150 -0
  379. package/skills/gsd-path-ship/scripts/_common.py +256 -2
  380. package/skills/gsd-path-ship/scripts/archive_milestone.py +14 -13
  381. package/skills/gsd-path-ship/scripts/build_recovery.py +155 -58
  382. package/skills/gsd-path-ship/scripts/build_state.py +274 -8
  383. package/skills/gsd-path-ship/scripts/check_handoffs.py +635 -57
  384. package/skills/gsd-path-ship/scripts/check_task_briefs.py +293 -32
  385. package/skills/gsd-path-ship/scripts/detect_project.py +260 -20
  386. package/skills/gsd-path-ship/scripts/discussion_records.py +9 -1
  387. package/skills/gsd-path-ship/scripts/discussion_validate.py +93 -35
  388. package/skills/gsd-path-ship/scripts/integration.py +244 -65
  389. package/skills/gsd-path-ship/scripts/isolation.py +539 -70
  390. package/skills/gsd-path-ship/scripts/loop_run.py +16 -4
  391. package/skills/gsd-path-ship/scripts/members.py +77 -32
  392. package/skills/gsd-path-ship/scripts/model_policy.py +5 -1
  393. package/skills/gsd-path-ship/scripts/path_config.py +3 -3
  394. package/skills/gsd-path-ship/scripts/pipeline_git.py +131 -42
  395. package/skills/gsd-path-ship/scripts/pipeline_state.py +139 -39
  396. package/skills/gsd-path-ship/scripts/promote_lookahead.py +3 -3
  397. package/skills/gsd-path-ship/scripts/roadmap.py +9 -1
  398. package/skills/gsd-path-ship/scripts/state_checkpoint.py +39 -36
  399. package/skills/gsd-path-ship/scripts/state_promote.py +15 -4
  400. package/skills/gsd-path-ship/scripts/workflow_run.py +14 -4
  401. package/skills/gsd-path-ship/scripts/worktree_paths.py +54 -2
  402. package/skills/gsd-path-ship/templates/final-review.md +11 -2
  403. package/skills/gsd-path-ship/templates/patch-findings.md +3 -3
  404. package/skills/gsd-path-ship/templates/wave-review.md +28 -9
  405. package/skills/gsd-path-undo/references/operating-rules.md +11 -3
  406. package/skills/gsd-path-undo/references/runtime-selection.md +9 -0
  407. package/skills/gsd-path-undo/scripts/_common.py +256 -2
  408. package/skills/gsd-path-undo/scripts/discussion_records.py +9 -1
  409. package/skills/gsd-path-undo/scripts/loop_run.py +16 -4
  410. package/skills/gsd-path-undo/scripts/model_policy.py +5 -1
  411. package/skills/gsd-path-undo/scripts/path_config.py +3 -3
  412. package/skills/gsd-path-undo/scripts/pipeline_undo.py +118 -16
  413. package/skills/gsd-path-undo/scripts/worktree_paths.py +54 -2
  414. package/skills/path/DEFINE.md +34 -5
  415. package/skills/path/PLAN.md +14 -3
  416. package/skills/path/RESEARCH.md +11 -0
  417. package/skills/path/ROADMAP.md +16 -6
  418. package/skills/path/SHIP.md +32 -5
  419. package/skills/path/SKILL.md +52 -24
  420. package/skills/path/references/build-native.md +112 -10
  421. package/skills/path/references/build-recovery.md +13 -0
  422. package/skills/path/references/coder.md +7 -3
  423. package/skills/path/references/dispatch.md +13 -0
  424. package/skills/path/references/docs-auditor.md +5 -0
  425. package/skills/path/references/operating-rules.md +11 -3
  426. package/skills/path/references/planner.md +26 -4
  427. package/skills/path/references/reviewer-final.md +20 -2
  428. package/skills/path/references/reviewer-wave.md +56 -12
  429. package/skills/path/references/reviewer.md +3 -1
  430. package/skills/path/references/runtime-selection.md +9 -0
  431. package/skills/path/references/spec-probes.md +150 -0
  432. package/skills/path/scripts/_common.py +256 -2
  433. package/skills/path/scripts/archive_milestone.py +14 -13
  434. package/skills/path/scripts/build_recovery.py +155 -58
  435. package/skills/path/scripts/build_state.py +274 -8
  436. package/skills/path/scripts/check_docs_audit.py +77 -4
  437. package/skills/path/scripts/check_handoffs.py +635 -57
  438. package/skills/path/scripts/check_task_briefs.py +293 -32
  439. package/skills/path/scripts/detect_project.py +260 -20
  440. package/skills/path/scripts/discussion_records.py +9 -1
  441. package/skills/path/scripts/discussion_validate.py +93 -35
  442. package/skills/path/scripts/dispatch_driver.py +549 -53
  443. package/skills/path/scripts/git_guard.py +27 -8
  444. package/skills/path/scripts/integration.py +244 -65
  445. package/skills/path/scripts/isolation.py +539 -70
  446. package/skills/path/scripts/loop_run.py +16 -4
  447. package/skills/path/scripts/members.py +77 -32
  448. package/skills/path/scripts/model_policy.py +5 -1
  449. package/skills/path/scripts/path_config.py +3 -3
  450. package/skills/path/scripts/pipeline_git.py +131 -42
  451. package/skills/path/scripts/pipeline_state.py +139 -39
  452. package/skills/path/scripts/promote_lookahead.py +3 -3
  453. package/skills/path/scripts/review_findings.py +180 -44
  454. package/skills/path/scripts/roadmap.py +9 -1
  455. package/skills/path/scripts/state_checkpoint.py +39 -36
  456. package/skills/path/scripts/state_promote.py +15 -4
  457. package/skills/path/scripts/status_runtime.py +22 -4
  458. package/skills/path/scripts/task_context.py +14 -3
  459. package/skills/path/scripts/workflow_run.py +14 -4
  460. package/skills/path/scripts/worktree_paths.py +54 -2
  461. package/skills/path/templates/docs-audit.md +5 -1
  462. package/skills/path/templates/final-review.md +11 -2
  463. package/skills/path/templates/intent.md +30 -0
  464. package/skills/path/templates/patch-findings.md +3 -3
  465. package/skills/path/templates/plan.md +17 -2
  466. package/skills/path/templates/research-handoff.md +14 -3
  467. package/skills/path/templates/state.md +2 -1
  468. package/skills/path/templates/task.md +1 -0
  469. package/skills/path/templates/wave-review.md +28 -9
  470. package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  471. package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  472. package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  473. package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
  474. package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  475. package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
  476. package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
package/CHANGELOG.md CHANGED
@@ -3,379 +3,498 @@
3
3
  All notable changes to [@opengsd/gsd-path](https://www.npmjs.com/package/@opengsd/gsd-path)
4
4
  are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
- ## [1.1.0] - 2026-09-18
6
+ This file covers the npm package: the skills, the installer, the pipeline
7
+ scripts and project runtime, the guard hooks, and their documentation. Until
8
+ 1.4.0 it also lists changes to the monitor daemon and its dashboard, which are
9
+ in this repository but not in the npm package. From October 2026 the desktop
10
+ app and the daemon have their own file,
11
+ [daemon/app/CHANGELOG.md](daemon/app/CHANGELOG.md). Release bookkeeping and
12
+ test-only changes are not listed; the Git history has them.
13
+
14
+ ## [1.6.0] - 2026-10-12
7
15
 
8
16
  ### Added
9
- - Scoped npm package `@opengsd/gsd-path` with trusted publishing workflow
10
- - Release trust evidence validation and host matrix documentation
17
+ - let a later task supersede an earlier task and retire its Verify
18
+ - document the default branch record of a member
19
+ - member paths read the default branch that MEMBERS.md records
20
+ - record the default branch of a member in MEMBERS.md
21
+ - add --uninstall to the skill installers
22
+ - expose default_branch to the router and document the rule
23
+ - refuse members under a coordinator whose default branch is not main
24
+ - status, promotion and the git guard follow STATE default_branch
25
+ - integrate and validate on the default branch that STATE records
26
+ - bind milestones at the default branch that STATE records
27
+ - record the origin default branch in STATE at initialization
11
28
 
12
29
  ### Changed
13
- - Release workflow and maintainer documentation for npm publication
14
-
15
- ## [1.0.0] - 2026-09-15
30
+ - make each checkpoint commit different in the stale sidecar test
31
+ - record 1.6.0 live release evidence
32
+ - prepare 1.6.0 minor candidate
33
+ - Merge main into fix/issue-392-wave-review-validator
34
+ - Merge main into fix/issue-393-helper-papercuts
35
+ - Merge main into fix/issue-357-regression-verify
36
+ - Merge main into fix/issue-358-multi-repo-batches
37
+ - Merge main into fix/issue-390-build-helpers-runtime
38
+ - state the repair base-to-landing rule in build-native.md
39
+ - document supersedes gate rule in plan skill
40
+ - describe finish retry, stale Verify sidecar, leftover isolate
41
+ - document retired Verify key in RUNTIME.md
42
+ - name per-repo batching in review_findings docstring
43
+ - correct task_review_observation docstring after marker-tolerant matching
44
+ - state the wave review format rules and name them in the gate errors
45
+ - Document alias denial in directories that do not exist
46
+ - a done task brief with a deleted Context path does not fail later lint
47
+ - Document directory overlap rule in planner brief
48
+ - prove the issue 374 fixes through the real commands
49
+ - prove a define re-slice that removes a surface reaches the plan gate
50
+ - Merge remote-tracking branch 'origin/main' into fix/issue-344-scope-destructive-git-guards
51
+ - correct fix-tasks carried rule in RUNTIME.md
52
+ - document regression Verify at landing in RUNTIME.md
53
+ - point stale Python-installer flag lists to README
54
+ - say how more than one person can work on a project
55
+ - show host proof tiers in README and QUICK
56
+ - Document literal attestation limit for declared directories
57
+ - Align coder file-scope rule with declared-directory landing
58
+ - add contributing guide, security policy, and issue forms
59
+ - style: fix assignment spacing in round lint test
60
+ - prove round lint accepts dependency-supplied contract paths
61
+ - bind the next milestone after a direct ship on a master default
62
+ - Add GitHub Actions workflow for Discord changelog
63
+ - update release notes for v1.5.0
64
+ - quote portable repository paths in shell fixture
16
65
 
17
- ### Added
18
- - Initial public release of the disk-backed GSD Path pipeline
19
- - Multi-host installer, skills package, and project contracts
66
+ ### Fixed
67
+ - plan gate reads a declared directory when it checks supersedes
68
+ - give no removal advice for an isolate that holds a gitignored file
69
+ - replace a stale Verify sidecar only when it is proven untouched
70
+ - check the chain files from the repair base, not from the repair landing
71
+ - read update-ref, branch and worktree targets as Git does
72
+ - deny scoped deletions when the guard cannot prove the repository
73
+ - link review repairs by finding, not by criterion text alone
74
+ - give a superseding task the protective role of the task it supersedes
75
+ - check the files of every later linked repair before a chain receipt
76
+ - name only the leftover isolate when a landed task could not be cleaned up
77
+ - make only sub-bullet line markers optional in a criterion quote
78
+ - give a receipt to a chain of review repairs on the same files
79
+ - report a landed task as landed when the removal of its isolate fails
80
+ - deliver review_findings and task_context through the project runtime
81
+ - prove a member review repair in the member repository
82
+ - match a quoted criterion without the list markers of its sub-bullets
83
+ - let finish run again after a failed serial Verify, and prepare-task replace a stale Verify sidecar
84
+ - accept a review repair whose files are not in its fix batch
85
+ - report unreviewed earlier waves in ready and prove repair-wave order
86
+ - say how to record a Log event when a transition changes no field
87
+ - tell the user how to get the full SHA when a ref is refused
88
+ - name the differing identity field when a model policy record does not match
89
+ - a review cycle replaces an older one only with a valid wave verdict
90
+ - land tasks that share an earlier task one at a time
91
+ - list worktrees on Git versions without worktree list -z
92
+ - keep tracked cd targets valid with the scoped deletion rules
93
+ - keep ordinary Git commands allowed with env and in new directories
94
+ - accept an unset base milestone only for a closed build recovery
95
+ - keep review evidence checks when a criterion number repeats
96
+ - keep the fallback for a missing bundled helper module
97
+ - git guard uses main when STATE has no default_branch
98
+ - do not skip an earlier Verify because its text is in the own Verify
99
+ - treat a declared directory and a path below it as overlapping files
100
+ - accept a default branch that starts with origin/ at ship
101
+ - re-raise an import error from inside a bundled helper module
102
+ - keep a blocked review cycle until a newer cycle has a verdict
103
+ - keep the cap exemption when a cap line carries the template comment
104
+ - run earlier-wave Verify at landing when a task edits the same files
105
+ - keep each review repair in one repo and lint landed briefs as history
106
+ - give a repeat finding its next repair and ignore repairs of a replaced review
107
+ - land files under a declared files directory
108
+ - let a define-entered re-slice amend the active roadmap entry
109
+ - keep wave reviews when a plan repair changes only caps or dependency notes
110
+ - drop superseded review cycles from the dashboard attention list
111
+ - load bundled helpers when a foreign `scripts` package is importable
112
+ - tolerate repeated criterion numbers and unset recovery base milestone
113
+ - chain an existing Git hook instead of refusing the hook install
114
+ - accept external-landing proof when the forge deletes the bound branch
115
+ - fail early on a non-main default and document external-landing
116
+ - cover all parameter syntaxes in scoped deletion
117
+ - fail closed on literal parameter target ambiguity
118
+ - scope destructive Git cleanup to Path-owned targets
20
119
 
21
- ## [1.2.0] - 2026-09-20
120
+ ### Other
121
+ - Resolve macOS temp path in ownership scope test fixture
122
+ - Check unfolded and folded readings of process substitutions
123
+ - Fold process substitutions; count only real earlier Git commands
124
+ - Check each reading of inexact Git commands; limit descriptor denial
125
+ - Split separator-joined redirections; read attached printf -v name
126
+ - Strip shell redirections before Git detection; keep alias words
127
+ - Both Windows failures have one cause, and it is a test defect, not a product defect. The fix is one line in `tests/test_member_native.py`; it is not committed. **Cause.** The failing assertion is the second leftover check in `test_next_finish_names_only_the_leftover_sidecar_of_a_landed_member_task` (line 136). The test's `attempt()` helper writes `app.py` with `write_text("v2\n")`, which is `v2\r\n` on Windows, and CI runs with `core.autocrlf=false`, so the landed blob is CRLF. The test then wrote the file back with `write_bytes(b"v2\n")`. On Windows those bytes are not the landed blob, so the driver correctly gave no "remove its leftover isolate" stop and reported `landed`, and the test raised `KeyError: 'reason'`. **Invariant.** A test that puts a "landed" file back must write the same bytes that were landed, on every platform. This was the only place in the branch's new tests that broke it: the sibling leftover tests in `test_dispatch_driver.py` and `test_isolation.py` pass on Windows. **Fix.** The restore now uses the same `write_text("v2\n", encoding="utf-8")` call as `attempt()`. No product code changed, so no generated copies needed a sync. **Verification (macOS only; no Windows run was possible here).** - `python3 -m unittest tests.test_member_native`: 6 tests pass. - With `Path.write_text` patched to write CRLF for `app.py` (to emulate Windows), the original test fails with the same `KeyError: 'reason'` at line 136, and the fixed test passes
128
+ - Read redirections and Git context names as the shell does
129
+ - list a part as retired only when dropped; document it
130
+ - record each retired part of a fix-task Verify
131
+ - retire copied Verify in fix tasks; restore _task_deps
132
+ - Prefer exact criterion quote; join any-indent sub-bullets
133
+ - give the leftover-isolate stop only after a content check
134
+ - Cause: both Windows checks fail in one test only, `test_gsd_path_text_in_a_path_does_not_make_a_worktree_path_owned` (18 subtest failures = 6 targets x 3 pipeline states). The test put a native path, not quoted, into a Bash command. On Windows the path has backslashes, Bash word splitting removes them (`C:\Users\x` becomes `C:Usersx`), and the guard correctly answers "needs a literal target". The guard code is correct; the test was not cross-platform. Invariant: a test that puts a filesystem path into a shell command must quote it, so the guard sees the same path on each OS. Fix (tests/test_guard_hook.py only, no change to scripts/guard_hook.py): - The two commands in the failing test now use `shlex.quote(str(target))`, the convention the file already uses in other tests. - Same edit at the two sibling sites in `test_forced_worktree_remove_checks_registered_path_and_owner` (`{task_worktree}`, `{managed}`). They passed on Windows only because `assert_denied` accepts any denial reason, so they did not test ownership there. - No other unquoted path interpolation into a `worktree remove` command exists in tests/test_guard_hook.py, tests/test_guard_hook_windows.py or tests/test_git_guard.py. Verification: the two changed tests pass locally on macOS (2 tests, OK). A check with `shlex.split` on a sample Windows path shows the unquoted form loses the backslashes and the quoted form keeps them. Not verified: an actual Windows run; that needs the next CI run. The full test suite was not run, because only two test methods changed. Changes are in the working tree, not committed
135
+ - restore the exact-heading repair marker test method
136
+ - align plan gate supersedes with runtime; trim reviewer rule
137
+ - match em-dash criteria in review_findings; correct placeholder message
138
+ - leave landed repair waves out of unreviewed_waves
139
+ - scope guard built-ins and worktree ownership correctly
140
+ - void wave reviews on any review_panel line change
141
+ - Cause: the PR's new test `test_validate_refuses_a_default_branch_that_cannot_be_recorded` (tests/test_members.py) wrote a MEMBERS.md row with `Checkout: /x`. On Windows `/x` is not an absolute path, so `members.py validate` stopped at the earlier check (`Checkout must be absolute`) and never reached the `Default branch` check. All 3 subtests failed on both Windows jobs (3.9 and 3.12, shard 2). The product code is correct. Invariant: a test row that targets one validation rule must be valid for every earlier rule on every OS. Sites checked in the changed area: - `test_validate_refuses_a_default_branch_that_cannot_be_recorded`: violated, fixed. - `repeated default branch` case in `test_validate_refuses_malformed_members_file` (also added by this PR, also uses `/x`): holds. It asserts only `MEMBERS.md` in stderr and passed on Windows. Not changed. Fix (1 line, test only): the row now uses `Checkout: {self.root / 'web'}`, which is absolute on each OS. This is the same pattern as the existing row at tests/test_members.py:190. Verification (macOS, local): - `python3 -m unittest tests.test_members -k default_branch`: 6 tests, OK. - Mutation check: with the `valid_default_branch` check in scripts/members.py disabled, the test fails with `failures=3`. The mutation was reverted; only tests/test_members.py is changed. - Not run on Windows locally. The Windows result depends on the next CI run. The change is not committed. The test-writer and ponytail skills were not invoked for this one-line test edit
142
+ - drop dash from cap value class, allow cost caps
143
+ - compare Config as raw text except cap values
144
+ - accept member-create rerun on row without default branch
145
+ - All 4 failing checks have one cause: the two new tests `test_land_staging_failure_reports_git_stderr` and `test_checkpoint_staging_failure_reports_git_stderr` in `tests/test_isolation.py` ("IsolationError not raised"). The fix is a test-only change in the helper `refuse_crlf_staging`; the product code is correct and is not changed. Root cause: the helper made `git add` fail with repository config `core.autocrlf=input` + `core.safecrlf=true`. The CI test runner (`scripts/dev/py.mjs`) sets `core.autocrlf=false` through `GIT_CONFIG_*` environment variables, and the environment overrides repository config. Thus on CI git did no CRLF conversion, `git add` passed, and no error was raised. The tests passed with plain `python3 -m unittest`, which is why the failure was not seen before the push. This is not an OS or git-version problem (Linux and Windows failed the same way). Invariant: a test that needs `git add` to fail must not depend on a git setting that the test runner overrides. The helper is the one shared boundary; only these two tests use it. No other test in this change sets `core.autocrlf`. Fix: the helper now writes `* text eol=lf` to `.git/info/attributes` (an attribute overrides `core.autocrlf`, and the file is outside the work tree, so it adds no pending path) and keeps `core.safecrlf=true`. The assertions are unchanged: they still require the error to end with git's stderr ("CRLF would be replaced by LF") and HEAD to stay at the base. Verification: - Reproduced the CI failure locally through `node scripts/dev/py.mjs` before the fix (2 failures). - After the fix the two tests pass through `node scripts/dev/py.mjs`, with plain `python3`, and with `core.autocrlf=true` forced through the environment. - Full `tests/test_isolation.py` through the CI runner: 155 tests, 1 failure. That failure is `RecoverTests.test_serial_task_recovers_after_only_project_bookkeeping_commits` (blocked subtest: verdict 'none', expected 'reconcile'). It also fails when run alone, it does not use the changed helper, the test and the recover code are not in this PR's diff, and CI reported only the two staging tests as failures. I did not change it. It looks like a local-environment difference (local git is 2.54, CI is 2.55), but I did not find its cause. Not run: the full repository suite and the Windows jobs (CI owns those)
146
+ - identify replaced-review repairs by history, not name
147
+ - split cap lines like the Config parser
148
+ - state Codex native hook needs trust in README
149
+ - keep cap lines with comment markers under Config guard
150
+ - correct canonical-file rule in CONTRIBUTING.md
151
+ - journal recovery_reviews so resumed approvals report dropped reviews
152
+ ## [1.5.0] - 2026-10-09
22
153
 
23
154
  ### Added
24
- - add Path settings and project history dashboard
25
- - add optional Jev evidence screening
26
- - store worktrees and pinned runtimes outside project checkouts
27
- - centralize sub-agent model selection policy
155
+ - record runtime hotfix provenance on the declaration
156
+ - add signed self-update
157
+ - add the Skills, Stats, Settings, and Environment pages and the setup wizard
158
+ - register the hosts, project operation, and env routes
159
+ - add project setup operations for the app
160
+ - detect installed coding agents
161
+ - add the env file module for the app's Environment page
162
+ - add the stats route for the app's charts
163
+ - add the project board, project page, and tray popover
164
+ - add the Tauri shell and React setup screens
165
+ - add settings and diagnostics routes
166
+ - install skills from the verified npm release
167
+ - report requirements in the launch check
168
+ - add the launch check for the native app
169
+ - add --require-token to gate POST routes
170
+ - add external-landing mode for forge-neutral ship
171
+ - add Muse Code as a shared-agents host
172
+ - rule on edges and prohibitions at define, gate held-out checks at plan and final
28
173
 
29
174
  ### Changed
30
- - Correct stale release guidance and consolidate scope references
31
- - record passing eight-host release gate
32
- - validate corrected OpenCode release evidence
33
- - validate recovered Claude release evidence
34
- - record affected release gate results
35
- - preserve blocked host evaluations without receipt fallback
36
- - record passing Antigravity Kimi and Grok release runs
37
- - record remaining 1.2.0 release gate failures
38
- - record Kimi receipt and complete offline recheck
39
- - preserve 1.2.0 host receipts and release blockers
40
- - record v1.3.0 live release evidence and blockers
41
- - bump version to v1.3.0
42
- - Align release documentation with risk-based host validation
43
- - bump version to v1.2.0
44
- - Automate npm release docs, pack verification, and provenance (#133)
45
- - refresh README changes and dashboard screenshots
46
- - Refresh dashboard navigation and file history documentation
47
- - Clarify Jev receipt fields and consolidate documentation
48
- - Refresh dashboard update and guard documentation
49
- - Correct runtime installation, update, guard, and uninstall documentation
50
- - Correct model policy and dispatch documentation
175
+ - prepare 1.5.0 minor candidate
176
+ - point trust evidence link to current receipts
177
+ - refresh all seven host release receipts
178
+ - Name interactive.diffFilter in HOOKS.md executed-key list
179
+ - align guard, worktree pin, provenance, planner docs
180
+ - sync generated skill resource copies
181
+ - describe daemon hook-op migration and default hosts
182
+ - app: migrate a legacy runtime in the same click as a hook action
183
+ - app: send a legacy runtime to the update, not a hook refresh
184
+ - say macOS app builds are signed and notarized
185
+ - app: prepare 0.1.1, the first signed macOS build
186
+ - prove signing setup keeps keychain on success
187
+ - app: delete signing keychain on setup failure
188
+ - remove stale unsigned-build text after macOS signing
189
+ - app: sign and notarize macOS builds in the release workflow
190
+ - make diagnostic command assertion platform independent
191
+ - clarify patch finding source fields (#326)
192
+ - require maintainer rewrite of drafted changelog entry
193
+ - strengthen alias update regression assertions
194
+ - assert router alias payload refreshes on update
195
+ - rewrite the changelog entries for readers
196
+ - list the release upload script test in RELEASE.md
197
+ - prove the release upload script on macOS, Windows, and Linux runners
198
+ - Sync generated skill resource copies
199
+ - cover dispatch brief bases and in-flight lint regressions
200
+ - describe the desktop app in the README and add its changelog
201
+ - Document round exit-receipt reread in RUNTIME.md
202
+ - Merge validated main integration while preserving PR history
203
+ - Update ADR 0004 for Windows pinned-handle evidence reads
204
+ - sync detect_project skill copies
205
+ - correct app update check and release facts
206
+ - point README page list at route.ts
207
+ - Fix daemon README same-origin list and hosts docstring
208
+ - add app workflows to the RELEASE.md CI table
209
+ - Merge remote-tracking branch 'origin/main' into HEAD
210
+ - build tester installers on app-v tags and run shell tests
211
+ - Revert "fix: treat empty .project directory trees as greenfield (#273) (#292)"
212
+ - Revert "fix: reject Verify commands the host guard would refuse at plan time (#302)"
213
+ - Revert "fix(guard): allow read-only closed-milestone shell between ship and bind-next (#301)"
214
+ - match only real pip commands in the launch tests
215
+ - document INTENT SC heading text for multi-line criteria (#279) (#303)
216
+ - align plugin source wording with npm release source
217
+ - Document daemon version and pid in /status
218
+ - record native app design handoff and React frontend ruling
219
+ - run pinned-runtime reload in subprocess to avoid import pollution
220
+ - merge main: integrate #254/#265 and keep pinned-runtime test cleanup
221
+ - sync skill copies for state_checkpoint landed base fix
222
+ - sync skill copies for landed member base fix
223
+ - double-restore bundled scripts after pinned-runtime test
224
+ - drop pinned-runtime tests from native-attempt PR (#209 owns them)
225
+ - Revert "test: restore bundled scripts after pinned-runtime reload test"
226
+ - restore bundled scripts after pinned-runtime reload test
227
+ - invoke pipeline_state CLI from bundled script path
228
+ - retrigger checks
229
+ - sync skill copies after isolation change
230
+ - revert: keep ca89 dispatch finish path that passes member round tests
231
+ - merge main
232
+ - platform-neutral PowerShell path quoting expectation
233
+ - sync worktree_paths skill copies
234
+ - align package verify graph with main (drop stray check:locks)
235
+ - sync state_checkpoint skill copies
236
+ - expect LF-normalized intent hash for CRLF on-disk files
237
+ - skip WSL drvfs mount probes on Windows CI
238
+ - merge main into cursor/fix-spec-reach-probes-f72c
239
+ - merge main and sync skill resources
240
+ - merge main into cursor/fix-git-worktree-legacy-f72c
241
+ - merge main into cursor/fix-task-briefs-plan-deps-f72c
242
+ - merge main into cursor/fix-windows-member-lock-run-shell-f72c
243
+ - patch os.path.normcase in Windows session path test
244
+ - fix Windows normcase test on Linux CI (create=True, patch sep)
245
+ - sync detect_project copies after listdir_anchored fix
246
+ - update release notes for v1.4.0
247
+ - Point local shard command at py.mjs wrapper
248
+ - shard the Windows Python suite
51
249
 
52
250
  ### Fixed
53
- - reuse unchanged host receipts for releases
54
- - verify prepared releases without advancing failed versions
55
- - scope release evidence to affected hosts
56
- - show project runtime updates and release completed milestone guards
251
+ - parse research questions with backticks
252
+ - Fix package-level dispatch resource defaults
253
+ - deny git -c keys whose value git executes
254
+ - close zsh flag and escaped-marker gaps in the git parameter exception
255
+ - review findings on the 353 branch
256
+ - dispatch footguns from the 1.4.0 multi-repo field report
257
+ - dashboard probe resolves the pinned runtime via the project launcher
258
+ - guard hook precision for read-only commands
259
+ - allow same-wave file overlap between dependency-ordered tasks
260
+ - members validate and repair stop rejecting the refs Path creates
261
+ - lint landed member briefs at their member base
262
+ - ignore stale retired bind-next journals
263
+ - recover blocked serial tasks and retire unused verify sidecars
264
+ - preserve code spans in archive validation (#328)
265
+ - allow proven safe shell guard commands
266
+ - tolerate bytecode caches in pinned runtimes
267
+ - validate superseded wave review cycles together
268
+ - prioritize repair waves after blocked review (#315)
269
+ - accept prepared archive ship log events
270
+ - exclude Python bytecode from npm releases
271
+ - stabilize docs audit numbering (#299)
272
+ - allow research questions across multiple dimensions
273
+ - fix installer ownership of prerelease aliases
274
+ - fix installer recognition of suffixed versions
275
+ - Fix dispatch task brief validation bases
276
+ - find release files without globstar in the app release workflow
277
+ - reread task exit receipt before marking orphaned
278
+ - verify Windows pins and drain refused POST bodies
279
+ - list Windows evidence dirs by path while opens stay handle-relative
280
+ - anchor detect_project evidence reads on pinned handles
281
+ - remove the host guard Verify check that PR #305 carried from #302
282
+ - reject Verify commands the host guard would refuse at plan time (#302)
283
+ - tolerate missing lower milestone archives (#269) (#306)
284
+ - treat superseded wave review cycles as history (#274, #278) (#305)
285
+ - allow plan intent corrections to return to define (#304)
286
+ - allow read-only closed-milestone shell between ship and bind-next (#301)
287
+ - Fix final-review HEAD checks to allow runtime-pin commits (#297)
288
+ - require wave evidence line in quick-lane final scope template (#296)
289
+ - tighten task brief path token detection (#281) (#295)
290
+ - Fix multiline review bullet field parsing for final gate and archive (#294)
291
+ - Fix Surfaces parsing to split only on top-level commas (#293)
292
+ - treat empty .project directory trees as greenfield (#273) (#292)
293
+ - isolate pinned-runtime in-process test and reload order
294
+ - parse frontmatter # only as YAML comment (#268) (#289)
295
+ - keep the pinned-runtime reload test out of suite discovery
296
+ - landed member base resolution and missing STATE.md dispatch records
297
+ - resolve landed member base on coordinator or member repo
298
+ - allow dispatch records when STATE.md is absent
299
+ - validate landed member task base in member repo
300
+ - do not refresh native shell when prior attempt is blocked
301
+ - restore finish_task landing flow while keeping native shell refresh
302
+ - validate landed member task bases on coordinator
303
+ - member finish verify logging and force sidecar retirement
304
+ - allow force member sidecar retirement without task-file rejection gate
305
+ - pass task-file when force-retiring member sidecars
306
+ - record member verify on coordinator task and force-retire sidecar
307
+ - resolve landed member bases on coordinator and finish native member dispatches cleanly
308
+ - refresh native dispatch shells on re-activation and prefer live task state at finish
309
+ - exclude check_lock_usage from LK_LOCK self-scan
310
+ - reject Windows symlinks and junctions in handle-based reads
311
+ - lazy pipeline_git import with git fallback for skill bundles
312
+ - prefer isolation import before scripts package
313
+ - treat native shells as pre-spawn, not orphaned
314
+ - phase-gate shell writes only on bound milestone branch in-tree
315
+ - Windows parity for file reads, subprocess, tray, and install
316
+ - record native activations for attempt limits
317
+ - WSL drvfs index.lock workaround for state commits
318
+ - phase-gate shell writes to product files
319
+ - load pinned runtime helpers in dispatch_driver
320
+ - ignore same-wave overlap between landed tasks
321
+ - normalize CRLF in user-edited pipeline text
322
+ - prefer scripts.isolation when scripts/ is on sys.path
323
+ - worktree list without -z and posix show paths
324
+ - allow optional git trailers after ship commit body
325
+ - align gate-plan task brief check with approval checkpoint
326
+ - allow path_config model-policy.json at approval
327
+ - list .project through fresh directory fd on Linux
328
+ - member landing lock and spec command timeout drain
329
+ - copy staged skill entries into reserved directory
57
330
 
58
331
  ### Other
59
- - Fixed tests/package.test.mjs to invoke git_guard.py with pre-commit in a temporary Git repository instead of unsupported --help. The focused test failed before the fix and during restored-original sabotage. All 6 package tests now pass; resource sync and diff checks pass. Verified locally on Node 26; Node 18/20 CI reruns remain with the outer executor
60
- - Preserve historical commit selection across relative document links
61
- - Validate Jev probability normalization with CLI regression coverage
62
- - Record passing focused checks and isolation violation
63
- - Fix integration guard and runtime installer regression coverage
64
- - Fixed stale runtime paths in tests/test_git_guard.py using the installed runtime resolver. Both CI failures reproduced before the fix; all 38 Git guard tests now pass. Both corrected tests also caught a temporarily disabled native guard, which was restored. git diff --check passed. Only the test file changed; remote CI remains for the outer executor
65
- - Fix pinned runtime routing, guard blocking, and launcher bytes
66
- - Restore same-cycle recovery after partial review completion
67
- - Isolate assignment rejections and align native panel exclusions
68
- - Fix dispatch isolation, legacy pinning, and independent panel selection
69
-
70
- ## [1.3.0] - 2026-09-21
332
+ - fix install command receipts and 1.4.0 trust evidence
333
+ - deny pager.<cmd> config keys that git executes
334
+ - parse runner short options as getopt, deny non-literal option words
335
+ - deny file-valued runner options and non-literal runner operands
336
+ - unwrap command runners so git checks reach payload
337
+ - scope git wrapper denial to exec-prefix programs
338
+ - deny git behind programs the guard does not model
339
+ - deny unresolved git option words and credential helpers
340
+ - deny joined continuations and expanding git option values
341
+ - require literal git subcommand, deny comments in git config
342
+ - deny non-literal git config arguments
343
+ - treat only one ASCII digit as redirection file descriptor
344
+ - allow redirected git config reads, keep digit sets denied
345
+ - deny gpg program keys and redirected git config sets
346
+ - parse git config modes; .git/config append stays open
347
+ - close executed git config keys, persisted form, disabling values
348
+ - narrow zsh flag detector and cover git -C paths
349
+ - keep exact --text allowed under git option prefix rule
350
+ - match denied git options by abbreviated prefix
351
+ - deny parameters in command-valued git options
352
+ - accept only plain name expansions in git parameter exception
353
+ - deny git parameters inside wrapped shell strings
354
+ - fail closed on unrecognized quoting in git parameter exception
355
+ - allow git parameters only inside double-quoted spans
356
+ - deny bare and substituted parameters in read-only git arguments
357
+ - fix guard fail-opens and remaining 353 review findings
358
+ - app: Add guards uses installed agents when no hosts sent
359
+ - narrow macOS signing claim to Privacy & Security approval
360
+ - Correct unsupported Fixed and Security changelog entries
361
+ - assert incomplete builds upload nothing at all
362
+ - Insert new changelog entries above existing entries
363
+ - Restore Windows start step in manual monitor README section
364
+ - Classify directory SKILL.md marker as unverified on Windows
365
+ - Reject symlinked SKILL.md marker in Windows bundle probe
366
+ - Detect junctions at held Windows handles; stat-only file opens
367
+ - stop daemon before install, add .deb update, tray dialog
368
+ - Cause: GitGuardian reported one "Generic High Entropy Secret" in commit be3bd5d4, file daemon/app/src/mocks/environment.ts line 10. The value was `tsk_mock_8f3a91c2d7`, a made-up key for TYPESAFE_API_KEY in the dev-only browser mock. It is not a real credential, so nothing needs rotation. Fix: replaced the value with the plain placeholder `mock-api-key` (one line). No other file uses the old value. No test added: this is mock data, not logic. Verification: `tsc --noEmit` is clean and Vitest passes (14 files, 226 tests). GitGuardian was not run locally, so the check result is not confirmed. Remaining risk: GitGuardian scans each commit of the PR, and commit be3bd5d4 still contains the old string. The check can stay red after this commit. If it does, the owner has two options: mark incident 37796517 as a false positive / test credential in the GitGuardian dashboard, or rewrite the branch history to drop the string from be3bd5d4. I did neither: the dashboard needs the owner's account, and a history rewrite plus push is outside this phase
369
+ - compare with release in use, share plugin state
370
+ - unify update rules, badge count, and env switch
371
+ - Fix hooks-init host flags and member hook state
372
+ - Fix env quoted values, host commands, None phase
373
+ - Remove command line from port owner detail
374
+ - Report program name, pass PATH to children, handle Reopen
375
+ - Serialize boot, refresh PATH, fix port screen and autostart
376
+ - The fix is in place, but the Windows failure is not reproduced locally (macOS); only CI on Windows can confirm it. - **Cause:** `test_foreign_host_refused` got `WinError 10053` on `/api/config/parents`. `do_POST` in `daemon/gsd_daemon/serve.py` sent a refusal (403 or 415) without reading the request body. On Windows, a socket closed with unread data resets the connection, so the client can lose the reply. This is a timing race, which is why only one shard and one route failed. - **Origin:** the same-origin refusal is already on main, so the race is not new in this PR. The token refusal that this PR adds has the same exposure. - **Fix:** `do_POST` now reads the full body (per `Content-Length`) before any reply and gives it to the route handlers through `self.rfile`. It is one change at the top of `do_POST`, plus `import io`. It covers all refusals, the 404, and `/api/refresh`. The check order (origin 403, content type 415, token 403) and the route handlers are unchanged. - **Behavior change:** a negative `Content-Length` is now read as 0. Before, the server waited on the socket. - **Verification:** `python3 -m unittest tests.test_daemon_serve` ran 32 tests, all OK. I added no test, because the existing `PostOriginTests` is the test that fails on Windows. - **Not done:** the ponytail and test-writer skills were not run as separate steps, and the change is not committed; it is one modified file in the worktree
377
+ - Keep unknown config keys, wake poll, mask log credentials
378
+ - Apply settings under scan lock; skip session scan in request
379
+ - Harden daemon settings routes: atomic save, host check, finite prices
380
+ - compare updates with release in use; refuse git-source selection
381
+ - fail loud on unpublished pin; reject prerelease selection
382
+ - Two test defects from this PR are fixed in tests/test_daemon_launch.py. No product code changed. The other failures are not from this change. Caused by this PR (fixed): 1. daemon, verify (18), verify (20): test_other_service_on_port_blocks_without_install failed on Linux. The assertion `runner.ran("pip") == []` matches by substring, so it caught the Linux-only python-venv check `python -c "import ensurepip"`. The assertion now checks that no `python -m venv` command ran, which is the first step of an install. 2. windows (3.9 and 3.12, shard 0): three LegacyAutostartTests run with platform="darwin" and reach `os.getuid()`, which does not exist on Windows. They now skip when `os.getuid` is absent, the same rule tests/test_daemon_install.py uses. Not caused by this PR (no change): - windows (3.9 and 3.12, shard 3): the 3.12 log shows only two test_member_tasks errors; I did not read the 3.9 log. - verify (18): the other 43 errors are in test_member_*, test_pipeline_*, test_workflow_architecture, test_trust_evidence and one test_rebase_recovery test. I did not read the verify (20) log beyond the excerpt. - The intent names all of these suites except test_rebase_recovery as the main-branch pollution from PR #260. These checks stay red until that separate fix lands. Verification: - RED: the CI log shows the Linux failure (`['.../python3', '-c', 'import ensurepip']] != []`) and the Windows AttributeError on `os.getuid`. - GREEN: `python3 -m unittest discover -s tests -p test_daemon_launch.py` ran 30 tests, OK (macOS). The changed test also passes with the installer platform forced to linux. With `os.getuid` removed, LegacyAutostartTests ran 6 tests, OK, 3 skipped. - Sabotage: with the port problem made non-blocking, the changed test fails. - Not run locally: the tests on real Linux or Windows, and the full suite
383
+ - Make the temporary daemon build copy user-writable
384
+ - Report failed legacy cleanup as non-blocking; check venv pip
385
+ - Harden launch check requirements and error reporting
386
+ - record env route flag rule and browser transport
387
+ - record read-only browser and token-gated env rulings
388
+ ## [1.4.0] - 2026-09-30
71
389
 
72
390
  ### Added
73
- - migrate legacy runtimes during upgrades
391
+ - **Multi-repo milestones.** One coordinator project can plan, build, review,
392
+ and ship tasks in other repositories (members). A task names its repository
393
+ with `repo:`. Each member gets a marker, guard hooks
394
+ (`--member-of`), a Path-owned checkout for its tasks, and a bound branch at
395
+ build start. Landings in two repositories are journaled so an interrupted
396
+ one can be finished. Members integrate by direct merge or pull request, and
397
+ a member landing can be undone. A member accepts a push only with an
398
+ authorization for that ref, and refuses symlinked lock, marker, and task
399
+ copy paths.
400
+ - **Native Windows support.** The installer, hooks, state locking, dispatch,
401
+ Verify commands, and the project runtime run on Windows with Git for
402
+ Windows (Git Bash). A Windows job in CI now blocks a merge.
403
+ - **Managed `AGENTS.md` block.** The installer adds a marked Path block to an
404
+ existing `AGENTS.md` and keeps the owner's text, on update and on uninstall.
405
+ The block is smaller; phase rules moved into the skills.
406
+ - **Pre-approved gates.** `--pre-approve intent,plan` grants the intent and
407
+ plan approvals for one milestone, for unattended quick-lane runs (#150).
408
+ Ship approval stays manual.
409
+ - **Native retry.** A failed task that was dispatched natively can be retried
410
+ and finished, also for a member task.
74
411
 
75
412
  ### Changed
76
- - Clarify receipt reuse and consolidate release policy guidance
77
- - Clarify legacy upgrade guidance and verify syntax
78
- - update release notes for v1.2.0
413
+ - The verify ledger records the repository of each row, and a build stops when
414
+ a member repository changed outside Path.
415
+ - The monitor daemon refuses POST requests from other websites and requests
416
+ that are not JSON.
417
+ - The dashboard and the tray show the project folder beside the worktree and
418
+ wrap long paths.
79
419
 
80
420
  ### Fixed
81
- - validate installer changes without live host reruns
82
- - preserve closed review cycles in host recovery
83
- - clarify owner gates and accept serial task release evidence
421
+ - An ignored `.DS_Store` inside `.project` no longer blocks setup, landings, or
422
+ the ship check (#149).
423
+ - A landing is refused when ignore rules hide `.project` state (#145).
424
+ - `finish` lands parallel tasks that were dispatched natively (#142).
425
+ - `retire` recovers a task worktree that was only half retired (#143).
426
+ - Empty host `.claude` folders are removed before `.project` gates (#144).
427
+ - The docs audit keeps `Repo root` on the primary repository (#148).
428
+ - A build checkpoint commits a verify ledger that old ignore rules hid (#158).
429
+ - The decide phase can run the research handoff check.
430
+ - The installer names a working path when `--project` finds an existing
431
+ contract.
432
+ - The update notice says that local edits to skills are not carried forward
433
+ (#151).
84
434
 
85
- ### Other
86
- - Clarify reviewer ownership; live verification remains pending
87
- - Reject unretired verification worktrees and branches in release evidence
435
+ ### Security
436
+ - Guard bypasses through Git Bash paths and directory junctions on Windows are
437
+ closed.
88
438
 
89
439
  ## [1.3.1] - 2026-09-22
90
440
 
91
441
  ### Changed
92
- - Clarify legacy runtime backup guidance
93
- - Consolidate legacy runtime migration guidance
94
- - prepare 1.3.1 patch candidate
95
- - Clarify legacy runtime migration documentation
96
- - update release notes for v1.3.0
442
+ - Clearer guidance for the legacy runtime migration and its backup.
97
443
 
98
444
  ### Fixed
99
- - describe untracked legacy migration in help
100
- - preserve older untracked runtimes during migration
445
+ - The legacy runtime migration keeps older runtime folders that Git does not
446
+ track, and the installer help describes this case.
101
447
 
102
- ## [1.4.0] - 2026-09-30
448
+ ## [1.3.0] - 2026-09-21
449
+
450
+ ### Added
451
+ - An upgrade moves a legacy in-repository runtime out of the project and
452
+ leaves a backup to review (`--runtime-migrate`).
453
+
454
+ ### Changed
455
+ - On Cursor and Copilot, only the reviewer corrects a review, and only while
456
+ its review cycle is open. A closed review cycle is not rewritten.
457
+
458
+ ## [1.2.0] - 2026-09-20
103
459
 
104
460
  ### Added
105
- - key verify ledger rows by repo and fail closed on member drift (S3d)
106
- - guard coders in member sidecars with coordinator host hooks (S3c3b2)
107
- - dispatch and land member tasks in build rounds (S3c3b1)
108
- - activate member tasks with a live copy in the member sidecar (S3c3a)
109
- - prove landed member tasks from record and member landing (S3c2b)
110
- - land member tasks with a journaled two-repo landing (S3c2a)
111
- - isolate member tasks in Path-owned member checkouts (S3c1)
112
- - shrink the AGENTS.md block and move phase rules into skills
113
- - install AGENTS.md as a managed gsd-path block
114
- - lock members and create member bound branches at build start (S3b)
115
- - plan member tasks with repo: (S3a)
116
- - pre-approve intent and plan gates for unattended quick lanes (#150)
117
- - hold member writes to the coordinator phase (S2d)
118
- - install member git hooks with --member-of (S2c)
119
- - add member mode to git guard with push authorization (S2b)
120
- - add multi-repo member role marker (S2a)
121
- - add multi-repo member contract (S1)
461
+ - **Path settings.** Set the shipping mode, the review panel, and the model and
462
+ effort per role, for the user or for one project, in the dashboard or with
463
+ `path_config.py`.
464
+ - **Project history in the dashboard.** Browse project files and archived
465
+ milestones, read a file at any Git commit, and load the full recorded
466
+ evidence.
467
+ - **Optional Jev evidence screening.** Reviewers can ask for an advisory check
468
+ of chosen criteria and evidence. It is off by default and never replaces a
469
+ recorded review or Verify.
470
+ - **External worktrees and pinned runtimes.** Task, verification, and
471
+ integration worktrees live outside the project checkout. A project pins its
472
+ runtime version by content digest, with upgrade and restore commands.
473
+ - **One model policy.** User, project, host, and task choices for sub-agent
474
+ models go through one resolver. A recorded assignment stays pinned.
122
475
 
123
476
  ### Changed
124
- - Reflow Copilot exclusion wording in trust-validation docs
125
- - record 1.4.0 live release evidence
126
- - prepare 1.4.0 minor candidate
127
- - Note invalid-copy rejection evidence in multi-repo S5d
128
- - multi-repo: native retry for a failed member task
129
- - Refresh multi-repo activation docs and host guidance
130
- - multi-repo: native member task dispatch
131
- - evaluate_host: keep the release addendum on the quick scenario only
132
- - multi-repo S5d: two-repo host scenario
133
- - Clarify optional hooks and remove obsolete gate note
134
- - multi-repo S5c: activate member execution and document it
135
- - Correct S5b member documentation
136
- - record app release tags and Linux formats
137
- - daemon: refuse cross-site and non-JSON POSTs
138
- - plan a native dashboard app for every OS
139
- - multi-repo S5b: greenfield members and member detect
140
- - Make ReplaceTests portable to POSIX Python 3.9
141
- - Align two-repo proof documentation with test coverage
142
- - multi-repo S5a: two-repo full-cycle proof
143
- - Point lookahead drift guidance to S4d
144
- - multi-repo S4d: member lookahead drift check
145
- - Clarify active milestone member status documentation
146
- - multi-repo S4c3: member plan check, status, and diagnose
147
- - Document member undo safeguards
148
- - multi-repo S4c2: undo a member landing
149
- - Document member retirement guards and correct proof scope
150
- - multi-repo S4c1: retire member bound branches at bind-next
151
- - Exercise core.autocrlf=true in the attributes test under the dev runner
152
- - Keep .project LF under core.autocrlf=true with a local attributes rule
153
- - Port the member-close changes from main to native Windows
154
- - Patch only the probe module's os in the Windows retry test
155
- - Port the multi-repo member tests to native Windows
156
- - Run the native Windows gate in CI and make it blocking
157
- - Never skip an archive check because resolve() raised on Windows
158
- - Decode test subprocess output as UTF-8
159
- - Use the directory mutex for the discussion lock outside git on Windows
160
- - Make member-isolation and release-receipt tests portable to Windows
161
- - Decode archive and projection test output as UTF-8
162
- - Lock discussions outside git on Windows and report sync paths with slashes
163
- - Type guard-test helper paths the way Git Bash agents do
164
- - Retry installer lock and skill-directory moves on Windows
165
- - Make installer and core-migration tests portable to Windows
166
- - Keep doctor running when git is not on PATH on Windows
167
- - Make the runtime lifecycle tests portable to Windows
168
- - Retry runtime directory renames on Windows and copy the launcher exactly
169
- - Expect native paths in the Zed and Grok host command tests
170
- - Close OpenCode session-store connections so Windows can delete them
171
- - Read dispatch briefs as UTF-8 in the fake children
172
- - Send native Windows relative paths to git with forward slashes
173
- - Make daemon tests platform-correct on Windows
174
- - Write plugin-managed files as UTF-8 bytes
175
- - Keep discovered project roots in their original case on Windows
176
- - Compare lookahead layout as POSIX paths on Windows
177
- - Resolve codex through PATHEXT in the Codex evaluation harness
178
- - Shadow the real codex in the evaluate_codex test on Windows
179
- - Keep tests from ever reaching a real GitHub account
180
- - Send subprocess input to git byte-exact on Windows
181
- - Document native Windows requirements
182
- - Make the Node suite and dev runner portable to Windows
183
- - Make test fixtures portable to Windows
184
- - Update member ship documentation and sync skill copies
185
- - multi-repo S4b2b: post-commit member ship checks
186
- - tests: hold and reap dispatch wrappers started in-process
187
- - Align multi-repo work plan with S4b2a
188
- - Reuse a final-scope wave review whose Surface field carries detail
189
- - tests: keep git auto-maintenance in the foreground
190
- - multi-repo S4b2a: member close and ship body lines
191
- - tests: finish git housekeeping before trust-evidence temp cleanup
192
- - Clarify member PR integration documentation
193
- - multi-repo S4b1b: member pull-request integration
194
- - Document member integration recovery and refresh rules
195
- - multi-repo S4b1a: member direct integration
196
- - Split child commands with POSIX quoting and write runtime output as UTF-8
197
- - Install hooks and wrap Core hooks correctly on Windows
198
- - Close Windows guard bypasses and decode text as UTF-8
199
- - Run dispatch, verify, and loop processes portably on Windows
200
- - Create STATE.md on Windows through pinned handles
201
- - Lock pipeline state on Windows and write product files as LF bytes
202
- - Leave the Windows CI job to the PR where Windows passes
203
- - Isolate USERPROFILE with HOME in tests
204
- - Pick the lock implementation by what imports, and split Windows CI suites
205
- - Write test fixtures as exact UTF-8 LF bytes
206
- - Write package.json as LF bytes in the skill-resource sync
207
- - Add Windows platform helpers, portable dev runners, and a Windows CI job
208
- - Clarify member head binding documentation
209
- - multi-repo S4a2: member reviewed heads in the final review
210
- - Point workflow to member Verify contract
211
- - multi-repo S4a1: member sidecars for project Verify
212
- - Correct S3d ledger and drift guidance
213
- - Clarify member sidecar hook documentation
214
- - Refresh member dispatch documentation and generated comments
215
- - Document member activation safeguards and recovery
216
- - Document member landing proof and archive recovery
217
- - Correct member landing documentation and hook details
218
- - merge: preserve validated dashboard fixes after publication timeout
219
- - Refresh dashboard and tray documentation
220
- - Clarify native retry finish documentation
221
- - Align S3c documentation with member execution timing
222
- - dispatch_driver: finish a native retry after a blocked driver attempt
223
- - Drop the Node copy of the project runtime file list
224
- - Correct managed AGENTS.md guidance and ADR context
225
- - Document ignored .DS_Store setup behavior
226
- - Document S3b build-start lock and recovery
227
- - Sync generated GSD Path scripts
228
- - Clarify Finder junk handling in pipeline docs
229
- - Document pre-approval scope and reconcile gate guidance
230
- - Correct stale multi-repo planning documentation
231
- - Document legacy ledger checkpoint behavior
232
- - Document ignored .project artifact handling
233
- - Clarify local skill edit recovery guidance
234
- - Correct stale S2d work plan guidance
235
- - Clarify research transition gate documentation
236
- - propose ADR 0003 managed AGENTS.md block
237
- - Clarify first-install contract collision guidance
238
- - Clarify half-retire recovery documentation and verify formatting
239
- - Document Claude staging cleanup during shipment
240
- - Document ignored pipeline state recovery
241
- - Correct S2c member hook work plan
242
- - Document native parallel finish recovery
243
- - Clarify member guard documentation and authorization lifetime
244
- - Clarify member marker documentation and verify formatting
245
- - Update S1 plan and remove stale allowlist entry
246
- - Clarify member delete authorization and close recovery proof
247
- - close multi-repo plan open items R23-R24
248
- - Clarify member documentation and correct S5 doc targets
249
- - close multi-repo plan open items R17-R20
250
- - add multi-repo coordinator ADR and work plan
251
- - update release notes for v1.3.1
477
+ - npm releases are automated: release notes, package verification, and
478
+ provenance.
479
+ - The release gate validates only the hosts a change affects and reuses
480
+ unchanged host receipts.
252
481
 
253
482
  ### Fixed
254
- - Fix three Windows races and identity mismatches found on the rebased stack
255
- - Fix the member-build-start path regex
256
- - Fix the Windows CI-only test failures and a Python 3.9 guard crash
257
- - Fix the last native Windows test failures
258
- - show actual project folders in toolbar rows
259
- - group tray status progress and usage on separate lines
260
- - keep tray folder paths in tooltips
261
- - show project identity and wrap tray panel details
262
- - wrap full project paths on dashboard board
263
- - show main project folder alongside dashboard worktree
264
- - keep runtime module identity independent of test order
265
- - detect legacy marker as a whole line; keep distribution layout in AGENTS.md
266
- - match AGENTS.md markers as whole lines; doctor flags a cut block
267
- - harden AGENTS.md block install and uninstall
268
- - ignored .DS_Store in .project no longer orphans project setup (#149)
269
- - skip ignored .DS_Store inside .project subdirectories (#149)
270
- - keep DOCS-AUDIT Repo root on the primary repo, not the sidecar (#148)
271
- - commit a legacy ignored verify ledger in build checkpoints
272
- - skip ignored untracked .project entries in ship allowlist checks (#149)
273
- - say local skill edits are not carried forward (#151)
274
- - let decide run the research handoff check at decide/active
275
- - name a working path when --project finds an existing contract
276
- - prune empty host .claude dirs before .project gates
277
- - let retire recover a half-retired task worktree
278
- - refuse landings when ignore rules hide .project state
279
- - let finish land natively dispatched parallel tasks
483
+ - The dashboard shows project runtime updates and their results.
484
+ - After verified integration, ordinary branches can take product work again
485
+ while archived milestones stay protected.
280
486
 
281
- ### Other
282
- - Align Copilot exclusion docs with persistent validator exclusion
283
- - Let forced member retire proceed on invalid task copy
284
- - Correct native member diff instructions and track retry gap
285
- - Record Claude and Codex two-repo host proof
286
- - Fix native member routing and isolate host scenario
287
- - Align activation host proof with pre-merge gate
288
- - Correct S5d host proof and release timing
289
- - Synced the canonical Windows checkout-path fix into 11 generated skill copies. Before the change, the resource sync check failed and caused the reported test failures. Afterward, the sync check, four affected Node tests, and 66 focused Python tests passed. Windows CI still needs to rerun
290
- - Fixed the Windows checkout-path comparison and replaced three test-fixture deletions that fail on read-only Git objects. The regression test failed before the fix and passed after; 66 focused tests pass locally. Windows CI still needs to rerun. The ponytail skill was unavailable in this environment
291
- - Record A1 daemon version and port ownership questions
292
- - Move legacy cleanup into A1 and require version bumps
293
- - Gate daemon reuse by bundled version
294
- - Specify app update index and verify migration cleanup
295
- - Plan legacy autostart cleanup during app upgrade
296
- - Resolve native app plan review findings
297
- - Fixed the Windows test fixtures in tests/test_member_create.py: Git now gets a forward-slash temporary path, and the gh test uses a platform-independent fake process. All 22 focused tests pass locally; both fixes failed sensitivity checks when deliberately undone. Windows CI still needs to rerun
298
- - Pin GitHub host and verify remote main
299
- - Verify checkout history and resume partial clones
300
- - Honor configured origins and prevent repository recreation
301
- - Reject invalid checkouts and stale clone reuse
302
- - Fix member creation recovery and validation
303
- - Prove member hook denials and branch retirement
304
- - Fixed two Windows daemon test races in tests/test_daemon_serve.py. The activity test now counts events for its own project. The poll test stages STATE.md outside the watched directory and retries a transient replacement lock. The activity failure was reproduced locally before the fix; all 15 daemon serve tests pass after it, including a simulated file-lock check. PR #230 remains open; CI has not been rerun in this phase
305
- - Reuse linted member base for lookahead approval
306
- - Detect member rename drift and fix done-task test
307
- - Filter done member drift; focused test remains failing
308
- - Scope member status to the active milestone
309
- - Block member undo while landing journals are pending
310
- - Guard member undo against publication and concurrent landings
311
- - Harden member undo journaling, recovery, and locking
312
- - Guard member retirement against moved refs and team checkouts
313
- - Sync member status fix to generated skill copies
314
- - Keep member status validation read-only
315
- - Read staged member lock in ship guard
316
- - Repair merged member PR body before tagging
317
- - Validate member PR provenance and repair reused bodies
318
- - Set Git identity in the temporary member test repository to fix the CI merge failures. The focused test reproduced the failure before the change; all 11 member integration tests passed after it, and a sabotage check reproduced the failure. Ponytail review found no smaller fix. CI has not rerun
319
- - Fixed the test fixture in tests/test_member_integration.py by setting the bare remote’s HEAD to main. The CI-style Git setting reproduced the 4 failures and 5 errors before the fix; all 11 focused tests passed after it. Skipping the new line caused the original error again. Ponytail review found no smaller fix. CI has not rerun
320
- - Guard member merges, resume interrupted branches, and refresh validation
321
- - Ignore commented member heads in review headers
322
- - Retire switched member sidecars without changing bound branches
323
- - Retire detached sidecars and retain member Verify output
324
- - Refuse colliding members and clean up rejected Verify
325
- - Fix member Verify sidecars and final review reuse
326
- - Fix member drift detection and document Verify output policy
327
- - Report untracked host config collisions during activation
328
- - Restore and validate member hooks before every launch
329
- - Both CI jobs failed because the temporary member repository had no Git author identity. I set its identity in the test fixture. The member-round suite passed (9 tests) with automatic identity discovery disabled; removing the fixture setting reproduced the failure. `git diff --check` passed. The ponytail skill was unavailable. An earlier diagnostic command created an empty `/tmp/ci-verify-18.log` outside the worktree; I made no other out-of-worktree changes
330
- - Retire recovered members and clarify locked brief bases
331
- - Recover partial and stale member isolates
332
- - Fix member task resume, retirement, and contract drift
333
- - Reject tracked and symlinked member copy paths
334
- - Reject missing member task agents
335
- - Unify member task contract field checks
336
- - Fix member recovery, activation, and retirement safeguards
337
- - Reject changed member task contracts after landing
338
- - Harden member landing proof across archival and status
339
- - Serialize coordinator landings and block pending member journals
340
- - Serialize member landings with per-member locks
341
- - Guard member landing with STATE branch checks
342
- - Fix member landing recovery and contract checks
343
- - Preserve bare-backed worktree identity and paths
344
- - Fix nested project identity and worktree paths
345
- - Fix dashboard search by repository name
346
- - Guard member checkout reuse and retirement ownership
347
- - Fix member isolation placement, lock guidance, and retirement
348
- - Preserve AGENTS.md owner text across updates and uninstall
349
- - Reject symlinked member lock paths
350
- - Remove stale member lock when tasks drop members
351
- - Preflight member build starts before creating refs
352
- - Preserve tracked .DS_Store in archive manifests
353
- - Resolve landed member bases during plan approval
354
- - Honor canonical lane and Config during preauthorization
355
- - Fix staged legacy ledger checkpoint retries
356
- - Validate docs audit rulings before preapproval
357
- - Warn on legacy Codex skill backups
358
- - Clarify block cutoff and release evaluation scope
359
- - Reference PR #161 in rejected option
360
- - Clarify managed block size and migration exceptions
361
- - Skip unreadable listed checkouts when checking foreign members
362
- - Resume blocked decide before the research recheck
363
- - Fix stale member markers, symlinks, and Git inspection failures
364
- - Suppress unsafe move when contract backup exists
365
- - Probe plan and archived ledger ignore rules
366
- - Probe fixed-name project files before landing
367
- - Require managed coordinator guard before installing member hooks
368
- - Harden member hook staging and worktree path checks
369
- - Require origin/main baseline for member joins and pushes
370
- - Reject nonfile member markers until manual removal
371
- - Preserve marker directory errors in validation
372
- - Reject redirected member marker directories
373
- - Write member marker before recording membership
374
- - Skip valid markers during member repair
375
- - Fix member marker recovery and coordinator ownership
376
- - Fix member validation and duplicate repository detection
377
- - Authorize direct member bound branch publication
378
- - Specify per-ref member push authorization for close
379
- - Fix member branch, landing, and ship recovery plan
380
- - Revise multi-repo plan for accepted design reviews
381
- - Align multi-repo plan with member binding decisions
487
+ ## [1.1.0] - 2026-09-18
488
+
489
+ ### Added
490
+ - Scoped npm package `@opengsd/gsd-path` with trusted publishing.
491
+ - Release trust evidence validation and the host matrix.
492
+
493
+ ### Changed
494
+ - Release workflow and maintainer documentation for npm publication.
495
+
496
+ ## [1.0.0] - 2026-09-15
497
+
498
+ ### Added
499
+ - First public release of the disk-backed GSD Path pipeline.
500
+ - Multi-host installer, skills package, and project contracts.