@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.
- package/CHANGELOG.md +460 -341
- package/DOCS.md +16 -5
- package/FULL.md +67 -6
- package/HOOKS.md +158 -10
- package/MIGRATE.md +12 -0
- package/QUICK.md +4 -2
- package/README.md +136 -116
- package/RUNTIME.md +24 -6
- package/UPDATE.md +39 -3
- package/WORKFLOW.md +80 -4
- package/package.json +5 -2
- package/platforms/shared-agents/dispatch.md +13 -0
- package/scripts/_common.py +256 -2
- package/scripts/archive_milestone.py +14 -13
- package/scripts/build_recovery.py +155 -58
- package/scripts/build_state.py +274 -8
- package/scripts/check_docs_audit.py +77 -4
- package/scripts/check_handoffs.py +635 -57
- package/scripts/check_task_briefs.py +293 -32
- package/scripts/detect_project.py +260 -20
- package/scripts/discussion_records.py +9 -1
- package/scripts/discussion_validate.py +93 -35
- package/scripts/dispatch_driver.py +549 -53
- package/scripts/git_guard.py +27 -8
- package/scripts/guard_hook.py +2630 -210
- package/scripts/install.mjs +99 -11
- package/scripts/install.py +231 -46
- package/scripts/integration.py +244 -65
- package/scripts/isolation.py +539 -70
- package/scripts/loop_run.py +16 -4
- package/scripts/members.py +77 -32
- package/scripts/migrate_core.py +2 -0
- package/scripts/model_policy.py +5 -1
- package/scripts/path_config.py +3 -3
- package/scripts/pipeline_diagnose.py +17 -2
- package/scripts/pipeline_git.py +131 -42
- package/scripts/pipeline_state.py +139 -39
- package/scripts/pipeline_undo.py +118 -16
- 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 +21 -2
- package/scripts/skill-resources.json +9 -2
- package/scripts/state_checkpoint.py +39 -36
- package/scripts/state_promote.py +15 -4
- package/scripts/status_runtime.py +22 -4
- package/scripts/task_context.py +14 -3
- package/scripts/wizard.mjs +1 -0
- package/scripts/workflow_run.py +14 -4
- package/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path/DEFINE.md +34 -5
- package/skills/gsd-path/PLAN.md +14 -3
- package/skills/gsd-path/RESEARCH.md +11 -0
- package/skills/gsd-path/ROADMAP.md +16 -6
- package/skills/gsd-path/SHIP.md +32 -5
- package/skills/gsd-path/SKILL.md +52 -24
- package/skills/gsd-path/references/build-native.md +112 -10
- package/skills/gsd-path/references/build-recovery.md +13 -0
- package/skills/gsd-path/references/coder.md +7 -3
- package/skills/gsd-path/references/dispatch.md +13 -0
- package/skills/gsd-path/references/docs-auditor.md +5 -0
- package/skills/gsd-path/references/operating-rules.md +11 -3
- package/skills/gsd-path/references/planner.md +26 -4
- package/skills/gsd-path/references/reviewer-final.md +20 -2
- package/skills/gsd-path/references/reviewer-wave.md +56 -12
- package/skills/gsd-path/references/reviewer.md +3 -1
- package/skills/gsd-path/references/runtime-selection.md +9 -0
- package/skills/gsd-path/references/spec-probes.md +150 -0
- package/skills/gsd-path/scripts/_common.py +256 -2
- package/skills/gsd-path/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path/scripts/build_recovery.py +155 -58
- package/skills/gsd-path/scripts/build_state.py +274 -8
- package/skills/gsd-path/scripts/check_docs_audit.py +77 -4
- package/skills/gsd-path/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path/scripts/detect_project.py +260 -20
- package/skills/gsd-path/scripts/discussion_records.py +9 -1
- package/skills/gsd-path/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path/scripts/dispatch_driver.py +549 -53
- package/skills/gsd-path/scripts/git_guard.py +27 -8
- package/skills/gsd-path/scripts/integration.py +244 -65
- package/skills/gsd-path/scripts/isolation.py +539 -70
- package/skills/gsd-path/scripts/loop_run.py +16 -4
- package/skills/gsd-path/scripts/members.py +77 -32
- package/skills/gsd-path/scripts/model_policy.py +5 -1
- package/skills/gsd-path/scripts/path_config.py +3 -3
- package/skills/gsd-path/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path/scripts/state_promote.py +15 -4
- package/skills/gsd-path/scripts/status_runtime.py +22 -4
- package/skills/gsd-path/scripts/task_context.py +14 -3
- package/skills/gsd-path/scripts/workflow_run.py +14 -4
- package/skills/gsd-path/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path/templates/docs-audit.md +5 -1
- package/skills/gsd-path/templates/final-review.md +11 -2
- package/skills/gsd-path/templates/intent.md +30 -0
- package/skills/gsd-path/templates/patch-findings.md +3 -3
- package/skills/gsd-path/templates/plan.md +17 -2
- package/skills/gsd-path/templates/research-handoff.md +14 -3
- package/skills/gsd-path/templates/state.md +2 -1
- package/skills/gsd-path/templates/task.md +1 -0
- package/skills/gsd-path/templates/wave-review.md +28 -9
- package/skills/gsd-path-build/references/build-native.md +112 -10
- 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/dispatch.md +13 -0
- package/skills/gsd-path-build/references/operating-rules.md +11 -3
- package/skills/gsd-path-build/references/reviewer-final.md +20 -2
- package/skills/gsd-path-build/references/reviewer-wave.md +56 -12
- package/skills/gsd-path-build/references/reviewer.md +3 -1
- package/skills/gsd-path-build/references/runtime-selection.md +9 -0
- package/skills/gsd-path-build/references/spec-probes.md +150 -0
- package/skills/gsd-path-build/scripts/_common.py +256 -2
- package/skills/gsd-path-build/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-build/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-build/scripts/build_state.py +274 -8
- package/skills/gsd-path-build/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-build/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-build/scripts/detect_project.py +260 -20
- package/skills/gsd-path-build/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-build/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-build/scripts/dispatch_driver.py +549 -53
- package/skills/gsd-path-build/scripts/integration.py +244 -65
- package/skills/gsd-path-build/scripts/isolation.py +539 -70
- package/skills/gsd-path-build/scripts/loop_run.py +16 -4
- package/skills/gsd-path-build/scripts/members.py +77 -32
- package/skills/gsd-path-build/scripts/model_policy.py +5 -1
- package/skills/gsd-path-build/scripts/path_config.py +3 -3
- package/skills/gsd-path-build/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-build/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-build/scripts/state_promote.py +15 -4
- package/skills/gsd-path-build/scripts/task_context.py +14 -3
- package/skills/gsd-path-build/scripts/workflow_run.py +14 -4
- package/skills/gsd-path-build/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-build/templates/task.md +1 -0
- package/skills/gsd-path-build/templates/wave-review.md +28 -9
- package/skills/gsd-path-decide/references/dispatch.md +13 -0
- 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 +256 -2
- package/skills/gsd-path-decide/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-decide/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-decide/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-decide/scripts/detect_project.py +260 -20
- package/skills/gsd-path-decide/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-decide/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-decide/scripts/integration.py +244 -65
- package/skills/gsd-path-decide/scripts/isolation.py +539 -70
- package/skills/gsd-path-decide/scripts/loop_run.py +16 -4
- package/skills/gsd-path-decide/scripts/members.py +77 -32
- package/skills/gsd-path-decide/scripts/model_policy.py +5 -1
- package/skills/gsd-path-decide/scripts/path_config.py +3 -3
- package/skills/gsd-path-decide/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-decide/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-decide/scripts/state_promote.py +15 -4
- package/skills/gsd-path-decide/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-define/SKILL.md +34 -5
- 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/references/spec-probes.md +150 -0
- package/skills/gsd-path-define/scripts/_common.py +256 -2
- package/skills/gsd-path-define/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-define/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-define/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-define/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-define/scripts/detect_project.py +260 -20
- package/skills/gsd-path-define/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-define/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-define/scripts/integration.py +244 -65
- package/skills/gsd-path-define/scripts/isolation.py +539 -70
- package/skills/gsd-path-define/scripts/loop_run.py +16 -4
- package/skills/gsd-path-define/scripts/members.py +77 -32
- package/skills/gsd-path-define/scripts/model_policy.py +5 -1
- package/skills/gsd-path-define/scripts/path_config.py +3 -3
- package/skills/gsd-path-define/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-define/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-define/scripts/state_promote.py +15 -4
- package/skills/gsd-path-define/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-define/templates/intent.md +30 -0
- package/skills/gsd-path-define/templates/state.md +2 -1
- 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 +256 -2
- package/skills/gsd-path-discuss/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-discuss/scripts/loop_run.py +16 -4
- package/skills/gsd-path-discuss/scripts/model_policy.py +5 -1
- package/skills/gsd-path-discuss/scripts/path_config.py +3 -3
- package/skills/gsd-path-discuss/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-docs-audit/references/dispatch.md +13 -0
- package/skills/gsd-path-docs-audit/references/docs-auditor.md +5 -0
- 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 +256 -2
- package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-docs-audit/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +77 -4
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-docs-audit/scripts/detect_project.py +260 -20
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-docs-audit/scripts/integration.py +244 -65
- package/skills/gsd-path-docs-audit/scripts/isolation.py +539 -70
- package/skills/gsd-path-docs-audit/scripts/loop_run.py +16 -4
- package/skills/gsd-path-docs-audit/scripts/members.py +77 -32
- package/skills/gsd-path-docs-audit/scripts/model_policy.py +5 -1
- package/skills/gsd-path-docs-audit/scripts/path_config.py +3 -3
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +15 -4
- package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-docs-audit/templates/docs-audit.md +5 -1
- 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 +256 -2
- package/skills/gsd-path-forensics/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-forensics/scripts/loop_run.py +16 -4
- package/skills/gsd-path-forensics/scripts/model_policy.py +5 -1
- package/skills/gsd-path-forensics/scripts/path_config.py +3 -3
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +17 -2
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +118 -16
- package/skills/gsd-path-forensics/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-inspect/references/dispatch.md +13 -0
- package/skills/gsd-path-inspect/references/docs-auditor.md +5 -0
- 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 +256 -2
- package/skills/gsd-path-inspect/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-inspect/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-inspect/scripts/check_docs_audit.py +77 -4
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-inspect/scripts/detect_project.py +260 -20
- package/skills/gsd-path-inspect/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-inspect/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-inspect/scripts/integration.py +244 -65
- package/skills/gsd-path-inspect/scripts/isolation.py +539 -70
- package/skills/gsd-path-inspect/scripts/loop_run.py +16 -4
- package/skills/gsd-path-inspect/scripts/members.py +77 -32
- package/skills/gsd-path-inspect/scripts/model_policy.py +5 -1
- package/skills/gsd-path-inspect/scripts/path_config.py +3 -3
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-inspect/scripts/state_promote.py +15 -4
- package/skills/gsd-path-inspect/scripts/workflow_run.py +14 -4
- package/skills/gsd-path-inspect/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-inspect/templates/docs-audit.md +5 -1
- package/skills/gsd-path-inspect/templates/state.md +2 -1
- 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 +256 -2
- package/skills/gsd-path-loop/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-loop/scripts/loop_run.py +16 -4
- package/skills/gsd-path-loop/scripts/model_policy.py +5 -1
- package/skills/gsd-path-loop/scripts/path_config.py +3 -3
- package/skills/gsd-path-loop/scripts/worktree_paths.py +54 -2
- 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 +256 -2
- package/skills/gsd-path-migrate/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-migrate/scripts/loop_run.py +16 -4
- 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-migrate/scripts/path_config.py +3 -3
- package/skills/gsd-path-plan/SKILL.md +14 -3
- package/skills/gsd-path-plan/references/build-recovery.md +13 -0
- package/skills/gsd-path-plan/references/dispatch.md +13 -0
- package/skills/gsd-path-plan/references/operating-rules.md +11 -3
- package/skills/gsd-path-plan/references/planner.md +26 -4
- package/skills/gsd-path-plan/references/runtime-selection.md +9 -0
- package/skills/gsd-path-plan/references/spec-probes.md +150 -0
- package/skills/gsd-path-plan/scripts/_common.py +256 -2
- package/skills/gsd-path-plan/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-plan/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-plan/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-plan/scripts/detect_project.py +260 -20
- package/skills/gsd-path-plan/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-plan/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-plan/scripts/integration.py +244 -65
- package/skills/gsd-path-plan/scripts/isolation.py +539 -70
- package/skills/gsd-path-plan/scripts/loop_run.py +16 -4
- package/skills/gsd-path-plan/scripts/members.py +77 -32
- package/skills/gsd-path-plan/scripts/model_policy.py +5 -1
- package/skills/gsd-path-plan/scripts/path_config.py +3 -3
- package/skills/gsd-path-plan/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-plan/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-plan/scripts/state_promote.py +15 -4
- package/skills/gsd-path-plan/scripts/workflow_run.py +14 -4
- package/skills/gsd-path-plan/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-plan/templates/patch-findings.md +3 -3
- package/skills/gsd-path-plan/templates/plan.md +17 -2
- package/skills/gsd-path-plan/templates/task.md +1 -0
- package/skills/gsd-path-research/SKILL.md +11 -0
- package/skills/gsd-path-research/references/dispatch.md +13 -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 +256 -2
- package/skills/gsd-path-research/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-research/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-research/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-research/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-research/scripts/detect_project.py +260 -20
- package/skills/gsd-path-research/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-research/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-research/scripts/integration.py +244 -65
- package/skills/gsd-path-research/scripts/isolation.py +539 -70
- package/skills/gsd-path-research/scripts/loop_run.py +16 -4
- package/skills/gsd-path-research/scripts/members.py +77 -32
- package/skills/gsd-path-research/scripts/model_policy.py +5 -1
- package/skills/gsd-path-research/scripts/path_config.py +3 -3
- package/skills/gsd-path-research/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-research/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-research/scripts/state_promote.py +15 -4
- package/skills/gsd-path-research/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-research/templates/research-handoff.md +14 -3
- package/skills/gsd-path-roadmap/SKILL.md +16 -6
- package/skills/gsd-path-roadmap/references/dispatch.md +13 -0
- 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 +256 -2
- package/skills/gsd-path-roadmap/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-roadmap/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-roadmap/scripts/detect_project.py +260 -20
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-roadmap/scripts/integration.py +244 -65
- package/skills/gsd-path-roadmap/scripts/isolation.py +539 -70
- package/skills/gsd-path-roadmap/scripts/loop_run.py +16 -4
- package/skills/gsd-path-roadmap/scripts/members.py +77 -32
- package/skills/gsd-path-roadmap/scripts/model_policy.py +5 -1
- package/skills/gsd-path-roadmap/scripts/path_config.py +3 -3
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-roadmap/scripts/state_promote.py +15 -4
- package/skills/gsd-path-roadmap/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-ship/SKILL.md +32 -5
- package/skills/gsd-path-ship/references/dispatch.md +13 -0
- package/skills/gsd-path-ship/references/operating-rules.md +11 -3
- package/skills/gsd-path-ship/references/reviewer-final.md +20 -2
- package/skills/gsd-path-ship/references/reviewer-wave.md +56 -12
- package/skills/gsd-path-ship/references/reviewer.md +3 -1
- package/skills/gsd-path-ship/references/runtime-selection.md +9 -0
- package/skills/gsd-path-ship/references/spec-probes.md +150 -0
- package/skills/gsd-path-ship/scripts/_common.py +256 -2
- package/skills/gsd-path-ship/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-ship/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-ship/scripts/build_state.py +274 -8
- package/skills/gsd-path-ship/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-ship/scripts/detect_project.py +260 -20
- package/skills/gsd-path-ship/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-ship/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-ship/scripts/integration.py +244 -65
- package/skills/gsd-path-ship/scripts/isolation.py +539 -70
- package/skills/gsd-path-ship/scripts/loop_run.py +16 -4
- package/skills/gsd-path-ship/scripts/members.py +77 -32
- package/skills/gsd-path-ship/scripts/model_policy.py +5 -1
- package/skills/gsd-path-ship/scripts/path_config.py +3 -3
- package/skills/gsd-path-ship/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-ship/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/gsd-path-ship/scripts/state_promote.py +15 -4
- package/skills/gsd-path-ship/scripts/workflow_run.py +14 -4
- package/skills/gsd-path-ship/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-ship/templates/final-review.md +11 -2
- package/skills/gsd-path-ship/templates/patch-findings.md +3 -3
- package/skills/gsd-path-ship/templates/wave-review.md +28 -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 +256 -2
- package/skills/gsd-path-undo/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-undo/scripts/loop_run.py +16 -4
- package/skills/gsd-path-undo/scripts/model_policy.py +5 -1
- package/skills/gsd-path-undo/scripts/path_config.py +3 -3
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +118 -16
- package/skills/gsd-path-undo/scripts/worktree_paths.py +54 -2
- package/skills/path/DEFINE.md +34 -5
- package/skills/path/PLAN.md +14 -3
- package/skills/path/RESEARCH.md +11 -0
- package/skills/path/ROADMAP.md +16 -6
- package/skills/path/SHIP.md +32 -5
- package/skills/path/SKILL.md +52 -24
- package/skills/path/references/build-native.md +112 -10
- package/skills/path/references/build-recovery.md +13 -0
- package/skills/path/references/coder.md +7 -3
- package/skills/path/references/dispatch.md +13 -0
- package/skills/path/references/docs-auditor.md +5 -0
- package/skills/path/references/operating-rules.md +11 -3
- package/skills/path/references/planner.md +26 -4
- package/skills/path/references/reviewer-final.md +20 -2
- package/skills/path/references/reviewer-wave.md +56 -12
- package/skills/path/references/reviewer.md +3 -1
- package/skills/path/references/runtime-selection.md +9 -0
- package/skills/path/references/spec-probes.md +150 -0
- package/skills/path/scripts/_common.py +256 -2
- package/skills/path/scripts/archive_milestone.py +14 -13
- package/skills/path/scripts/build_recovery.py +155 -58
- package/skills/path/scripts/build_state.py +274 -8
- package/skills/path/scripts/check_docs_audit.py +77 -4
- package/skills/path/scripts/check_handoffs.py +635 -57
- package/skills/path/scripts/check_task_briefs.py +293 -32
- package/skills/path/scripts/detect_project.py +260 -20
- package/skills/path/scripts/discussion_records.py +9 -1
- package/skills/path/scripts/discussion_validate.py +93 -35
- package/skills/path/scripts/dispatch_driver.py +549 -53
- package/skills/path/scripts/git_guard.py +27 -8
- package/skills/path/scripts/integration.py +244 -65
- package/skills/path/scripts/isolation.py +539 -70
- package/skills/path/scripts/loop_run.py +16 -4
- package/skills/path/scripts/members.py +77 -32
- package/skills/path/scripts/model_policy.py +5 -1
- package/skills/path/scripts/path_config.py +3 -3
- package/skills/path/scripts/pipeline_git.py +131 -42
- package/skills/path/scripts/pipeline_state.py +139 -39
- 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 +39 -36
- package/skills/path/scripts/state_promote.py +15 -4
- package/skills/path/scripts/status_runtime.py +22 -4
- package/skills/path/scripts/task_context.py +14 -3
- package/skills/path/scripts/workflow_run.py +14 -4
- package/skills/path/scripts/worktree_paths.py +54 -2
- package/skills/path/templates/docs-audit.md +5 -1
- package/skills/path/templates/final-review.md +11 -2
- package/skills/path/templates/intent.md +30 -0
- package/skills/path/templates/patch-findings.md +3 -3
- package/skills/path/templates/plan.md +17 -2
- package/skills/path/templates/research-handoff.md +14 -3
- package/skills/path/templates/state.md +2 -1
- package/skills/path/templates/task.md +1 -0
- package/skills/path/templates/wave-review.md +28 -9
- package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
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
|
---
|
|
@@ -247,8 +248,10 @@ resolved Git common directory and primary path, so separate clones and
|
|
|
247
248
|
primary folders do not share a location.
|
|
248
249
|
|
|
249
250
|
The first allocation pins the workspace location in
|
|
250
|
-
`<git-common-dir>/gsd-path/workspaces/<workspace-id>.json`.
|
|
251
|
-
changes do not move it
|
|
251
|
+
`<git-common-dir>/gsd-path/workspaces/<workspace-id>.json`. Environment
|
|
252
|
+
changes do not move it while a linked worktree remains. When a sidecar is
|
|
253
|
+
retired and no linked worktree remains, Path removes the pin, and the next
|
|
254
|
+
allocation reads `GSD_PATH_WORKTREE_ROOT` again. Existing sibling worktrees remain at their original
|
|
252
255
|
paths and retain the same recovery and cleanup checks. These folders contain
|
|
253
256
|
active work and evidence; they are not a disposable cache. Relocation needs
|
|
254
257
|
a separate migration; do not edit placement records or move folders manually.
|
|
@@ -397,6 +400,14 @@ the supplied package's runtime and its compatible status launcher. Review those
|
|
|
397
400
|
configuration changes before committing them. Existing versions remain available
|
|
398
401
|
for other projects and branches.
|
|
399
402
|
|
|
403
|
+
To record where a patched runtime came from, add `--runtime-provenance-source`,
|
|
404
|
+
`--runtime-provenance-patch`, or `--runtime-provenance-note` to
|
|
405
|
+
`--runtime-upgrade`. The values are written to the `provenance` object
|
|
406
|
+
(`source`, `patch_ref`, `note`) in `.gsd-path/runtime.json`. Without a patch
|
|
407
|
+
value, a source root that is a Git checkout records its `HEAD` commit. A later
|
|
408
|
+
upgrade without these flags keeps the object only when the digest is unchanged.
|
|
409
|
+
Provenance is a record only; it does not change the digest or runtime validation.
|
|
410
|
+
|
|
400
411
|
A new machine needs the selected runtime installed before status and guards can
|
|
401
412
|
run. `gsd-path --runtime-restore --project /absolute/project --source-root
|
|
402
413
|
/path/to/matching/package` restores that exact version without changing project
|
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
|
|
|
@@ -106,7 +107,7 @@ node scripts/install.mjs --codex --claude --cursor
|
|
|
106
107
|
|
|
107
108
|
| Flag | Skills root |
|
|
108
109
|
| --- | --- |
|
|
109
|
-
| `--codex`, `--zed` | `~/.agents/skills` (shared bundle) |
|
|
110
|
+
| `--codex`, `--zed`, `--muse` | `~/.agents/skills` (shared bundle) |
|
|
110
111
|
| `--claude` | `~/.claude/skills` |
|
|
111
112
|
| `--grok` | `~/.grok/skills` |
|
|
112
113
|
| `--opencode` | OpenCode config `skills/` |
|
|
@@ -176,7 +177,7 @@ also print a one-line update notice (24h cache, fail-silent).
|
|
|
176
177
|
- Validates synchronized package before writing
|
|
177
178
|
- Uses the [managed-skill backup and collision rules](UPDATE.md#what-auto-updates)
|
|
178
179
|
- Rolls back **all** selected targets if any one fails
|
|
179
|
-
- Codex, Antigravity, and
|
|
180
|
+
- Codex, Antigravity, Zed, and Muse share one local physical root — installed once
|
|
180
181
|
with a shared host-aware bundle
|
|
181
182
|
|
|
182
183
|
Restart the host session after install if skills do not appear.
|
|
@@ -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
|
|
@@ -432,6 +492,7 @@ your skills:
|
|
|
432
492
|
| Antigravity | `invoke_subagent` | |
|
|
433
493
|
| Cursor | `Task` | installed `gsd-path` subagent |
|
|
434
494
|
| Zed | `spawn_agent` | |
|
|
495
|
+
| Muse Code | `muse.subagent_spawn` | trusted workspace required |
|
|
435
496
|
| Kiro | subagent facility | |
|
|
436
497
|
| Kimi | `Agent` | `coder` child type |
|
|
437
498
|
|
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,12 +151,50 @@ 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
|
-
`.gsd-path`) while `.project/STATE.md` exists
|
|
196
|
+
`.gsd-path`) while `.project/STATE.md` exists, or target a product file
|
|
197
|
+
outside the routed build phase (same rule as direct file-edit tools)
|
|
137
198
|
- repeated assignments to the same shell variable within one command; split
|
|
138
199
|
these into separate tool calls so write targets can be resolved
|
|
139
200
|
- copies whose destinations, including nested recursive-copy entries, resolve
|
|
@@ -145,7 +206,8 @@ See [UPDATE.md](UPDATE.md).
|
|
|
145
206
|
source trees containing directory symlinks are denied; use literal directory
|
|
146
207
|
paths and copy directory links separately
|
|
147
208
|
- shell commands that reference the archive unless the whole command is a
|
|
148
|
-
recognized standalone read
|
|
209
|
+
recognized standalone read, a pipeline in which each segment is a recognized
|
|
210
|
+
read, or a single-command invocation of the bundled
|
|
149
211
|
`pipeline_state.py` / `archive_milestone.py` helper, resolved to a regular file
|
|
150
212
|
inside the verified runtime selected by `.gsd-path/runtime.json` (legacy projects use `.gsd-path/runtime/` beside `guard_hook.py`
|
|
151
213
|
in the repository layout), using exactly `python` or `python3` with optional
|
|
@@ -161,11 +223,93 @@ See [UPDATE.md](UPDATE.md).
|
|
|
161
223
|
- deletion or move commands outside a single simple segment, including command
|
|
162
224
|
chains, pipes, newlines, grouping, directory changes, and command substitution
|
|
163
225
|
- deletion or move commands with any argument outside the literal-path character
|
|
164
|
-
set: ASCII letters, digits, `.`, `_`, `-`, and
|
|
165
|
-
backslashes on Windows). One matching
|
|
166
|
-
|
|
167
|
-
quoted. This also applies to
|
|
226
|
+
set: ASCII letters, digits, `.`, `_`, `-`, `/`, and ASCII spaces inside one
|
|
227
|
+
shell unit (plus a drive prefix and backslashes on Windows). One matching
|
|
228
|
+
pair of surrounding quotes is allowed; parameters, wildcards, braces, and
|
|
229
|
+
tilde paths are denied even when quoted. This also applies to
|
|
230
|
+
`find -delete` and supported destructive aliases
|
|
168
231
|
- destructive Git commands nested in supported shell and command wrappers
|
|
232
|
+
- Git arguments that contain a shell parameter. Only plain `$name` and
|
|
233
|
+
`${name}` expansions pass, and only inside plain double-quoted spans of
|
|
234
|
+
read-only subcommands (`status`, `log`, `diff`, `show`, and the other
|
|
235
|
+
inspection commands) that the guard parses directly, such as
|
|
236
|
+
`git log --format="$t %H"` or `git show "HEAD:$f"`, because only double
|
|
237
|
+
quoting prevents word-splitting into options. A parameter outside double
|
|
238
|
+
quotes (`$x`, `HEAD:$f`, `--format=$x`, `"a b"$x`) is denied because its
|
|
239
|
+
expansion can split into a write option such as `--output`. Every other
|
|
240
|
+
parameter form (`${=x}`, `${(z)x}`, `${x:-y}`, `$x[@]`, `$1`, `$@`, `$*`,
|
|
241
|
+
`$#`, and the unbraced zsh flags `$=x`, `$~x`, `$^x`, `$+x`) is denied even
|
|
242
|
+
inside double quotes, because it can expand to more than one word; a
|
|
243
|
+
backslash-escaped marker (`"\$t"`) is likewise denied, because the shell
|
|
244
|
+
executes the literal text while the argument still shows the bare marker.
|
|
245
|
+
The same four zsh flags are denied in a `git -C` directory. A literal `$`
|
|
246
|
+
that starts no expansion (a regex anchor such as `--grep='fix$'`) passes.
|
|
247
|
+
A `-c`/`--config` key whose value git executes as a program —
|
|
248
|
+
`core.fsmonitor`, editors and pagers, `core.sshCommand`,
|
|
249
|
+
`core.askPass`, `filter.*` clean/smudge/process, `diff.*`
|
|
250
|
+
textconv/external/command, `merge.*` drivers, `core.gitProxy`,
|
|
251
|
+
`interactive.diffFilter`,
|
|
252
|
+
`remote.*` uploadpack/receivepack, `gpg.program` and `gpg.*.program`, `credential.helper` and
|
|
253
|
+
`credential.*.helper`, each `pager.<cmd>` key — is denied with a literal
|
|
254
|
+
value as with a parameter, because git runs it during an otherwise
|
|
255
|
+
read-only subcommand. A disabling form of such a key passes: the bare key,
|
|
256
|
+
an empty value, or `false`. A `--config-env` form is always denied, because
|
|
257
|
+
its value comes from the environment. A key through which git loads code —
|
|
258
|
+
`core.hooksPath`, `include.path`, `includeIf.*.path`, `url.*.insteadOf`,
|
|
259
|
+
`url.*.pushInsteadOf` — is denied with each value. `git config` is denied
|
|
260
|
+
when it sets one of these keys; to read or unset the key stays allowed.
|
|
261
|
+
A redirection at the end of a read (`git config <key> 2>/dev/null`) is not
|
|
262
|
+
a value. A separate digit before a redirection (`5 >/dev/null`), a word of two
|
|
263
|
+
or more digits (`12>/dev/null`) and a quoted operator are values, so they
|
|
264
|
+
make a set.
|
|
265
|
+
Each `git config` argument must be a plain literal word, bare or in one
|
|
266
|
+
pair of quotes: a backslash, mixed quotes, an unquoted glob (`*`, `?`, `[`),
|
|
267
|
+
an unquoted brace list or range (`{a,b}`, `{1..3}`) or a line continuation
|
|
268
|
+
in the word or one that joins it to the next word is denied, because the shell can make a different
|
|
269
|
+
argument list from it.
|
|
270
|
+
An unquoted word that starts with `#` among the `git config` arguments
|
|
271
|
+
is denied, because the shell reads it and the words after it as a comment.
|
|
272
|
+
The git subcommand word must be a plain literal word in each git command:
|
|
273
|
+
`git {config,...}` and a subcommand split by a line continuation are denied.
|
|
274
|
+
A program that runs the command in its arguments (`nice`, `nohup`,
|
|
275
|
+
`timeout`, `sudo`, `watch`, `time`, `env`, `stdbuf`, `setsid`) is
|
|
276
|
+
unwrapped: the guard skips the options of the program and checks the
|
|
277
|
+
command that it runs, so `nice git -c core.fsmonitor=/abs/h.sh status` is
|
|
278
|
+
denied by the git rule and `sudo apt install git` passes. A runner
|
|
279
|
+
option that writes, edits or enters a file or directory by itself is
|
|
280
|
+
denied (`time -o`, `sudo -e`, `sudo -D`, `sudo -R`, `watch -s`). The
|
|
281
|
+
`timeout` duration and the `watch` interval must be literal numbers, and
|
|
282
|
+
each runner option word must be a literal word; only a separate option
|
|
283
|
+
value can be a parameter in double quotes (`sudo -u "$USER" ls`). A short
|
|
284
|
+
option word is read as getopt reads it, so the attached value in
|
|
285
|
+
`sudo -upostgres psql` is not taken as more options. With an archive working directory a command runner is not
|
|
286
|
+
unwrapped and is denied as an unknown program. Other command
|
|
287
|
+
runners (`doas`, `ionice`, `noglob`) are not unwrapped, and `watch` with
|
|
288
|
+
the command in one quoted word is not checked.
|
|
289
|
+
Each git global option word, and the value word of `-c`, `-C`,
|
|
290
|
+
`--git-dir`, `--work-tree`, `--namespace` and `--config-env`, must resolve
|
|
291
|
+
to one word: a backslash, an unquoted glob or an unquoted brace list or
|
|
292
|
+
range in it is denied (`git -c {core.fsmonitor=/abs/h.sh,status}`,
|
|
293
|
+
`git -{p,c} core.fsmonitor=/abs/h.sh status`). A parameter in such a value
|
|
294
|
+
is denied also when no subcommand follows (`git -c $x`). Plain quoted parts
|
|
295
|
+
pass (`git -c user.name='A B' log`).
|
|
296
|
+
`git config` section renames and removals (`--rename-section`,
|
|
297
|
+
`--remove-section`) and `--edit` are denied, because a rename can move a
|
|
298
|
+
key into an executed section and `--edit` starts an editor.
|
|
299
|
+
Command substitution output, a parameter that starts an
|
|
300
|
+
argument, and a parameter in the value of an option that git writes to or
|
|
301
|
+
runs as a command (`--output`, `--upload-pack`, `--receive-pack`, `--exec`,
|
|
302
|
+
`-c`, `--config-env`, or a `<transport>::<address>` remote) are denied in
|
|
303
|
+
every form. These option names match by prefix (`--upload-pa`, `--exe`),
|
|
304
|
+
because git accepts abbreviated long options; in archive context the same
|
|
305
|
+
prefix match applies to `--output`, `--ext-diff`, and `--textconv`. The
|
|
306
|
+
exact read-only option `--text` is not an abbreviation and stays allowed. Any
|
|
307
|
+
other quoting construct in the command (`$'...'`, `$"..."`, quotes inside `${...}`, quotes or
|
|
308
|
+
backslashes in a comment, here-documents and here-strings) disables the
|
|
309
|
+
exception, so every parameter in a git argument of that command is denied.
|
|
310
|
+
The exception applies only to commands the guard parses directly, never
|
|
311
|
+
inside wrapped shell strings (`eval`, `bash -c`, `sh -c`, PowerShell or
|
|
312
|
+
`cmd` command strings), where the outer shell expands the parameter first
|
|
169
313
|
- archive glob/brace expansions and execution-capable read options such as
|
|
170
314
|
`rg --pre`
|
|
171
315
|
- direct write, edit, and patch tool calls targeting `.project/STATE.md`,
|
|
@@ -265,9 +409,12 @@ writes nor verifies that wiring. To add it yourself, register
|
|
|
265
409
|
| Antigravity | `.agents/hooks.json` `PreToolUse` | [Antigravity hooks](https://antigravity.google/docs/hooks) |
|
|
266
410
|
| OpenCode | JS plugin `tool.execute.before` | [OpenCode plugins](https://opencode.ai/docs/plugins/) |
|
|
267
411
|
| Zed | no hook API — git hooks only | — |
|
|
412
|
+
| Muse Code | no GSD Path hook integration — git hooks only | — |
|
|
268
413
|
|
|
269
|
-
**Caveats:** The hook cannot prove which skill initiated a
|
|
270
|
-
build
|
|
414
|
+
**Caveats:** The hook cannot prove which skill initiated a build-phase edit
|
|
415
|
+
when the routed build phase is already active. Shell product writes use the
|
|
416
|
+
same phase gate as file-edit tools; AGENTS.md still owns plain-prompt re-entry
|
|
417
|
+
when no `.project/STATE.md` exists. Grok and Kimi
|
|
271
418
|
fail-open on hook errors by design. Copilot, Kimi, Kiro, and Antigravity may
|
|
272
419
|
not intercept subagent tools — treat coverage as orchestrator-level.
|
|
273
420
|
|
|
@@ -279,6 +426,7 @@ not intercept subagent tools — treat coverage as orchestrator-level.
|
|
|
279
426
|
| `ship:` commit blocked with `app.py` staged | Ship commits may only touch `.project/` |
|
|
280
427
|
| Tool denied editing archive | Pre-tool guard — use active paths, not archive |
|
|
281
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 |
|
|
282
430
|
| `--hooks-refresh` rejects an unmanaged guard | Move the foreign guard aside, then rerun refresh; use `--hooks-init` if guards are wanted |
|
|
283
431
|
| Runtime missing, invalid, or legacy | Follow [runtime restoration or migration](DOCS.md#project-runtime-versions) |
|
|
284
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
|
|