@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,471 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: path
|
|
3
|
+
description: Inspect .project/STATE.md, report GSD Path progress, and run the next valid phase. Use only when the user explicitly invokes $path or $gsd-path. The status argument reports state without advancing. Do not infer this skill from generic project, next-step, or resume requests.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GSD Path Router
|
|
7
|
+
|
|
8
|
+
Determine the current pipeline phase, report it briefly, and run the next valid
|
|
9
|
+
phase. Disk is the only phase memory.
|
|
10
|
+
Any text the user is expected to send back verbatim (a ruling, an approval
|
|
11
|
+
command, a reply) goes in its own fenced code block, never a blockquote or
|
|
12
|
+
inline prose, so it pastes cleanly.
|
|
13
|
+
|
|
14
|
+
When the project's `.gsd-path/runtime/` exists, resolve bundled helper paths
|
|
15
|
+
for `pipeline_state.py`, `pipeline_git.py`, `archive_milestone.py`,
|
|
16
|
+
`promote_lookahead.py`, `discussion_records.py`, and `pipeline_diagnose.py`
|
|
17
|
+
to that runtime. It is the guard-approved location on a closed milestone.
|
|
18
|
+
Use the skill bundle only when no project-local runtime exists.
|
|
19
|
+
|
|
20
|
+
## Status-only mode
|
|
21
|
+
|
|
22
|
+
When the invocation argument is exactly `status`, report and stop:
|
|
23
|
+
|
|
24
|
+
1. Run `python3 <absolute-bundled-pipeline-state.py> status --repo
|
|
25
|
+
<absolute-root>`. Treat the JSON as the only status authority. Do not
|
|
26
|
+
initialize STATE.md, bind a branch, or create a repository from this mode.
|
|
27
|
+
2. Present **Outcome** as `state.phase`/`state.status`, `route.action`,
|
|
28
|
+
`next_skill`, and the pending-answer count. **Review** links the JSON
|
|
29
|
+
`path` (STATE.md). **Next** names `next_skill` or the `route.reason` when
|
|
30
|
+
`route.action` is `block`, without invoking either.
|
|
31
|
+
3. Do not run a phase contract, auto-advance, spawn agents, or apply undo.
|
|
32
|
+
|
|
33
|
+
`$gsd-path status` (Codex) and `/gsd-path status` (other hosts) are the only
|
|
34
|
+
router entry. The installed AGENTS.md re-entry contract may run the same
|
|
35
|
+
project-local status helper after a generic prompt, but it does not invoke this
|
|
36
|
+
router or advance a phase.
|
|
37
|
+
|
|
38
|
+
## Bundled phase execution
|
|
39
|
+
|
|
40
|
+
All phase skills are explicit-only, so their catalog entries may be absent
|
|
41
|
+
while this router is active. Before executing a route, read its bundled
|
|
42
|
+
contract fully and follow it in the same conversation:
|
|
43
|
+
|
|
44
|
+
- [inspect](INSPECT.md)
|
|
45
|
+
- [define](DEFINE.md)
|
|
46
|
+
- [research](RESEARCH.md)
|
|
47
|
+
- [decide](DECIDE.md)
|
|
48
|
+
- [roadmap](ROADMAP.md)
|
|
49
|
+
- [plan](PLAN.md)
|
|
50
|
+
- [build](BUILD.md)
|
|
51
|
+
- [ship](SHIP.md)
|
|
52
|
+
- [docs audit](DOCS-AUDIT.md)
|
|
53
|
+
|
|
54
|
+
These synchronized files are the same contracts used by direct `$gsd-path-*`
|
|
55
|
+
invocations. Do not depend on another skill being implicitly injected. When a
|
|
56
|
+
phase contract says to return to or invoke the router, resume this file's
|
|
57
|
+
routing loop.
|
|
58
|
+
|
|
59
|
+
## New GitHub repository creation
|
|
60
|
+
|
|
61
|
+
Enter this transaction only when the user explicitly asks to create a new
|
|
62
|
+
GitHub repository and no owned `.project/STATE.md` is active for that request.
|
|
63
|
+
|
|
64
|
+
1. Resolve the repository name and normalized project slug. Obtain the GitHub
|
|
65
|
+
owner, one supported visibility (`public`, `private`, or `internal`), and a
|
|
66
|
+
local workspace when absent; do not infer account ownership or visibility.
|
|
67
|
+
Derive `gsd-path/M001` as the branch. The default checkout is
|
|
68
|
+
`<resolved-workspace>/<repo-name>`; propose the distinct sibling
|
|
69
|
+
`<resolved-workspace>/<repo-name>-gsd-path` as the linked worktree. The user
|
|
70
|
+
may choose another workspace or worktree path before approval.
|
|
71
|
+
2. Resolve the bundled `scripts/bootstrap_repository.py` to an absolute path.
|
|
72
|
+
Run its `preview` command with the exact owner, repository, visibility,
|
|
73
|
+
workspace, default checkout, linked worktree, and optional description. The
|
|
74
|
+
helper checks authentication, remote state, path parents, and any matching
|
|
75
|
+
transaction journal without mutation. `mode: create` means every target is
|
|
76
|
+
absent; `mode: resume` means the exact approved journal exists and the helper
|
|
77
|
+
can verify and adopt completed stages; `mode: complete` names an already
|
|
78
|
+
initialized binding. Any ambiguity or unowned collision blocks.
|
|
79
|
+
3. Present **Outcome** as a repository-creation preview. Present **Review** with
|
|
80
|
+
the proposed GitHub URL, visibility, default-checkout path, GSD Path branch,
|
|
81
|
+
and linked-worktree path, all marked not yet created. Present **Next** as one
|
|
82
|
+
choice: `Create repository and worktree (recommended)` for `mode: create`, or
|
|
83
|
+
`Resume verified repository transaction (recommended)` for `mode: resume`,
|
|
84
|
+
followed by `Change details` and `Cancel`. Present this review inline; do not
|
|
85
|
+
create a preview file or journal before approval. For `mode: complete`, do
|
|
86
|
+
not ask to create again: link the existing REPOSITORY.md, rebase to the
|
|
87
|
+
returned worktree, and continue normal routing.
|
|
88
|
+
4. Only after approval, run the helper's `create` command with those same exact
|
|
89
|
+
arguments plus the resolved bundled `templates/state.md` and
|
|
90
|
+
`templates/repository.md` paths. The helper first persists the approved
|
|
91
|
+
journal, then creates or verifies the remote, clone, remote-default SHA,
|
|
92
|
+
branch, and linked worktree one stage at a time. It writes STATE.md at
|
|
93
|
+
`define/active` with the branch bound and writes fixed-format REPOSITORY.md;
|
|
94
|
+
only then does it remove the journal. It never pushes, deletes, force-reuses,
|
|
95
|
+
or adopts a target that does not match the journal.
|
|
96
|
+
5. On failure, present **Outcome** with the failed stage, **Review** with the
|
|
97
|
+
approved targets and journal path returned or reported by the helper, and
|
|
98
|
+
**Next** offering an explicit verified resume first. Rerun `preview` before
|
|
99
|
+
retrying; never substitute manual cleanup or a second transaction.
|
|
100
|
+
6. On success, rebase the project root to the returned linked worktree. Treat
|
|
101
|
+
its verified bootstrap README as greenfield. Continue with the bundled define
|
|
102
|
+
contract; it reads REPOSITORY.md and records the binding under INTENT.md's
|
|
103
|
+
Constraints.
|
|
104
|
+
|
|
105
|
+
Never apply this transaction to an existing repository. The router binds an
|
|
106
|
+
existing repository with `pipeline_git.py bind-initial`; build never creates or
|
|
107
|
+
selects a milestone branch.
|
|
108
|
+
|
|
109
|
+
## State ownership and initialization
|
|
110
|
+
|
|
111
|
+
1. When `.project/STATE.md` exists, run `python3
|
|
112
|
+
<absolute-bundled-pipeline-state.py> validate --repo <absolute-root>`.
|
|
113
|
+
Treat its typed JSON as the state; do not parse frontmatter or repair an
|
|
114
|
+
invalid file through model reasoning. A validation failure blocks without
|
|
115
|
+
mutation. In particular, never stamp the marker onto unowned state.
|
|
116
|
+
2. With no STATE.md, run the bundled
|
|
117
|
+
`python3 <absolute-bundled-script> initialize --repo <absolute-root>
|
|
118
|
+
--template <absolute-state-template>` helper
|
|
119
|
+
(`scripts/detect_project.py`) before asking anything. Do not classify
|
|
120
|
+
brownfield, greenfield, or orphaned `.project/` from a directory listing or
|
|
121
|
+
conversation. If the command exits nonzero, returns `error`, or returns
|
|
122
|
+
`wrote_state: false`, report the error and block without routing or claiming
|
|
123
|
+
STATE.md was written. Otherwise follow the JSON `verdict` / `route` exactly.
|
|
124
|
+
`initialize` classifies and, for brownfield or greenfield, writes STATE.md
|
|
125
|
+
through an anchored no-follow create — never create STATE.md yourself after
|
|
126
|
+
classify. Leave that initial state untracked for `bind-initial`; its validated
|
|
127
|
+
initial-state exception requires the index and every other path to stay clean.
|
|
128
|
+
Do not insert a commit between initialization and binding:
|
|
129
|
+
- `owned` — STATE.md exists; continue at step 1.
|
|
130
|
+
- `orphan` (`route: recover-orphan`) — block without mutation. List the
|
|
131
|
+
returned `orphan_paths` and ask for an explicit recovery, migration, or
|
|
132
|
+
new location; existing evidence and archives do not prove a safe v2 phase.
|
|
133
|
+
- `brownfield` (`route: inspect`) — the helper wrote STATE.md at
|
|
134
|
+
`inspect/active`; report the returned `signals` and route to the bundled
|
|
135
|
+
[inspect contract](INSPECT.md).
|
|
136
|
+
- `greenfield` (`route: define`) — the helper wrote STATE.md at
|
|
137
|
+
`define/active`; report that no brownfield signal fired, and route to
|
|
138
|
+
the bundled [define contract](DEFINE.md).
|
|
139
|
+
|
|
140
|
+
## Integration choice
|
|
141
|
+
|
|
142
|
+
New state starts with `integration_default: direct`, `integration: direct`, and
|
|
143
|
+
`integration_source: default`.
|
|
144
|
+
When the user asks to change closeout behavior before build, use the state
|
|
145
|
+
helper; never edit these fields by hand:
|
|
146
|
+
|
|
147
|
+
```text
|
|
148
|
+
python3 <absolute-bundled-pipeline-state.py> configure-integration \
|
|
149
|
+
--repo <absolute-root> \
|
|
150
|
+
--scope <default-or-milestone> \
|
|
151
|
+
--mode <direct-or-pull-request>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
`default` changes the project setting and changes the current milestone only
|
|
155
|
+
when it has no override. `milestone` changes only the current milestone.
|
|
156
|
+
`integration_source` records that distinction even when both modes match.
|
|
157
|
+
Configure the project default only on the active `.project` track. A lookahead
|
|
158
|
+
track may receive only its own milestone override through `--project-dir
|
|
159
|
+
.project/next`; promotion requires its project default to still match the
|
|
160
|
+
active track.
|
|
161
|
+
The current value resets from the project default at the next milestone.
|
|
162
|
+
Both settings lock when build starts. A lookahead STATE inherits the active
|
|
163
|
+
project's `integration_default` and uses it for `integration`.
|
|
164
|
+
|
|
165
|
+
## Transaction recovery first
|
|
166
|
+
|
|
167
|
+
For a helper failure, use the diagnostic in the sibling bundle:
|
|
168
|
+
`../gsd-path-forensics/scripts/pipeline_diagnose.py diagnose --repo <absolute-root>`.
|
|
169
|
+
Resolve that path relative to this skill's directory.
|
|
170
|
+
|
|
171
|
+
Run `pipeline_state.py route` before any phase contract. A
|
|
172
|
+
`resume-undo` result means a helper-owned undo transaction was interrupted;
|
|
173
|
+
invoke `$gsd-path-undo` and apply the returned exact kind and expected HEAD.
|
|
174
|
+
Never enter phase work while this recovery remains. A
|
|
175
|
+
`resume-shipment` result means the ROADMAP/STATE shipment record was
|
|
176
|
+
interrupted; rerun `pipeline_state.py record-shipment` with the returned exact
|
|
177
|
+
archive and event, require its typed `recorded` result, then rerun `route`.
|
|
178
|
+
The journal owns recovery even when one or both files already contain their
|
|
179
|
+
shipped values. A `resume-checkpoint` result means a plan or roadmap approval journal exists;
|
|
180
|
+
run `pipeline_state.py resume-checkpoint --repo <absolute-root>`, require its
|
|
181
|
+
typed `approved` result and current commit, then rerun `route`. The journal
|
|
182
|
+
owns recovery even when STATE or ROADMAP.md already contains the approved
|
|
183
|
+
values. Never repeat those edits or call a phase while recovery remains.
|
|
184
|
+
A `resume-promotion` result means a promotion journal exists; rerun
|
|
185
|
+
`promote-next` with the returned milestone, branch, base, and landing SHAs. The
|
|
186
|
+
journal owns recovery even if STATE already contains some promoted values.
|
|
187
|
+
Never route a phase while that result remains.
|
|
188
|
+
|
|
189
|
+
For a branch mismatch, `route` normally returns `block`. Its only recoverable
|
|
190
|
+
result is `resume-next-handoff`: state is `shipped/done` on the returned
|
|
191
|
+
previous bound branch, and the durable journal proves the current branch and
|
|
192
|
+
HEAD match its prepared, switched, or retired stage. Promotion-journal recovery
|
|
193
|
+
returns `resume-promotion` earlier instead. Rerun `bind-next` immediately with
|
|
194
|
+
the returned typed branch, previous branch, ship, remote-default, base, and
|
|
195
|
+
landing fields. Do not rerun the old-branch archive or integration validators
|
|
196
|
+
in this recovery path: they passed before the journal was created and cannot
|
|
197
|
+
run after the switch. `bind-next` rechecks the live remote refs, exact SHAs,
|
|
198
|
+
integration ancestry, cleanliness, and journal ownership before continuing.
|
|
199
|
+
After it returns, continue the state transition or lookahead promotion below.
|
|
200
|
+
Do not reconstruct this classification from Git output or Log prose.
|
|
201
|
+
When the route returns `allow_remote_absent: true`, also pass
|
|
202
|
+
`--allow-missing-previous`; this is valid only because a merged PR may have
|
|
203
|
+
auto-deleted the published bound branch.
|
|
204
|
+
|
|
205
|
+
Before ordinary routing, inspect `STATE.archive`.
|
|
206
|
+
|
|
207
|
+
- A concrete archive path is an in-progress or completed ship transaction.
|
|
208
|
+
If state is `shipped/done`, run the bundled
|
|
209
|
+
`python3 <absolute-bundled-script> validate --repo <root>`. When it returns
|
|
210
|
+
the same archive path and exact ship SHA, run the bundled
|
|
211
|
+
`python3 <absolute-bundled-script> validate-integrated --repo <root> --slug <slug>`
|
|
212
|
+
with the shipped milestone slug from STATE.milestone and origin network
|
|
213
|
+
access available for PR-mode live publication checks. Report shipped only
|
|
214
|
+
when both pass.
|
|
215
|
+
When archive validation passes but integration is pending, invoke the
|
|
216
|
+
bundled [ship contract](SHIP.md) to complete integration; never report
|
|
217
|
+
shipped or advance to the next milestone while integration is pending.
|
|
218
|
+
- If validation fails, or state is still `ship`, invoke
|
|
219
|
+
the bundled [ship contract](SHIP.md) in final archive-recovery mode. It bypasses moved
|
|
220
|
+
final-review inputs, reuses the persisted path, and completes or validates
|
|
221
|
+
the transaction. Never select another sequence number.
|
|
222
|
+
- A concrete archive path with phase `build` is an interrupted
|
|
223
|
+
milestone-abandon transaction. Invoke the bundled [build
|
|
224
|
+
contract](BUILD.md), which reruns the archive helper's `abandon` command
|
|
225
|
+
and completes the abandon commit. Never select another sequence number.
|
|
226
|
+
- A concrete archive path in any phase other than `ship`, `shipped`, or
|
|
227
|
+
`build` is inconsistent and blocks without moving anything.
|
|
228
|
+
- `shipped` with `archive: null` is invalid and unrecoverable because no
|
|
229
|
+
transaction identity exists. Block and ask the user how to proceed;
|
|
230
|
+
never guess an archive number or move artifacts.
|
|
231
|
+
|
|
232
|
+
Before ordinary phase routing, also inspect `.project/discuss/ANSWERS.md` when
|
|
233
|
+
present by running the bundled `scripts/discussion_records.py pending --repo
|
|
234
|
+
<absolute-root>` helper. Apply the returned pending-answer contract in
|
|
235
|
+
AGENTS.md and use its `dispose` command for receipts. Never auto-advance a
|
|
236
|
+
required follow-up without its disposition receipt; when the named owner cannot
|
|
237
|
+
legally enter from current state, link ANSWERS.md and the target artifact and
|
|
238
|
+
ask the user how to reconcile the upstream change.
|
|
239
|
+
|
|
240
|
+
## Normal routing
|
|
241
|
+
|
|
242
|
+
Run the bundled state router instead of evaluating the state table in model
|
|
243
|
+
reasoning:
|
|
244
|
+
|
|
245
|
+
```text
|
|
246
|
+
python3 <absolute-bundled-pipeline-state.py> route \
|
|
247
|
+
--repo <absolute-root> \
|
|
248
|
+
--project-dir <.project or .project/next>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Follow its `route.action`, `phase`, and `mode` fields exactly. `run-phase`
|
|
252
|
+
selects the matching bundled phase contract, `validate-integrated` enters the
|
|
253
|
+
shipped validator, `wait` leaves an approved lookahead track ready for
|
|
254
|
+
promotion, `resume-next-handoff` resumes the verified `bind-next` transaction,
|
|
255
|
+
`resume-checkpoint` runs the approval recovery command above,
|
|
256
|
+
`resume-shipment` runs the shipment recovery command above,
|
|
257
|
+
`resume-promotion` reruns the returned `promote-next` transaction, and
|
|
258
|
+
`resume-undo` invokes `$gsd-path-undo` with the returned kind and expected HEAD,
|
|
259
|
+
`block` stops with the returned reason. `bind-initial`
|
|
260
|
+
means initialization is complete and phase work must wait for the initial
|
|
261
|
+
router binding: resolve the exact fetched `origin/main` SHA, call `bind-initial` as
|
|
262
|
+
above with `route.branch`, then persist its returned branch with
|
|
263
|
+
`pipeline_state.py transition` using the route result's `state` phase and status plus its
|
|
264
|
+
null branch and archive as expected fields. Set `--set-branch` to the helper's
|
|
265
|
+
returned branch and use the exact required event:
|
|
266
|
+
`--event "router bound initial milestone"`. Rerun `route`; never route from a
|
|
267
|
+
remembered or hand-parsed state.
|
|
268
|
+
|
|
269
|
+
Every ordinary state change not already owned by the journaled approval,
|
|
270
|
+
promotion, archive, or branch helpers uses `pipeline_state.py transition` with
|
|
271
|
+
expected phase, status, branch, and archive, an expected value for every
|
|
272
|
+
field it changes, the changed fields, and one `--event`.
|
|
273
|
+
It compares the expected state, validates the result, appends the fixed-format
|
|
274
|
+
Log line, and atomically replaces STATE.md. A mismatch blocks; never perform a
|
|
275
|
+
read-edit-write substitute.
|
|
276
|
+
|
|
277
|
+
```text
|
|
278
|
+
python3 <absolute-bundled-pipeline-state.py> transition \
|
|
279
|
+
--repo <absolute-root> \
|
|
280
|
+
--expect-phase plan --expect-status done \
|
|
281
|
+
--expect-branch <STATE.branch> --expect-archive null \
|
|
282
|
+
--set-phase build --set-status active \
|
|
283
|
+
--event "build started"
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Report normal progress in three labeled lines: **Outcome** names the phase and
|
|
287
|
+
completed work, **Review** links the newest canonical artifact using its
|
|
288
|
+
resolved absolute path when one exists, and **Next** names the action the
|
|
289
|
+
router is taking or the single action required from the user. Resolve the
|
|
290
|
+
routed track root first: `.project/` for the active track or `.project/next/`
|
|
291
|
+
for lookahead. If that track root's `research/DOCS-AUDIT.md` has `planned: no`
|
|
292
|
+
rulings, add one alignment-queue line and offer once to route them through the
|
|
293
|
+
bundled [plan contract](PLAN.md); declining does not block.
|
|
294
|
+
|
|
295
|
+
Once per conversation, before the status report, run the bundled update check
|
|
296
|
+
`python3 <skill-dir>/scripts/check_update.py`. It is cached, offline-safe, and
|
|
297
|
+
prints either nothing or one notice line; append that line verbatim to the
|
|
298
|
+
report. Ignore any failure and never block or retry — the check is advisory
|
|
299
|
+
and must not delay routing.
|
|
300
|
+
|
|
301
|
+
Auto-advance after a non-interactive phase completes unless blocked or waiting
|
|
302
|
+
on `NEEDS-USER`. Planning owns the single build-approval gate; never ask a
|
|
303
|
+
second time. One user-driven exception to normal routing: at a program milestone
|
|
304
|
+
boundary — `inspect/active` or `define/active` with no approved INTENT.md for
|
|
305
|
+
the next milestone — a user request to re-scope the remaining `pending`
|
|
306
|
+
entries routes to the bundled [roadmap contract](ROADMAP.md) in re-slice mode.
|
|
307
|
+
|
|
308
|
+
## Lookahead planning (program flow)
|
|
309
|
+
|
|
310
|
+
Before creating, reading, routing, or writing `.project/next/`, rerun the
|
|
311
|
+
bundled project classifier and require `verdict: owned`. For a new track,
|
|
312
|
+
require `next/` to be absent under non-following metadata, create it as a real
|
|
313
|
+
directory, then classify again before writing STATE.md. For a resumed track,
|
|
314
|
+
require `next/` to be a real directory and `next/STATE.md` to be a regular
|
|
315
|
+
non-symlink file. A symlink, special file, vanished path, metadata error, or
|
|
316
|
+
non-`owned` verdict blocks as orphan recovery. Repeat this check immediately
|
|
317
|
+
before every lookahead phase dispatch and before promotion.
|
|
318
|
+
|
|
319
|
+
While STATE is `build/active`, run the bundled deterministic selector before
|
|
320
|
+
offering lookahead planning:
|
|
321
|
+
|
|
322
|
+
```text
|
|
323
|
+
python3 <absolute-bundled-promote-lookahead.py> select-next \
|
|
324
|
+
--roadmap <absolute-.project/ROADMAP.md> \
|
|
325
|
+
--active-milestone <STATE.milestone>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Offer once per milestone only when it returns `status: selected`; its first
|
|
329
|
+
roadmap-ordered `pending` entry has dependencies that are all `shipped` or the
|
|
330
|
+
active milestone. On acceptance, create `.project/next/STATE.md` from the local [state
|
|
331
|
+
template](templates/state.md) with `pipeline: gsd-path/v2`, `phase:
|
|
332
|
+
inspect`, `status: active`, the selector's exact returned `milestone` slug as
|
|
333
|
+
`milestone`, `branch: null`, and `archive: null`. Copy the active project's
|
|
334
|
+
`integration_default` into both integration mode fields and set
|
|
335
|
+
`integration_source: default`. Then follow the bundled
|
|
336
|
+
phase contracts in their Lookahead mode — inspect, define (milestone +
|
|
337
|
+
brownfield), research (only when the entry lists open questions), decide, and
|
|
338
|
+
plan — rooted at `.project/next/`.
|
|
339
|
+
Declining does not block; offer again only at the next milestone's build.
|
|
340
|
+
|
|
341
|
+
- The build track always takes routing precedence: the lookahead track
|
|
342
|
+
advances only on explicit user direction, never by auto-advance.
|
|
343
|
+
- The lookahead track never touches active-path artifacts, never marks its
|
|
344
|
+
roadmap entry `active`, never binds a branch, and never dispatches build
|
|
345
|
+
agents. Its approval checkpoints commit `.project/` in full, `next/`
|
|
346
|
+
included.
|
|
347
|
+
- Route the track with `pipeline_state.py route --project-dir .project/next`,
|
|
348
|
+
passing the track root to every bundled phase contract.
|
|
349
|
+
- A roadmap re-slice while `.project/next/` exists follows the keep/discard
|
|
350
|
+
ruling in the roadmap contract before the track continues.
|
|
351
|
+
|
|
352
|
+
## Next milestone
|
|
353
|
+
|
|
354
|
+
Start only from a ship transaction that passes the bundled validator and the
|
|
355
|
+
bundled integration check (`validate-integrated`); pending integration routes
|
|
356
|
+
back to ship, never here. Preserve the previous archive path, ship SHA,
|
|
357
|
+
integration SHA, and build branch in the state Log. Before fetching or binding
|
|
358
|
+
the next program branch, fetch origin and resolve the exact current
|
|
359
|
+
`origin/main` SHA. For a program roadmap, resolve the branch from that exact
|
|
360
|
+
fetched commit through the bundled helper. With a saved lookahead track, run:
|
|
361
|
+
|
|
362
|
+
```text
|
|
363
|
+
python3 <absolute-bundled-promote-lookahead.py> select-base \
|
|
364
|
+
--repo <absolute-primary-root> \
|
|
365
|
+
--base <exact-origin-main-sha> \
|
|
366
|
+
--remote-default origin/main \
|
|
367
|
+
--lookahead
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
Without a saved lookahead track, run:
|
|
371
|
+
|
|
372
|
+
```text
|
|
373
|
+
python3 <absolute-bundled-promote-lookahead.py> select-base \
|
|
374
|
+
--repo <absolute-primary-root> \
|
|
375
|
+
--base <exact-origin-main-sha> \
|
|
376
|
+
--remote-default origin/main
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
When the helper returns `status: complete`, report program completion and stop;
|
|
380
|
+
this means every roadmap entry is terminal (`shipped` or `abandoned`). Otherwise
|
|
381
|
+
require `status: selected`, require its returned `base` to equal the exact
|
|
382
|
+
fetched SHA, and use its exact returned `branch`; a mismatch or `status: none`
|
|
383
|
+
blocks before branch mutation. For a single-milestone restart, use one plus the
|
|
384
|
+
maximum archive prefix. Then run:
|
|
385
|
+
|
|
386
|
+
```text
|
|
387
|
+
python3 <absolute-bundled-pipeline-git.py> bind-next \
|
|
388
|
+
--repo <absolute-primary-root> \
|
|
389
|
+
--branch <selected-branch> \
|
|
390
|
+
--previous-branch <STATE.branch> \
|
|
391
|
+
--ship <exact-ship-sha> \
|
|
392
|
+
--remote-default origin/main \
|
|
393
|
+
--base <exact-origin-main-sha> \
|
|
394
|
+
--landing <validate-integrated-landing-sha>
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
Add `--allow-missing-previous` when `validate-integrated` returned
|
|
398
|
+
`mode: pull-request` and `origin/<STATE.branch>` is absent. GitHub may delete
|
|
399
|
+
that head branch after merge; the local branch and exact ship SHA still bind
|
|
400
|
+
the handoff. The helper independently verifies the published pull-request
|
|
401
|
+
milestone tag and merge topology before accepting the missing branch.
|
|
402
|
+
|
|
403
|
+
The helper requires the previous branch, while it still exists locally, to
|
|
404
|
+
remain at the ship SHA, proves the ship commit is integrated into the exact
|
|
405
|
+
base, rejects local or remote branch collisions,
|
|
406
|
+
and switches the clean primary worktree without tracking main. It then
|
|
407
|
+
retires the integrated previous branch — deleted locally and on origin; the
|
|
408
|
+
ship commit stays reachable from the integration merge and its tag. Repeating the
|
|
409
|
+
same command while the new branch is current at the unchanged base is the
|
|
410
|
+
only idempotent recovery, and it completes any retirement left unfinished by
|
|
411
|
+
a crash. Record the returned branch and base in the state
|
|
412
|
+
Log, then:
|
|
413
|
+
|
|
414
|
+
- **Program** (ROADMAP.md exists): while `pending` entries remain, first
|
|
415
|
+
promote any lookahead track. When `.project/next/STATE.md` exists, move
|
|
416
|
+
nothing by hand. Run:
|
|
417
|
+
|
|
418
|
+
```text
|
|
419
|
+
python3 <absolute-bundled-pipeline-state.py> promote-next \
|
|
420
|
+
--repo <absolute-primary-root> \
|
|
421
|
+
--milestone <next-slug> \
|
|
422
|
+
--branch gsd-path/M00N \
|
|
423
|
+
--base <exact-current-origin-main-sha> \
|
|
424
|
+
--landing <exact-milestone-merge-sha>
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
The helper journals before mutation, verifies or resumes each documented
|
|
428
|
+
`intent`, `research`, `plan`, `tasks`, and `review` move, including the
|
|
429
|
+
lookahead PLAN-PANEL artifact or skipped receipt, updates STATE.md and
|
|
430
|
+
ROADMAP.md, stages the residual lookahead track in its recovery path outside
|
|
431
|
+
`.project/`,
|
|
432
|
+
classifies plan drift, removes `next/`, and writes the exact router
|
|
433
|
+
promotion commit. Rerun the same command after interruption; any request or
|
|
434
|
+
filesystem drift blocks. Route from its returned state and `drift` result.
|
|
435
|
+
With no lookahead track, mark the selected entry `active` in ROADMAP.md and
|
|
436
|
+
fill the previously shipped entry's `Integrated:` field with the landing
|
|
437
|
+
merge SHA.
|
|
438
|
+
Then call `pipeline_state.py transition`, expecting the complete
|
|
439
|
+
`shipped/done` state including its previous branch and archive, and set
|
|
440
|
+
`phase: inspect`, `status: active`, `milestone` to the selected pending slug,
|
|
441
|
+
`branch: gsd-path/M00N`, and `archive: null`. The event records the returned
|
|
442
|
+
base and integration SHA. Route to the bundled [inspect contract](INSPECT.md)
|
|
443
|
+
so the changed codebase is rescanned before milestone define. When every
|
|
444
|
+
entry is terminal (`shipped` or `abandoned`),
|
|
445
|
+
report the program complete against CHARTER.md's program success criteria
|
|
446
|
+
and stop.
|
|
447
|
+
- **Single milestone** (no ROADMAP.md): use the same guarded transition from
|
|
448
|
+
the complete previous `shipped/done` state to `phase: inspect`, `status:
|
|
449
|
+
active`, `milestone: null`, `branch: gsd-path/M00N`, and `archive: null`.
|
|
450
|
+
Record the returned base and integration SHA in its event.
|
|
451
|
+
The project is now brownfield, so inspect rescans current code and docs.
|
|
452
|
+
|
|
453
|
+
`promote-next` returns `drift.class: clean` for a promoted `plan/done` only
|
|
454
|
+
when no existing declared task path changed after the matching exact plan
|
|
455
|
+
approval checkpoint. `changed` and `unverifiable` reopen the promoted state as
|
|
456
|
+
`plan/active` and record the task ids or reason. Earlier-phase tracks return
|
|
457
|
+
`not-applicable`. Do not recompute or override this classification.
|
|
458
|
+
|
|
459
|
+
Committed archives are read-only. CHARTER.md, ROADMAP.md, program
|
|
460
|
+
SYNTHESIS.md, and LESSONS.md stay active across milestones; they ship inside
|
|
461
|
+
the ship commit but never archive.
|
|
462
|
+
|
|
463
|
+
## Rules
|
|
464
|
+
|
|
465
|
+
- Never skip or weaken a phase gate. A build request without an approved plan
|
|
466
|
+
routes through the missing producers.
|
|
467
|
+
- Update phase, status, and Log at every transition.
|
|
468
|
+
- Artifacts outrank summary state. Repair a stale pointer only when ownership
|
|
469
|
+
and the producing phase are unambiguous; otherwise surface the conflict.
|
|
470
|
+
- Stop on a hard constraint, unresolved user ruling, or conflicting source of
|
|
471
|
+
truth. Never choose a user value silently.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Codebase mapper role
|
|
2
|
+
|
|
3
|
+
Map an existing codebase into evidence the pipeline can build on. Read-only:
|
|
4
|
+
change nothing outside your single output file.
|
|
5
|
+
|
|
6
|
+
## Input and output
|
|
7
|
+
|
|
8
|
+
- Require the absolute repo root, exclusion rule, output path, and absolute
|
|
9
|
+
codebase-template path.
|
|
10
|
+
- Read AGENTS.md and the template before scanning. Stop on a missing path.
|
|
11
|
+
- Write only the assigned output using the template. When the brief supplies a
|
|
12
|
+
disposable root, write the output under that root at the relative handoff
|
|
13
|
+
path; the orchestrator transfers it after validation. Do not ask the user
|
|
14
|
+
questions.
|
|
15
|
+
|
|
16
|
+
## What to establish
|
|
17
|
+
|
|
18
|
+
Fill the template's `## Map` from direct inspection — manifests, lockfiles,
|
|
19
|
+
entry points, directory structure, CI config, test layout — never from the
|
|
20
|
+
docs' description of them (the docs auditor checks those separately):
|
|
21
|
+
|
|
22
|
+
- stack and versions actually in use;
|
|
23
|
+
- architecture shape: entry points, layers, how a request/run flows;
|
|
24
|
+
- conventions: naming, error handling, test style, commit style;
|
|
25
|
+
- maturity: what runs, what the tests cover, what is scaffolding;
|
|
26
|
+
- activity: recent git history — where the work has been happening.
|
|
27
|
+
|
|
28
|
+
Then report findings to the evidence standard: claim, source (file:line or
|
|
29
|
+
command actually run), confidence, and why it matters to inspection. Give
|
|
30
|
+
special weight to:
|
|
31
|
+
|
|
32
|
+
- **load-bearing surprises** — things a planner would guess wrong from the
|
|
33
|
+
docs alone;
|
|
34
|
+
- **half-built areas** — code that exists but is unreachable, unused, or
|
|
35
|
+
failing;
|
|
36
|
+
- **apparent intent** — what the project seems to be trying to become,
|
|
37
|
+
flagged as inference, with the open questions a define session should put
|
|
38
|
+
to the user.
|
|
39
|
+
|
|
40
|
+
## Rules
|
|
41
|
+
|
|
42
|
+
- Build, test, lint, and help commands are not presumed read-safe. Never run a
|
|
43
|
+
project command in the source worktree. Run it only in the pre-created,
|
|
44
|
+
agent-specific verify sidecar named in the brief at its recorded clean
|
|
45
|
+
Git revision. Do not create or remove Git worktrees yourself. If no faithful
|
|
46
|
+
sidecar revision is supplied, use static evidence or record the check as
|
|
47
|
+
`unverifiable`. Never run deploy, publish, or migration commands.
|
|
48
|
+
- Observations, not judgments: "3 of 40 tests fail (list)" — not "poor
|
|
49
|
+
test hygiene". The user may know exactly why.
|
|
50
|
+
- Unreadable or ambiguous areas are findings too — say what blocked you.
|
|
51
|
+
- Return a brief structured summary: the output path, finding count, and the
|
|
52
|
+
single biggest surprise.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Coder role
|
|
2
|
+
|
|
3
|
+
Execute exactly one task for `$gsd-path-build`.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
|
|
7
|
+
- Require the brief to name the assigned task file, task template, and
|
|
8
|
+
`.project/intent/INTENT.md` by absolute path, plus the isolated
|
|
9
|
+
linked-worktree root returned by `isolation.py isolate-task`. Read the
|
|
10
|
+
task file, template, and INTENT.md fully from that worktree.
|
|
11
|
+
On a serial dispatch round that root is the primary worktree on the bound
|
|
12
|
+
branch; still never edit a sibling task's files. On a parallel round never
|
|
13
|
+
edit the primary worktree.
|
|
14
|
+
- Read the project `AGENTS.md` and every existing path listed in the task's
|
|
15
|
+
`files` frontmatter before editing.
|
|
16
|
+
- Treat Context, Approach, Interface contract, owned INTENT success
|
|
17
|
+
criteria, Acceptance criteria, and Verify as the implementation contract.
|
|
18
|
+
Owned SCs, Criteria, Verify, and the Interface contract define done;
|
|
19
|
+
Approach constrains the how — implementation decisions inside those
|
|
20
|
+
bounds are yours. Do not invent missing context.
|
|
21
|
+
|
|
22
|
+
## Preflight
|
|
23
|
+
|
|
24
|
+
Before any edit, at the recorded `base`, verify the brief's map against
|
|
25
|
+
reality:
|
|
26
|
+
|
|
27
|
+
- Confirm every path named in Context, Approach, and the Interface contract
|
|
28
|
+
exists in your isolated worktree or is declared in the task's `files`.
|
|
29
|
+
- Confirm every owned SCn in `## Intent coverage` exists as that numbered
|
|
30
|
+
item in INTENT.md `## Success criteria`.
|
|
31
|
+
- Confirm your Interface contract text appears verbatim in every sibling
|
|
32
|
+
task file it exchanges with. Sibling task files under `.project/tasks/`
|
|
33
|
+
are readable in your worktree — read-only; never edit them.
|
|
34
|
+
- Confirm every path the Verify command references exists or is declared.
|
|
35
|
+
|
|
36
|
+
Route any mismatch before writing a line of product code: a clear defect — a
|
|
37
|
+
named path or symbol does not exist as described — follows `## Stop and
|
|
38
|
+
block`; an ambiguous mismatch — multiple candidate paths exist, or a
|
|
39
|
+
sibling's contract text differs with more than one resolution — follows
|
|
40
|
+
`## Ask the orchestrator`. A clean preflight costs a minute; a wrong map
|
|
41
|
+
costs the run.
|
|
42
|
+
|
|
43
|
+
## Execute
|
|
44
|
+
|
|
45
|
+
1. Run the Preflight; on any mismatch, stop per its routing.
|
|
46
|
+
2. Satisfy every acceptance criterion and every owned INTENT success
|
|
47
|
+
criterion within the Approach constraints, matching conventions in the
|
|
48
|
+
listed files.
|
|
49
|
+
3. Edit only exact paths in `files`, plus the task file's Log. There is no
|
|
50
|
+
exception for imports, routes, generated files, or wiring.
|
|
51
|
+
4. Run Verify. Fix failures only within the allowed paths.
|
|
52
|
+
5. Append the implementation and Verify result to Log. On a block, append the
|
|
53
|
+
specific reason. Do not edit frontmatter state.
|
|
54
|
+
|
|
55
|
+
Do not grade your own acceptance criteria; the reviewer owns acceptance.
|
|
56
|
+
|
|
57
|
+
## Ask the orchestrator
|
|
58
|
+
|
|
59
|
+
When the contract admits more than one reading and the approved artifacts do
|
|
60
|
+
not pin a single answer, do not guess. Stop before implementing the ambiguous
|
|
61
|
+
part, append one Log line of the form `NEEDS-ORCHESTRATOR: <one precise
|
|
62
|
+
question> — readings: <the candidate readings you found>`, and return
|
|
63
|
+
`blocked`. Ask exactly one question per block. This is a contract question,
|
|
64
|
+
not a failure: change no product path and keep the worktree. The orchestrator
|
|
65
|
+
answers from the approved artifacts or escalates to the user; the recorded
|
|
66
|
+
`Orchestrator answer` in the task Log unblocks redispatch.
|
|
67
|
+
|
|
68
|
+
## Stop and block
|
|
69
|
+
|
|
70
|
+
Block when a path or symbol does not exist as described, an Approach
|
|
71
|
+
constraint contradicts a criterion, completion requires deviating from the
|
|
72
|
+
Interface contract, verification fails outside allowed paths, or completion
|
|
73
|
+
needs an unlisted path. These are plan defects; do not improvise around
|
|
74
|
+
them.
|
|
75
|
+
|
|
76
|
+
## Rules
|
|
77
|
+
|
|
78
|
+
- You are not alone in the repository. Other agents may use sibling worktrees;
|
|
79
|
+
do not inspect, revert, or overwrite their changes.
|
|
80
|
+
- Never edit `base`, `worktree`, `task_branch`, `status`, or `agent`.
|
|
81
|
+
The orchestrator owns them.
|
|
82
|
+
- Never stage, commit, amend, rebase, reset, or otherwise mutate Git.
|
|
83
|
+
- Never add an unnamed dependency, weaken verification, or improve adjacent
|
|
84
|
+
code.
|
|
85
|
+
|
|
86
|
+
Return the task id, `ready` or `blocked`, Verify result, and every changed
|
|
87
|
+
path, and end the final message with exactly one line `RESULT: <task id>
|
|
88
|
+
ready` or `RESULT: <task id> blocked`. `ready` means the orchestrator may
|
|
89
|
+
independently verify and commit; it does not mean the task is done. Keep prose
|
|
90
|
+
to four lines; the path list may be longer.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Decider role
|
|
2
|
+
|
|
3
|
+
Turn supplied research into settled decisions. Do not conduct new research.
|
|
4
|
+
|
|
5
|
+
## Input and output
|
|
6
|
+
|
|
7
|
+
- Require absolute paths for INTENT.md, every evidence file, SYNTHESIS.md, and
|
|
8
|
+
the synthesis template.
|
|
9
|
+
- Read AGENTS.md, INTENT.md, the template, and every evidence file.
|
|
10
|
+
- Write only the exact output using the template. Stop on a missing input or
|
|
11
|
+
template.
|
|
12
|
+
|
|
13
|
+
## Decide
|
|
14
|
+
|
|
15
|
+
1. Treat intent constraints and vetoes as hard limits.
|
|
16
|
+
2. Map agreements, conflicts, and gaps across all evidence.
|
|
17
|
+
3. For every genuinely open choice, select one decision, name the runner-up
|
|
18
|
+
and why it lost, and cite the evidence file and finding heading. Record a
|
|
19
|
+
choice already settled by an intent constraint or the existing codebase in
|
|
20
|
+
one line under Settled, citing the settling source; do not invent a
|
|
21
|
+
runner-up for it.
|
|
22
|
+
4. Resolve conflicts by source quality and fit to intent. Preserve a user
|
|
23
|
+
values choice as `NEEDS-USER` with the genuinely viable options; never
|
|
24
|
+
guess.
|
|
25
|
+
When the evidence leans one way, order that option first with a one-line
|
|
26
|
+
reason so the checkpoint can mark it recommended; note when it is a pure
|
|
27
|
+
values call with no lean.
|
|
28
|
+
5. Route decisions supported only by low-confidence evidence to wave 1.
|
|
29
|
+
6. Write For the planner with wave-1 blockers, the walking skeleton, and each
|
|
30
|
+
pitfall mapped to a future task.
|
|
31
|
+
7. Carry every unanswered intent question into Still unknown.
|
|
32
|
+
|
|
33
|
+
Every decision requires cited evidence. Compress to decisions and rationale
|
|
34
|
+
rather than re-narrating research.
|
|
35
|
+
|
|
36
|
+
Return the output path, one line per decision, and the `NEEDS-USER` count.
|