@opengsd/gsd-path 1.5.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.
- package/CHANGELOG.md +138 -0
- package/DOCS.md +4 -3
- package/FULL.md +64 -4
- package/HOOKS.md +63 -2
- package/MIGRATE.md +12 -0
- package/QUICK.md +4 -2
- package/README.md +67 -15
- package/RUNTIME.md +23 -5
- package/UPDATE.md +35 -0
- package/WORKFLOW.md +58 -3
- package/package.json +1 -1
- package/scripts/_common.py +107 -1
- package/scripts/build_recovery.py +62 -30
- package/scripts/build_state.py +195 -5
- package/scripts/check_handoffs.py +92 -30
- package/scripts/check_task_briefs.py +19 -14
- package/scripts/detect_project.py +17 -2
- package/scripts/discussion_records.py +9 -1
- package/scripts/discussion_validate.py +7 -6
- package/scripts/dispatch_driver.py +157 -31
- package/scripts/git_guard.py +24 -5
- package/scripts/guard_hook.py +1216 -47
- package/scripts/install.mjs +76 -3
- package/scripts/install.py +182 -37
- package/scripts/integration.py +98 -64
- package/scripts/isolation.py +148 -11
- package/scripts/members.py +68 -25
- package/scripts/migrate_core.py +2 -0
- package/scripts/model_policy.py +5 -1
- package/scripts/pipeline_diagnose.py +17 -2
- package/scripts/pipeline_git.py +68 -30
- package/scripts/pipeline_state.py +28 -6
- package/scripts/pipeline_undo.py +17 -8
- package/scripts/promote_lookahead.py +3 -3
- package/scripts/review_findings.py +180 -44
- package/scripts/roadmap.py +9 -1
- package/scripts/runtime_store.py +1 -0
- package/scripts/state_checkpoint.py +30 -9
- package/scripts/state_promote.py +15 -4
- package/scripts/task_context.py +2 -0
- package/scripts/workflow_run.py +9 -2
- package/skills/gsd-path/DEFINE.md +6 -2
- package/skills/gsd-path/PLAN.md +3 -0
- package/skills/gsd-path/ROADMAP.md +16 -6
- package/skills/gsd-path/SHIP.md +26 -4
- package/skills/gsd-path/SKILL.md +52 -24
- package/skills/gsd-path/references/build-native.md +96 -9
- package/skills/gsd-path/references/build-recovery.md +13 -0
- package/skills/gsd-path/references/coder.md +7 -3
- package/skills/gsd-path/references/operating-rules.md +11 -3
- package/skills/gsd-path/references/planner.md +13 -1
- package/skills/gsd-path/references/reviewer-final.md +5 -5
- package/skills/gsd-path/references/reviewer-wave.md +46 -13
- package/skills/gsd-path/references/runtime-selection.md +9 -0
- package/skills/gsd-path/scripts/_common.py +107 -1
- package/skills/gsd-path/scripts/build_recovery.py +62 -30
- package/skills/gsd-path/scripts/build_state.py +195 -5
- package/skills/gsd-path/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path/scripts/detect_project.py +17 -2
- package/skills/gsd-path/scripts/discussion_records.py +9 -1
- package/skills/gsd-path/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path/scripts/dispatch_driver.py +157 -31
- package/skills/gsd-path/scripts/git_guard.py +24 -5
- package/skills/gsd-path/scripts/integration.py +98 -64
- package/skills/gsd-path/scripts/isolation.py +148 -11
- package/skills/gsd-path/scripts/members.py +68 -25
- package/skills/gsd-path/scripts/model_policy.py +5 -1
- package/skills/gsd-path/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path/scripts/review_findings.py +180 -44
- package/skills/gsd-path/scripts/roadmap.py +9 -1
- package/skills/gsd-path/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path/scripts/state_promote.py +15 -4
- package/skills/gsd-path/scripts/task_context.py +2 -0
- package/skills/gsd-path/scripts/workflow_run.py +9 -2
- package/skills/gsd-path/templates/final-review.md +5 -5
- package/skills/gsd-path/templates/state.md +1 -0
- package/skills/gsd-path/templates/task.md +1 -0
- package/skills/gsd-path/templates/wave-review.md +18 -9
- package/skills/gsd-path-build/references/build-native.md +96 -9
- package/skills/gsd-path-build/references/build-recovery.md +13 -0
- package/skills/gsd-path-build/references/coder.md +7 -3
- package/skills/gsd-path-build/references/operating-rules.md +11 -3
- package/skills/gsd-path-build/references/reviewer-final.md +5 -5
- package/skills/gsd-path-build/references/reviewer-wave.md +46 -13
- package/skills/gsd-path-build/references/runtime-selection.md +9 -0
- package/skills/gsd-path-build/scripts/_common.py +107 -1
- package/skills/gsd-path-build/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-build/scripts/build_state.py +195 -5
- package/skills/gsd-path-build/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-build/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-build/scripts/detect_project.py +17 -2
- package/skills/gsd-path-build/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-build/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-build/scripts/dispatch_driver.py +157 -31
- package/skills/gsd-path-build/scripts/integration.py +98 -64
- package/skills/gsd-path-build/scripts/isolation.py +148 -11
- package/skills/gsd-path-build/scripts/members.py +68 -25
- package/skills/gsd-path-build/scripts/model_policy.py +5 -1
- package/skills/gsd-path-build/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-build/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-build/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-build/scripts/review_findings.py +180 -44
- package/skills/gsd-path-build/scripts/roadmap.py +9 -1
- package/skills/gsd-path-build/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-build/scripts/state_promote.py +15 -4
- package/skills/gsd-path-build/scripts/task_context.py +2 -0
- package/skills/gsd-path-build/scripts/workflow_run.py +9 -2
- package/skills/gsd-path-build/templates/task.md +1 -0
- package/skills/gsd-path-build/templates/wave-review.md +18 -9
- package/skills/gsd-path-decide/references/operating-rules.md +11 -3
- package/skills/gsd-path-decide/references/runtime-selection.md +9 -0
- package/skills/gsd-path-decide/scripts/_common.py +107 -1
- package/skills/gsd-path-decide/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-decide/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-decide/scripts/detect_project.py +17 -2
- package/skills/gsd-path-decide/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-decide/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-decide/scripts/integration.py +98 -64
- package/skills/gsd-path-decide/scripts/isolation.py +148 -11
- package/skills/gsd-path-decide/scripts/members.py +68 -25
- package/skills/gsd-path-decide/scripts/model_policy.py +5 -1
- package/skills/gsd-path-decide/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-decide/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-decide/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-decide/scripts/roadmap.py +9 -1
- package/skills/gsd-path-decide/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-decide/scripts/state_promote.py +15 -4
- package/skills/gsd-path-define/SKILL.md +6 -2
- package/skills/gsd-path-define/references/build-recovery.md +13 -0
- package/skills/gsd-path-define/references/operating-rules.md +11 -3
- package/skills/gsd-path-define/references/runtime-selection.md +9 -0
- package/skills/gsd-path-define/scripts/_common.py +107 -1
- package/skills/gsd-path-define/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-define/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-define/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-define/scripts/detect_project.py +17 -2
- package/skills/gsd-path-define/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-define/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-define/scripts/integration.py +98 -64
- package/skills/gsd-path-define/scripts/isolation.py +148 -11
- package/skills/gsd-path-define/scripts/members.py +68 -25
- package/skills/gsd-path-define/scripts/model_policy.py +5 -1
- package/skills/gsd-path-define/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-define/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-define/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-define/scripts/roadmap.py +9 -1
- package/skills/gsd-path-define/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-define/scripts/state_promote.py +15 -4
- package/skills/gsd-path-define/templates/state.md +1 -0
- package/skills/gsd-path-discuss/references/operating-rules.md +11 -3
- package/skills/gsd-path-discuss/references/runtime-selection.md +9 -0
- package/skills/gsd-path-discuss/scripts/_common.py +107 -1
- package/skills/gsd-path-discuss/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-discuss/scripts/model_policy.py +5 -1
- package/skills/gsd-path-docs-audit/references/operating-rules.md +11 -3
- package/skills/gsd-path-docs-audit/references/runtime-selection.md +9 -0
- package/skills/gsd-path-docs-audit/scripts/_common.py +107 -1
- package/skills/gsd-path-docs-audit/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-docs-audit/scripts/detect_project.py +17 -2
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-docs-audit/scripts/integration.py +98 -64
- package/skills/gsd-path-docs-audit/scripts/isolation.py +148 -11
- package/skills/gsd-path-docs-audit/scripts/members.py +68 -25
- package/skills/gsd-path-docs-audit/scripts/model_policy.py +5 -1
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-docs-audit/scripts/roadmap.py +9 -1
- package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +15 -4
- package/skills/gsd-path-forensics/references/operating-rules.md +11 -3
- package/skills/gsd-path-forensics/references/runtime-selection.md +9 -0
- package/skills/gsd-path-forensics/scripts/_common.py +107 -1
- package/skills/gsd-path-forensics/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-forensics/scripts/model_policy.py +5 -1
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +17 -2
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +17 -8
- package/skills/gsd-path-inspect/references/operating-rules.md +11 -3
- package/skills/gsd-path-inspect/references/runtime-selection.md +9 -0
- package/skills/gsd-path-inspect/scripts/_common.py +107 -1
- package/skills/gsd-path-inspect/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-inspect/scripts/detect_project.py +17 -2
- package/skills/gsd-path-inspect/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-inspect/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-inspect/scripts/integration.py +98 -64
- package/skills/gsd-path-inspect/scripts/isolation.py +148 -11
- package/skills/gsd-path-inspect/scripts/members.py +68 -25
- package/skills/gsd-path-inspect/scripts/model_policy.py +5 -1
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-inspect/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-inspect/scripts/roadmap.py +9 -1
- package/skills/gsd-path-inspect/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-inspect/scripts/state_promote.py +15 -4
- package/skills/gsd-path-inspect/scripts/workflow_run.py +9 -2
- package/skills/gsd-path-inspect/templates/state.md +1 -0
- package/skills/gsd-path-loop/references/operating-rules.md +11 -3
- package/skills/gsd-path-loop/references/runtime-selection.md +9 -0
- package/skills/gsd-path-loop/scripts/_common.py +107 -1
- package/skills/gsd-path-loop/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-loop/scripts/model_policy.py +5 -1
- package/skills/gsd-path-migrate/SKILL.md +8 -0
- package/skills/gsd-path-migrate/references/operating-rules.md +11 -3
- package/skills/gsd-path-migrate/references/runtime-selection.md +9 -0
- package/skills/gsd-path-migrate/scripts/_common.py +107 -1
- package/skills/gsd-path-migrate/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-migrate/scripts/migrate_core.py +2 -0
- package/skills/gsd-path-migrate/scripts/model_policy.py +5 -1
- package/skills/gsd-path-plan/SKILL.md +3 -0
- package/skills/gsd-path-plan/references/build-recovery.md +13 -0
- package/skills/gsd-path-plan/references/operating-rules.md +11 -3
- package/skills/gsd-path-plan/references/planner.md +13 -1
- package/skills/gsd-path-plan/references/runtime-selection.md +9 -0
- package/skills/gsd-path-plan/scripts/_common.py +107 -1
- package/skills/gsd-path-plan/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-plan/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-plan/scripts/detect_project.py +17 -2
- package/skills/gsd-path-plan/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-plan/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-plan/scripts/integration.py +98 -64
- package/skills/gsd-path-plan/scripts/isolation.py +148 -11
- package/skills/gsd-path-plan/scripts/members.py +68 -25
- package/skills/gsd-path-plan/scripts/model_policy.py +5 -1
- package/skills/gsd-path-plan/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-plan/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-plan/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-plan/scripts/roadmap.py +9 -1
- package/skills/gsd-path-plan/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-plan/scripts/state_promote.py +15 -4
- package/skills/gsd-path-plan/scripts/workflow_run.py +9 -2
- package/skills/gsd-path-plan/templates/task.md +1 -0
- package/skills/gsd-path-research/references/operating-rules.md +11 -3
- package/skills/gsd-path-research/references/runtime-selection.md +9 -0
- package/skills/gsd-path-research/scripts/_common.py +107 -1
- package/skills/gsd-path-research/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-research/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-research/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-research/scripts/detect_project.py +17 -2
- package/skills/gsd-path-research/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-research/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-research/scripts/integration.py +98 -64
- package/skills/gsd-path-research/scripts/isolation.py +148 -11
- package/skills/gsd-path-research/scripts/members.py +68 -25
- package/skills/gsd-path-research/scripts/model_policy.py +5 -1
- package/skills/gsd-path-research/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-research/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-research/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-research/scripts/roadmap.py +9 -1
- package/skills/gsd-path-research/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-research/scripts/state_promote.py +15 -4
- package/skills/gsd-path-roadmap/SKILL.md +16 -6
- package/skills/gsd-path-roadmap/references/operating-rules.md +11 -3
- package/skills/gsd-path-roadmap/references/runtime-selection.md +9 -0
- package/skills/gsd-path-roadmap/scripts/_common.py +107 -1
- package/skills/gsd-path-roadmap/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-roadmap/scripts/detect_project.py +17 -2
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-roadmap/scripts/integration.py +98 -64
- package/skills/gsd-path-roadmap/scripts/isolation.py +148 -11
- package/skills/gsd-path-roadmap/scripts/members.py +68 -25
- package/skills/gsd-path-roadmap/scripts/model_policy.py +5 -1
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-roadmap/scripts/roadmap.py +9 -1
- package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-roadmap/scripts/state_promote.py +15 -4
- package/skills/gsd-path-ship/SKILL.md +26 -4
- package/skills/gsd-path-ship/references/operating-rules.md +11 -3
- package/skills/gsd-path-ship/references/reviewer-final.md +5 -5
- package/skills/gsd-path-ship/references/reviewer-wave.md +46 -13
- package/skills/gsd-path-ship/references/runtime-selection.md +9 -0
- package/skills/gsd-path-ship/scripts/_common.py +107 -1
- package/skills/gsd-path-ship/scripts/build_recovery.py +62 -30
- package/skills/gsd-path-ship/scripts/build_state.py +195 -5
- package/skills/gsd-path-ship/scripts/check_handoffs.py +92 -30
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +19 -14
- package/skills/gsd-path-ship/scripts/detect_project.py +17 -2
- package/skills/gsd-path-ship/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-ship/scripts/discussion_validate.py +7 -6
- package/skills/gsd-path-ship/scripts/integration.py +98 -64
- package/skills/gsd-path-ship/scripts/isolation.py +148 -11
- package/skills/gsd-path-ship/scripts/members.py +68 -25
- package/skills/gsd-path-ship/scripts/model_policy.py +5 -1
- package/skills/gsd-path-ship/scripts/pipeline_git.py +68 -30
- package/skills/gsd-path-ship/scripts/pipeline_state.py +28 -6
- package/skills/gsd-path-ship/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-ship/scripts/roadmap.py +9 -1
- package/skills/gsd-path-ship/scripts/state_checkpoint.py +30 -9
- package/skills/gsd-path-ship/scripts/state_promote.py +15 -4
- package/skills/gsd-path-ship/scripts/workflow_run.py +9 -2
- package/skills/gsd-path-ship/templates/final-review.md +5 -5
- package/skills/gsd-path-ship/templates/wave-review.md +18 -9
- package/skills/gsd-path-undo/references/operating-rules.md +11 -3
- package/skills/gsd-path-undo/references/runtime-selection.md +9 -0
- package/skills/gsd-path-undo/scripts/_common.py +107 -1
- package/skills/gsd-path-undo/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-undo/scripts/model_policy.py +5 -1
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +17 -8
- package/skills/path/DEFINE.md +6 -2
- package/skills/path/PLAN.md +3 -0
- package/skills/path/ROADMAP.md +16 -6
- package/skills/path/SHIP.md +26 -4
- package/skills/path/SKILL.md +52 -24
- package/skills/path/references/build-native.md +96 -9
- package/skills/path/references/build-recovery.md +13 -0
- package/skills/path/references/coder.md +7 -3
- package/skills/path/references/operating-rules.md +11 -3
- package/skills/path/references/planner.md +13 -1
- package/skills/path/references/reviewer-final.md +5 -5
- package/skills/path/references/reviewer-wave.md +46 -13
- package/skills/path/references/runtime-selection.md +9 -0
- package/skills/path/scripts/_common.py +107 -1
- package/skills/path/scripts/build_recovery.py +62 -30
- package/skills/path/scripts/build_state.py +195 -5
- package/skills/path/scripts/check_handoffs.py +92 -30
- package/skills/path/scripts/check_task_briefs.py +19 -14
- package/skills/path/scripts/detect_project.py +17 -2
- package/skills/path/scripts/discussion_records.py +9 -1
- package/skills/path/scripts/discussion_validate.py +7 -6
- package/skills/path/scripts/dispatch_driver.py +157 -31
- package/skills/path/scripts/git_guard.py +24 -5
- package/skills/path/scripts/integration.py +98 -64
- package/skills/path/scripts/isolation.py +148 -11
- package/skills/path/scripts/members.py +68 -25
- package/skills/path/scripts/model_policy.py +5 -1
- package/skills/path/scripts/pipeline_git.py +68 -30
- package/skills/path/scripts/pipeline_state.py +28 -6
- package/skills/path/scripts/promote_lookahead.py +3 -3
- package/skills/path/scripts/review_findings.py +180 -44
- package/skills/path/scripts/roadmap.py +9 -1
- package/skills/path/scripts/state_checkpoint.py +30 -9
- package/skills/path/scripts/state_promote.py +15 -4
- package/skills/path/scripts/task_context.py +2 -0
- package/skills/path/scripts/workflow_run.py +9 -2
- package/skills/path/templates/final-review.md +5 -5
- package/skills/path/templates/state.md +1 -0
- package/skills/path/templates/task.md +1 -0
- package/skills/path/templates/wave-review.md +18 -9
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,144 @@ app and the daemon have their own file,
|
|
|
11
11
|
[daemon/app/CHANGELOG.md](daemon/app/CHANGELOG.md). Release bookkeeping and
|
|
12
12
|
test-only changes are not listed; the Git history has them.
|
|
13
13
|
|
|
14
|
+
## [1.6.0] - 2026-10-12
|
|
15
|
+
|
|
16
|
+
### Added
|
|
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
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
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
|
|
65
|
+
|
|
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
|
|
119
|
+
|
|
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
|
|
14
152
|
## [1.5.0] - 2026-10-09
|
|
15
153
|
|
|
16
154
|
### Added
|
package/DOCS.md
CHANGED
|
@@ -36,6 +36,7 @@ DOCS.md (here) four journeys in one place
|
|
|
36
36
|
| **Team** — pin skills in repo | `--local` install; see [Installing](#installing) |
|
|
37
37
|
| **Shipping broke** — archive commit blocked | [HOOKS.md](HOOKS.md) (expected with hooks) |
|
|
38
38
|
| **Several repos** — one milestone changes them all | [Multi-repo milestones](README.md#multi-repo-milestones) |
|
|
39
|
+
| **Several people** — one project | [Working with more than one person](FULL.md#working-with-more-than-one-person) |
|
|
39
40
|
|
|
40
41
|
---
|
|
41
42
|
|
|
@@ -101,9 +102,9 @@ README's Windows notes). **Always** restart the agent session after install.
|
|
|
101
102
|
|
|
102
103
|
Full roots and invocation table: [README.md](README.md#install-summary).
|
|
103
104
|
|
|
104
|
-
**Python installer:** `scripts/install.py
|
|
105
|
-
|
|
106
|
-
entry point.
|
|
105
|
+
**Python installer:** `scripts/install.py`; see
|
|
106
|
+
[README.md](README.md#install-summary) for what it supports. The Node CLI
|
|
107
|
+
remains the interactive wizard and npm entry point.
|
|
107
108
|
Help: `node scripts/install.mjs --help`
|
|
108
109
|
|
|
109
110
|
---
|
package/FULL.md
CHANGED
|
@@ -8,7 +8,8 @@ Complete walkthrough from install to shipped milestone.
|
|
|
8
8
|
|
|
9
9
|
**Contents:** [What it is](#what-gsd-path-is) · [Installation](#installation) ·
|
|
10
10
|
[Starting a milestone](#starting-a-milestone) · [Phases](#phases-and-your-role) ·
|
|
11
|
-
[Shipping](#shipping) · [Resume](#resume-and-recovery) ·
|
|
11
|
+
[Shipping](#shipping) · [Resume](#resume-and-recovery) ·
|
|
12
|
+
[More than one person](#working-with-more-than-one-person) · [Troubleshooting](#troubleshooting)
|
|
12
13
|
|
|
13
14
|
**Related docs**
|
|
14
15
|
|
|
@@ -86,8 +87,8 @@ Use the [router and phase invocation table](README.md#install-summary) for your
|
|
|
86
87
|
- **Python 3.9+** found as `python3`, `python`, or `py -3`; required for project
|
|
87
88
|
installs, project refresh, and project-state
|
|
88
89
|
doctor checks; optional for global-only Node installs. `scripts/install.py`
|
|
89
|
-
|
|
90
|
-
|
|
90
|
+
does not provide the interactive wizard; see
|
|
91
|
+
[README.md](README.md#install-summary) for what it supports
|
|
91
92
|
|
|
92
93
|
### Global install (default)
|
|
93
94
|
|
|
@@ -328,7 +329,11 @@ approve **Archive and ship**, the archive transaction begins:
|
|
|
328
329
|
|
|
329
330
|
Direct integration is the project default. Before build, ask the router to set
|
|
330
331
|
`pull-request` as the project default or as an override for the current
|
|
331
|
-
milestone. The setting locks when build starts.
|
|
332
|
+
milestone. The setting locks when build starts. When origin is not GitHub.com
|
|
333
|
+
and `main` accepts merge requests only, set `external-landing`: Path publishes
|
|
334
|
+
the milestone branch, you merge it in your own forge with the merge message
|
|
335
|
+
that Path returns, and Path then validates the merge and tags it. See
|
|
336
|
+
[integration](WORKFLOW.md#integration).
|
|
332
337
|
|
|
333
338
|
After `validate-integrated` passes, the next milestone starts clean on a new
|
|
334
339
|
`gsd-path/M00N` cut from `origin/main`. Invoke the router again; brownfield
|
|
@@ -407,6 +412,61 @@ in force; see [the collection helper](scripts/isolation.py).
|
|
|
407
412
|
|
|
408
413
|
---
|
|
409
414
|
|
|
415
|
+
## Working with more than one person
|
|
416
|
+
|
|
417
|
+
One operator drives a milestone. One checkout holds the bound branch
|
|
418
|
+
`gsd-path/M00N` and the `.project/` state of that milestone. A multi-repo
|
|
419
|
+
milestone does not change this: one coordinator checkout holds the state.
|
|
420
|
+
|
|
421
|
+
GSD Path does not record or check who approves a gate. The `STATE.md` log
|
|
422
|
+
keeps the date, the phase, and the event. The only name is the Git author of a
|
|
423
|
+
checkpoint commit, and GSD Path does not read it. Agree in your team who
|
|
424
|
+
approves.
|
|
425
|
+
|
|
426
|
+
**Supported**
|
|
427
|
+
|
|
428
|
+
- One person runs the router and approves the gates, in one checkout.
|
|
429
|
+
- Other people review and merge the result. Set `pull-request` integration
|
|
430
|
+
before build. Path opens the pull request and waits until a GitHub user
|
|
431
|
+
account merges it with a merge commit. Path does not check which user. With
|
|
432
|
+
`external-landing`, the review is the merge request in your own forge.
|
|
433
|
+
- A second session in the same checkout can ask for status and can run the
|
|
434
|
+
discussion skill. Status only reads. The discussion helper takes a lock and
|
|
435
|
+
only appends records.
|
|
436
|
+
- The desktop app and the monitor only read a watched project in the
|
|
437
|
+
background. Their explicit actions change install and configuration files.
|
|
438
|
+
They cannot advance a phase. See [daemon/README.md](daemon/README.md).
|
|
439
|
+
|
|
440
|
+
**Not protected**
|
|
441
|
+
|
|
442
|
+
- The locks are file locks on one computer, in one clone. They put helper
|
|
443
|
+
calls in sequence: state changes, approvals, discussion records, and
|
|
444
|
+
dispatch driver calls. A state change from an old view fails with
|
|
445
|
+
`expected state does not match`. A second dispatch driver call returns
|
|
446
|
+
`blocked`.
|
|
447
|
+
- The locks do not cover the files that agents write: the artifacts in
|
|
448
|
+
`.project/` and the product files. Two sessions that do phase work in one
|
|
449
|
+
checkout write to the same working tree.
|
|
450
|
+
- The locks do not reach a second clone. Each clone keeps its own `STATE.md`,
|
|
451
|
+
task landings, and approvals. GSD Path does not merge them. Ship stops
|
|
452
|
+
(`moved or collides`) when `origin` already has `gsd-path/M00N` from another
|
|
453
|
+
clone.
|
|
454
|
+
- You cannot share a milestone in progress through the remote. With
|
|
455
|
+
[guard hooks](HOOKS.md) installed, the pre-push hook refuses `gsd-path/M00N`
|
|
456
|
+
before its ship commit. It also refuses any other branch that carries the
|
|
457
|
+
unfinished state. Hooks are optional and local to each clone. A clone
|
|
458
|
+
without hooks has no such check.
|
|
459
|
+
|
|
460
|
+
**Do not**
|
|
461
|
+
|
|
462
|
+
- Do not run the router or a phase skill for one milestone from two clones, or
|
|
463
|
+
from two sessions at the same time.
|
|
464
|
+
- Do not push `gsd-path/M00N` by hand, and do not merge another branch into
|
|
465
|
+
it.
|
|
466
|
+
- Do not squash or rebase the integration pull request or merge request.
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
410
470
|
## Standalone docs audit
|
|
411
471
|
|
|
412
472
|
`/gsd-path-docs-audit` runs between phases as a drift check. Findings get
|
package/HOOKS.md
CHANGED
|
@@ -77,6 +77,29 @@ setups (Husky and friends) and linked worktrees (where `.git` is a file).
|
|
|
77
77
|
Every selected host requires an initialized repository with a resolvable hooks
|
|
78
78
|
directory; otherwise installation stops before writing.
|
|
79
79
|
|
|
80
|
+
### Existing Git hooks
|
|
81
|
+
|
|
82
|
+
A repository can already have its own `pre-commit`, `commit-msg`, or `pre-push`
|
|
83
|
+
hook.
|
|
84
|
+
|
|
85
|
+
- **In the repository's own `.git/hooks`:** the installer keeps your hook as
|
|
86
|
+
`<hook>.gsd-path-chained` and writes the guard hook in its place. The guard
|
|
87
|
+
runs first. Your hook runs after it, with the same arguments and the same
|
|
88
|
+
`pre-push` input, only when the guard accepts. If the installation fails,
|
|
89
|
+
your hook is put back unchanged.
|
|
90
|
+
- **In a `core.hooksPath` directory (for example Husky) or a linked worktree:**
|
|
91
|
+
the installer stops with `cannot chain` and changes nothing. That directory
|
|
92
|
+
can be tracked or shared, so a rename there reaches other clones. Rename your
|
|
93
|
+
hook to `<hook>.gsd-path-chained` yourself, then rerun the installer. Commit
|
|
94
|
+
the rename when the directory is tracked.
|
|
95
|
+
- **`<hook>.gsd-path-chained` already exists beside a foreign hook:** the
|
|
96
|
+
installer stops. Decide which of the two files you want to keep.
|
|
97
|
+
|
|
98
|
+
Git hooks are local to a clone. A bot that merges on the server, such as
|
|
99
|
+
Renovate, never runs them, and its commits on the default branch do not
|
|
100
|
+
disturb milestone validation. A merge request can still conflict when the bot
|
|
101
|
+
and the milestone change the same file; Path does not resolve that conflict.
|
|
102
|
+
|
|
80
103
|
Git hooks work for **any** agent that commits. Native guard wiring denies a tool
|
|
81
104
|
call when its event is malformed or the guard cannot validate it.
|
|
82
105
|
|
|
@@ -128,9 +151,46 @@ See [UPDATE.md](UPDATE.md).
|
|
|
128
151
|
the archive tree; shell operands count an ancestor only for deletion or move
|
|
129
152
|
commands
|
|
130
153
|
- `git reset --hard`, destructive `git clean` modes, force pushes (including
|
|
131
|
-
`+` refspecs),
|
|
132
|
-
`git worktree remove --force`, `git stash drop`/`clear`, and whole-tree
|
|
154
|
+
`+` refspecs), `git branch -m`, `git stash drop`/`clear`, and whole-tree
|
|
133
155
|
`git checkout -- .`/`git restore .`
|
|
156
|
+
- forced branch deletion (`git branch -D`), `git update-ref` deletion, and
|
|
157
|
+
`git worktree remove --force` when the target is Path-owned: a `gsd-path/`,
|
|
158
|
+
`gsd-path-task/`, `gsd-path-verify/`, or `gsd-path-integrate/` branch, a
|
|
159
|
+
`refs/gsd-path/` ref, the bound `STATE.branch`, a task branch or worktree
|
|
160
|
+
that task frontmatter records, a worktree on one of these branches, and a
|
|
161
|
+
worktree below a managed worktree root (`~/.gsd-path`,
|
|
162
|
+
`GSD_PATH_WORKTREE_ROOT`, a pinned workspace root, or the earlier
|
|
163
|
+
`<repo>.gsd-path/` and `.<repo>-gsd-path-integrate-*` locations beside the
|
|
164
|
+
repository). The text `gsd-path` in a path does not make a worktree
|
|
165
|
+
Path-owned. Also Path-owned: the remote-tracking ref of one of these
|
|
166
|
+
branches (`origin/gsd-path/M001`), `refs/stash`, and a name that differs
|
|
167
|
+
from a recorded branch only in letter case. Other branches, refs, and
|
|
168
|
+
registered worktrees are allowed in each pipeline state. These three
|
|
169
|
+
commands are also denied when the guard cannot prove the target: a missing,
|
|
170
|
+
non-literal, or unregistered target, a shell parameter in the Git command
|
|
171
|
+
(`git -C "$dir" branch -D x`), a `~` or glob in a Git option value,
|
|
172
|
+
`update-ref --stdin`, an `update-ref` name outside `refs/` (`HEAD`) or an
|
|
173
|
+
option cluster (`-dm`), an `update-ref` deletion without `--no-deref` after
|
|
174
|
+
another Git command in the same command line, ownership metadata it cannot
|
|
175
|
+
read, a working directory that does not exist yet, or an `env` wrapper that
|
|
176
|
+
resets or unsets `HOME`, `XDG_CONFIG_HOME`, or a `GIT_*` variable. They are
|
|
177
|
+
denied too after a directory change the guard cannot model. Only
|
|
178
|
+
`cd <directory>` or `cd -- <directory>` is modeled, with one literal
|
|
179
|
+
directory that is absolute or starts with `./` or `../` (a shell with
|
|
180
|
+
`CDPATH` looks for a plain relative name in other directories). Another
|
|
181
|
+
command name (`pushd`, `chdir`), an option, a second operand, a redirection,
|
|
182
|
+
a `cd` in a subshell, pipeline, condition, function, alias, trap, or
|
|
183
|
+
comment line is not modeled. Use `git -C <directory>` there. A plain
|
|
184
|
+
redirection on the Git command (`2>/dev/null`, `>file`, `>>file`, `<file`,
|
|
185
|
+
`2>&1`, `&>file`) is not a target. A here-document, here-string, process
|
|
186
|
+
substitution, a redirection target that is not one literal word, or a
|
|
187
|
+
`# comment` after the command keeps the denial. So does a file
|
|
188
|
+
descriptor word of more than one digit or a `{name}` word against a
|
|
189
|
+
redirection (`10>file`, `{fd}>file`), because bash and zsh read that word
|
|
190
|
+
differently. With
|
|
191
|
+
such an `env` wrapper, or in a directory that does not exist yet, a Git
|
|
192
|
+
command that is not a built-in command is denied too, because its alias
|
|
193
|
+
cannot be inspected
|
|
134
194
|
- shell writes (redirections, `tee`, `cp`, `mv`, `rm`, `sed -i`, ...) that
|
|
135
195
|
target a routing control (`.git`, `.project/STATE.md`, `.project/next`,
|
|
136
196
|
`.gsd-path`) while `.project/STATE.md` exists, or target a product file
|
|
@@ -366,6 +426,7 @@ not intercept subagent tools — treat coverage as orchestrator-level.
|
|
|
366
426
|
| `ship:` commit blocked with `app.py` staged | Ship commits may only touch `.project/` |
|
|
367
427
|
| Tool denied editing archive | Pre-tool guard — use active paths, not archive |
|
|
368
428
|
| Hook not running in Cursor | Run `--hooks-refresh-full --cursor --project /path/to/repo` |
|
|
429
|
+
| Installer stops with `cannot chain` | See [existing Git hooks](#existing-git-hooks): rename your hook to `<hook>.gsd-path-chained`, or remove the stale chained file, then rerun |
|
|
369
430
|
| `--hooks-refresh` rejects an unmanaged guard | Move the foreign guard aside, then rerun refresh; use `--hooks-init` if guards are wanted |
|
|
370
431
|
| Runtime missing, invalid, or legacy | Follow [runtime restoration or migration](DOCS.md#project-runtime-versions) |
|
|
371
432
|
|
package/MIGRATE.md
CHANGED
|
@@ -10,6 +10,18 @@ selected project. Core history stays in `.planning/`; Path creates its own
|
|
|
10
10
|
`.project/` state through the normal router. Core phase positions and completed
|
|
11
11
|
plans do not become passed Path gates.
|
|
12
12
|
|
|
13
|
+
## Requirements
|
|
14
|
+
|
|
15
|
+
- The default branch of `origin` can have any name, for example `master`.
|
|
16
|
+
Path initialization records it in `.project/STATE.md` as `default_branch`
|
|
17
|
+
and ships onto it. Run `git remote set-head origin --auto` before the first
|
|
18
|
+
Path run: an unset `origin/HEAD` records `main`. See
|
|
19
|
+
[default branch](WORKFLOW.md#default-branch).
|
|
20
|
+
- Pull-request shipping supports GitHub.com only. On GitLab, Gitea, or GitHub
|
|
21
|
+
Enterprise Server, ship with `direct`, or with
|
|
22
|
+
[`external-landing`](WORKFLOW.md#integration) when the default branch
|
|
23
|
+
accepts merge requests only.
|
|
24
|
+
|
|
13
25
|
## Start
|
|
14
26
|
|
|
15
27
|
Install or update GSD Path using [the install guide](QUICK.md). In the Core
|
package/QUICK.md
CHANGED
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
One router skill drives a gated pipeline: inspect → define → research → decide →
|
|
14
14
|
plan → build → ship. Every handoff lives in `.project/` so any session can resume from disk.
|
|
15
15
|
|
|
16
|
-
**Hosts:** Codex, Claude Code, Grok, OpenCode,
|
|
17
|
-
|
|
16
|
+
**Hosts:** Codex, Claude Code, Grok, OpenCode, Antigravity, Cursor, and Kimi
|
|
17
|
+
Code have a passing live milestone for release 1.6.0. Copilot CLI, Qwen, Zed,
|
|
18
|
+
Kiro, and Muse Code install, but have no live milestone for that release. See
|
|
19
|
+
[host tiers](README.md).
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
package/README.md
CHANGED
|
@@ -9,21 +9,29 @@ milestone loop. While a milestone builds, the next one can be planned in
|
|
|
9
9
|
parallel under `.project/next/` (lookahead); a building milestone can also be
|
|
10
10
|
abandoned on an explicit ruling, archiving its partial work for a re-slice.
|
|
11
11
|
|
|
12
|
-
**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
**Hosts with a passing full live milestone for release 1.6.0:** Codex, Claude
|
|
13
|
+
Code, Grok, OpenCode, Antigravity CLI, Cursor, and Kimi Code.
|
|
14
|
+
|
|
15
|
+
**Hosts with an installer and a dispatch contract, but no live milestone for
|
|
16
|
+
release 1.6.0:** GitHub Copilot CLI (account quota exhausted), Qwen Code, Zed,
|
|
17
|
+
and Kiro (API credits), and Muse Code (no live release evidence recorded yet).
|
|
18
|
+
These hosts are excluded from the release evaluation. Exclusion is not a pass.
|
|
19
|
+
|
|
20
|
+
With guard hooks installed, only Claude Code and Cursor get a fail-closed
|
|
21
|
+
native guard; every other host relies on Git hooks. The installer also writes a
|
|
22
|
+
native Codex hook, and it runs only after you trust it (see [HOOKS.md](HOOKS.md)).
|
|
23
|
+
The [host trust matrix](https://github.com/open-gsd/gsd-path/blob/main/docs/trust-validation/HOST-MATRIX.md)
|
|
24
|
+
is the source of truth for live milestone proof and each host's guard tier.
|
|
17
25
|
|
|
18
26
|
<!-- release-docs -->
|
|
19
|
-
**Latest npm release:** [@opengsd/gsd-path@1.
|
|
27
|
+
**Latest npm release:** [@opengsd/gsd-path@1.6.0](https://www.npmjs.com/package/@opengsd/gsd-path/v/1.6.0) — [release notes](CHANGELOG.md#160---2026-10-12)
|
|
20
28
|
|
|
21
29
|
**Recent highlights**
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
- add
|
|
30
|
+
- let a later task supersede an earlier task and retire its Verify
|
|
31
|
+
- document the default branch record of a member
|
|
32
|
+
- member paths read the default branch that MEMBERS.md records
|
|
33
|
+
- record the default branch of a member in MEMBERS.md
|
|
34
|
+
- add --uninstall to the skill installers
|
|
27
35
|
|
|
28
36
|
<!-- /release-docs -->
|
|
29
37
|
|
|
@@ -120,7 +128,13 @@ contain newer changes.
|
|
|
120
128
|
|
|
121
129
|
1. Open your project folder in your coding-agent host. Existing repositories
|
|
122
130
|
need Git; GitHub repository creation and pull-request operations also need
|
|
123
|
-
an authenticated GitHub CLI (`gh`).
|
|
131
|
+
an authenticated GitHub CLI (`gh`). The default branch of `origin` can have
|
|
132
|
+
any name: Path records it at initialization and ships onto it. This guide
|
|
133
|
+
calls it `main`; see [default branch](WORKFLOW.md#default-branch).
|
|
134
|
+
Pull-request
|
|
135
|
+
shipping supports GitHub.com only. On GitLab, Gitea, or GitHub Enterprise
|
|
136
|
+
Server, use the [`external-landing` mode](WORKFLOW.md#integration) when
|
|
137
|
+
the default branch accepts merge requests only.
|
|
124
138
|
2. Start or reload the host session so it discovers the installed skills.
|
|
125
139
|
3. Invoke `$path` in Codex, or `/path` on slash-command hosts. The router
|
|
126
140
|
identifies the project and guides you through the required inputs and approvals.
|
|
@@ -151,6 +165,25 @@ project settings. Dashboard users can open **Settings → Path settings** for th
|
|
|
151
165
|
same shipping, model/effort, and future review-panel controls. See
|
|
152
166
|
[Path settings](skills/gsd-path/references/config.md) for precedence and locks.
|
|
153
167
|
|
|
168
|
+
### Uninstall
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
npx @opengsd/gsd-path@latest --uninstall --all --dry-run
|
|
172
|
+
npx @opengsd/gsd-path@latest --uninstall --all
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
`--uninstall` removes the installed GSD Path skills from the selected hosts.
|
|
176
|
+
For Cursor it also removes the GSD Path subagent file. Use host flags instead
|
|
177
|
+
of `--all` to select hosts. For project-local skills, run the command from
|
|
178
|
+
your project directory and add `--local`. `--dry-run` shows each path and
|
|
179
|
+
removes nothing.
|
|
180
|
+
|
|
181
|
+
The command removes only GSD Path skills. It keeps other skills, host
|
|
182
|
+
settings, and `disabled-gsd-skills` backups. It makes no backup: changes that
|
|
183
|
+
you made in a GSD Path skill directory are lost. It does not remove project
|
|
184
|
+
contracts or hooks (`.project/`, `.gsd-path/`, the `AGENTS.md` block, guard
|
|
185
|
+
hooks). See [Uninstall skills](UPDATE.md#uninstall-skills).
|
|
186
|
+
|
|
154
187
|
## Desktop app
|
|
155
188
|
|
|
156
189
|
The **OpenGSD Path app** shows your projects without opening each project's
|
|
@@ -358,12 +391,30 @@ partial remote/clone/worktree transaction; the default checkout stays clean.
|
|
|
358
391
|
One project can change several repositories in the same milestone. The
|
|
359
392
|
**coordinator** repo holds `.project/` and runs the pipeline; each other repo
|
|
360
393
|
is a **member** listed in `.project/MEMBERS.md`. A member needs a GitHub.com
|
|
361
|
-
`origin
|
|
394
|
+
`origin`. Its default branch can have any name, and it can differ from the
|
|
395
|
+
default branch of the coordinator and of the other members. See
|
|
362
396
|
[ADR 0002](docs/adr/0002-multi-repo-coordinator.md) for the design.
|
|
363
397
|
|
|
398
|
+
`MEMBERS.md` has one section per member, in ship order. `members.py` writes
|
|
399
|
+
it; do not edit it by hand:
|
|
400
|
+
|
|
401
|
+
```markdown
|
|
402
|
+
## web
|
|
403
|
+
Checkout: /absolute/path/to/web
|
|
404
|
+
Remote: https://github.com/acme/web.git
|
|
405
|
+
Integration: default
|
|
406
|
+
Default branch: master
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
`Default branch` is the member's default branch on `origin`. `members.py add`
|
|
410
|
+
records it one time, from the member's local `origin/HEAD`; run
|
|
411
|
+
`git remote set-head origin --auto` in the member first. A section without
|
|
412
|
+
the field means `main`. See [default branch](WORKFLOW.md#default-branch).
|
|
413
|
+
|
|
364
414
|
- Add members at a milestone boundary: ask the router to add an existing repo
|
|
365
415
|
(`members.py add`) or to create a new one (`members.py add --create`, after
|
|
366
|
-
you approve the exact owner, name, visibility, and checkout
|
|
416
|
+
you approve the exact owner, name, visibility, and checkout; a new
|
|
417
|
+
repository uses `main`). For optional
|
|
367
418
|
guard hooks, install them in the member with
|
|
368
419
|
`npx @opengsd/gsd-path@latest --member-of <coordinator> --project <member>`.
|
|
369
420
|
- The planner gives each member task `repo: <member>`; one task changes one
|
|
@@ -438,6 +489,7 @@ node scripts/install.mjs --all --local
|
|
|
438
489
|
node scripts/install.mjs --all --project /path/to/project
|
|
439
490
|
node scripts/install.mjs --update
|
|
440
491
|
node scripts/install.mjs --all --update --project /path/to/project # refresh .gsd-path/; keeps contracts
|
|
492
|
+
node scripts/install.mjs --uninstall --all --dry-run # preview; removes skills only
|
|
441
493
|
```
|
|
442
494
|
|
|
443
495
|
| Flag | User skills root | Invoke |
|
|
@@ -457,7 +509,7 @@ OpenCode stable: ask to load and use the `gsd-path` skill.
|
|
|
457
509
|
`gsd-path` remains the canonical router name; `path` is its short menu alias.
|
|
458
510
|
For a single phase, use `$gsd-path-plan` in Codex or `/gsd-path-plan` on slash hosts.
|
|
459
511
|
|
|
460
|
-
`scripts/install.py` — Python install, including `--local
|
|
512
|
+
`scripts/install.py` — Python install, including `--local`, `--update`, and `--uninstall`.
|
|
461
513
|
The Node CLI remains the interactive and npm entry point. See [FULL.md](FULL.md) and
|
|
462
514
|
[UPDATE.md](UPDATE.md) for `--hooks`, `--hooks-refresh`, `--local`, and host notes.
|
|
463
515
|
|
package/RUNTIME.md
CHANGED
|
@@ -23,7 +23,7 @@ inputs, receipt handling, and entry conditions are owned by the
|
|
|
23
23
|
| `gate-plan` | Git HEAD; optional lookahead project directory | Pending discussion, intent coverage, brief paths, and panel configuration checked in order. |
|
|
24
24
|
| `approve-plan` | Owner approval and `--expected-head <reviewed full SHA>` | Plan gates followed by the existing journaled approval checkpoint. |
|
|
25
25
|
| `lint-round` | Git HEAD; optional `--project-dir .project/next` | Task brief checks against HEAD, then plan handoff checks. |
|
|
26
|
-
| `prepare-task` | `--expected-head <clean base> --task-id <id> --round-size <ready task count>` | Canonical task isolation; serial work also gets a verification sidecar before the primary becomes dirty. |
|
|
26
|
+
| `prepare-task` | `--expected-head <clean base> --task-id <id> --round-size <ready task count>` | Canonical task isolation; serial work also gets a verification sidecar before the primary becomes dirty. A verification sidecar that an earlier `prepare-task` left for the task is retired first only when it is proven untouched: its branch did not move from its creation base on the bound branch, and it has no tracked change and no untracked or gitignored file. Any other sidecar stays, and the command stops with its path and what was found. |
|
|
27
27
|
| `build-evidence` | `--expected-head <full SHA>` | Canonical landing proof written to `<project-dir>/build/evidence.json` (default: `.project/build/evidence.json`). |
|
|
28
28
|
|
|
29
29
|
Plan approval recovery remains `pipeline_state.py resume-checkpoint`. Pre-Git
|
|
@@ -68,7 +68,7 @@ skeptic attempts under `skeptics/`.
|
|
|
68
68
|
| `skeptics --repo <root> --wave <N> --cycle <C> --child-command '<cmd>' [--wait <s>] [--child-timeout <s>]` | Step 7 skeptic branch: one read-only skeptic per `skeptic_groups` locator in its own sidecar at the recorded review base, briefed with the criterion, every observation, and the cited tasks verbatim; validate with `review_findings.py`, collect, retire, then rerun the helper. `none` without skeptic groups; `escalate` for structural blockers or the cycle cap. The skeptic files stay uncommitted for the fix-task or ruling checkpoint. |
|
|
69
69
|
| `fix-tasks --repo <root> --wave <N> --cycle <C>` | Step 7 batching: one fix task per `review_findings.py collect` batch with the failed criteria and observations verbatim, lint-checked; `escalate` for structural blockers, skeptic groups, cycle cap, or all-refuted. |
|
|
70
70
|
| `complete --repo <root>` | Completion: clean primary at `build/active` (or a crash-left `build/done`), no unfinished wave, the archive-time review cycle check (`discussion_validate.review_cycle_counts`: contiguous cycles, passing last cycle, panel and skeptic artifacts present); `workflow_run.py build-evidence` at HEAD; `pipeline_state.py transition` to `ship/active` with event `build done; final review pending`; checkpoint `build: complete milestone`. |
|
|
71
|
-
| `finish --repo <root> --task-id <id>` | Recover first; return a proven landing without repeating Verify, or verify, land, record, and retire one returned task. Without a dispatch record, or when the newest record is settled and its base differs from the task's current in-progress base (a native retry after a driver block), read the primary task's in-progress state; if it lacks a recorded base, use the parallel task isolate's state only if that worktree is authorized. A blocked record at the same base still refuses the retry. A deactivated isolate stays blocked. |
|
|
71
|
+
| `finish --repo <root> --task-id <id>` | Recover first; return a proven landing without repeating Verify, or verify, land, record, and retire one returned task. Without a dispatch record, or when the newest record is settled and its base differs from the task's current in-progress base (a native retry after a driver block), read the primary task's in-progress state; if it lacks a recorded base, use the parallel task isolate's state only if that worktree is authorized. A blocked record at the same base still refuses the retry, except a host-dispatched record (no child command) while the task is still in progress at that base: `finish` may run again after a failed Verify. A deactivated isolate stays blocked. |
|
|
72
72
|
| `answer --repo <root> --task-id <id> --answer '<text>'` | Append `Orchestrator answer:` to the isolate's task Log; the next `round` redispatches that isolate. |
|
|
73
73
|
| `status --repo <root>` | Every task's newest dispatch record. |
|
|
74
74
|
|
|
@@ -95,6 +95,13 @@ For `round`, `review`, `panel`, and `skeptics`, when the child process is gone a
|
|
|
95
95
|
unset, the driver rereads that attempt's state and exit receipt before
|
|
96
96
|
collecting the result or blocking with
|
|
97
97
|
`child wrapper exited without recording a result`.
|
|
98
|
+
A landing is final when the removal of its isolate fails: the receipt reports
|
|
99
|
+
the task as landed with a `cleanup_warning`, and the next `round` or `finish`
|
|
100
|
+
checks the isolate again. When only a leftover of a landed task's isolate
|
|
101
|
+
remains and it holds nothing that Git does not have, the driver stops with
|
|
102
|
+
`task <id> is landed; remove its leftover isolate: <path>`, changes neither
|
|
103
|
+
STATE nor HEAD, and never deletes the path itself. Every other isolate error
|
|
104
|
+
keeps its recovery block.
|
|
98
105
|
Review starts from a clean base. A same-cycle retry may dispatch a missing lens
|
|
99
106
|
at that unchanged base while verified, already-collected review artifacts remain
|
|
100
107
|
uncommitted. Altered artifacts or unrelated changes block recovery.
|
|
@@ -127,7 +134,15 @@ with `another dispatch_driver invocation holds the lock`; wait for the
|
|
|
127
134
|
active call to return before retrying. Bookkeeping also blocks if an
|
|
128
135
|
in-progress primary task has no open dispatch record.
|
|
129
136
|
|
|
130
|
-
Verify output is saved in `verify.json`.
|
|
137
|
+
Verify output is saved in `verify.json`. `finish` also runs the Verify of each
|
|
138
|
+
earlier-wave task that shares a file with the task, under the
|
|
139
|
+
[wave loop](skills/gsd-path/references/build-native.md#wave-loop) rule; those
|
|
140
|
+
runs are saved under `regressions` and a failure blocks the landing. A Verify
|
|
141
|
+
that a `supersedes` field retires does not run; it is listed under `retired`. A fix
|
|
142
|
+
task Verify that loses only the copy of a retired Verify has a `retired` entry with
|
|
143
|
+
the key `part` (the superseded task) and the Log entry `orchestrator regression
|
|
144
|
+
Verify of <fix task id>: part of <task id> retired: superseded by <task id>`. A task
|
|
145
|
+
with a `Heavy: yes` regression Verify counts as heavy. A `verify-record` ledger entry is
|
|
131
146
|
written only when the landing commit's parent equals the recorded task base;
|
|
132
147
|
a later parallel landing can therefore have no ledger entry.
|
|
133
148
|
|
|
@@ -174,8 +189,11 @@ through its receipt only when the canonical file matches the saved hash.
|
|
|
174
189
|
|
|
175
190
|
`fix-tasks` reconciles existing repair tasks and PLAN rows before linting and
|
|
176
191
|
checkpointing. It creates missing batches in an appended repair wave and
|
|
177
|
-
reports new tasks in `created`, reused tasks in `existing`, and batches
|
|
178
|
-
|
|
192
|
+
reports new tasks in `created`, reused tasks in `existing`, and batches that
|
|
193
|
+
other repair tasks not yet `done` cover in the same repo in `carried`. A member
|
|
194
|
+
batch and its task carry `repo`. A fix task for a finding that repeats after
|
|
195
|
+
its fix landed also depends on that landed fix task, so
|
|
196
|
+
`review_findings.py repair-evidence` can link the two. Status `created` includes restored
|
|
179
197
|
PLAN rows or pending project bookkeeping; `exists` means nothing was written
|
|
180
198
|
and no project changes needed a checkpoint. Status `none` means no batches
|
|
181
199
|
need work; `escalate` leaves the named decisions with build step 7 and the user.
|
package/UPDATE.md
CHANGED
|
@@ -273,6 +273,41 @@ Unrecognized or foreign `.project/` state is never auto-migrated — the router
|
|
|
273
273
|
|
|
274
274
|
---
|
|
275
275
|
|
|
276
|
+
## Uninstall skills
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
npx @opengsd/gsd-path@latest --uninstall --all --dry-run
|
|
280
|
+
npx @opengsd/gsd-path@latest --uninstall --all
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
From a git clone, use `node scripts/install.mjs` with the same flags.
|
|
284
|
+
|
|
285
|
+
- Select the hosts with host flags or `--all`. A selection is necessary.
|
|
286
|
+
- Add `--local`, from the project directory, for project-local skills.
|
|
287
|
+
- `--dry-run` lists each path and removes nothing. A real run lists each
|
|
288
|
+
removed path.
|
|
289
|
+
- A host that has no GSD Path skills shows `nothing to remove`. This is not an
|
|
290
|
+
error. A second run removes nothing.
|
|
291
|
+
|
|
292
|
+
**Removed:** skill directories that GSD Path owns, and Cursor's
|
|
293
|
+
`agents/gsd-path.md`. A directory is owned when it has a GSD Path name
|
|
294
|
+
(`gsd-path`, `gsd-path-*`, the legacy `ogsd` names, or the `path` alias) and
|
|
295
|
+
contains a `VERSION` file or a `SKILL.md` that names `gsd-path`. The `path`
|
|
296
|
+
alias must also pass the ownership rule in
|
|
297
|
+
[What auto-updates](#what-auto-updates). A directory with a GSD Path name
|
|
298
|
+
that is not owned shows as `kept` and stays in place.
|
|
299
|
+
|
|
300
|
+
**Not removed:** other skills, host settings, `disabled-gsd-skills` backups,
|
|
301
|
+
and all project files: `.project/`, `.gsd-path/`, the `AGENTS.md` block, and
|
|
302
|
+
guard hooks. `--uninstall` with `--project`, `--update`, `--doctor`, or a hook
|
|
303
|
+
or runtime flag stops with an error.
|
|
304
|
+
|
|
305
|
+
Removal makes no backup. Changes that you made in a GSD Path skill directory
|
|
306
|
+
are lost. Codex, Zed, and Muse use one skills root (with `--local`, also
|
|
307
|
+
Antigravity): an uninstall for one of them removes the skills for all of them.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
276
311
|
## Troubleshooting
|
|
277
312
|
|
|
278
313
|
| Symptom | Fix |
|