@opengsd/gsd-path 1.1.0 → 1.3.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/AGENTS.md +5 -2
- package/CHANGELOG.md +87 -0
- package/DOCS.md +73 -1
- package/FULL.md +3 -2
- package/HOOKS.md +18 -9
- package/QUICK.md +3 -4
- package/README.md +72 -5
- package/RUNTIME.md +9 -4
- package/UPDATE.md +56 -11
- package/WORKFLOW.md +5 -2
- package/package.json +9 -1
- package/platforms/claude/dispatch.md +4 -4
- package/platforms/copilot/dispatch.md +4 -4
- package/platforms/cursor/dispatch.md +5 -10
- package/platforms/grok/dispatch.md +4 -6
- package/platforms/kimi/dispatch.md +4 -4
- package/platforms/kiro/dispatch.md +4 -6
- package/platforms/opencode/dispatch.md +4 -4
- package/platforms/qwen/dispatch.md +4 -4
- package/platforms/shared-agents/dispatch.md +6 -19
- package/scripts/_common.py +5 -0
- package/scripts/archive_milestone.py +20 -6
- package/scripts/bootstrap_repository.py +8 -1
- package/scripts/build_recovery.py +5 -0
- package/scripts/build_state.py +2 -0
- package/scripts/check_docs_audit.py +2 -0
- package/scripts/check_handoffs.py +6 -0
- package/scripts/check_task_briefs.py +3 -0
- package/scripts/detect_project.py +11 -1
- package/scripts/discussion_records.py +3 -0
- package/scripts/discussion_validate.py +8 -3
- package/scripts/dispatch_driver.py +230 -21
- package/scripts/git_guard.py +12 -4
- package/scripts/guard_hook.py +11 -1
- package/scripts/install.mjs +74 -1448
- package/scripts/install.py +165 -201
- package/scripts/integration.py +28 -8
- package/scripts/isolation.py +15 -5
- package/scripts/jev_review.py +138 -0
- package/scripts/lean_verification.py +2 -0
- package/scripts/loop_run.py +2 -0
- package/scripts/model_policy.py +279 -0
- package/scripts/path_config.py +248 -0
- package/scripts/pipeline_diagnose.py +3 -0
- package/scripts/pipeline_git.py +3 -0
- package/scripts/pipeline_state.py +4 -1
- package/scripts/pipeline_undo.py +3 -0
- package/scripts/promote_lookahead.py +3 -0
- package/scripts/review_panel.py +11 -0
- package/scripts/roadmap.py +5 -0
- package/scripts/runtime_store.py +281 -0
- package/scripts/skill-resources.json +104 -4
- package/scripts/state_checkpoint.py +5 -0
- package/scripts/state_promote.py +5 -0
- package/scripts/status_runtime.py +92 -6
- package/scripts/wizard.mjs +8 -2
- package/scripts/workflow_run.py +12 -1
- package/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path/BUILD.md +7 -0
- package/skills/gsd-path/DECIDE.md +2 -0
- package/skills/gsd-path/DEFINE.md +13 -7
- package/skills/gsd-path/DOCS-AUDIT.md +2 -0
- package/skills/gsd-path/INSPECT.md +2 -0
- package/skills/gsd-path/PLAN.md +4 -2
- package/skills/gsd-path/RESEARCH.md +2 -0
- package/skills/gsd-path/ROADMAP.md +2 -0
- package/skills/gsd-path/SHIP.md +24 -13
- package/skills/gsd-path/SKILL.md +23 -9
- package/skills/gsd-path/references/build-native.md +15 -7
- package/skills/gsd-path/references/config.md +57 -0
- package/skills/gsd-path/references/dispatch.md +6 -19
- package/skills/gsd-path/references/jev-review.md +82 -0
- package/skills/gsd-path/references/model-policy.md +139 -0
- package/skills/gsd-path/references/reviewer-panel.md +1 -1
- package/skills/gsd-path/references/reviewer.md +2 -0
- package/skills/gsd-path/references/runtime-selection.md +25 -0
- 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/scripts/_common.py +5 -0
- package/skills/gsd-path/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path/scripts/bootstrap_repository.py +8 -1
- package/skills/gsd-path/scripts/build_recovery.py +5 -0
- package/skills/gsd-path/scripts/build_state.py +2 -0
- package/skills/gsd-path/scripts/check_docs_audit.py +2 -0
- package/skills/gsd-path/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path/scripts/detect_project.py +11 -1
- package/skills/gsd-path/scripts/discussion_records.py +3 -0
- package/skills/gsd-path/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path/scripts/dispatch_driver.py +230 -21
- package/skills/gsd-path/scripts/git_guard.py +768 -0
- package/skills/gsd-path/scripts/integration.py +28 -8
- package/skills/gsd-path/scripts/isolation.py +15 -5
- package/skills/gsd-path/scripts/jev_review.py +138 -0
- package/skills/gsd-path/scripts/lean_verification.py +2 -0
- package/skills/gsd-path/scripts/loop_run.py +2 -0
- package/skills/gsd-path/scripts/model_policy.py +279 -0
- package/skills/gsd-path/scripts/path_config.py +248 -0
- package/skills/gsd-path/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path/scripts/review_panel.py +11 -0
- package/skills/gsd-path/scripts/roadmap.py +5 -0
- package/skills/gsd-path/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path/scripts/state_promote.py +5 -0
- package/skills/gsd-path/scripts/status_runtime.py +208 -0
- package/skills/gsd-path/scripts/workflow_run.py +12 -1
- package/skills/gsd-path/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path/templates/skeptic.md +1 -1
- package/skills/gsd-path/templates/task.md +2 -0
- package/skills/gsd-path/templates/wave-panel.md +1 -1
- package/skills/gsd-path-build/SKILL.md +7 -0
- package/skills/gsd-path-build/references/build-native.md +15 -7
- package/skills/gsd-path-build/references/dispatch.md +6 -19
- package/skills/gsd-path-build/references/jev-review.md +82 -0
- package/skills/gsd-path-build/references/model-policy.md +139 -0
- package/skills/gsd-path-build/references/reviewer-panel.md +1 -1
- package/skills/gsd-path-build/references/reviewer.md +2 -0
- package/skills/gsd-path-build/references/runtime-selection.md +25 -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-build/scripts/_common.py +5 -0
- package/skills/gsd-path-build/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-build/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-build/scripts/build_state.py +2 -0
- package/skills/gsd-path-build/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-build/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-build/scripts/detect_project.py +11 -1
- package/skills/gsd-path-build/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-build/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-build/scripts/dispatch_driver.py +230 -21
- package/skills/gsd-path-build/scripts/integration.py +28 -8
- package/skills/gsd-path-build/scripts/isolation.py +15 -5
- package/skills/gsd-path-build/scripts/jev_review.py +138 -0
- package/skills/gsd-path-build/scripts/loop_run.py +2 -0
- package/skills/gsd-path-build/scripts/model_policy.py +279 -0
- package/skills/gsd-path-build/scripts/path_config.py +248 -0
- package/skills/gsd-path-build/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-build/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-build/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-build/scripts/review_panel.py +11 -0
- package/skills/gsd-path-build/scripts/roadmap.py +5 -0
- package/skills/gsd-path-build/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-build/scripts/state_promote.py +5 -0
- package/skills/gsd-path-build/scripts/workflow_run.py +12 -1
- package/skills/gsd-path-build/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-build/templates/skeptic.md +1 -1
- package/skills/gsd-path-build/templates/task.md +2 -0
- package/skills/gsd-path-build/templates/wave-panel.md +1 -1
- package/skills/gsd-path-decide/SKILL.md +2 -0
- package/skills/gsd-path-decide/references/dispatch.md +6 -19
- package/skills/gsd-path-decide/references/model-policy.md +139 -0
- package/skills/gsd-path-decide/references/runtime-selection.md +25 -0
- package/skills/gsd-path-decide/scripts/_common.py +5 -0
- package/skills/gsd-path-decide/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-decide/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-decide/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-decide/scripts/detect_project.py +11 -1
- package/skills/gsd-path-decide/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-decide/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-decide/scripts/integration.py +28 -8
- package/skills/gsd-path-decide/scripts/isolation.py +15 -5
- package/skills/gsd-path-decide/scripts/loop_run.py +839 -0
- package/skills/gsd-path-decide/scripts/model_policy.py +279 -0
- package/skills/gsd-path-decide/scripts/path_config.py +248 -0
- package/skills/gsd-path-decide/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-decide/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-decide/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-decide/scripts/review_panel.py +11 -0
- package/skills/gsd-path-decide/scripts/roadmap.py +5 -0
- package/skills/gsd-path-decide/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-decide/scripts/state_promote.py +5 -0
- package/skills/gsd-path-decide/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-define/SKILL.md +13 -7
- package/skills/gsd-path-define/references/runtime-selection.md +25 -0
- package/skills/gsd-path-define/scripts/_common.py +5 -0
- package/skills/gsd-path-define/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-define/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-define/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-define/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-define/scripts/detect_project.py +11 -1
- package/skills/gsd-path-define/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-define/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-define/scripts/integration.py +28 -8
- package/skills/gsd-path-define/scripts/isolation.py +15 -5
- package/skills/gsd-path-define/scripts/loop_run.py +839 -0
- package/skills/gsd-path-define/scripts/model_policy.py +279 -0
- package/skills/gsd-path-define/scripts/path_config.py +248 -0
- package/skills/gsd-path-define/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-define/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-define/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-define/scripts/review_panel.py +11 -0
- package/skills/gsd-path-define/scripts/roadmap.py +5 -0
- package/skills/gsd-path-define/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-define/scripts/state_promote.py +5 -0
- package/skills/gsd-path-define/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-discuss/SKILL.md +2 -0
- package/skills/gsd-path-discuss/references/runtime-selection.md +25 -0
- package/skills/gsd-path-discuss/scripts/_common.py +5 -0
- package/skills/gsd-path-discuss/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-discuss/scripts/loop_run.py +839 -0
- package/skills/gsd-path-discuss/scripts/model_policy.py +279 -0
- package/skills/gsd-path-discuss/scripts/path_config.py +248 -0
- package/skills/gsd-path-discuss/scripts/review_panel.py +564 -0
- package/skills/gsd-path-discuss/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-docs-audit/SKILL.md +2 -0
- package/skills/gsd-path-docs-audit/references/dispatch.md +6 -19
- package/skills/gsd-path-docs-audit/references/model-policy.md +139 -0
- package/skills/gsd-path-docs-audit/references/runtime-selection.md +25 -0
- package/skills/gsd-path-docs-audit/scripts/_common.py +5 -0
- package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-docs-audit/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +2 -0
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-docs-audit/scripts/detect_project.py +11 -1
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-docs-audit/scripts/integration.py +28 -8
- package/skills/gsd-path-docs-audit/scripts/isolation.py +15 -5
- package/skills/gsd-path-docs-audit/scripts/loop_run.py +839 -0
- package/skills/gsd-path-docs-audit/scripts/model_policy.py +279 -0
- package/skills/gsd-path-docs-audit/scripts/path_config.py +248 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-docs-audit/scripts/review_panel.py +11 -0
- package/skills/gsd-path-docs-audit/scripts/roadmap.py +5 -0
- package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +5 -0
- package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-forensics/SKILL.md +9 -5
- package/skills/gsd-path-forensics/references/runtime-selection.md +25 -0
- package/skills/gsd-path-forensics/scripts/_common.py +5 -0
- package/skills/gsd-path-forensics/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-forensics/scripts/loop_run.py +839 -0
- package/skills/gsd-path-forensics/scripts/model_policy.py +279 -0
- package/skills/gsd-path-forensics/scripts/path_config.py +248 -0
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +3 -0
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +3 -0
- package/skills/gsd-path-forensics/scripts/review_panel.py +564 -0
- package/skills/gsd-path-forensics/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-inspect/SKILL.md +2 -0
- package/skills/gsd-path-inspect/references/dispatch.md +6 -19
- package/skills/gsd-path-inspect/references/model-policy.md +139 -0
- package/skills/gsd-path-inspect/references/runtime-selection.md +25 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/_common.py +5 -0
- package/skills/gsd-path-inspect/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-inspect/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-inspect/scripts/check_docs_audit.py +2 -0
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-inspect/scripts/detect_project.py +11 -1
- package/skills/gsd-path-inspect/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-inspect/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-inspect/scripts/integration.py +28 -8
- package/skills/gsd-path-inspect/scripts/isolation.py +15 -5
- package/skills/gsd-path-inspect/scripts/loop_run.py +839 -0
- package/skills/gsd-path-inspect/scripts/model_policy.py +279 -0
- package/skills/gsd-path-inspect/scripts/path_config.py +248 -0
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-inspect/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-inspect/scripts/review_panel.py +11 -0
- package/skills/gsd-path-inspect/scripts/roadmap.py +5 -0
- package/skills/gsd-path-inspect/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-inspect/scripts/state_promote.py +5 -0
- package/skills/gsd-path-inspect/scripts/workflow_run.py +12 -1
- package/skills/gsd-path-inspect/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-loop/SKILL.md +2 -0
- package/skills/gsd-path-loop/references/runtime-selection.md +25 -0
- package/skills/gsd-path-loop/scripts/_common.py +5 -0
- package/skills/gsd-path-loop/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-loop/scripts/loop_run.py +2 -0
- package/skills/gsd-path-loop/scripts/model_policy.py +279 -0
- package/skills/gsd-path-loop/scripts/path_config.py +248 -0
- package/skills/gsd-path-loop/scripts/review_panel.py +564 -0
- package/skills/gsd-path-loop/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-migrate/SKILL.md +2 -0
- package/skills/gsd-path-migrate/references/runtime-selection.md +25 -0
- package/skills/gsd-path-migrate/scripts/_common.py +185 -0
- package/skills/gsd-path-migrate/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-migrate/scripts/loop_run.py +839 -0
- package/skills/gsd-path-migrate/scripts/model_policy.py +279 -0
- package/skills/gsd-path-migrate/scripts/path_config.py +248 -0
- package/skills/gsd-path-migrate/scripts/review_panel.py +564 -0
- package/skills/gsd-path-plan/SKILL.md +4 -2
- package/skills/gsd-path-plan/references/dispatch.md +6 -19
- package/skills/gsd-path-plan/references/model-policy.md +139 -0
- package/skills/gsd-path-plan/references/runtime-selection.md +25 -0
- package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/_common.py +5 -0
- package/skills/gsd-path-plan/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-plan/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-plan/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-plan/scripts/detect_project.py +11 -1
- package/skills/gsd-path-plan/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-plan/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-plan/scripts/integration.py +28 -8
- package/skills/gsd-path-plan/scripts/isolation.py +15 -5
- package/skills/gsd-path-plan/scripts/loop_run.py +839 -0
- package/skills/gsd-path-plan/scripts/model_policy.py +279 -0
- package/skills/gsd-path-plan/scripts/path_config.py +248 -0
- package/skills/gsd-path-plan/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-plan/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-plan/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-plan/scripts/review_panel.py +11 -0
- package/skills/gsd-path-plan/scripts/roadmap.py +5 -0
- package/skills/gsd-path-plan/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-plan/scripts/state_promote.py +5 -0
- package/skills/gsd-path-plan/scripts/workflow_run.py +12 -1
- package/skills/gsd-path-plan/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-plan/templates/task.md +2 -0
- package/skills/gsd-path-research/SKILL.md +2 -0
- package/skills/gsd-path-research/references/dispatch.md +6 -19
- package/skills/gsd-path-research/references/model-policy.md +139 -0
- package/skills/gsd-path-research/references/runtime-selection.md +25 -0
- package/skills/gsd-path-research/scripts/_common.py +5 -0
- package/skills/gsd-path-research/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-research/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-research/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-research/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-research/scripts/detect_project.py +11 -1
- package/skills/gsd-path-research/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-research/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-research/scripts/integration.py +28 -8
- package/skills/gsd-path-research/scripts/isolation.py +15 -5
- package/skills/gsd-path-research/scripts/loop_run.py +839 -0
- package/skills/gsd-path-research/scripts/model_policy.py +279 -0
- package/skills/gsd-path-research/scripts/path_config.py +248 -0
- package/skills/gsd-path-research/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-research/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-research/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-research/scripts/review_panel.py +11 -0
- package/skills/gsd-path-research/scripts/roadmap.py +5 -0
- package/skills/gsd-path-research/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-research/scripts/state_promote.py +5 -0
- package/skills/gsd-path-research/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-roadmap/SKILL.md +2 -0
- package/skills/gsd-path-roadmap/references/dispatch.md +6 -19
- package/skills/gsd-path-roadmap/references/model-policy.md +139 -0
- package/skills/gsd-path-roadmap/references/runtime-selection.md +25 -0
- package/skills/gsd-path-roadmap/scripts/_common.py +5 -0
- package/skills/gsd-path-roadmap/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-roadmap/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-roadmap/scripts/detect_project.py +11 -1
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-roadmap/scripts/integration.py +28 -8
- package/skills/gsd-path-roadmap/scripts/isolation.py +15 -5
- package/skills/gsd-path-roadmap/scripts/loop_run.py +839 -0
- package/skills/gsd-path-roadmap/scripts/model_policy.py +279 -0
- package/skills/gsd-path-roadmap/scripts/path_config.py +248 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-roadmap/scripts/review_panel.py +11 -0
- package/skills/gsd-path-roadmap/scripts/roadmap.py +5 -0
- package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-roadmap/scripts/state_promote.py +5 -0
- package/skills/gsd-path-roadmap/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-ship/SKILL.md +24 -13
- package/skills/gsd-path-ship/references/dispatch.md +6 -19
- package/skills/gsd-path-ship/references/jev-review.md +82 -0
- package/skills/gsd-path-ship/references/model-policy.md +139 -0
- package/skills/gsd-path-ship/references/reviewer-panel.md +1 -1
- package/skills/gsd-path-ship/references/reviewer.md +2 -0
- package/skills/gsd-path-ship/references/runtime-selection.md +25 -0
- package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/_common.py +5 -0
- package/skills/gsd-path-ship/scripts/archive_milestone.py +20 -6
- package/skills/gsd-path-ship/scripts/build_recovery.py +5 -0
- package/skills/gsd-path-ship/scripts/build_state.py +2 -0
- package/skills/gsd-path-ship/scripts/check_handoffs.py +6 -0
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-ship/scripts/detect_project.py +11 -1
- package/skills/gsd-path-ship/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-ship/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-ship/scripts/integration.py +28 -8
- package/skills/gsd-path-ship/scripts/isolation.py +15 -5
- package/skills/gsd-path-ship/scripts/jev_review.py +138 -0
- package/skills/gsd-path-ship/scripts/lean_verification.py +2 -0
- package/skills/gsd-path-ship/scripts/loop_run.py +839 -0
- package/skills/gsd-path-ship/scripts/model_policy.py +279 -0
- package/skills/gsd-path-ship/scripts/path_config.py +248 -0
- package/skills/gsd-path-ship/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-ship/scripts/pipeline_state.py +4 -1
- package/skills/gsd-path-ship/scripts/promote_lookahead.py +3 -0
- package/skills/gsd-path-ship/scripts/review_panel.py +11 -0
- package/skills/gsd-path-ship/scripts/roadmap.py +5 -0
- package/skills/gsd-path-ship/scripts/state_checkpoint.py +5 -0
- package/skills/gsd-path-ship/scripts/state_promote.py +5 -0
- package/skills/gsd-path-ship/scripts/workflow_run.py +12 -1
- package/skills/gsd-path-ship/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-undo/SKILL.md +2 -0
- package/skills/gsd-path-undo/references/runtime-selection.md +25 -0
- package/skills/gsd-path-undo/scripts/_common.py +5 -0
- package/skills/gsd-path-undo/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-undo/scripts/loop_run.py +839 -0
- package/skills/gsd-path-undo/scripts/model_policy.py +279 -0
- package/skills/gsd-path-undo/scripts/path_config.py +248 -0
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +3 -0
- package/skills/gsd-path-undo/scripts/review_panel.py +564 -0
- package/skills/gsd-path-undo/scripts/worktree_paths.py +94 -0
- package/skills/path/BUILD.md +7 -0
- package/skills/path/DECIDE.md +2 -0
- package/skills/path/DEFINE.md +13 -7
- package/skills/path/DOCS-AUDIT.md +2 -0
- package/skills/path/INSPECT.md +2 -0
- package/skills/path/PLAN.md +4 -2
- package/skills/path/RESEARCH.md +2 -0
- package/skills/path/ROADMAP.md +2 -0
- package/skills/path/SHIP.md +24 -13
- package/skills/path/SKILL.md +23 -9
- package/skills/path/references/build-native.md +15 -7
- package/skills/path/references/config.md +57 -0
- package/skills/path/references/dispatch.md +6 -19
- package/skills/path/references/jev-review.md +82 -0
- package/skills/path/references/model-policy.md +139 -0
- package/skills/path/references/reviewer-panel.md +1 -1
- package/skills/path/references/reviewer.md +2 -0
- package/skills/path/references/runtime-selection.md +25 -0
- package/skills/path/scripts/_common.py +5 -0
- package/skills/path/scripts/archive_milestone.py +20 -6
- package/skills/path/scripts/bootstrap_repository.py +8 -1
- package/skills/path/scripts/build_recovery.py +5 -0
- package/skills/path/scripts/build_state.py +2 -0
- package/skills/path/scripts/check_docs_audit.py +2 -0
- package/skills/path/scripts/check_handoffs.py +6 -0
- package/skills/path/scripts/check_task_briefs.py +3 -0
- package/skills/path/scripts/detect_project.py +11 -1
- package/skills/path/scripts/discussion_records.py +3 -0
- package/skills/path/scripts/discussion_validate.py +8 -3
- package/skills/path/scripts/dispatch_driver.py +230 -21
- package/skills/path/scripts/git_guard.py +768 -0
- package/skills/path/scripts/integration.py +28 -8
- package/skills/path/scripts/isolation.py +15 -5
- package/skills/path/scripts/jev_review.py +138 -0
- package/skills/path/scripts/lean_verification.py +2 -0
- package/skills/path/scripts/loop_run.py +2 -0
- package/skills/path/scripts/model_policy.py +279 -0
- package/skills/path/scripts/path_config.py +248 -0
- package/skills/path/scripts/pipeline_git.py +3 -0
- package/skills/path/scripts/pipeline_state.py +4 -1
- package/skills/path/scripts/promote_lookahead.py +3 -0
- package/skills/path/scripts/review_panel.py +11 -0
- package/skills/path/scripts/roadmap.py +5 -0
- package/skills/path/scripts/state_checkpoint.py +5 -0
- package/skills/path/scripts/state_promote.py +5 -0
- package/skills/path/scripts/status_runtime.py +208 -0
- package/skills/path/scripts/workflow_run.py +12 -1
- package/skills/path/scripts/worktree_paths.py +94 -0
- package/skills/path/templates/skeptic.md +1 -1
- package/skills/path/templates/task.md +2 -0
- package/skills/path/templates/wave-panel.md +1 -1
- package/skills/gsd-path/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/discussion_records.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/integration.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/loop_run.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/review_findings.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/task_context.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/workflow_run.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/loop_run.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/review_findings.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/task_context.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/workflow_run.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-decide/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-define/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-docs-audit/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path-forensics/scripts/__pycache__/pipeline_undo.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-research/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-roadmap/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/archive_milestone.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/build_recovery.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/build_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/check_task_briefs.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/detect_project.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/discussion_validate.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/isolation.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/pipeline_git.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/pipeline_state.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/review_panel.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/roadmap.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/state_checkpoint.cpython-312.pyc +0 -0
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"plugin.json",
|
|
39
39
|
"scripts/install.mjs",
|
|
40
40
|
"scripts/install.py",
|
|
41
|
+
"scripts/runtime_store.py",
|
|
41
42
|
"scripts/migrate_core.py",
|
|
42
43
|
"scripts/core_hook_gate.py",
|
|
43
44
|
"scripts/core_hook_settings.py",
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
"scripts/wizard.mjs",
|
|
46
47
|
"scripts/skill-resources.json",
|
|
47
48
|
"scripts/_common.py",
|
|
49
|
+
"scripts/worktree_paths.py",
|
|
48
50
|
"scripts/build_recovery.py",
|
|
49
51
|
"scripts/state_checkpoint.py",
|
|
50
52
|
"scripts/roadmap.py",
|
|
@@ -59,7 +61,10 @@
|
|
|
59
61
|
"scripts/check_handoffs.py",
|
|
60
62
|
"scripts/check_docs_audit.py",
|
|
61
63
|
"scripts/check_task_briefs.py",
|
|
64
|
+
"scripts/path_config.py",
|
|
65
|
+
"scripts/model_policy.py",
|
|
62
66
|
"scripts/review_panel.py",
|
|
67
|
+
"scripts/jev_review.py",
|
|
63
68
|
"scripts/review_findings.py",
|
|
64
69
|
"scripts/check_update.py",
|
|
65
70
|
"scripts/guard_hook.py",
|
|
@@ -78,6 +83,7 @@
|
|
|
78
83
|
"scripts/pipeline_undo.py",
|
|
79
84
|
"scripts/pipeline_diagnose.py",
|
|
80
85
|
"README.md",
|
|
86
|
+
"CHANGELOG.md",
|
|
81
87
|
"MIGRATE.md",
|
|
82
88
|
"RUNTIME.md",
|
|
83
89
|
"DOCS.md",
|
|
@@ -93,12 +99,15 @@
|
|
|
93
99
|
],
|
|
94
100
|
"phase_resources": {
|
|
95
101
|
"gsd-path-build": [
|
|
102
|
+
"references/runtime-selection.md",
|
|
96
103
|
"references/build-recovery.md",
|
|
97
104
|
"references/build-native.md",
|
|
98
105
|
"references/build-abandon.md",
|
|
99
106
|
"references/coder.md",
|
|
100
107
|
"references/dispatch.md",
|
|
108
|
+
"references/model-policy.md",
|
|
101
109
|
"references/reviewer.md",
|
|
110
|
+
"references/jev-review.md",
|
|
102
111
|
"references/reviewer-wave.md",
|
|
103
112
|
"references/reviewer-skeptic.md",
|
|
104
113
|
"references/reviewer-final.md",
|
|
@@ -110,36 +119,49 @@
|
|
|
110
119
|
"templates/skeptic.md"
|
|
111
120
|
],
|
|
112
121
|
"gsd-path-discuss": [
|
|
122
|
+
"references/runtime-selection.md",
|
|
113
123
|
"templates/answers.md",
|
|
114
124
|
"templates/dialogue.md"
|
|
115
125
|
],
|
|
116
126
|
"gsd-path-docs-audit": [
|
|
127
|
+
"references/runtime-selection.md",
|
|
117
128
|
"references/dispatch.md",
|
|
129
|
+
"references/model-policy.md",
|
|
118
130
|
"references/docs-auditor.md",
|
|
119
131
|
"templates/docs-audit.md"
|
|
120
132
|
],
|
|
121
133
|
"gsd-path-define": [
|
|
134
|
+
"references/runtime-selection.md",
|
|
122
135
|
"references/build-recovery.md",
|
|
123
136
|
"templates/charter.md",
|
|
124
137
|
"templates/intent.md",
|
|
125
138
|
"templates/state.md"
|
|
126
139
|
],
|
|
127
140
|
"gsd-path-inspect": [
|
|
141
|
+
"references/runtime-selection.md",
|
|
128
142
|
"references/codebase-mapper.md",
|
|
129
143
|
"references/dispatch.md",
|
|
144
|
+
"references/model-policy.md",
|
|
130
145
|
"references/docs-auditor.md",
|
|
131
146
|
"templates/codebase.md",
|
|
132
147
|
"templates/docs-audit.md",
|
|
133
148
|
"templates/state.md"
|
|
134
149
|
],
|
|
135
|
-
"gsd-path-forensics": [
|
|
136
|
-
|
|
150
|
+
"gsd-path-forensics": [
|
|
151
|
+
"references/runtime-selection.md"
|
|
152
|
+
],
|
|
153
|
+
"gsd-path-migrate": [
|
|
154
|
+
"references/runtime-selection.md"
|
|
155
|
+
],
|
|
137
156
|
"gsd-path-loop": [
|
|
157
|
+
"references/runtime-selection.md",
|
|
138
158
|
"templates/loop.md"
|
|
139
159
|
],
|
|
140
160
|
"gsd-path-plan": [
|
|
161
|
+
"references/runtime-selection.md",
|
|
141
162
|
"references/build-recovery.md",
|
|
142
163
|
"references/dispatch.md",
|
|
164
|
+
"references/model-policy.md",
|
|
143
165
|
"references/planner.md",
|
|
144
166
|
"templates/patch-findings.md",
|
|
145
167
|
"templates/plan.md",
|
|
@@ -147,19 +169,26 @@
|
|
|
147
169
|
"templates/task.md"
|
|
148
170
|
],
|
|
149
171
|
"gsd-path-research": [
|
|
172
|
+
"references/runtime-selection.md",
|
|
150
173
|
"references/dispatch.md",
|
|
174
|
+
"references/model-policy.md",
|
|
151
175
|
"references/researcher.md",
|
|
152
176
|
"templates/evidence.md",
|
|
153
177
|
"templates/research-handoff.md"
|
|
154
178
|
],
|
|
155
179
|
"gsd-path-roadmap": [
|
|
180
|
+
"references/runtime-selection.md",
|
|
156
181
|
"references/dispatch.md",
|
|
182
|
+
"references/model-policy.md",
|
|
157
183
|
"references/roadmapper.md",
|
|
158
184
|
"templates/roadmap.md"
|
|
159
185
|
],
|
|
160
186
|
"gsd-path-ship": [
|
|
187
|
+
"references/runtime-selection.md",
|
|
161
188
|
"references/dispatch.md",
|
|
189
|
+
"references/model-policy.md",
|
|
162
190
|
"references/reviewer.md",
|
|
191
|
+
"references/jev-review.md",
|
|
163
192
|
"references/reviewer-wave.md",
|
|
164
193
|
"references/reviewer-skeptic.md",
|
|
165
194
|
"references/reviewer-final.md",
|
|
@@ -172,13 +201,36 @@
|
|
|
172
201
|
"templates/wave-review.md"
|
|
173
202
|
],
|
|
174
203
|
"gsd-path-decide": [
|
|
204
|
+
"references/runtime-selection.md",
|
|
175
205
|
"references/dispatch.md",
|
|
206
|
+
"references/model-policy.md",
|
|
176
207
|
"references/decider.md",
|
|
177
208
|
"templates/synthesis.md"
|
|
178
209
|
],
|
|
179
|
-
"gsd-path-undo": [
|
|
210
|
+
"gsd-path-undo": [
|
|
211
|
+
"references/runtime-selection.md"
|
|
212
|
+
]
|
|
180
213
|
},
|
|
181
214
|
"script_targets": [
|
|
215
|
+
["scripts/status_runtime.py", "skills/gsd-path/scripts/status_runtime.py"],
|
|
216
|
+
["scripts/git_guard.py", "skills/gsd-path/scripts/git_guard.py"],
|
|
217
|
+
["scripts/jev_review.py", "skills/gsd-path/scripts/jev_review.py"],
|
|
218
|
+
["scripts/jev_review.py", "skills/gsd-path-build/scripts/jev_review.py"],
|
|
219
|
+
["scripts/jev_review.py", "skills/gsd-path-ship/scripts/jev_review.py"],
|
|
220
|
+
["scripts/worktree_paths.py", "skills/gsd-path/scripts/worktree_paths.py"],
|
|
221
|
+
["scripts/worktree_paths.py", "skills/gsd-path-build/scripts/worktree_paths.py"],
|
|
222
|
+
["scripts/worktree_paths.py", "skills/gsd-path-decide/scripts/worktree_paths.py"],
|
|
223
|
+
["scripts/worktree_paths.py", "skills/gsd-path-define/scripts/worktree_paths.py"],
|
|
224
|
+
["scripts/worktree_paths.py", "skills/gsd-path-discuss/scripts/worktree_paths.py"],
|
|
225
|
+
["scripts/worktree_paths.py", "skills/gsd-path-docs-audit/scripts/worktree_paths.py"],
|
|
226
|
+
["scripts/worktree_paths.py", "skills/gsd-path-forensics/scripts/worktree_paths.py"],
|
|
227
|
+
["scripts/worktree_paths.py", "skills/gsd-path-inspect/scripts/worktree_paths.py"],
|
|
228
|
+
["scripts/worktree_paths.py", "skills/gsd-path-loop/scripts/worktree_paths.py"],
|
|
229
|
+
["scripts/worktree_paths.py", "skills/gsd-path-plan/scripts/worktree_paths.py"],
|
|
230
|
+
["scripts/worktree_paths.py", "skills/gsd-path-research/scripts/worktree_paths.py"],
|
|
231
|
+
["scripts/worktree_paths.py", "skills/gsd-path-roadmap/scripts/worktree_paths.py"],
|
|
232
|
+
["scripts/worktree_paths.py", "skills/gsd-path-ship/scripts/worktree_paths.py"],
|
|
233
|
+
["scripts/worktree_paths.py", "skills/gsd-path-undo/scripts/worktree_paths.py"],
|
|
182
234
|
["scripts/migrate_core.py", "skills/gsd-path-migrate/scripts/migrate_core.py"],
|
|
183
235
|
["scripts/core_hook_gate.py", "skills/gsd-path-migrate/scripts/core_hook_gate.py"],
|
|
184
236
|
["scripts/core_hook_settings.py", "skills/gsd-path-migrate/scripts/core_hook_settings.py"],
|
|
@@ -399,7 +451,55 @@
|
|
|
399
451
|
["scripts/roadmap.py", "skills/gsd-path-research/scripts/roadmap.py"],
|
|
400
452
|
["scripts/roadmap.py", "skills/gsd-path-roadmap/scripts/roadmap.py"],
|
|
401
453
|
["scripts/roadmap.py", "skills/gsd-path-ship/scripts/roadmap.py"],
|
|
402
|
-
["scripts/roadmap.py", "skills/gsd-path/scripts/roadmap.py"]
|
|
454
|
+
["scripts/roadmap.py", "skills/gsd-path/scripts/roadmap.py"],
|
|
455
|
+
["scripts/model_policy.py", "skills/gsd-path/scripts/model_policy.py"],
|
|
456
|
+
["scripts/model_policy.py", "skills/gsd-path-build/scripts/model_policy.py"],
|
|
457
|
+
["scripts/model_policy.py", "skills/gsd-path-decide/scripts/model_policy.py"],
|
|
458
|
+
["scripts/loop_run.py", "skills/gsd-path-decide/scripts/loop_run.py"],
|
|
459
|
+
["scripts/model_policy.py", "skills/gsd-path-define/scripts/model_policy.py"],
|
|
460
|
+
["scripts/loop_run.py", "skills/gsd-path-define/scripts/loop_run.py"],
|
|
461
|
+
["scripts/model_policy.py", "skills/gsd-path-discuss/scripts/model_policy.py"],
|
|
462
|
+
["scripts/loop_run.py", "skills/gsd-path-discuss/scripts/loop_run.py"],
|
|
463
|
+
["scripts/review_panel.py", "skills/gsd-path-discuss/scripts/review_panel.py"],
|
|
464
|
+
["scripts/model_policy.py", "skills/gsd-path-docs-audit/scripts/model_policy.py"],
|
|
465
|
+
["scripts/loop_run.py", "skills/gsd-path-docs-audit/scripts/loop_run.py"],
|
|
466
|
+
["scripts/model_policy.py", "skills/gsd-path-forensics/scripts/model_policy.py"],
|
|
467
|
+
["scripts/loop_run.py", "skills/gsd-path-forensics/scripts/loop_run.py"],
|
|
468
|
+
["scripts/review_panel.py", "skills/gsd-path-forensics/scripts/review_panel.py"],
|
|
469
|
+
["scripts/model_policy.py", "skills/gsd-path-inspect/scripts/model_policy.py"],
|
|
470
|
+
["scripts/loop_run.py", "skills/gsd-path-inspect/scripts/loop_run.py"],
|
|
471
|
+
["scripts/model_policy.py", "skills/gsd-path-loop/scripts/model_policy.py"],
|
|
472
|
+
["scripts/review_panel.py", "skills/gsd-path-loop/scripts/review_panel.py"],
|
|
473
|
+
["scripts/model_policy.py", "skills/gsd-path-migrate/scripts/model_policy.py"],
|
|
474
|
+
["scripts/_common.py", "skills/gsd-path-migrate/scripts/_common.py"],
|
|
475
|
+
["scripts/loop_run.py", "skills/gsd-path-migrate/scripts/loop_run.py"],
|
|
476
|
+
["scripts/review_panel.py", "skills/gsd-path-migrate/scripts/review_panel.py"],
|
|
477
|
+
["scripts/model_policy.py", "skills/gsd-path-plan/scripts/model_policy.py"],
|
|
478
|
+
["scripts/loop_run.py", "skills/gsd-path-plan/scripts/loop_run.py"],
|
|
479
|
+
["scripts/model_policy.py", "skills/gsd-path-research/scripts/model_policy.py"],
|
|
480
|
+
["scripts/loop_run.py", "skills/gsd-path-research/scripts/loop_run.py"],
|
|
481
|
+
["scripts/model_policy.py", "skills/gsd-path-roadmap/scripts/model_policy.py"],
|
|
482
|
+
["scripts/loop_run.py", "skills/gsd-path-roadmap/scripts/loop_run.py"],
|
|
483
|
+
["scripts/model_policy.py", "skills/gsd-path-ship/scripts/model_policy.py"],
|
|
484
|
+
["scripts/loop_run.py", "skills/gsd-path-ship/scripts/loop_run.py"],
|
|
485
|
+
["scripts/model_policy.py", "skills/gsd-path-undo/scripts/model_policy.py"],
|
|
486
|
+
["scripts/loop_run.py", "skills/gsd-path-undo/scripts/loop_run.py"],
|
|
487
|
+
["scripts/review_panel.py", "skills/gsd-path-undo/scripts/review_panel.py"],
|
|
488
|
+
["scripts/path_config.py", "skills/gsd-path-build/scripts/path_config.py"],
|
|
489
|
+
["scripts/path_config.py", "skills/gsd-path-decide/scripts/path_config.py"],
|
|
490
|
+
["scripts/path_config.py", "skills/gsd-path-define/scripts/path_config.py"],
|
|
491
|
+
["scripts/path_config.py", "skills/gsd-path-discuss/scripts/path_config.py"],
|
|
492
|
+
["scripts/path_config.py", "skills/gsd-path-docs-audit/scripts/path_config.py"],
|
|
493
|
+
["scripts/path_config.py", "skills/gsd-path-forensics/scripts/path_config.py"],
|
|
494
|
+
["scripts/path_config.py", "skills/gsd-path-inspect/scripts/path_config.py"],
|
|
495
|
+
["scripts/path_config.py", "skills/gsd-path-loop/scripts/path_config.py"],
|
|
496
|
+
["scripts/path_config.py", "skills/gsd-path-migrate/scripts/path_config.py"],
|
|
497
|
+
["scripts/path_config.py", "skills/gsd-path-plan/scripts/path_config.py"],
|
|
498
|
+
["scripts/path_config.py", "skills/gsd-path-research/scripts/path_config.py"],
|
|
499
|
+
["scripts/path_config.py", "skills/gsd-path-roadmap/scripts/path_config.py"],
|
|
500
|
+
["scripts/path_config.py", "skills/gsd-path-ship/scripts/path_config.py"],
|
|
501
|
+
["scripts/path_config.py", "skills/gsd-path-undo/scripts/path_config.py"],
|
|
502
|
+
["scripts/path_config.py", "skills/gsd-path/scripts/path_config.py"]
|
|
403
503
|
],
|
|
404
504
|
"phase_contract_targets": [
|
|
405
505
|
["skills/gsd-path-build/SKILL.md", "skills/gsd-path/BUILD.md"],
|
package/scripts/state_promote.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""Launch the project status runtime across an atomic refresh handoff."""
|
|
3
3
|
|
|
4
|
+
import argparse
|
|
5
|
+
import hashlib
|
|
4
6
|
import errno
|
|
5
7
|
import json
|
|
6
8
|
import os
|
|
@@ -72,8 +74,85 @@ def install_lock_active(lock: Path) -> bool:
|
|
|
72
74
|
return current_identity == identity
|
|
73
75
|
|
|
74
76
|
|
|
77
|
+
RUNTIME_SCHEMA = "gsd-path/runtime/v1"
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def runtime_home() -> Path:
|
|
81
|
+
return Path.home() / ".gsd-path" / "runtimes"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def declaration(repo: Path) -> dict:
|
|
85
|
+
path = repo / ".gsd-path" / "runtime.json"
|
|
86
|
+
if path.is_symlink() or path.parent.is_symlink():
|
|
87
|
+
raise ValueError(f"unsafe runtime declaration: {path}")
|
|
88
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
89
|
+
if (not isinstance(data, dict) or data.get("schema") != RUNTIME_SCHEMA
|
|
90
|
+
or not isinstance(data.get("version"), str)
|
|
91
|
+
or not isinstance(data.get("digest"), str)
|
|
92
|
+
or len(data["digest"]) != 64
|
|
93
|
+
or any(c not in "0123456789abcdef" for c in data["digest"])):
|
|
94
|
+
raise ValueError(f"invalid runtime declaration: {path}")
|
|
95
|
+
return data
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def manifest_digest(manifest: dict) -> str:
|
|
99
|
+
return hashlib.sha256(json.dumps(manifest, sort_keys=True, separators=(",", ":")).encode()).hexdigest()
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def validate_runtime(data: dict) -> Path:
|
|
103
|
+
root = runtime_home() / data["digest"]
|
|
104
|
+
hint = (f"Runtime {data['version']} ({data['digest']}) is unavailable or invalid at {root}. "
|
|
105
|
+
"Run gsd-path --runtime-restore --project <project-root> "
|
|
106
|
+
"--source-root <matching-package-root> to restore this exact runtime.")
|
|
107
|
+
try:
|
|
108
|
+
if any(p.is_symlink() for p in (root, root.parent, root.parent.parent)):
|
|
109
|
+
raise ValueError("symlinked runtime storage")
|
|
110
|
+
manifest_path = root / "manifest.json"
|
|
111
|
+
if manifest_path.is_symlink():
|
|
112
|
+
raise ValueError("symlinked manifest")
|
|
113
|
+
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
|
|
114
|
+
if (not isinstance(manifest, dict) or manifest_digest(manifest) != data["digest"]
|
|
115
|
+
or manifest.get("version") != data["version"]):
|
|
116
|
+
raise ValueError("manifest identity mismatch")
|
|
117
|
+
files = manifest.get("files")
|
|
118
|
+
if not isinstance(files, dict) or "pipeline_state.py" not in files:
|
|
119
|
+
raise ValueError("invalid runtime file inventory")
|
|
120
|
+
for name, expected in files.items():
|
|
121
|
+
if Path(name).name != name or not name.endswith(".py"):
|
|
122
|
+
raise ValueError("invalid runtime file name")
|
|
123
|
+
path = root / name
|
|
124
|
+
if path.is_symlink() or hashlib.sha256(path.read_bytes()).hexdigest() != expected:
|
|
125
|
+
raise ValueError(f"runtime file changed: {name}")
|
|
126
|
+
if set(p.name for p in root.iterdir()) != set(files) | {"manifest.json"}:
|
|
127
|
+
raise ValueError("unexpected runtime files")
|
|
128
|
+
except (OSError, ValueError, TypeError) as error:
|
|
129
|
+
raise ValueError(hint + f" ({error})") from error
|
|
130
|
+
return root
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def resolve_runtime(repo: Path) -> Path:
|
|
134
|
+
return validate_runtime(declaration(repo))
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def run_guard(repo: Path, name: str) -> None:
|
|
138
|
+
# Keep the guard's project identity while executing verified external bytes.
|
|
139
|
+
root = resolve_runtime(repo)
|
|
140
|
+
sys.dont_write_bytecode = True
|
|
141
|
+
sys.path.insert(0, str(root))
|
|
142
|
+
code = compile((root / name).read_bytes(), str(root / name), "exec")
|
|
143
|
+
exec(code, {"__name__": "__main__", "__file__": str(repo / ".gsd-path" / name)})
|
|
144
|
+
|
|
145
|
+
|
|
75
146
|
def launch(repo: Path) -> int:
|
|
76
147
|
parent = repo / ".gsd-path"
|
|
148
|
+
if os.path.lexists(parent / "runtime.json"):
|
|
149
|
+
try:
|
|
150
|
+
runtime = resolve_runtime(repo) / "pipeline_state.py"
|
|
151
|
+
except (OSError, ValueError) as error:
|
|
152
|
+
print(str(error), file=sys.stderr)
|
|
153
|
+
return 2
|
|
154
|
+
return subprocess.call([sys.executable, "-B", str(runtime), "status", "--repo", str(repo)],
|
|
155
|
+
env={**os.environ, "GIT_OPTIONAL_LOCKS": "0"})
|
|
77
156
|
runtime = parent / "runtime" / "pipeline_state.py"
|
|
78
157
|
lock = repo / ".gsd-path-install-lock"
|
|
79
158
|
command = [sys.executable, "-B", str(runtime), "status", "--repo", str(repo)]
|
|
@@ -108,14 +187,21 @@ def launch(repo: Path) -> int:
|
|
|
108
187
|
|
|
109
188
|
|
|
110
189
|
def main(argv: Sequence[str] = sys.argv[1:]) -> int:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if not repo.is_absolute():
|
|
190
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
191
|
+
parser.add_argument("--repo", required=True, type=Path)
|
|
192
|
+
parser.add_argument("--runtime-path", action="store_true")
|
|
193
|
+
args = parser.parse_args(argv)
|
|
194
|
+
if not args.repo.is_absolute():
|
|
116
195
|
print("GSD Path status repository must be absolute", file=sys.stderr)
|
|
117
196
|
return 2
|
|
118
|
-
|
|
197
|
+
if args.runtime_path:
|
|
198
|
+
try:
|
|
199
|
+
print(resolve_runtime(args.repo.resolve()))
|
|
200
|
+
return 0
|
|
201
|
+
except (OSError, ValueError) as error:
|
|
202
|
+
print(str(error), file=sys.stderr)
|
|
203
|
+
return 2
|
|
204
|
+
return launch(args.repo.resolve())
|
|
119
205
|
|
|
120
206
|
|
|
121
207
|
if __name__ == "__main__":
|
package/scripts/wizard.mjs
CHANGED
|
@@ -125,7 +125,7 @@ const confirm = (io, theme, title, yes = "Yes", no = "No") =>
|
|
|
125
125
|
|
|
126
126
|
// Pure: runs the question flow and returns install.mjs argv (or null if cancelled).
|
|
127
127
|
// `installed(target, local)` reports whether a managed install already exists for that host in that scope.
|
|
128
|
-
export async function wizard({ input, output, colored = true, version = "", cwd = process.cwd(), installed = () => false, targets }) {
|
|
128
|
+
export async function wizard({ input, output, colored = true, version = "", cwd = process.cwd(), installed = () => false, legacyRuntime = false, targets }) {
|
|
129
129
|
const theme = makeTheme(colored);
|
|
130
130
|
const keys = keyReader(input);
|
|
131
131
|
const io = { keys, output };
|
|
@@ -147,8 +147,13 @@ export async function wizard({ input, output, colored = true, version = "", cwd
|
|
|
147
147
|
hostItems.some((item) => item.checked && hosts.includes(item.value)) &&
|
|
148
148
|
(await confirm(io, theme, "Existing installs found. What do you want to do?", "Update in place", "Fresh install"));
|
|
149
149
|
|
|
150
|
-
const project = await confirm(io, theme, "Write AGENTS.md + WORKFLOW.md contracts into this repo?", `Yes — ${cwd}`, "Not now");
|
|
150
|
+
const project = await confirm(io, theme, update ? "Refresh this project's wiring (keep its contracts and selected runtime)?" : "Write AGENTS.md + WORKFLOW.md contracts into this repo?", `Yes — ${cwd}`, "Not now");
|
|
151
151
|
const hooks = project && (await confirm(io, theme, "Install guard hooks (archive immutability, ship-commit purity)?"));
|
|
152
|
+
const migrate = project && update && legacyRuntime;
|
|
153
|
+
if (migrate) {
|
|
154
|
+
output.write(`\n This project uses the old runtime layout. Migration moves managed runtime files\n outside the repo and leaves an unstaged Git diff for review. Local edits are preserved.\n`);
|
|
155
|
+
if (!(await confirm(io, theme, "Migrate this project before updating?", "Migrate and continue upgrade", "Cancel"))) return null;
|
|
156
|
+
}
|
|
152
157
|
|
|
153
158
|
const argv = [];
|
|
154
159
|
if (hosts.length === targets.length) argv.push("--all");
|
|
@@ -157,6 +162,7 @@ export async function wizard({ input, output, colored = true, version = "", cwd
|
|
|
157
162
|
if (local) argv.push("--local");
|
|
158
163
|
if (project) argv.push("--project", cwd);
|
|
159
164
|
if (hooks) argv.push("--hooks");
|
|
165
|
+
if (migrate) argv.push("--runtime-migrate");
|
|
160
166
|
|
|
161
167
|
output.write(`\n ${theme.dim("Equivalent command:")}\n ${theme.accent("$")} gsd-path ${argv.join(" ")}\n`);
|
|
162
168
|
const go = await select(io, theme, "Ready?", [
|
package/scripts/workflow_run.py
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import argparse
|
|
5
5
|
import hashlib
|
|
6
6
|
import json
|
|
7
|
+
import os
|
|
7
8
|
import subprocess
|
|
8
9
|
import sys
|
|
9
10
|
import tempfile
|
|
@@ -28,9 +29,10 @@ def run_workflow(repo: Path, action: str, project_dir: str, expected_head: str =
|
|
|
28
29
|
steps = []
|
|
29
30
|
outputs = {}
|
|
30
31
|
scripts = Path(__file__).resolve().parent
|
|
32
|
+
helpers = scripts
|
|
31
33
|
|
|
32
34
|
def step(script, *arguments, raw=False):
|
|
33
|
-
command = [sys.executable, "-B", str(
|
|
35
|
+
command = [sys.executable, "-B", str(helpers / script), *arguments]
|
|
34
36
|
completed = subprocess.run(command, cwd=repo, capture_output=True, text=True)
|
|
35
37
|
receipt = {"script": script, "command": command, "exit_code": completed.returncode,
|
|
36
38
|
"stdout": completed.stdout, "stderr": completed.stderr}
|
|
@@ -49,6 +51,15 @@ def run_workflow(repo: Path, action: str, project_dir: str, expected_head: str =
|
|
|
49
51
|
|
|
50
52
|
common = ["--repo", str(repo), "--project-dir", project_dir]
|
|
51
53
|
try:
|
|
54
|
+
if os.path.lexists(repo / ".gsd-path/runtime.json"):
|
|
55
|
+
resolved = subprocess.run(
|
|
56
|
+
[sys.executable, "-B", str(repo / ".gsd-path/status_runtime.py"),
|
|
57
|
+
"--repo", str(repo), "--runtime-path"],
|
|
58
|
+
cwd=repo, capture_output=True, text=True)
|
|
59
|
+
if resolved.returncode:
|
|
60
|
+
sys.stderr.write(resolved.stderr)
|
|
61
|
+
raise StepFailed(resolved.stderr.strip())
|
|
62
|
+
helpers = Path(resolved.stdout.strip())
|
|
52
63
|
if action == "route":
|
|
53
64
|
step("pipeline_state.py", "route", *common)
|
|
54
65
|
elif action == "prepare-inspect":
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# gsd-path project runtime
|
|
3
|
+
"""Placement shared by task isolation, verification, and integration."""
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
# Runtime helpers must not modify their immutable installation.
|
|
8
|
+
sys.dont_write_bytecode = True
|
|
9
|
+
|
|
10
|
+
import hashlib
|
|
11
|
+
import json
|
|
12
|
+
import os
|
|
13
|
+
import tempfile
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
import _common
|
|
18
|
+
except ImportError:
|
|
19
|
+
from scripts import _common
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _git(primary: Path, *args: str) -> str:
|
|
23
|
+
result = _common.run_git(primary, *args)
|
|
24
|
+
if result.returncode:
|
|
25
|
+
raise ValueError(result.stderr.strip() or "cannot inspect worktree placement")
|
|
26
|
+
return result.stdout.rstrip("\n")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _identity(path: Path) -> str:
|
|
30
|
+
return hashlib.sha256(os.fsencode(path)).hexdigest()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _workspace(primary: Path, pin: bool) -> Path:
|
|
34
|
+
common = Path(_git(primary, "rev-parse", "--git-common-dir"))
|
|
35
|
+
common = (primary / common).resolve()
|
|
36
|
+
identity = _identity(primary)
|
|
37
|
+
receipt = common / "gsd-path" / "workspaces" / f"{identity}.json"
|
|
38
|
+
try:
|
|
39
|
+
data = json.loads(receipt.read_text(encoding="utf-8"))
|
|
40
|
+
except FileNotFoundError:
|
|
41
|
+
pass
|
|
42
|
+
else:
|
|
43
|
+
if (not isinstance(data, dict) or data.get("primary") != str(primary)
|
|
44
|
+
or not isinstance(data.get("root"), str)
|
|
45
|
+
or not Path(data["root"]).is_absolute()):
|
|
46
|
+
raise ValueError(f"invalid worktree placement receipt: {receipt}")
|
|
47
|
+
return Path(data["root"])
|
|
48
|
+
|
|
49
|
+
root = Path(os.environ.get("GSD_PATH_WORKTREE_ROOT") or Path.home() / ".gsd-path" / "projects").expanduser()
|
|
50
|
+
if not root.is_absolute():
|
|
51
|
+
raise ValueError("GSD_PATH_WORKTREE_ROOT must be absolute")
|
|
52
|
+
root = root.resolve()
|
|
53
|
+
parent = root
|
|
54
|
+
while not parent.exists():
|
|
55
|
+
parent = parent.parent
|
|
56
|
+
ancestor = _common.run_git(parent, "rev-parse", "--git-common-dir")
|
|
57
|
+
same_repository = (
|
|
58
|
+
ancestor.returncode == 0
|
|
59
|
+
and (parent / ancestor.stdout.strip()).resolve() == common
|
|
60
|
+
)
|
|
61
|
+
if root.is_relative_to(primary) or same_repository:
|
|
62
|
+
raise ValueError(f"managed worktree root must be outside this repository's worktrees: {root}")
|
|
63
|
+
workspace = root / _identity(common) / identity
|
|
64
|
+
if pin:
|
|
65
|
+
receipt.parent.mkdir(parents=True, exist_ok=True)
|
|
66
|
+
fd, temporary = tempfile.mkstemp(dir=receipt.parent)
|
|
67
|
+
try:
|
|
68
|
+
with os.fdopen(fd, "w", encoding="utf-8") as handle:
|
|
69
|
+
json.dump({"primary": str(primary), "root": str(workspace)}, handle)
|
|
70
|
+
try:
|
|
71
|
+
os.link(temporary, receipt)
|
|
72
|
+
except FileExistsError:
|
|
73
|
+
return _workspace(primary, False)
|
|
74
|
+
finally:
|
|
75
|
+
os.unlink(temporary)
|
|
76
|
+
return workspace
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def worktree_path(primary: Path, kind: str, name: str, *, pin: bool = False) -> Path:
|
|
80
|
+
primary = primary.resolve()
|
|
81
|
+
if kind not in {"task", "verify", "integrate"} or not name or Path(name).name != name or name in {".", ".."}:
|
|
82
|
+
raise ValueError("invalid managed worktree kind or name")
|
|
83
|
+
legacy = (primary.parent / f".{primary.name}-gsd-path-integrate-{name}"
|
|
84
|
+
if kind == "integrate" else primary.parent / f"{primary.name}.gsd-path" / kind / name)
|
|
85
|
+
branch = f"refs/heads/gsd-path-{kind}/{name}"
|
|
86
|
+
records = _git(primary, "worktree", "list", "--porcelain", "-z").split("\0\0")
|
|
87
|
+
for record in records:
|
|
88
|
+
fields = record.split("\0")
|
|
89
|
+
if f"worktree {legacy}" in fields and f"branch {branch}" in fields:
|
|
90
|
+
return legacy
|
|
91
|
+
# Keep collision checks and missing-directory recovery at the old location.
|
|
92
|
+
if os.path.lexists(legacy):
|
|
93
|
+
return legacy
|
|
94
|
+
return _workspace(primary, pin) / kind / name
|
package/skills/gsd-path/BUILD.md
CHANGED
|
@@ -3,6 +3,8 @@ name: gsd-path-build
|
|
|
3
3
|
description: Execute or resume an approved GSD Path plan with isolated task worktrees, deterministic commits, and independent wave review. Use only when the user explicitly invokes $gsd-path-build or an active $gsd-path router explicitly routes to this phase.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
Before executing project helpers, read [runtime selection](references/runtime-selection.md).
|
|
7
|
+
|
|
6
8
|
# GSD Path Build Orchestrator
|
|
7
9
|
|
|
8
10
|
Orchestrate coders, task landing, and reviewers from the main conversation.
|
|
@@ -98,6 +100,11 @@ rule; never invoke an explicit-only sibling skill yourself.
|
|
|
98
100
|
checkpoint `.project/` records uses this helper. Record the exact full HEAD
|
|
99
101
|
before the first metadata change in that checkpoint, then run:
|
|
100
102
|
|
|
103
|
+
Explicit configuration edits in `.project/config.json` and
|
|
104
|
+
`.project/model-policy.json` are expected bookkeeping. Include them in the next
|
|
105
|
+
normal checkpoint before a clean dispatch base; they may remain pending while
|
|
106
|
+
an already dispatched task lands. Existing model selections stay pinned.
|
|
107
|
+
|
|
101
108
|
```text
|
|
102
109
|
python3 <absolute isolation.py> checkpoint \
|
|
103
110
|
--repo <absolute primary> \
|
|
@@ -3,6 +3,8 @@ name: gsd-path-decide
|
|
|
3
3
|
description: Decide implementation direction from approved intent and complete research evidence, recording settled choices in SYNTHESIS.md. Use only when the user explicitly invokes $gsd-path-decide or an active $gsd-path router explicitly routes to this phase.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
Before executing project helpers, read [runtime selection](references/runtime-selection.md).
|
|
7
|
+
|
|
6
8
|
# GSD Path Decide Phase
|
|
7
9
|
|
|
8
10
|
Dispatch one reasoning-intensive decider and validate its decision artifact.
|
|
@@ -3,6 +3,8 @@ name: gsd-path-define
|
|
|
3
3
|
description: Define and approve project or milestone intent through an interview or milestone confirmation, writing .project/CHARTER.md or .project/intent/INTENT.md. Use only when the user explicitly invokes $gsd-path-define or an active $gsd-path router explicitly routes to this phase.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
Before executing project helpers, read [runtime selection](references/runtime-selection.md).
|
|
7
|
+
|
|
6
8
|
# GSD Path Define Phase
|
|
7
9
|
|
|
8
10
|
Turn a project idea or approved roadmap entry into an approved intent artifact.
|
|
@@ -110,12 +112,13 @@ the charter instead of the single-milestone checklist:
|
|
|
110
112
|
4. **Constraints** — program-level stack, budget, deadline, integrations.
|
|
111
113
|
5. **Program success criteria** — observable when the last milestone ships.
|
|
112
114
|
6. **Review panel** — optional durable default (`off` | `detected` | named
|
|
113
|
-
families).
|
|
115
|
+
families). Use the configured future preference unless the user chooses
|
|
116
|
+
otherwise (see Output contract). This value persists on CHARTER.md; later
|
|
114
117
|
milestone INTENT files copy it and may override.
|
|
115
118
|
|
|
116
119
|
Read the local [charter template](templates/charter.md), write the approval
|
|
117
|
-
draft to `.project/CHARTER.md` including
|
|
118
|
-
|
|
120
|
+
draft to `.project/CHARTER.md` including the configured or explicitly chosen
|
|
121
|
+
`Review panel:` value, and run the same playback-approval
|
|
119
122
|
loop as the standard Process. On approval, retain the reviewed
|
|
120
123
|
`Review panel:` value on CHARTER.md, run `pipeline_state.py transition` with
|
|
121
124
|
expected `define/active`, milestone/branch/archive all at their exact current
|
|
@@ -144,7 +147,7 @@ State ownership. There is no re-interview of charter or roadmap scope:
|
|
|
144
147
|
Risks and Open questions from the entry (tagged `RESEARCH`/`NEEDS-USER`),
|
|
145
148
|
`Lane: milestone`, `Surfaces:` copied verbatim from the entry, and
|
|
146
149
|
`Review panel:` copied from CHARTER.md (default
|
|
147
|
-
|
|
150
|
+
the configured preference when CHARTER omits it). The confirmation may override the copied
|
|
148
151
|
panel value; do not invent `detected` or a named list. When brownfield,
|
|
149
152
|
fill `## Current state` from the map, record doc-vs-code rulings as in
|
|
150
153
|
Brownfield mode, and add protected existing behavior under Scope out.
|
|
@@ -271,9 +274,12 @@ question. The rules change for every primary mode:
|
|
|
271
274
|
## Output contract
|
|
272
275
|
|
|
273
276
|
At approval, retain the already reviewed `Lane:` value and its one-line reason.
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
+
Before presenting an approval draft without a CHARTER or explicit panel choice,
|
|
278
|
+
read `settings.review_panel.value` from the selected runtime's `path_config.py
|
|
279
|
+
show --repo <absolute-root>` (bundle for legacy projects; off for older selected
|
|
280
|
+
runtimes without config support). Include that preference in the draft.
|
|
281
|
+
Retain `Review panel:` as reviewed: the CHARTER copy, the explicit user choice,
|
|
282
|
+
or the configured future preference. Quick lane keeps the panel off.
|
|
277
283
|
|
|
278
284
|
After approval, finalize `.project/intent/INTENT.md` and run
|
|
279
285
|
`pipeline_state.py transition` with expected `define/active`, the exact
|
|
@@ -3,6 +3,8 @@ name: gsd-path-docs-audit
|
|
|
3
3
|
description: Verify Markdown claims against the actual code, commands, and GSD Path artifacts. Use only when the user explicitly invokes $gsd-path-docs-audit or an active $gsd-path router explicitly routes to this phase.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
Before executing project helpers, read [runtime selection](references/runtime-selection.md).
|
|
7
|
+
|
|
6
8
|
# GSD Path Docs Audit
|
|
7
9
|
|
|
8
10
|
Answer one question with evidence: **does the project do what its documents
|
|
@@ -3,6 +3,8 @@ name: gsd-path-inspect
|
|
|
3
3
|
description: Inspect an existing codebase and its documentation to establish brownfield ground truth before intent is defined. Use only when the user explicitly invokes $gsd-path-inspect or an active $gsd-path router explicitly routes to this phase.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
Before executing project helpers, read [runtime selection](references/runtime-selection.md).
|
|
7
|
+
|
|
6
8
|
# GSD Path Inspect Phase
|
|
7
9
|
|
|
8
10
|
Establish ground truth about an existing project before intent is defined.
|