@opengsd/gsd-path 1.0.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 +397 -0
- package/DOCS.md +341 -0
- package/FULL.md +475 -0
- package/GUIDE.md +23 -0
- package/HOOKS.md +273 -0
- package/LICENSE +21 -0
- package/MIGRATE.md +100 -0
- package/QUICK.md +146 -0
- package/README.md +280 -0
- package/RUNTIME.md +229 -0
- package/UPDATE.md +196 -0
- package/WORKFLOW.md +683 -0
- package/package.json +80 -0
- package/platforms/claude/dispatch.md +63 -0
- package/platforms/copilot/dispatch.md +61 -0
- package/platforms/cursor/agent.md +17 -0
- package/platforms/cursor/dispatch.md +63 -0
- package/platforms/grok/dispatch.md +61 -0
- package/platforms/kimi/dispatch.md +64 -0
- package/platforms/kiro/dispatch.md +58 -0
- package/platforms/opencode/dispatch.md +62 -0
- package/platforms/qwen/dispatch.md +60 -0
- package/platforms/shared-agents/dispatch.md +131 -0
- package/plugin.json +14 -0
- package/scripts/_common.py +180 -0
- package/scripts/archive_milestone.py +2265 -0
- package/scripts/bootstrap_repository.py +710 -0
- package/scripts/build_state.py +854 -0
- package/scripts/check_docs_audit.py +463 -0
- package/scripts/check_handoffs.py +1855 -0
- package/scripts/check_task_briefs.py +376 -0
- package/scripts/check_update.py +93 -0
- package/scripts/core_hook_gate.py +34 -0
- package/scripts/core_hook_settings.py +119 -0
- package/scripts/detect_project.py +1517 -0
- package/scripts/discussion_records.py +619 -0
- package/scripts/discussion_validate.py +1321 -0
- package/scripts/dispatch_driver.py +1812 -0
- package/scripts/git_guard.py +759 -0
- package/scripts/guard_hook.py +2124 -0
- package/scripts/install.mjs +3239 -0
- package/scripts/install.py +3008 -0
- package/scripts/integration.py +1433 -0
- package/scripts/isolation.py +3538 -0
- package/scripts/lean_verification.py +256 -0
- package/scripts/loop_run.py +837 -0
- package/scripts/migrate_core.py +169 -0
- package/scripts/pipeline_diagnose.py +715 -0
- package/scripts/pipeline_git.py +940 -0
- package/scripts/pipeline_state.py +2291 -0
- package/scripts/pipeline_undo.py +1039 -0
- package/scripts/promote_lookahead.py +415 -0
- package/scripts/review_findings.py +714 -0
- package/scripts/review_panel.py +553 -0
- package/scripts/skill-resources.json +340 -0
- package/scripts/state_checkpoint.py +1039 -0
- package/scripts/state_promote.py +743 -0
- package/scripts/status_runtime.py +122 -0
- package/scripts/sync_skill_resources.py +259 -0
- package/scripts/token_budget.py +146 -0
- package/scripts/wizard.mjs +179 -0
- package/scripts/workflow_run.py +117 -0
- package/skills/gsd-path/BUILD.md +700 -0
- package/skills/gsd-path/DECIDE.md +115 -0
- package/skills/gsd-path/DEFINE.md +297 -0
- package/skills/gsd-path/DOCS-AUDIT.md +190 -0
- package/skills/gsd-path/INSPECT.md +167 -0
- package/skills/gsd-path/PLAN.md +411 -0
- package/skills/gsd-path/RESEARCH.md +159 -0
- package/skills/gsd-path/ROADMAP.md +215 -0
- package/skills/gsd-path/SHIP.md +412 -0
- package/skills/gsd-path/SKILL.md +471 -0
- package/skills/gsd-path/agents/openai.yaml +6 -0
- package/skills/gsd-path/references/codebase-mapper.md +52 -0
- package/skills/gsd-path/references/coder.md +90 -0
- package/skills/gsd-path/references/decider.md +36 -0
- package/skills/gsd-path/references/dispatch.md +131 -0
- package/skills/gsd-path/references/docs-auditor.md +60 -0
- package/skills/gsd-path/references/planner.md +104 -0
- package/skills/gsd-path/references/researcher.md +42 -0
- package/skills/gsd-path/references/reviewer.md +188 -0
- package/skills/gsd-path/references/roadmapper.md +48 -0
- package/skills/gsd-path/scripts/_common.py +180 -0
- package/skills/gsd-path/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path/scripts/bootstrap_repository.py +710 -0
- package/skills/gsd-path/scripts/build_state.py +854 -0
- package/skills/gsd-path/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path/scripts/check_update.py +93 -0
- package/skills/gsd-path/scripts/detect_project.py +1517 -0
- package/skills/gsd-path/scripts/discussion_records.py +619 -0
- package/skills/gsd-path/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path/scripts/dispatch_driver.py +1812 -0
- package/skills/gsd-path/scripts/integration.py +1433 -0
- package/skills/gsd-path/scripts/isolation.py +3538 -0
- package/skills/gsd-path/scripts/lean_verification.py +256 -0
- package/skills/gsd-path/scripts/loop_run.py +837 -0
- package/skills/gsd-path/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path/scripts/promote_lookahead.py +415 -0
- package/skills/gsd-path/scripts/review_findings.py +714 -0
- package/skills/gsd-path/scripts/review_panel.py +553 -0
- package/skills/gsd-path/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path/scripts/state_promote.py +743 -0
- package/skills/gsd-path/scripts/token_budget.py +146 -0
- package/skills/gsd-path/scripts/workflow_run.py +117 -0
- package/skills/gsd-path/templates/answers.md +29 -0
- package/skills/gsd-path/templates/archive-manifest.md +37 -0
- package/skills/gsd-path/templates/charter.md +50 -0
- package/skills/gsd-path/templates/codebase.md +46 -0
- package/skills/gsd-path/templates/dialogue.md +21 -0
- package/skills/gsd-path/templates/docs-audit.md +69 -0
- package/skills/gsd-path/templates/evidence.md +24 -0
- package/skills/gsd-path/templates/final-review.md +27 -0
- package/skills/gsd-path/templates/gap-review.md +20 -0
- package/skills/gsd-path/templates/intent.md +98 -0
- package/skills/gsd-path/templates/loop.md +59 -0
- package/skills/gsd-path/templates/patch-findings.md +16 -0
- package/skills/gsd-path/templates/plan-panel.md +25 -0
- package/skills/gsd-path/templates/plan.md +89 -0
- package/skills/gsd-path/templates/repository.md +16 -0
- package/skills/gsd-path/templates/research-handoff.md +25 -0
- package/skills/gsd-path/templates/roadmap.md +38 -0
- package/skills/gsd-path/templates/skeptic.md +36 -0
- package/skills/gsd-path/templates/state.md +27 -0
- package/skills/gsd-path/templates/synthesis.md +36 -0
- package/skills/gsd-path/templates/task.md +74 -0
- package/skills/gsd-path/templates/wave-panel.md +25 -0
- package/skills/gsd-path/templates/wave-review.md +64 -0
- package/skills/gsd-path-build/SKILL.md +700 -0
- package/skills/gsd-path-build/agents/openai.yaml +6 -0
- package/skills/gsd-path-build/references/coder.md +90 -0
- package/skills/gsd-path-build/references/dispatch.md +131 -0
- package/skills/gsd-path-build/references/reviewer.md +188 -0
- package/skills/gsd-path-build/scripts/_common.py +180 -0
- package/skills/gsd-path-build/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-build/scripts/build_state.py +854 -0
- package/skills/gsd-path-build/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-build/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-build/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-build/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-build/scripts/dispatch_driver.py +1812 -0
- package/skills/gsd-path-build/scripts/integration.py +1433 -0
- package/skills/gsd-path-build/scripts/isolation.py +3538 -0
- package/skills/gsd-path-build/scripts/loop_run.py +837 -0
- package/skills/gsd-path-build/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-build/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-build/scripts/review_findings.py +714 -0
- package/skills/gsd-path-build/scripts/review_panel.py +553 -0
- package/skills/gsd-path-build/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-build/scripts/state_promote.py +743 -0
- package/skills/gsd-path-build/scripts/token_budget.py +146 -0
- package/skills/gsd-path-build/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-build/templates/skeptic.md +36 -0
- package/skills/gsd-path-build/templates/task.md +74 -0
- package/skills/gsd-path-build/templates/wave-panel.md +25 -0
- package/skills/gsd-path-build/templates/wave-review.md +64 -0
- package/skills/gsd-path-decide/SKILL.md +115 -0
- package/skills/gsd-path-decide/agents/openai.yaml +6 -0
- package/skills/gsd-path-decide/references/decider.md +36 -0
- package/skills/gsd-path-decide/references/dispatch.md +131 -0
- package/skills/gsd-path-decide/scripts/_common.py +180 -0
- package/skills/gsd-path-decide/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-decide/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-decide/scripts/isolation.py +3538 -0
- package/skills/gsd-path-decide/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-decide/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-decide/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-decide/scripts/state_promote.py +743 -0
- package/skills/gsd-path-decide/templates/synthesis.md +36 -0
- package/skills/gsd-path-define/SKILL.md +297 -0
- package/skills/gsd-path-define/agents/openai.yaml +6 -0
- package/skills/gsd-path-define/scripts/_common.py +180 -0
- package/skills/gsd-path-define/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-define/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-define/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-define/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-define/scripts/isolation.py +3538 -0
- package/skills/gsd-path-define/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-define/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-define/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-define/scripts/state_promote.py +743 -0
- package/skills/gsd-path-define/templates/charter.md +50 -0
- package/skills/gsd-path-define/templates/intent.md +98 -0
- package/skills/gsd-path-define/templates/state.md +27 -0
- package/skills/gsd-path-discuss/SKILL.md +162 -0
- package/skills/gsd-path-discuss/agents/openai.yaml +6 -0
- package/skills/gsd-path-discuss/scripts/_common.py +180 -0
- package/skills/gsd-path-discuss/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-discuss/templates/answers.md +29 -0
- package/skills/gsd-path-discuss/templates/dialogue.md +21 -0
- package/skills/gsd-path-docs-audit/SKILL.md +190 -0
- package/skills/gsd-path-docs-audit/agents/openai.yaml +6 -0
- package/skills/gsd-path-docs-audit/references/dispatch.md +131 -0
- package/skills/gsd-path-docs-audit/references/docs-auditor.md +60 -0
- package/skills/gsd-path-docs-audit/scripts/_common.py +180 -0
- package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-docs-audit/scripts/isolation.py +3538 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +743 -0
- package/skills/gsd-path-docs-audit/templates/docs-audit.md +69 -0
- package/skills/gsd-path-forensics/SKILL.md +39 -0
- package/skills/gsd-path-forensics/agents/openai.yaml +6 -0
- package/skills/gsd-path-forensics/scripts/_common.py +180 -0
- package/skills/gsd-path-forensics/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +715 -0
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +1039 -0
- package/skills/gsd-path-inspect/SKILL.md +167 -0
- package/skills/gsd-path-inspect/agents/openai.yaml +6 -0
- package/skills/gsd-path-inspect/references/codebase-mapper.md +52 -0
- package/skills/gsd-path-inspect/references/dispatch.md +131 -0
- package/skills/gsd-path-inspect/references/docs-auditor.md +60 -0
- package/skills/gsd-path-inspect/scripts/_common.py +180 -0
- package/skills/gsd-path-inspect/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-inspect/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-inspect/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-inspect/scripts/isolation.py +3538 -0
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-inspect/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-inspect/scripts/state_promote.py +743 -0
- package/skills/gsd-path-inspect/templates/codebase.md +46 -0
- package/skills/gsd-path-inspect/templates/docs-audit.md +69 -0
- package/skills/gsd-path-inspect/templates/state.md +27 -0
- package/skills/gsd-path-loop/SKILL.md +98 -0
- package/skills/gsd-path-loop/agents/openai.yaml +6 -0
- package/skills/gsd-path-loop/examples/ci-repair.LOOP.md +61 -0
- package/skills/gsd-path-loop/scripts/_common.py +180 -0
- package/skills/gsd-path-loop/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-loop/scripts/loop_run.py +837 -0
- package/skills/gsd-path-loop/templates/loop.md +59 -0
- package/skills/gsd-path-migrate/SKILL.md +134 -0
- package/skills/gsd-path-migrate/agents/openai.yaml +6 -0
- package/skills/gsd-path-migrate/scripts/core_hook_gate.py +34 -0
- package/skills/gsd-path-migrate/scripts/core_hook_settings.py +119 -0
- package/skills/gsd-path-migrate/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-migrate/scripts/migrate_core.py +169 -0
- package/skills/gsd-path-plan/SKILL.md +411 -0
- package/skills/gsd-path-plan/agents/openai.yaml +6 -0
- package/skills/gsd-path-plan/references/dispatch.md +131 -0
- package/skills/gsd-path-plan/references/planner.md +104 -0
- package/skills/gsd-path-plan/scripts/_common.py +180 -0
- package/skills/gsd-path-plan/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-plan/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-plan/scripts/isolation.py +3538 -0
- package/skills/gsd-path-plan/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-plan/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-plan/scripts/review_panel.py +553 -0
- package/skills/gsd-path-plan/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-plan/scripts/state_promote.py +743 -0
- package/skills/gsd-path-plan/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-plan/templates/patch-findings.md +16 -0
- package/skills/gsd-path-plan/templates/plan-panel.md +25 -0
- package/skills/gsd-path-plan/templates/plan.md +89 -0
- package/skills/gsd-path-plan/templates/task.md +74 -0
- package/skills/gsd-path-research/SKILL.md +159 -0
- package/skills/gsd-path-research/agents/openai.yaml +6 -0
- package/skills/gsd-path-research/references/dispatch.md +131 -0
- package/skills/gsd-path-research/references/researcher.md +42 -0
- package/skills/gsd-path-research/scripts/_common.py +180 -0
- package/skills/gsd-path-research/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-research/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-research/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-research/scripts/isolation.py +3538 -0
- package/skills/gsd-path-research/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-research/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-research/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-research/scripts/state_promote.py +743 -0
- package/skills/gsd-path-research/templates/evidence.md +24 -0
- package/skills/gsd-path-research/templates/research-handoff.md +25 -0
- package/skills/gsd-path-roadmap/SKILL.md +215 -0
- package/skills/gsd-path-roadmap/agents/openai.yaml +6 -0
- package/skills/gsd-path-roadmap/references/dispatch.md +131 -0
- package/skills/gsd-path-roadmap/references/roadmapper.md +48 -0
- package/skills/gsd-path-roadmap/scripts/_common.py +180 -0
- package/skills/gsd-path-roadmap/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-roadmap/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-roadmap/scripts/integration.py +1433 -0
- package/skills/gsd-path-roadmap/scripts/isolation.py +3538 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +415 -0
- package/skills/gsd-path-roadmap/scripts/review_panel.py +553 -0
- package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-roadmap/scripts/state_promote.py +743 -0
- package/skills/gsd-path-roadmap/templates/roadmap.md +38 -0
- package/skills/gsd-path-ship/SKILL.md +412 -0
- package/skills/gsd-path-ship/agents/openai.yaml +6 -0
- package/skills/gsd-path-ship/references/dispatch.md +131 -0
- package/skills/gsd-path-ship/references/reviewer.md +188 -0
- package/skills/gsd-path-ship/scripts/_common.py +180 -0
- package/skills/gsd-path-ship/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-ship/scripts/build_state.py +854 -0
- package/skills/gsd-path-ship/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-ship/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-ship/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-ship/scripts/integration.py +1433 -0
- package/skills/gsd-path-ship/scripts/isolation.py +3538 -0
- package/skills/gsd-path-ship/scripts/lean_verification.py +256 -0
- package/skills/gsd-path-ship/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-ship/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-ship/scripts/review_panel.py +553 -0
- package/skills/gsd-path-ship/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-ship/scripts/state_promote.py +743 -0
- package/skills/gsd-path-ship/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-ship/templates/archive-manifest.md +37 -0
- package/skills/gsd-path-ship/templates/final-review.md +27 -0
- package/skills/gsd-path-ship/templates/gap-review.md +20 -0
- package/skills/gsd-path-ship/templates/patch-findings.md +16 -0
- package/skills/gsd-path-ship/templates/wave-review.md +64 -0
- package/skills/gsd-path-undo/SKILL.md +45 -0
- package/skills/gsd-path-undo/agents/openai.yaml +6 -0
- package/skills/gsd-path-undo/scripts/_common.py +180 -0
- package/skills/gsd-path-undo/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +1039 -0
- package/skills/path/BUILD.md +700 -0
- package/skills/path/DECIDE.md +115 -0
- package/skills/path/DEFINE.md +297 -0
- package/skills/path/DOCS-AUDIT.md +190 -0
- package/skills/path/INSPECT.md +167 -0
- package/skills/path/PLAN.md +411 -0
- package/skills/path/RESEARCH.md +159 -0
- package/skills/path/ROADMAP.md +215 -0
- package/skills/path/SHIP.md +412 -0
- package/skills/path/SKILL.md +471 -0
- package/skills/path/agents/openai.yaml +6 -0
- package/skills/path/references/codebase-mapper.md +52 -0
- package/skills/path/references/coder.md +90 -0
- package/skills/path/references/decider.md +36 -0
- package/skills/path/references/dispatch.md +131 -0
- package/skills/path/references/docs-auditor.md +60 -0
- package/skills/path/references/planner.md +104 -0
- package/skills/path/references/researcher.md +42 -0
- package/skills/path/references/reviewer.md +188 -0
- package/skills/path/references/roadmapper.md +48 -0
- package/skills/path/scripts/_common.py +180 -0
- package/skills/path/scripts/archive_milestone.py +2265 -0
- package/skills/path/scripts/bootstrap_repository.py +710 -0
- package/skills/path/scripts/build_state.py +854 -0
- package/skills/path/scripts/check_docs_audit.py +463 -0
- package/skills/path/scripts/check_handoffs.py +1855 -0
- package/skills/path/scripts/check_task_briefs.py +376 -0
- package/skills/path/scripts/check_update.py +93 -0
- package/skills/path/scripts/detect_project.py +1517 -0
- package/skills/path/scripts/discussion_records.py +619 -0
- package/skills/path/scripts/discussion_validate.py +1321 -0
- package/skills/path/scripts/dispatch_driver.py +1812 -0
- package/skills/path/scripts/integration.py +1433 -0
- package/skills/path/scripts/isolation.py +3538 -0
- package/skills/path/scripts/lean_verification.py +256 -0
- package/skills/path/scripts/loop_run.py +837 -0
- package/skills/path/scripts/pipeline_git.py +940 -0
- package/skills/path/scripts/pipeline_state.py +2291 -0
- package/skills/path/scripts/promote_lookahead.py +415 -0
- package/skills/path/scripts/review_findings.py +714 -0
- package/skills/path/scripts/review_panel.py +553 -0
- package/skills/path/scripts/state_checkpoint.py +1039 -0
- package/skills/path/scripts/state_promote.py +743 -0
- package/skills/path/scripts/token_budget.py +146 -0
- package/skills/path/scripts/workflow_run.py +117 -0
- package/skills/path/templates/answers.md +29 -0
- package/skills/path/templates/archive-manifest.md +37 -0
- package/skills/path/templates/charter.md +50 -0
- package/skills/path/templates/codebase.md +46 -0
- package/skills/path/templates/dialogue.md +21 -0
- package/skills/path/templates/docs-audit.md +69 -0
- package/skills/path/templates/evidence.md +24 -0
- package/skills/path/templates/final-review.md +27 -0
- package/skills/path/templates/gap-review.md +20 -0
- package/skills/path/templates/intent.md +98 -0
- package/skills/path/templates/loop.md +59 -0
- package/skills/path/templates/patch-findings.md +16 -0
- package/skills/path/templates/plan-panel.md +25 -0
- package/skills/path/templates/plan.md +89 -0
- package/skills/path/templates/repository.md +16 -0
- package/skills/path/templates/research-handoff.md +25 -0
- package/skills/path/templates/roadmap.md +38 -0
- package/skills/path/templates/skeptic.md +36 -0
- package/skills/path/templates/state.md +27 -0
- package/skills/path/templates/synthesis.md +36 -0
- package/skills/path/templates/task.md +74 -0
- package/skills/path/templates/wave-panel.md +25 -0
- package/skills/path/templates/wave-review.md +64 -0
package/HOOKS.md
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# HOOKS.md — Deterministic Guard Hooks
|
|
2
|
+
|
|
3
|
+
Optional enforcement for pipeline invariants prompt contracts cannot guarantee:
|
|
4
|
+
|
|
5
|
+
- committed `.project/archive/` trees stay read-only after ship
|
|
6
|
+
- destructive Git operations do not erase recovery state, untracked evidence,
|
|
7
|
+
or protected refs
|
|
8
|
+
- direct product-file writes do not bypass a routed non-build phase
|
|
9
|
+
- a milestone branch with its canonical ship commit accepts no further edits or commits,
|
|
10
|
+
even if STATE is later rewritten; writes are checked against the target worktree
|
|
11
|
+
|
|
12
|
+
Closed branches still allow read-only Git inspection (`status`, `log`, `diff`, plain
|
|
13
|
+
`cat-file` reads of one object, branch and worktree listing) and the router handoff helpers, including
|
|
14
|
+
`git fetch origin`, SHA resolution, and next-base selection. Branch switching remains
|
|
15
|
+
router-owned. The [ship contract](skills/gsd-path-ship/SKILL.md) owns integration
|
|
16
|
+
conflict handling and published-validation recovery.
|
|
17
|
+
|
|
18
|
+
`cat-file` options are restricted by `CLOSED_LISTING_GIT_OPTIONS` in
|
|
19
|
+
[`scripts/guard_hook.py`](scripts/guard_hook.py); filter and text-conversion forms
|
|
20
|
+
are blocked because they can execute external commands.
|
|
21
|
+
|
|
22
|
+
**Docs:** [DOCS.md](DOCS.md) (hub) · [UPDATE.md](UPDATE.md) (refresh hooks) · [QUICK.md](QUICK.md) (first install with `--hooks`)
|
|
23
|
+
|
|
24
|
+
## When to install
|
|
25
|
+
|
|
26
|
+
| Situation | Recommendation |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| New repo running GSD Path with shipped archives | **Recommended** with `--project --hooks` |
|
|
29
|
+
| Solo experiment / no ship yet | Optional |
|
|
30
|
+
| Zed-only workflow | Git hooks still help; no pre-tool-use layer |
|
|
31
|
+
| Already shipped milestones you must not corrupt | **Recommended** |
|
|
32
|
+
|
|
33
|
+
Hooks are **opt-in** — add `--hooks` to a `--project` install. They do not replace
|
|
34
|
+
careful review; they block common accidental violations.
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx @opengsd/gsd-path --claude --project /path/to/repo --hooks
|
|
40
|
+
# or from clone:
|
|
41
|
+
node scripts/install.mjs --claude --project /path/to/repo --hooks
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
For a project that already has `AGENTS.md` and `WORKFLOW.md`, initialize only
|
|
45
|
+
the guards and keep those contracts unchanged:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx @opengsd/gsd-path --hooks-init --claude --project /path/to/repo
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`--hooks` requires `--project`. Valid existing native settings for explicitly
|
|
52
|
+
selected Claude, Codex, or Cursor hosts are merged, preserving unrelated
|
|
53
|
+
settings and hooks. Other target files are refused if they already exist.
|
|
54
|
+
|
|
55
|
+
`--hooks-init` also requires `--project` plus at least one host flag or `--all`.
|
|
56
|
+
It creates the managed guard scripts, merges selected native settings, and
|
|
57
|
+
installs Git hooks without reading or writing existing project contracts.
|
|
58
|
+
Native configs for unselected hosts are ignored.
|
|
59
|
+
|
|
60
|
+
| File | Purpose |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `.gsd-path/guard_hook.py` | Pre-tool-use guard (stdin JSON → exit 2 + denial JSON) |
|
|
63
|
+
| `.gsd-path/git_guard.py` | Commit and publication validator |
|
|
64
|
+
| `.gsd-path/runtime/` | Project-local pipeline helpers, including the read-only status engine |
|
|
65
|
+
| `.git/hooks/pre-commit` | Runs `git_guard.py` before commit |
|
|
66
|
+
| `.git/hooks/commit-msg` | Runs `git_guard.py` with commit message |
|
|
67
|
+
| `.git/hooks/pre-push` | Runs `git_guard.py` on every pushed ref update |
|
|
68
|
+
| `.claude/settings.json` | Claude PreToolUse wiring (`claude` target) |
|
|
69
|
+
| `.codex/hooks.json` | Codex PreToolUse wiring (`codex` target) |
|
|
70
|
+
| `.cursor/hooks.json` | Cursor fail-closed preToolUse wiring (`cursor` target) |
|
|
71
|
+
|
|
72
|
+
Git hooks are written to the repository's **effective** hooks directory,
|
|
73
|
+
resolved with `git rev-parse --git-path hooks`. That honors `core.hooksPath`
|
|
74
|
+
setups (Husky and friends) and linked worktrees (where `.git` is a file).
|
|
75
|
+
Every selected host requires an initialized repository with a resolvable hooks
|
|
76
|
+
directory; otherwise installation stops before writing.
|
|
77
|
+
|
|
78
|
+
Git hooks work for **any** agent that commits. Native guard wiring denies a tool
|
|
79
|
+
call when its event is malformed or the guard cannot validate it.
|
|
80
|
+
|
|
81
|
+
Codex [project hooks](https://learn.chatgpt.com/docs/hooks) are installed but do
|
|
82
|
+
not run until Codex trusts the project `.codex/` layer and the exact hook
|
|
83
|
+
definition. Open `/hooks` in Codex, review both, and trust them. Until that
|
|
84
|
+
manual activation is complete, Codex's guaranteed manifest tier is `git-only`;
|
|
85
|
+
changing the hook requires review again.
|
|
86
|
+
|
|
87
|
+
**Windows / interpreter caveat:** hooks and native host settings invoke a
|
|
88
|
+
Python interpreter that the installer probes at install time — `python3` first,
|
|
89
|
+
then `python` (plain `python3` usually does not exist on Windows). If neither
|
|
90
|
+
runs, hook installation stops before writing instead of pinning a missing
|
|
91
|
+
interpreter. The `sh` hook scripts themselves need a POSIX shell (Git for
|
|
92
|
+
Windows provides one).
|
|
93
|
+
|
|
94
|
+
### Updating after package upgrade
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx @opengsd/gsd-path --hooks-refresh --project /path/to/repo
|
|
98
|
+
npx @opengsd/gsd-path --hooks-refresh-full --project /path/to/repo # + settings/git hooks
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`--hooks-refresh-full` refreshes existing managed `.claude/settings.json`,
|
|
102
|
+
`.codex/hooks.json`, and `.cursor/hooks.json`. Add `--claude`, `--codex`, or
|
|
103
|
+
`--cursor` to create a missing config or merge the guard into that selected
|
|
104
|
+
host's valid existing JSON. Unselected foreign configs are not changed. The
|
|
105
|
+
merge replaces only managed guard entries and preserves unrelated entries,
|
|
106
|
+
hook events, and settings. Codex resolves the guard from the Git root; Cursor
|
|
107
|
+
runs its project hook from the project root, so both configs remain valid after
|
|
108
|
+
a clone or move. A full refresh requires the same working interpreter and
|
|
109
|
+
resolved Git hooks directory as the initial install.
|
|
110
|
+
|
|
111
|
+
See [UPDATE.md](UPDATE.md).
|
|
112
|
+
|
|
113
|
+
## What gets blocked
|
|
114
|
+
|
|
115
|
+
**`guard_hook.py`** (pre-tool-use):
|
|
116
|
+
|
|
117
|
+
- non-read tool actions targeting archived paths or an existing ancestor of
|
|
118
|
+
the archive tree; shell operands count an ancestor only for deletion or move
|
|
119
|
+
commands
|
|
120
|
+
- `git reset --hard`, destructive `git clean` modes, force pushes (including
|
|
121
|
+
`+` refspecs), destructive branch or ref deletion, `git branch -m`,
|
|
122
|
+
`git worktree remove --force`, `git stash drop`/`clear`, and whole-tree
|
|
123
|
+
`git checkout -- .`/`git restore .`
|
|
124
|
+
- shell writes (redirections, `tee`, `cp`, `mv`, `rm`, `sed -i`, ...) that
|
|
125
|
+
target a routing control (`.git`, `.project/STATE.md`, `.project/next`,
|
|
126
|
+
`.gsd-path`) while `.project/STATE.md` exists
|
|
127
|
+
- repeated assignments to the same shell variable within one command; split
|
|
128
|
+
these into separate tool calls so write targets can be resolved
|
|
129
|
+
- copies whose destinations, including nested recursive-copy entries, resolve
|
|
130
|
+
into closed worktrees. Copy sources remain read-only inputs; ordinary safe
|
|
131
|
+
recursive copies are allowed. Supported variables are expanded before
|
|
132
|
+
destinations are derived, including contents-copy forms ending in `/.` or
|
|
133
|
+
`/`. Both lexical entries and resolved targets are checked. Unresolved copy
|
|
134
|
+
operands, unreadable source trees, directory sources that are symlinks, and
|
|
135
|
+
source trees containing directory symlinks are denied; use literal directory
|
|
136
|
+
paths and copy directory links separately
|
|
137
|
+
- shell commands that reference the archive unless the whole command is a
|
|
138
|
+
recognized standalone read or a single-command invocation of the bundled
|
|
139
|
+
`pipeline_state.py` / `archive_milestone.py` helper, resolved to a regular file
|
|
140
|
+
inside the guard-owned `.gsd-path/runtime/` directory (beside `guard_hook.py`
|
|
141
|
+
in the repository layout), using exactly `python` or `python3` with optional
|
|
142
|
+
`-B`; non-empty supplied tool working directories are authoritative. Empty
|
|
143
|
+
strings, including list items, are treated as absent: nested payloads inherit
|
|
144
|
+
their parent context, with the process cwd used when no directory is supplied.
|
|
145
|
+
The helper exception refuses chains, pipes,
|
|
146
|
+
wrappers, substitutions, redirections, and any newline, carriage return, or
|
|
147
|
+
backslash in the command text. The parsed script path must contain no `$`,
|
|
148
|
+
backticks, glob characters (`*`, `?`, `[`, `]`), braces, or `..` path components,
|
|
149
|
+
and must not start with `~`. Quoted spaces in paths and quoted punctuation
|
|
150
|
+
within arguments, such as the shipment event's semicolon, are allowed
|
|
151
|
+
- deletion or move commands outside a single simple segment, including command
|
|
152
|
+
chains, pipes, newlines, grouping, directory changes, and command substitution
|
|
153
|
+
- deletion or move commands with any argument outside the literal-path character
|
|
154
|
+
set: ASCII letters, digits, `.`, `_`, `-`, and `/` (plus a drive prefix and
|
|
155
|
+
backslashes on Windows). One matching pair of surrounding quotes is allowed;
|
|
156
|
+
spaces, parameters, wildcards, braces, and tilde paths are denied even when
|
|
157
|
+
quoted. This also applies to `find -delete` and supported destructive aliases
|
|
158
|
+
- destructive Git commands nested in supported shell and command wrappers
|
|
159
|
+
- archive glob/brace expansions and execution-capable read options such as
|
|
160
|
+
`rg --pre`
|
|
161
|
+
- direct write, edit, and patch tool calls targeting `.project/STATE.md`,
|
|
162
|
+
`.project/next/STATE.md`, their protected parent directories, or `.gsd-path/`;
|
|
163
|
+
product-file calls also require the deterministic build route, including
|
|
164
|
+
helper-proven parallel task worktrees
|
|
165
|
+
|
|
166
|
+
Read tools (`Read`, `Grep`, `View`, …) may still open archive paths.
|
|
167
|
+
|
|
168
|
+
A working directory is archive context only when it is inside an archive.
|
|
169
|
+
Merely containing `.project/archive/` does not put the repository root in
|
|
170
|
+
archive context: `echo guard-probe`, `python3 -m unittest`, and the archive
|
|
171
|
+
helper with `--repo <root>` remain allowed by the archive guard. Deleting an
|
|
172
|
+
archive ancestor, such as `rm -rf .project`, remains blocked. A simple command
|
|
173
|
+
such as `rm -rf scratch` passes the archive check; other guard rules still apply.
|
|
174
|
+
|
|
175
|
+
**`git_guard.py`** (pre-commit + commit-msg + pre-push):
|
|
176
|
+
|
|
177
|
+
- modifies, deletes, or renames away tracked archive paths
|
|
178
|
+
- `ship:` commits (case-insensitive) staging paths outside `.project/`
|
|
179
|
+
- on unshipped pipeline lineage (the committed `STATE.md` names a bound
|
|
180
|
+
`gsd-path/M###` branch that is not `shipped/done`, and HEAD descends from
|
|
181
|
+
it — the bound branch itself, `gsd-path-task/` branches, sidecars, and any
|
|
182
|
+
branch cut from them): commits staging paths outside `.project/` (or the
|
|
183
|
+
guard's own `.gsd-path/` and native hook settings) unless the phase is
|
|
184
|
+
`build` and they are landing commits as `isolation.py land` writes them —
|
|
185
|
+
subject `<task id>: <task title>` matching the task file at `Base:`, a full
|
|
186
|
+
base SHA HEAD descends from, the staged task file, only that task's declared
|
|
187
|
+
`files:`, and a `Files:` list of exactly the staged paths. Outside build the
|
|
188
|
+
reviewed HEAD is frozen; product fixes reopen through the patch plan
|
|
189
|
+
- pushes (to any remote) that move a `gsd-path/M###` ref anywhere but its
|
|
190
|
+
strict ship commit, or delete it while it holds anything else; and pushes of
|
|
191
|
+
any other ref whose commit carries a `STATE.md` that still owes a ship commit
|
|
192
|
+
(names a bound branch, not `shipped/done`). The ship state's `branch` must
|
|
193
|
+
match every bound name in the local and remote refs. Malformed pre-push
|
|
194
|
+
records and failed object inspection block the push; a present commit
|
|
195
|
+
without `STATE.md` passes on an ordinary ref. An absent bound ref passes
|
|
196
|
+
deletion. The authorized publisher is `archive_milestone.py integrate`;
|
|
197
|
+
the hook checks ref updates, not which client initiated them
|
|
198
|
+
- **allows** adding files to archive during the ship transaction, before the
|
|
199
|
+
branch closes
|
|
200
|
+
|
|
201
|
+
These local hooks cover pushes made by plain Git and clients that invoke
|
|
202
|
+
Git with hooks enabled. Creating a PR from an already published ref does not
|
|
203
|
+
run the pre-push hook. A branch cut from `main` carrying `shipped/done` passes;
|
|
204
|
+
if `main` instead carries an unshipped bound state, pushes of branches carrying
|
|
205
|
+
that state remain blocked until the milestone records are repaired through the
|
|
206
|
+
pipeline.
|
|
207
|
+
|
|
208
|
+
## GitHub-side gate
|
|
209
|
+
|
|
210
|
+
The guards above stop agents on the developer machine. A person can still
|
|
211
|
+
merge a pull request from a bound branch in the GitHub UI. To surface that on
|
|
212
|
+
the pull request, add a job to the consumer repository's pull-request workflow
|
|
213
|
+
that fails unless a `gsd-path/M*` head is the ship commit at `shipped/done`:
|
|
214
|
+
|
|
215
|
+
```yaml
|
|
216
|
+
gsd-path-ship-gate:
|
|
217
|
+
if: startsWith(github.head_ref, 'gsd-path/M')
|
|
218
|
+
runs-on: ubuntu-latest
|
|
219
|
+
steps:
|
|
220
|
+
- uses: actions/checkout@v4
|
|
221
|
+
with:
|
|
222
|
+
ref: ${{ github.event.pull_request.head.sha }}
|
|
223
|
+
- run: |
|
|
224
|
+
gsd_phase=$(sed -n 's/^phase: *\([a-z]*\).*/\1/p' .project/STATE.md | head -1)
|
|
225
|
+
gsd_status=$(sed -n 's/^status: *\([a-z]*\).*/\1/p' .project/STATE.md | head -1)
|
|
226
|
+
state="$gsd_phase/$gsd_status"
|
|
227
|
+
subject=$(git log -1 --format=%s)
|
|
228
|
+
case "$subject" in "ship: M"*) ship=1 ;; *) ship=0 ;; esac
|
|
229
|
+
[ "$state" = shipped/done ] && [ "$ship" = 1 ] && exit 0
|
|
230
|
+
echo "::error::gsd-path: head is $state with subject '$subject'; a gsd-path/M* branch reaches main only through archive_milestone.py integrate"
|
|
231
|
+
exit 1
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
The job is advisory until branch protection or a ruleset requires it, which
|
|
235
|
+
GitHub offers on public repositories and paid plans.
|
|
236
|
+
|
|
237
|
+
## Wire other hosts
|
|
238
|
+
|
|
239
|
+
Claude, Codex, and Cursor wiring is installed automatically when that target is
|
|
240
|
+
selected. The installer does **not** install a native guard for any other host,
|
|
241
|
+
even where the host has a pre-tool-use API: those hosts are `git-only` in the
|
|
242
|
+
manifest and stay `git-only` after manual wiring, because the installer neither
|
|
243
|
+
writes nor verifies that wiring. To add it yourself, register
|
|
244
|
+
`python3 .gsd-path/guard_hook.py` as a pre-tool-use hook:
|
|
245
|
+
|
|
246
|
+
| Host | Where | Docs |
|
|
247
|
+
| --- | --- | --- |
|
|
248
|
+
| Copilot CLI | `.github/hooks/*.json` `preToolUse` | [Copilot hooks](https://docs.github.com/en/copilot/concepts/agents/hooks) |
|
|
249
|
+
| Grok | reads `.claude/settings.json` — covered if Claude wiring installed | [Grok hooks](https://docs.x.ai/build/features/hooks) |
|
|
250
|
+
| Qwen Code | `.qwen/settings.json` `PreToolUse` | [Qwen hooks](https://qwenlm.github.io/qwen-code-docs/en/users/features/hooks/) |
|
|
251
|
+
| Kimi CLI | `~/.kimi-code/config.toml` `PreToolUse` | [Kimi hooks](https://moonshotai.github.io/kimi-code/en/customization/hooks.html) |
|
|
252
|
+
| Kiro CLI | agent config `preToolUse` | [Kiro hooks](https://kiro.dev/docs/cli/hooks/) |
|
|
253
|
+
| Antigravity | `.agents/hooks.json` `PreToolUse` | [Antigravity hooks](https://antigravity.google/docs/hooks) |
|
|
254
|
+
| OpenCode | JS plugin `tool.execute.before` | [OpenCode plugins](https://opencode.ai/docs/plugins/) |
|
|
255
|
+
| Zed | no hook API — git hooks only | — |
|
|
256
|
+
|
|
257
|
+
**Caveats:** The hook cannot prove which skill initiated a shell command or a
|
|
258
|
+
build-phase edit, so AGENTS.md owns those re-entry cases. Grok and Kimi
|
|
259
|
+
fail-open on hook errors by design. Copilot, Kimi, Kiro, and Antigravity may
|
|
260
|
+
not intercept subagent tools — treat coverage as orchestrator-level.
|
|
261
|
+
|
|
262
|
+
## Troubleshooting
|
|
263
|
+
|
|
264
|
+
| Symptom | Likely cause |
|
|
265
|
+
| --- | --- |
|
|
266
|
+
| Commit blocked on archive edit | Expected — ship adds to archive; edits after ship are forbidden |
|
|
267
|
+
| `ship:` commit blocked with `app.py` staged | Ship commits may only touch `.project/` |
|
|
268
|
+
| Tool denied editing archive | Pre-tool guard — use active paths, not archive |
|
|
269
|
+
| Hook not running in Cursor | Run `--hooks-refresh-full --cursor --project /path/to/repo` |
|
|
270
|
+
| `--hooks-refresh` rejects an unmanaged guard | Move the foreign guard aside, then rerun refresh; use `--hooks-init` if guards are wanted |
|
|
271
|
+
| `--hooks-refresh` rejects an unmanaged runtime file | Back up or merge that file, move it aside, then rerun refresh |
|
|
272
|
+
|
|
273
|
+
More: [DOCS.md](DOCS.md#help) · [UPDATE.md](UPDATE.md)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 GSD Path contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/MIGRATE.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Move from GSD Core to GSD Path
|
|
2
|
+
|
|
3
|
+
Use `gsd-path-migrate` to preserve an existing Core project's context and
|
|
4
|
+
unfinished work, review hook conflicts, then enter Path through inspect and
|
|
5
|
+
define. The first release covers Claude Code and Codex, with either plugin or
|
|
6
|
+
standalone skill installations.
|
|
7
|
+
|
|
8
|
+
Both products can stay installed. Migration changes which product governs the
|
|
9
|
+
selected project. Core history stays in `.planning/`; Path creates its own
|
|
10
|
+
`.project/` state through the normal router. Core phase positions and completed
|
|
11
|
+
plans do not become passed Path gates.
|
|
12
|
+
|
|
13
|
+
## Start
|
|
14
|
+
|
|
15
|
+
Install or update GSD Path using [the install guide](QUICK.md). In the Core
|
|
16
|
+
project, stop active Core work and invoke the migration skill:
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
$gsd-path-migrate
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
On Claude Code, use the installed `gsd-path-migrate` slash command. Give the
|
|
23
|
+
skill the project path and whether Core came from a plugin or standalone skills.
|
|
24
|
+
The skill prepares an external bundle, so it does not dirty the source project
|
|
25
|
+
before Path's branch binding. Do not delete `.planning/` to suppress hooks.
|
|
26
|
+
Preserve any uncommitted work and reach a clean Git baseline using your normal
|
|
27
|
+
commit/stash workflow before binding. Migration does not discard pending edits.
|
|
28
|
+
|
|
29
|
+
The bundle contains an exact file copy, a hash manifest, and a reviewed
|
|
30
|
+
`IMPORT.md`. The import carries context, constraints, exclusions, decisions,
|
|
31
|
+
unfinished requirements and plan outcomes, with source references. Completed
|
|
32
|
+
summaries remain historical evidence. Contradictions and missing information
|
|
33
|
+
become explicit questions for you.
|
|
34
|
+
|
|
35
|
+
## Keep both installations
|
|
36
|
+
|
|
37
|
+
| Installation | Project cutover |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| Claude Code plugin | Disable the exact Core plugin identifier at local scope, then reload/restart and verify effective state. |
|
|
40
|
+
| Codex plugin | Set the exact Core plugin identifier's `enabled` value to `false` in trusted project configuration, then restart and verify effective state. |
|
|
41
|
+
| Standalone command hooks | Review each Core hook registration. Use the bundled settings helper to gate only that command for the migrated root. Other projects retain the original command. |
|
|
42
|
+
|
|
43
|
+
Claude example, using the identifier shown by `claude plugin list --json`:
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
claude plugin disable '<core-plugin>@<marketplace>' --scope local
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Codex example in the project's `.codex/config.toml`, merging into any existing
|
|
50
|
+
table for that identifier rather than adding a duplicate:
|
|
51
|
+
|
|
52
|
+
```toml
|
|
53
|
+
[plugins."<core-plugin>@<marketplace>"]
|
|
54
|
+
enabled = false
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Check with the host's native plugin list in both the migrated project and a
|
|
58
|
+
separate Core project. Managed/workspace policy may prevent local overrides;
|
|
59
|
+
the skill reports that conflict instead of claiming migration is safe.
|
|
60
|
+
These controls are documented in
|
|
61
|
+
[Claude's plugin reference](https://code.claude.com/docs/en/plugins-reference)
|
|
62
|
+
and [Codex's configuration reference](https://learn.chatgpt.com/docs/config-file/config-reference).
|
|
63
|
+
|
|
64
|
+
Plugin disabling does not remove separately installed hooks or skills. Review
|
|
65
|
+
user, project and local settings, status-line commands and inherited instruction
|
|
66
|
+
files. Preserve project-specific rules. Replace Core-only workflow routing with
|
|
67
|
+
Path's installed contracts; keep a copy and record every removed Core instruction
|
|
68
|
+
in the import. Continue using the explicit Path skill names in migrated projects.
|
|
69
|
+
|
|
70
|
+
## Review and rollback
|
|
71
|
+
|
|
72
|
+
The standalone settings helper prepares a private receipt before writing. It
|
|
73
|
+
records the exact selected command and original file bytes. After review, apply
|
|
74
|
+
the receipt; restore it to roll back. Changes made since the receipt was prepared
|
|
75
|
+
block application or restoration. With several changes to one settings file,
|
|
76
|
+
apply each before preparing the next and restore in reverse order. Close host
|
|
77
|
+
sessions and settings editors during these writes.
|
|
78
|
+
|
|
79
|
+
Keep both the installed helper path and its planning-time Python interpreter
|
|
80
|
+
available while hook settings reference them. Restore every receipt before
|
|
81
|
+
uninstalling/moving Path or deleting that interpreter or its virtual environment.
|
|
82
|
+
For symlink-managed settings, pass the resolved real file path to the helper;
|
|
83
|
+
it deliberately refuses symlink paths and files with multiple hard links. Each
|
|
84
|
+
separate migrated worktree needs its own scope. A missing or unclear event `cwd`
|
|
85
|
+
keeps the original Core hook active. Only Claude Code and Codex command-hook
|
|
86
|
+
protocols are covered; other hosts require separate verification.
|
|
87
|
+
|
|
88
|
+
Review `IMPORT.md` before handing it to `$gsd-path`. Path inspects the code,
|
|
89
|
+
checks the supplied evidence, and asks you to approve intent. Every remaining
|
|
90
|
+
Core outcome must appear in that intent or have an explicit disposition from
|
|
91
|
+
you. Keep the bundle available for the handoff. When inspect finishes, invoke
|
|
92
|
+
define with the absolute IMPORT.md path again, using the command saved in its
|
|
93
|
+
Handoff section. This is required in a fresh session too: the router does not
|
|
94
|
+
carry the external path into define automatically. Define records the source
|
|
95
|
+
path in its intent draft. The skill does not approve,
|
|
96
|
+
build, ship, or publish your project on your behalf.
|
|
97
|
+
|
|
98
|
+
Preparation and hook-command tests do not prove every installed host policy.
|
|
99
|
+
The skill requires effective-state and hook checks in your target environment
|
|
100
|
+
before declaring cutover complete.
|
package/QUICK.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# GSD Path — Quick Start
|
|
2
|
+
|
|
3
|
+
**~5 minutes to installed and running.**
|
|
4
|
+
|
|
5
|
+
| More | Doc |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| Hub (install · use · understand · update) | [DOCS.md](DOCS.md) |
|
|
8
|
+
| Full walkthrough | [FULL.md](FULL.md) |
|
|
9
|
+
| Upgrading | [UPDATE.md](UPDATE.md) |
|
|
10
|
+
|
|
11
|
+
## What you get
|
|
12
|
+
|
|
13
|
+
One router skill drives a gated pipeline: inspect → define → research → decide →
|
|
14
|
+
plan → build → ship. Every handoff lives in `.project/` so any session can resume from disk.
|
|
15
|
+
|
|
16
|
+
**Hosts:** Codex, Claude Code, Grok, OpenCode, Copilot CLI, Qwen, Antigravity,
|
|
17
|
+
Cursor, Zed, Kiro, Kimi Code.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Checklist
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
[ ] 1. Install skills (step 1)
|
|
25
|
+
[ ] 2. Install project rules in your repo (step 2) — skip if repo already has AGENTS.md
|
|
26
|
+
[ ] 3. Restart agent session
|
|
27
|
+
[ ] 4. Open repo in agent; invoke router (step 3)
|
|
28
|
+
[ ] 5. Approve gates as they appear (step 4)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 1. Install skills
|
|
34
|
+
|
|
35
|
+
**Node 18.17+. Project installs in step 2 also require Python 3.9+.** Preview
|
|
36
|
+
first (never writes files):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# From a clone of this repository (primary path)
|
|
40
|
+
node scripts/install.mjs --all --dry-run
|
|
41
|
+
node scripts/install.mjs --all
|
|
42
|
+
|
|
43
|
+
# From npm, no clone — once the package is published to npm
|
|
44
|
+
npx @opengsd/gsd-path --all --dry-run
|
|
45
|
+
npx @opengsd/gsd-path --all
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Only hosts you use:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
node scripts/install.mjs --claude --cursor
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Team pins skills in the repo? See [DOCS.md — Installing](DOCS.md#installing) (`--local`).
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 2. Install project rules
|
|
59
|
+
|
|
60
|
+
From your repo:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
cd /path/to/your/repo
|
|
64
|
+
node scripts/install.mjs --all --project "$(pwd)"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Installs `AGENTS.md`, `WORKFLOW.md`, and `.gsd-path/runtime/`
|
|
68
|
+
(+ `.claude/CLAUDE.md` if Claude is selected).
|
|
69
|
+
If those managed files already exist, a plain install **refuses and installs
|
|
70
|
+
nothing** — use `--update --project PATH` to refresh skills and `.gsd-path/`
|
|
71
|
+
while keeping your contracts, and merge project-contract changes by hand
|
|
72
|
+
([UPDATE.md](UPDATE.md)).
|
|
73
|
+
|
|
74
|
+
**Optional** archive/git guards:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
node scripts/install.mjs --claude --project "$(pwd)" --hooks
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
[HOOKS.md](HOOKS.md)
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 3. Invoke the router
|
|
85
|
+
|
|
86
|
+
In the **project directory**, type explicitly:
|
|
87
|
+
|
|
88
|
+
Use the [router and phase invocation table](README.md#install-summary) for your host.
|
|
89
|
+
|
|
90
|
+
“Continue the project” does not advance a phase. With an owned
|
|
91
|
+
`.project/STATE.md` it reports the current handoff and next skill, read-only.
|
|
92
|
+
|
|
93
|
+
**One phase only?** e.g. `/gsd-path-plan` — see skill table in [DOCS.md](DOCS.md#using).
|
|
94
|
+
Need to talk through a question without advancing? Use `/gsd-path-discuss`;
|
|
95
|
+
Codex invokes it as `$gsd-path-discuss`.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 4. Approve gates
|
|
100
|
+
|
|
101
|
+
| When | You |
|
|
102
|
+
| --- | --- |
|
|
103
|
+
| Define | Answer; approve playback |
|
|
104
|
+
| Decide | Resolve `NEEDS-USER` |
|
|
105
|
+
| Plan | **Approve wave summary** before build |
|
|
106
|
+
| Build | Escalations only |
|
|
107
|
+
| Ship | Approve patch waves if blocked; approve archive and ship when green |
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 5. Resume
|
|
112
|
+
|
|
113
|
+
Invoke the router again. Don’t hand-edit `.project/` mid-run.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Later
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
node scripts/install.mjs --update # refresh skills
|
|
121
|
+
node scripts/install.mjs --update --project "$(pwd)" # refresh .gsd-path/; keeps contracts
|
|
122
|
+
node scripts/install.mjs --hooks-refresh --project "$(pwd)" # guard scripts
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
[UPDATE.md](UPDATE.md)
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Phase map
|
|
130
|
+
|
|
131
|
+
```text
|
|
132
|
+
inspect (brownfield) → define → research → decide → plan → build → ship
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Artifacts: [README.md](README.md#handoff-contract)
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Quick troubleshooting
|
|
140
|
+
|
|
141
|
+
| Issue | Fix |
|
|
142
|
+
| --- | --- |
|
|
143
|
+
| Skills missing | Restart agent session |
|
|
144
|
+
| Router idle or plain prompt only reports status | Use `$gsd-path` or `/gsd-path` explicitly |
|
|
145
|
+
| Install failed | Read error; try `--dry-run` |
|
|
146
|
+
| Need more detail | [DOCS.md](DOCS.md) or [FULL.md](FULL.md) |
|