@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
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-path-research
|
|
3
|
+
description: Dispatch parallel researchers and collect cited GSD Path evidence about domain, stack, pitfalls, and comparable products. Use only when the user explicitly invokes $gsd-path-research or an active $gsd-path router explicitly routes to this phase.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GSD Path Research Phase
|
|
7
|
+
|
|
8
|
+
Dispatch independent researchers and gate their evidence. Keep synthesis out
|
|
9
|
+
of this phase. The durable output is a research dispatch manifest plus one
|
|
10
|
+
evidence file per dispatched dimension.
|
|
11
|
+
|
|
12
|
+
Routing instructions below are caller handoffs under the AGENTS.md handoff
|
|
13
|
+
rule; never invoke an explicit-only sibling skill yourself.
|
|
14
|
+
|
|
15
|
+
Before dispatch and again before completion, apply the AGENTS.md
|
|
16
|
+
pending-answer rule with the bundled `scripts/discussion_records.py`; a
|
|
17
|
+
follow-up owned by research is resolved through its evidence handoff, or
|
|
18
|
+
the phase blocks.
|
|
19
|
+
|
|
20
|
+
## Preconditions
|
|
21
|
+
|
|
22
|
+
Require `pipeline_state.py validate --repo <absolute root> [--project-dir
|
|
23
|
+
.project/next]` to pass; otherwise return to `$gsd-path` for ownership
|
|
24
|
+
checking. Legal entry is `define/done` or `research/active|blocked`. On
|
|
25
|
+
`define/done`, enter with `pipeline_state.py transition`, expected phase/status
|
|
26
|
+
`define/done`, exact branch and archive values, event `research started`, and
|
|
27
|
+
set phase/status `research/active` (plus the same `--project-dir` in
|
|
28
|
+
lookahead); never edit STATE directly. `research/done`
|
|
29
|
+
`research/done` or any later phase blocks rather than replacing settled
|
|
30
|
+
evidence beneath downstream artifacts. When an active router supplies the
|
|
31
|
+
lookahead track root `.project/next/`, evaluate these preconditions against
|
|
32
|
+
the track instead; see Lookahead mode. Require
|
|
33
|
+
`.project/intent/INTENT.md` — or, in program flow, `.project/CHARTER.md` when
|
|
34
|
+
the router dispatched program-scope research before any milestone INTENT
|
|
35
|
+
exists. If neither exists, stop and route to
|
|
36
|
+
`$gsd-path-define`. Confirm live search or web-reading capability before
|
|
37
|
+
dispatch; if unavailable, block rather than allowing memory-based citations.
|
|
38
|
+
|
|
39
|
+
Program scope: when working from CHARTER.md, dimensions decompose the full
|
|
40
|
+
charter scope, not one milestone. Add program dimensions such as
|
|
41
|
+
`domain-decomposition` (capability areas and their boundaries) and
|
|
42
|
+
`capability-map` (what exists vs. what must be built) as custom dimensions
|
|
43
|
+
alongside the standard set, so the roadmap phase inherits a complete scope
|
|
44
|
+
map. The manifest's `Intent:` line names `.project/CHARTER.md` in this flow.
|
|
45
|
+
|
|
46
|
+
## Lookahead mode
|
|
47
|
+
|
|
48
|
+
Entered only when an active router supplies the lookahead track root
|
|
49
|
+
`.project/next/` while the active STATE.md is `build/active` in program
|
|
50
|
+
flow. Evaluate every state and artifact precondition against the track:
|
|
51
|
+
`.project/next/STATE.md` is the state file, INTENT.md is
|
|
52
|
+
`.project/next/intent/INTENT.md`, and the manifest and evidence files live
|
|
53
|
+
under `.project/next/research/`. Program-level inputs (CHARTER.md,
|
|
54
|
+
ROADMAP.md, top-level SYNTHESIS.md) are read from their active `.project/`
|
|
55
|
+
paths. Brownfield input is the track's
|
|
56
|
+
`.project/next/research/evidence-codebase.md` after lookahead inspect;
|
|
57
|
+
do not substitute the building milestone's map. Archived evidence from
|
|
58
|
+
earlier milestones uses the same archived-manifest rule as the roadmap
|
|
59
|
+
phase. Validate the handoff with
|
|
60
|
+
`python3 <absolute check_handoffs.py> research --repo <absolute repo root>
|
|
61
|
+
--project-dir .project/next`. Dispatch, gates, and completion rules are
|
|
62
|
+
unchanged; never write an active-path artifact.
|
|
63
|
+
|
|
64
|
+
## Dispatch contract
|
|
65
|
+
|
|
66
|
+
Read the local [researcher role](references/researcher.md), then follow the
|
|
67
|
+
local [runtime dispatch contract](references/dispatch.md). Resolve the local
|
|
68
|
+
[evidence template](templates/evidence.md), research-handoff template
|
|
69
|
+
(`templates/research-handoff.md`), and `scripts/check_handoffs.py` to absolute
|
|
70
|
+
paths. Include the role, `AGENTS.md`, `WORKFLOW.md`, INTENT.md, manifest,
|
|
71
|
+
dimension, assigned questions, deterministic logical task name
|
|
72
|
+
`research_<dimension>`, and exact output path in every brief. When
|
|
73
|
+
`evidence-codebase.md` exists, include its absolute path in every brief as
|
|
74
|
+
settled brownfield input.
|
|
75
|
+
|
|
76
|
+
## Process
|
|
77
|
+
|
|
78
|
+
1. Read INTENT.md — or CHARTER.md in program flow. Extract constraints,
|
|
79
|
+
vetoes, risks, and `RESEARCH`
|
|
80
|
+
questions. Create `.project/research/RESEARCH.md` from the local handoff
|
|
81
|
+
template before dispatch. Record every standard dimension exactly once as
|
|
82
|
+
`dispatched` or `skipped` with a reason, and assign every research question
|
|
83
|
+
to at least one dispatched dimension. No question may remain unassigned.
|
|
84
|
+
2. Decide which standard dimensions have work: dispatch a dimension only when
|
|
85
|
+
it has at least one assigned `RESEARCH` question from INTENT.md or
|
|
86
|
+
CHARTER.md. Unsettled choices and risks need that source question before
|
|
87
|
+
dispatch. Skip a dimension
|
|
88
|
+
with nothing to answer — never spawn a researcher to fill a file — and
|
|
89
|
+
record every skipped dimension with its reason in `RESEARCH.md`. The
|
|
90
|
+
standard dimensions:
|
|
91
|
+
|
|
92
|
+
| Dimension | Output file | Focus |
|
|
93
|
+
| --- | --- | --- |
|
|
94
|
+
| domain | `evidence-domain.md` | prior art, domain rules, terminology, practitioner expectations |
|
|
95
|
+
| stack | `evidence-stack.md` | two or three viable stacks against the constraints |
|
|
96
|
+
| pitfalls | `evidence-pitfalls.md` | security, scale, reliability, and UX failure modes |
|
|
97
|
+
| similar | `evidence-similar.md` | comparable products and reusable lessons |
|
|
98
|
+
|
|
99
|
+
Dispatch up to the available child capacity, then dispatch each remaining
|
|
100
|
+
dimension when a slot opens. A pending corrected redispatch takes the slot
|
|
101
|
+
before any queued not-yet-dispatched dimension. Keep all briefs independent.
|
|
102
|
+
A custom fifth dimension supplements at least one dispatched standard
|
|
103
|
+
dimension; it never replaces the standard set.
|
|
104
|
+
|
|
105
|
+
In brownfield work, require stack research to weigh migration cost and
|
|
106
|
+
pitfalls research to check which failure modes already exist in the mapped
|
|
107
|
+
codebase.
|
|
108
|
+
|
|
109
|
+
3. If a risk needs a distinct dimension, add one researcher, up to five total
|
|
110
|
+
(project policy).
|
|
111
|
+
Derive its filename deterministically as `evidence-<dimension-slug>.md`:
|
|
112
|
+
lowercase the label, replace non-alphanumeric runs with one hyphen, and
|
|
113
|
+
trim hyphens. Append `-2` only if it collides with an existing dimension.
|
|
114
|
+
4. Validate each dispatched evidence file as its researcher returns. Require
|
|
115
|
+
at least one `## Finding` — a documented `no reliable source found` null
|
|
116
|
+
result recorded as a finding satisfies this gate, with the searches that
|
|
117
|
+
came up empty noted as its evidence — require Claim, Source, Confidence,
|
|
118
|
+
and Why it matters fields for every finding, and require an answer for
|
|
119
|
+
every question assigned to that dimension. For a missing or invalid file,
|
|
120
|
+
redispatch one complete corrected brief under the same logical task name,
|
|
121
|
+
following the runtime dispatch contract, as soon as a child slot allows —
|
|
122
|
+
never held until the remaining dimensions settle.
|
|
123
|
+
5. After every dimension settles — validated, or its one corrected
|
|
124
|
+
redispatch collected — confirm every extracted `RESEARCH` question was
|
|
125
|
+
assigned to a dispatched dimension. Then run:
|
|
126
|
+
|
|
127
|
+
`python3 <absolute check_handoffs.py> research --repo <absolute repo root>`
|
|
128
|
+
|
|
129
|
+
The manifest is the source of truth for dispatched and skipped dimensions;
|
|
130
|
+
the STATE log records only a human-readable summary.
|
|
131
|
+
If any expected file still fails after its one corrected redispatch,
|
|
132
|
+
run `pipeline_state.py transition` with
|
|
133
|
+
expected `research/active`, exact branch and archive values,
|
|
134
|
+
`--set-status blocked`, and an event listing the failed evidence gate; then
|
|
135
|
+
present **Outcome** with the
|
|
136
|
+
failed gate, **Review** linking RESEARCH.md or STATE.md when the manifest is
|
|
137
|
+
missing, and **Next** naming the one correction or user decision required.
|
|
138
|
+
Stop; never advance with partial research.
|
|
139
|
+
6. When all dispatched files and `RESEARCH.md` pass, run
|
|
140
|
+
`pipeline_state.py transition` with expected `research/active`, exact
|
|
141
|
+
branch and archive values, `--set-phase research --set-status done`, and
|
|
142
|
+
an event naming the manifest path, dispatched dimensions, skipped
|
|
143
|
+
dimensions, and question count. Include `--project-dir .project/next` for
|
|
144
|
+
lookahead. Require the returned state to be `research/done`. Report the
|
|
145
|
+
outcome, link the resolved absolute `RESEARCH.md` path,
|
|
146
|
+
summarize the dispatched evidence files, and name the decide phase as next.
|
|
147
|
+
The decide phase reads the manifest; it must not infer dispatch state from
|
|
148
|
+
a glob or free-form log. When routed by an active
|
|
149
|
+
`$gsd-path`, return control to that router. When invoked directly, stop and
|
|
150
|
+
tell the user to explicitly invoke `$gsd-path`, which routes to decide; do
|
|
151
|
+
not invoke an explicit-only sibling skill yourself.
|
|
152
|
+
|
|
153
|
+
## Rules
|
|
154
|
+
|
|
155
|
+
- Require evidence, not opinion: every claim needs a source actually checked
|
|
156
|
+
and a one-line tie-back to this project's intent.
|
|
157
|
+
- Record conflicting sources rather than resolving them here.
|
|
158
|
+
- Preserve dead ends and explicit `no reliable source found` answers.
|
|
159
|
+
- Do not summarize the evidence; `$gsd-path-decide` owns that work.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-path-roadmap
|
|
3
|
+
description: Slice an approved GSD Path program charter into a dependency-ordered roadmap of independently shippable milestones. Use only when the user explicitly invokes $gsd-path-roadmap or an active $gsd-path router explicitly routes to this phase.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GSD Path Roadmap Phase
|
|
7
|
+
|
|
8
|
+
Dispatch one roadmapper, gate its roadmap, and obtain the single approval that
|
|
9
|
+
authorizes milestone planning. Rolling-wave: the roadmap scopes every
|
|
10
|
+
milestone; waves and tasks belong to `$gsd-path-plan`.
|
|
11
|
+
|
|
12
|
+
Routing instructions below are caller handoffs under the AGENTS.md handoff
|
|
13
|
+
rule; never invoke an explicit-only sibling skill yourself.
|
|
14
|
+
|
|
15
|
+
Before dispatch and again before approval, apply the AGENTS.md
|
|
16
|
+
pending-answer rule with the bundled `scripts/discussion_records.py`; a
|
|
17
|
+
follow-up owned by roadmap is resolved in ROADMAP.md, or the phase blocks.
|
|
18
|
+
|
|
19
|
+
## Preconditions
|
|
20
|
+
|
|
21
|
+
Require `pipeline_state.py validate --repo <absolute root>` to pass; otherwise
|
|
22
|
+
return to `$gsd-path` for ownership checking. Legal entry is
|
|
23
|
+
`decide/done` with an existing `.project/CHARTER.md` and no `.project/ROADMAP.md`
|
|
24
|
+
yet, `roadmap/active|blocked`, or a
|
|
25
|
+
milestone-boundary re-slice: `inspect/active` or `define/active` with no
|
|
26
|
+
approved INTENT.md for the next milestone and a user request to re-scope the
|
|
27
|
+
remaining `pending` entries,
|
|
28
|
+
or `roadmap/active` with STATE.milestone null and an `abandoned` entry in
|
|
29
|
+
ROADMAP.md (the post-abandon re-slice the build orchestrator hands off).
|
|
30
|
+
Enter from `decide/done` only with `pipeline_state.py transition`, exact
|
|
31
|
+
expected phase/status/milestone/branch/archive fields, event `roadmap started`,
|
|
32
|
+
and `--set-phase roadmap --set-status active`; never edit STATE directly. In a
|
|
33
|
+
milestone-boundary re-slice, preserve the entering `inspect/active` or
|
|
34
|
+
`define/active` state throughout the re-slice.
|
|
35
|
+
Any later phase blocks; mid-milestone
|
|
36
|
+
re-scope is never legal — finish or ship the active milestone first. A
|
|
37
|
+
`decide/done` state with ROADMAP.md already present is milestone-scope decide;
|
|
38
|
+
route to `$gsd-path-plan`, never regenerate the roadmap beneath it. Absent
|
|
39
|
+
CHARTER.md, this is not a program: route to `$gsd-path`, which continues the
|
|
40
|
+
single-milestone flow at plan. Before dispatching every re-slice, run the
|
|
41
|
+
bundled `scripts/promote_lookahead.py snapshot-roadmap --roadmap
|
|
42
|
+
.project/ROADMAP.md --snapshot .project/ROADMAP.before-reslice.md` helper.
|
|
43
|
+
Create the baseline once and retain it through every revision; an `existing`
|
|
44
|
+
result is recovery evidence and must never be replaced from the current
|
|
45
|
+
candidate. When `.project/next/` holds a lookahead track, also save its
|
|
46
|
+
milestone slug. Do not ask for the keep/discard ruling until the candidate
|
|
47
|
+
roadmap has been generated and passed its gate.
|
|
48
|
+
|
|
49
|
+
Require `.project/CHARTER.md` and `.project/SYNTHESIS.md` (program scope) with
|
|
50
|
+
a non-empty `## Decisions` or `## Settled` section and no unresolved
|
|
51
|
+
`NEEDS-USER` items before dispatch. Route to the producing phase when a
|
|
52
|
+
precondition fails.
|
|
53
|
+
|
|
54
|
+
## Process
|
|
55
|
+
|
|
56
|
+
1. Read the local [roadmap template](templates/roadmap.md) and resolve it to an
|
|
57
|
+
absolute path.
|
|
58
|
+
2. Read the local [roadmapper role](references/roadmapper.md), then follow the
|
|
59
|
+
local [runtime dispatch contract](references/dispatch.md) with deterministic
|
|
60
|
+
logical task name `roadmap` and a `heavy` tier hint. Give it absolute role,
|
|
61
|
+
`AGENTS.md`, `WORKFLOW.md`, CHARTER.md, SYNTHESIS.md, every dispatched
|
|
62
|
+
evidence file named in `.project/research/RESEARCH.md` — after milestone
|
|
63
|
+
archival has moved the active research directory, name the read-only
|
|
64
|
+
archived manifest and evidence copies under their
|
|
65
|
+
`.project/archive/<NNN>-<slug>/research/` paths
|
|
66
|
+
instead — template, and output
|
|
67
|
+
paths, including `.project/LESSONS.md` when it exists. On a re-slice, also
|
|
68
|
+
give `.project/ROADMAP.before-reslice.md` with the instruction to preserve
|
|
69
|
+
`shipped` entries byte-for-byte except Status/Archive/Integrated fields and
|
|
70
|
+
to never modify `abandoned` entries at all. For a milestone-boundary
|
|
71
|
+
re-slice, also preserve the existing `active` entry byte-for-byte; only
|
|
72
|
+
`pending` entries are in scope.
|
|
73
|
+
The output is exactly `.project/ROADMAP.md` — no other location is
|
|
74
|
+
canonical.
|
|
75
|
+
3. Gate ROADMAP.md:
|
|
76
|
+
First run `python3 <absolute check_handoffs.py> roadmap --repo <absolute
|
|
77
|
+
root>`; its structural result is required in addition to the semantic
|
|
78
|
+
checks below.
|
|
79
|
+
- Every CHARTER.md `Full scope: in` item maps to at least one milestone,
|
|
80
|
+
and every milestone traces back to charter scope.
|
|
81
|
+
- Every milestone entry has Goal, Depends on, Surfaces, Status, Archive,
|
|
82
|
+
Scope in/out, Success criteria, Risks, and Open questions fields; ids are
|
|
83
|
+
unique and ordered.
|
|
84
|
+
- Every milestone whose Surfaces is not `none` has at least one success
|
|
85
|
+
criterion observable at each named surface. A milestone that delivers
|
|
86
|
+
something a person uses never carries `Surfaces: none`.
|
|
87
|
+
- Dependencies reference earlier milestone ids and form an acyclic graph.
|
|
88
|
+
- M001 is the thinnest end-to-end skeleton that burns the riskiest
|
|
89
|
+
synthesis decisions.
|
|
90
|
+
- Rolling-wave: no waves, tasks, or file lists anywhere in the roadmap.
|
|
91
|
+
- No scope-out veto appears in any milestone; every synthesis decision is
|
|
92
|
+
honored by at least one milestone's scope.
|
|
93
|
+
- On a re-slice, `shipped` entries differ from
|
|
94
|
+
`.project/ROADMAP.before-reslice.md` only in Status/Archive/Integrated;
|
|
95
|
+
`abandoned` entries are byte-for-byte identical.
|
|
96
|
+
- On a milestone-boundary re-slice, the prior `active` entry is byte-for-byte
|
|
97
|
+
identical to `.project/ROADMAP.before-reslice.md`.
|
|
98
|
+
4. Redispatch one complete corrected brief under logical task name `roadmap`,
|
|
99
|
+
following the runtime dispatch contract and including all gate failures.
|
|
100
|
+
Allow one revision round. If it still fails, keep the entering
|
|
101
|
+
`inspect/active` or `define/active` state for a milestone-boundary re-slice
|
|
102
|
+
and use `pipeline_state.py transition` with that complete state as both the
|
|
103
|
+
expected and retained state and an event naming the failed roadmap gate.
|
|
104
|
+
Otherwise use the helper with expected `roadmap/active`, exact milestone,
|
|
105
|
+
branch, and archive values, `--set-status blocked`, and the same event. Then
|
|
106
|
+
present **Outcome** with the failed gate, **Review** linking the resolved
|
|
107
|
+
absolute ROADMAP.md path (or STATE.md when ROADMAP.md is missing), and
|
|
108
|
+
**Next** naming the one correction or user decision required. Stop.
|
|
109
|
+
5. On a re-slice with a saved lookahead track, run the bundled
|
|
110
|
+
`scripts/promote_lookahead.py compare-entry --before
|
|
111
|
+
.project/ROADMAP.before-reslice.md --after .project/ROADMAP.md --milestone
|
|
112
|
+
<lookahead-slug>` helper now. When STATE.milestone is set, append
|
|
113
|
+
`--active-milestone <STATE.milestone>`; when it is unset, omit that option.
|
|
114
|
+
It compares every plan-binding part of the entry while ignoring only
|
|
115
|
+
Status, Archive, and Integrated, and requires that entry to remain the
|
|
116
|
+
candidate roadmap's first dependency-ready milestone. When it returns
|
|
117
|
+
`status: unchanged`, ask
|
|
118
|
+
the user to choose
|
|
119
|
+
`Keep the unchanged lookahead track (recommended)` or `Discard and
|
|
120
|
+
regenerate the lookahead track`. When it returns `status: changed`, offer
|
|
121
|
+
`Discard and regenerate the lookahead track (recommended)` or `Request
|
|
122
|
+
roadmap changes`; keeping the stale track is not valid. Apply the ruling
|
|
123
|
+
and record the helper result and ruling with `pipeline_state.py transition`,
|
|
124
|
+
expecting and retaining the complete entering state with event `lookahead
|
|
125
|
+
re-slice ruling: <ruling>`; never append it directly. Retain the baseline
|
|
126
|
+
through any requested roadmap revisions and the final approval decision.
|
|
127
|
+
6. On a post-abandon re-slice, first run the bundled
|
|
128
|
+
`scripts/promote_lookahead.py select-next --roadmap .project/ROADMAP.md`
|
|
129
|
+
helper against the gated candidate. When it returns `status: complete`,
|
|
130
|
+
report program completion against CHARTER.md's program success criteria and
|
|
131
|
+
stop without offering a pending-milestone approval. When it returns
|
|
132
|
+
`status: selected`, use only its exact milestone in the approval and
|
|
133
|
+
transition below. A `status: none` result blocks without mutation.
|
|
134
|
+
Show every milestone id, goal, and dependency summary as the outcome. Link
|
|
135
|
+
the resolved absolute `.project/ROADMAP.md` path, then ask one explicit next
|
|
136
|
+
question. For a milestone-boundary re-slice, list `Approve roadmap and
|
|
137
|
+
resume the active milestone (recommended)` first. For a post-abandon
|
|
138
|
+
re-slice, list
|
|
139
|
+
`Approve roadmap and inspect <selected-milestone> (recommended)` first.
|
|
140
|
+
Otherwise list `Approve roadmap and start the first
|
|
141
|
+
pending milestone (recommended)` first. In every case, list `Request
|
|
142
|
+
changes` as the alternative. If the user requests changes,
|
|
143
|
+
retain the entering state for a milestone-boundary re-slice; otherwise keep
|
|
144
|
+
`phase: roadmap`, `status: active`. Retain the baseline, revise, and re-gate
|
|
145
|
+
against that same baseline.
|
|
146
|
+
7. On approval in an established repository, record the exact full current
|
|
147
|
+
HEAD before changing ROADMAP.md or STATE.md. For a milestone-boundary
|
|
148
|
+
re-slice, keep its matching roadmap entry `active`, use `pipeline_state.py
|
|
149
|
+
transition` to record `program roadmap re-slice approved` while expecting
|
|
150
|
+
and retaining the complete entering `inspect/active` or `define/active`
|
|
151
|
+
state, then checkpoint the pending `.project/` artifacts with:
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
python3 <absolute isolation.py> checkpoint \
|
|
155
|
+
--repo <absolute root> --expected-head <recorded full HEAD> \
|
|
156
|
+
--subject "roadmap: program roadmap approved" \
|
|
157
|
+
--body "Why: approved roadmap checkpoint" \
|
|
158
|
+
--allow-path .project
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
On a post-abandon re-slice, mark only the helper-selected pending entry
|
|
162
|
+
`active`, use `pipeline_state.py transition` with the complete current
|
|
163
|
+
`roadmap/active` state as expected to set `phase: inspect`, `status: active`,
|
|
164
|
+
`milestone` to the selected slug, preserve the bound branch, and set
|
|
165
|
+
`archive: null`, with an event naming the abandoned predecessor. Then use
|
|
166
|
+
the same `isolation.py checkpoint` command above. For a first roadmap
|
|
167
|
+
approval, run:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
python3 <absolute pipeline_state.py> approve \
|
|
171
|
+
--repo <absolute root> --kind roadmap \
|
|
172
|
+
--milestone <selected first pending slug> \
|
|
173
|
+
--expected-head <recorded full HEAD>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
The helper journals before mutation, proves the selected entry is pending
|
|
177
|
+
and no entry is already active, marks it active, changes STATE from
|
|
178
|
+
`roadmap/active` to `roadmap/done` with that milestone and event `program
|
|
179
|
+
roadmap approved`, and checkpoints all pending `.project/` artifacts with
|
|
180
|
+
the canonical roadmap subject and body, subject to the
|
|
181
|
+
top-level allowlist in
|
|
182
|
+
[isolation.PROJECT_ENTRIES](scripts/isolation.py). Require its typed result to report
|
|
183
|
+
`schema: gsd-path/state-checkpoint/v1`, `status: approved`, `kind: roadmap`,
|
|
184
|
+
`project_dir: .project`, `state.status: done`, the selected milestone, and
|
|
185
|
+
the returned current commit. Rerun the same command after interruption; the
|
|
186
|
+
matching journal owns recovery.
|
|
187
|
+
|
|
188
|
+
For every re-slice, remove `.project/ROADMAP.before-reslice.md` only after
|
|
189
|
+
the state transition succeeds and before the checkpoint. Retain it through
|
|
190
|
+
every requested revision and failed approval attempt.
|
|
191
|
+
|
|
192
|
+
Defer either checkpoint only when the directory is not yet a Git repository
|
|
193
|
+
or `.project/REPOSITORY.md` records `Kind: new-github`. For a normal
|
|
194
|
+
approval, run the same `approve` command with `--defer-checkpoint` instead
|
|
195
|
+
of `--expected-head`; it marks the selected entry active and records
|
|
196
|
+
`roadmap/done` with event `program roadmap approved`. `pipeline_state.py
|
|
197
|
+
transition` never approves a roadmap. For
|
|
198
|
+
a milestone-boundary re-slice, use the retaining transition above; for a
|
|
199
|
+
post-abandon re-slice, use its transition above. The build transition
|
|
200
|
+
commit owns the pending artifacts. Confirm approval and link ROADMAP.md again. For
|
|
201
|
+
a milestone-boundary re-slice, state that the preserved inspect or define
|
|
202
|
+
phase resumes; for a post-abandon re-slice, state that inspect is next;
|
|
203
|
+
otherwise state that define (milestone mode) is next. Do not
|
|
204
|
+
add another approval gate. When routed by an active `$gsd-path`, return
|
|
205
|
+
control to that router so it routes the resulting state; never name define
|
|
206
|
+
as next when inspect was preserved or selected. When invoked directly, stop
|
|
207
|
+
and tell the user to explicitly invoke `$gsd-path`, which routes the same
|
|
208
|
+
result; do not invoke an explicit-only sibling skill yourself.
|
|
209
|
+
|
|
210
|
+
## Rules
|
|
211
|
+
|
|
212
|
+
- Cover the charter exactly: no unmapped scope, no unscoped milestones.
|
|
213
|
+
- Milestone granularity only; never drift into waves, tasks, or file scopes.
|
|
214
|
+
- Every milestone must be shippable on its own stated dependencies.
|
|
215
|
+
- Surface scope cuts as `NEEDS-USER`; never drop charter scope silently.
|