@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,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-path-inspect
|
|
3
|
+
description: Inspect an existing codebase and its documentation to establish brownfield ground truth before intent is defined. Use only when the user explicitly invokes $gsd-path-inspect or an active $gsd-path router explicitly routes to this phase.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GSD Path Inspect Phase
|
|
7
|
+
|
|
8
|
+
Establish ground truth about an existing project before intent is defined.
|
|
9
|
+
Detect, scan, and audit first; recommend and question only after the evidence
|
|
10
|
+
is on disk. Never question a user about a codebase the pipeline has not read.
|
|
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 phase work 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 inspect is resolved through its artifact gate, or the
|
|
18
|
+
phase blocks.
|
|
19
|
+
|
|
20
|
+
## Preconditions
|
|
21
|
+
|
|
22
|
+
If STATE.md is missing, run the bundled
|
|
23
|
+
`python3 <absolute-bundled-script> initialize --repo <absolute-root>
|
|
24
|
+
--template <absolute-state-template>` helper (`scripts/detect_project.py`) and
|
|
25
|
+
follow its returned JSON `verdict` / `route`. This is the only no-state
|
|
26
|
+
boundary; do not run `classify` first or classify from a directory listing or
|
|
27
|
+
conversation. If the command exits nonzero, returns `error`, or returns
|
|
28
|
+
`wrote_state: false`, report the error and block without routing or claiming
|
|
29
|
+
STATE.md was written.
|
|
30
|
+
- `owned` — continue under the existing-state rules below.
|
|
31
|
+
- `orphan` — return to `$gsd-path` for orphaned-state recovery instead of
|
|
32
|
+
initializing or overwriting it.
|
|
33
|
+
- `greenfield` — the helper writes STATE.md at `define/active`; skip inspection
|
|
34
|
+
and route to `$gsd-path-define` from this returned verdict.
|
|
35
|
+
- `brownfield` — require `wrote_state: true`, then continue with the helper's
|
|
36
|
+
STATE.md at `inspect/active`.
|
|
37
|
+
If `.project/STATE.md` exists, run `python3 <absolute pipeline_state.py>
|
|
38
|
+
validate --repo <absolute root> [--project-dir .project/next]`; a non-zero
|
|
39
|
+
result returns to `$gsd-path` for ownership checking. Legal entry is
|
|
40
|
+
`inspect/active|blocked`; `inspect/done` routes to define, and any later phase
|
|
41
|
+
stops. When an active router supplies `.project/next/`, require its STATE.md
|
|
42
|
+
to be a regular non-symlink file and apply these rules to that track state.
|
|
43
|
+
When an existing state records a bound branch (single-milestone restart
|
|
44
|
+
or program next-milestone), require the current symbolic branch to match and
|
|
45
|
+
preserve both `branch` and `milestone`. Do not re-enter `inspect/done` in the
|
|
46
|
+
same milestone; a later milestone's `inspect/active` is a new scan.
|
|
47
|
+
|
|
48
|
+
## Process
|
|
49
|
+
|
|
50
|
+
1. Before creating or changing `.project/` Markdown, freeze the helper's exact
|
|
51
|
+
stdout from `python3 <absolute check_docs_audit.py> --repo <absolute root>
|
|
52
|
+
--emit-inventory` in a temporary file. Do not rediscover or edit that
|
|
53
|
+
inventory. If STATE.md is now missing, restart Preconditions and route from
|
|
54
|
+
the new `initialize` result; never continue from an ignored result. Record
|
|
55
|
+
the SHA-256 of each existing assigned destination and preserve the existing
|
|
56
|
+
DOCS-AUDIT.md in a temporary prior-audit file; when it records an
|
|
57
|
+
`Audited HEAD` Git resolves as an ancestor of HEAD, freeze the changed set
|
|
58
|
+
as `$gsd-path-docs-audit` step 1 describes. Preserve an existing
|
|
59
|
+
router-bound branch and milestone.
|
|
60
|
+
2. Dispatch two independent agents in parallel, following the local
|
|
61
|
+
[runtime dispatch contract](references/dispatch.md) and its deterministic
|
|
62
|
+
task-name rules:
|
|
63
|
+
- **Codebase mapper** — role
|
|
64
|
+
[codebase-mapper](references/codebase-mapper.md), template
|
|
65
|
+
[codebase](templates/codebase.md), output
|
|
66
|
+
`.project/research/evidence-codebase.md` (`.project/next/research/` in
|
|
67
|
+
Lookahead mode), task name `inspect_codebase`.
|
|
68
|
+
- **Docs auditor** — role
|
|
69
|
+
[docs-auditor](references/docs-auditor.md), template
|
|
70
|
+
[docs-audit](templates/docs-audit.md), output
|
|
71
|
+
`.project/research/DOCS-AUDIT.md` (same next/ prefix in Lookahead mode),
|
|
72
|
+
task name `inspect_docs`.
|
|
73
|
+
Give each the absolute repo root and exclusion rule. Give the auditor the
|
|
74
|
+
exact frozen inventory, the changed set when one exists, and `alignment
|
|
75
|
+
mode: false`; it audits only that
|
|
76
|
+
list and never rediscovers paths. The frozen inventory travels inside the
|
|
77
|
+
dispatch brief; never persist it as a `.project/` sidecar file. Pass an existing DOCS-AUDIT.md separately
|
|
78
|
+
as carry-forward input so its `## User rulings` and `planned` values remain
|
|
79
|
+
verbatim. When Git has a resolvable HEAD and no non-`.project` worktree
|
|
80
|
+
changes, the orchestrator creates a verify sidecar for each agent with
|
|
81
|
+
`python3 <absolute isolation.py> isolate-verify --repo <absolute primary>
|
|
82
|
+
--base <HEAD> --name inspect-codebase` and `--name inspect-docs`, and
|
|
83
|
+
includes its path and revision for project commands; expected new pipeline
|
|
84
|
+
artifacts do not make product code dirty. Each agent writes only its
|
|
85
|
+
assigned output under that sidecar and keeps it there for the gates in step
|
|
86
|
+
3. Otherwise no
|
|
87
|
+
project command may run. The docs-auditor brief carries current HEAD as the
|
|
88
|
+
audit baseline only when its verify sidecar was created at HEAD; otherwise
|
|
89
|
+
it carries `none`. The auditor writes that baseline as `Audited HEAD`.
|
|
90
|
+
3. Gate both artifacts against their templates: the codebase evidence needs
|
|
91
|
+
a filled `## Map` plus findings as observed — no quota, but an empty
|
|
92
|
+
findings section must say why; the docs audit must pass the bundled
|
|
93
|
+
`python3 <absolute check_docs_audit.py> --repo <docs sidecar> --audit
|
|
94
|
+
<track-relative DOCS-AUDIT.md> --inventory <frozen inventory file>`, where
|
|
95
|
+
the audit path is `.project/research/DOCS-AUDIT.md` normally and
|
|
96
|
+
`.project/next/research/DOCS-AUDIT.md` in Lookahead mode; add
|
|
97
|
+
`--prior-audit <temporary prior-audit file>` when one was preserved and
|
|
98
|
+
`--changed <temporary changed-set file>` when one was frozen
|
|
99
|
+
(disjoint `## Doc:` sections and `## Descriptive docs` equal to the frozen
|
|
100
|
+
inventory, every claim a valid verdict with evidence, Summary counts and
|
|
101
|
+
remediation queue consistent). After each artifact passes, collect it with
|
|
102
|
+
`python3 <absolute isolation.py> collect-artifact --repo <absolute primary>
|
|
103
|
+
--source <returned worktree> --base <recorded HEAD> --branch <returned
|
|
104
|
+
branch> --source-path <assigned track-relative path> --destination-path
|
|
105
|
+
<assigned track-relative path>`, adding `--expected-destination <recorded
|
|
106
|
+
prior SHA-256>` when that destination existed. Require the returned base,
|
|
107
|
+
branch, source, and destination to match. Only then retire with `python3
|
|
108
|
+
<absolute isolation.py> retire --repo <absolute primary> --worktree
|
|
109
|
+
<returned worktree> --branch <returned branch>` without `--force`.
|
|
110
|
+
Redispatch one complete corrected brief under the same logical task
|
|
111
|
+
name, following the runtime dispatch contract. If it still fails, run
|
|
112
|
+
`pipeline_state.py transition` with expected `inspect/active`, the exact
|
|
113
|
+
current branch and archive values, `--set-status blocked`, and an event
|
|
114
|
+
naming the failed artifact gate. Present **Outcome** with the failed gate, **Review**
|
|
115
|
+
linking each malformed output that exists or STATE.md when an output is
|
|
116
|
+
missing, and **Next** naming the one correction or user decision required;
|
|
117
|
+
then stop.
|
|
118
|
+
4. Present the ground truth to the user, brief — a summary, not a dump:
|
|
119
|
+
- what the project is (stack, architecture, entry points, maturity);
|
|
120
|
+
- what demonstrably works (verified claims, passing verifies);
|
|
121
|
+
- drift: what the docs claim that the code contradicts, and what exists
|
|
122
|
+
with no documentation at all;
|
|
123
|
+
- the mapper's open questions about apparent intent.
|
|
124
|
+
Lead with the outcome, then provide absolute-path Markdown links to the
|
|
125
|
+
track's `research/evidence-codebase.md` and `research/DOCS-AUDIT.md`
|
|
126
|
+
(`.project/research/` normally, `.project/next/research/` in Lookahead
|
|
127
|
+
mode), then state that define is next.
|
|
128
|
+
5. Run `python3 <absolute pipeline_state.py> transition --repo <absolute root>
|
|
129
|
+
[--project-dir .project/next]
|
|
130
|
+
--event "inspection artifacts passed" --expect-phase inspect --expect-status
|
|
131
|
+
active --expect-milestone <current milestone or null> --expect-branch
|
|
132
|
+
<current branch or null> --expect-archive <current archive or null>
|
|
133
|
+
--set-phase inspect --set-status done`. This helper is the only ordinary
|
|
134
|
+
STATE mutation; require its returned state to be `inspect/done`.
|
|
135
|
+
Identify `$gsd-path-define` as next. When this phase was routed by an
|
|
136
|
+
active `$gsd-path`, return control to that router so its bundled define
|
|
137
|
+
contract runs in brownfield mode (and milestone mode when ROADMAP.md
|
|
138
|
+
exists). When invoked directly, stop and tell the
|
|
139
|
+
user to explicitly invoke `$gsd-path`, which routes to define; do not invoke
|
|
140
|
+
an explicit-only sibling skill yourself.
|
|
141
|
+
|
|
142
|
+
## Lookahead mode
|
|
143
|
+
|
|
144
|
+
Entered only when an active router supplies the lookahead track root
|
|
145
|
+
`.project/next/` while the active STATE.md is `build/active` in program
|
|
146
|
+
flow. Evaluate every state and artifact precondition against the track:
|
|
147
|
+
`.project/next/STATE.md` is the state file and the outputs are
|
|
148
|
+
`.project/next/research/evidence-codebase.md` and
|
|
149
|
+
`.project/next/research/DOCS-AUDIT.md`. Freeze the inventory from the
|
|
150
|
+
repository root as usual. Carry forward the active
|
|
151
|
+
`.project/research/DOCS-AUDIT.md` when it exists so its `## User rulings`
|
|
152
|
+
and `planned` values remain verbatim; otherwise carry forward a track-local
|
|
153
|
+
audit if present. Never write an active-path artifact.
|
|
154
|
+
|
|
155
|
+
## Rules
|
|
156
|
+
|
|
157
|
+
- Scanning is read-only. Inspection changes nothing outside `.project/`.
|
|
158
|
+
- Project commands run only in agent-specific disposable verification
|
|
159
|
+
worktrees at a recorded clean revision; otherwise checks use static evidence
|
|
160
|
+
or are `unverifiable`. They never run in the source worktree.
|
|
161
|
+
- Report reality, not judgment: "tests exist but 3 fail" — never "test
|
|
162
|
+
hygiene is poor". The user may know exactly why those 3 fail.
|
|
163
|
+
- Doc-vs-code conflicts are surfaced, never auto-resolved; whether the doc
|
|
164
|
+
or the code is wrong is the user's ruling, captured while defining intent.
|
|
165
|
+
- Inspection evidence feeds the whole pipeline: researchers treat
|
|
166
|
+
`evidence-codebase.md` as a fifth standard dimension when it exists, the
|
|
167
|
+
planner must match its conventions, and reviewers may cite it.
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-path-plan
|
|
3
|
+
description: Create and validate dependency-ordered GSD Path build waves and complete task contracts. Use only when the user explicitly invokes $gsd-path-plan or an active $gsd-path router explicitly routes to this phase.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GSD Path Planning Phase
|
|
7
|
+
|
|
8
|
+
Dispatch one planner, gate its artifacts, and obtain the single approval that
|
|
9
|
+
authorizes the build.
|
|
10
|
+
|
|
11
|
+
Routing instructions below are caller handoffs under the AGENTS.md handoff
|
|
12
|
+
rule; never invoke an explicit-only sibling skill yourself.
|
|
13
|
+
|
|
14
|
+
Before planning and again before approval, apply the AGENTS.md
|
|
15
|
+
pending-answer rule with the bundled `scripts/discussion_records.py`; a
|
|
16
|
+
follow-up owned by planning is resolved in PLAN.md or its tasks, or the
|
|
17
|
+
phase blocks.
|
|
18
|
+
|
|
19
|
+
## Preconditions
|
|
20
|
+
|
|
21
|
+
Require `pipeline: gsd-path/v2` in `.project/STATE.md`; a missing or different
|
|
22
|
+
marker returns to `$gsd-path` for ownership checking. Normal-mode legal entry
|
|
23
|
+
is `decide/done` (transition to `plan/active`) or `plan/active|blocked`;
|
|
24
|
+
quick mode additionally enters from `define/done` when INTENT.md records
|
|
25
|
+
`Lane: quick`, and milestone mode enters from `define/done` when INTENT.md
|
|
26
|
+
records `Lane: milestone` (see Quick mode and Milestone mode below).
|
|
27
|
+
Before dispatch, enter from `decide/done` or `define/done` with
|
|
28
|
+
`pipeline_state.py transition`, the complete current state as expected,
|
|
29
|
+
`--set-phase plan --set-status active`, and event `planning started`. Resume
|
|
30
|
+
`plan/blocked` through the same helper with event `planning resumed`. Require
|
|
31
|
+
the returned track state to be `plan/active`; never edit STATE directly.
|
|
32
|
+
Any later phase blocks instead of replacing an approved plan. Patch mode is
|
|
33
|
+
the only reopen exception: require an approved plan, no in-progress task, and
|
|
34
|
+
state `plan/done` or `ship/blocked`; any other state blocks. `build/done` is
|
|
35
|
+
reserved exclusively for the build orchestrator's transition recovery and
|
|
36
|
+
must return there instead of reopening planning. When an active router
|
|
37
|
+
supplies the lookahead track root `.project/next/`, evaluate these
|
|
38
|
+
preconditions against the track instead; see Lookahead mode.
|
|
39
|
+
Require `.project/intent/INTENT.md`. Normal mode also requires
|
|
40
|
+
`.project/research/SYNTHESIS.md`; quick mode may enter without it because this
|
|
41
|
+
phase creates the Settled-only synthesis before gating. Milestone mode instead
|
|
42
|
+
requires the program `.project/SYNTHESIS.md` at the `.project/` top level plus
|
|
43
|
+
`.project/ROADMAP.md` with an entry matching the track STATE's `milestone`.
|
|
44
|
+
Require that entry to be `active` normally and `pending` in Lookahead mode.
|
|
45
|
+
Require a non-empty `## Decisions` or `## Settled` section and no unresolved
|
|
46
|
+
`NEEDS-USER` items before dispatching the planner. Route to the producing phase when a
|
|
47
|
+
precondition fails.
|
|
48
|
+
|
|
49
|
+
## Alignment queue check
|
|
50
|
+
|
|
51
|
+
Before planning, read `research/DOCS-AUDIT.md` from the supplied track root:
|
|
52
|
+
`.project/research/DOCS-AUDIT.md` normally or
|
|
53
|
+
`.project/next/research/DOCS-AUDIT.md` in Lookahead mode. An absent
|
|
54
|
+
track-local audit means an empty alignment queue. If queued rulings marked
|
|
55
|
+
`planned: no` exist, offer once to include them:
|
|
56
|
+
|
|
57
|
+
- **Normal planning** — accepted items fold into the plan as ordinary
|
|
58
|
+
tasks in dependency order (evidence inlined, `fix-doc` verifies re-run
|
|
59
|
+
the audit's claim check), and their queue rows get the task id.
|
|
60
|
+
- **Patch mode** — accepted items join the patch wave alongside the
|
|
61
|
+
invoking findings.
|
|
62
|
+
|
|
63
|
+
Declined items stay `planned: no` and will be offered again next time. The
|
|
64
|
+
user picks per item or "all"/"none" — a stale backlog must never sneak into
|
|
65
|
+
a plan wholesale without the user seeing the list. Offer through an
|
|
66
|
+
interactive user-input tool when available, marking the planner's
|
|
67
|
+
recommended choice per item `(recommended)` with a one-line reason (age,
|
|
68
|
+
severity, or fit with this milestone's scope).
|
|
69
|
+
|
|
70
|
+
## Process
|
|
71
|
+
|
|
72
|
+
Set `<track>` to `.project` for normal work and `.project/next` when the
|
|
73
|
+
router supplied lookahead mode. Every per-milestone path below, including
|
|
74
|
+
review-panel evidence, is rooted there. Program inputs remain at `.project/`
|
|
75
|
+
as stated in Lookahead mode.
|
|
76
|
+
|
|
77
|
+
1. Read the local [plan template](templates/plan.md), [task template](templates/task.md),
|
|
78
|
+
[plan-panel template](templates/plan-panel.md), `scripts/check_handoffs.py`,
|
|
79
|
+
and `scripts/review_panel.py`; resolve them to absolute paths.
|
|
80
|
+
2. Read the local [planner role](references/planner.md), then follow the
|
|
81
|
+
local [runtime dispatch contract](references/dispatch.md) with deterministic
|
|
82
|
+
logical task name `plan`. Give it absolute role, `AGENTS.md`, `WORKFLOW.md`,
|
|
83
|
+
input, template, and output paths, including `.project/LESSONS.md` when it
|
|
84
|
+
exists. Whenever INTENT.md records `Lane: milestone` — any entry point —
|
|
85
|
+
also include `.project/CHARTER.md`, `.project/ROADMAP.md`, the top-level
|
|
86
|
+
program `.project/SYNTHESIS.md`, and the resolved
|
|
87
|
+
milestone entry slug. In
|
|
88
|
+
final-review patch mode also include
|
|
89
|
+
`.project/review/PATCH-FINDINGS.md` and every source artifact it names; in
|
|
90
|
+
docs-audit patch mode include the selected `DOCS-AUDIT.md` rows and user
|
|
91
|
+
rulings.
|
|
92
|
+
The outputs are exactly `<track>/plan/PLAN.md` and one task
|
|
93
|
+
file per task at `<track>/tasks/T###-slug.md` — no other location is
|
|
94
|
+
canonical, and `.project/PLAN.md` is never written.
|
|
95
|
+
3. Gate PLAN.md and every task file:
|
|
96
|
+
- Require unique task ids, and require every task's `wave` to name a
|
|
97
|
+
`## Wave N` heading in PLAN.md. PLAN.md carries no task table.
|
|
98
|
+
- Require task frontmatter fields `id`, `title`, `wave`, `deps`, `status`,
|
|
99
|
+
`agent`, `base`, `worktree`, `task_branch`, and `files`; require
|
|
100
|
+
initial `status: pending`, `agent: null`, `base: null`,
|
|
101
|
+
`worktree: null`, and `task_branch: null` values on every new task.
|
|
102
|
+
In patch mode, tasks already `done` keep their landed metadata; only
|
|
103
|
+
the appended patch tasks must start clean.
|
|
104
|
+
- Require every dependency id to exist, forbid later-wave dependencies,
|
|
105
|
+
detect cycles, and forbid file overlap between planned tasks in the same
|
|
106
|
+
wave. Same-wave dependency chains are allowed only when their files do
|
|
107
|
+
not overlap; the build executes them in dependency layers.
|
|
108
|
+
- Reject a declared dependency that carries neither data nor a prerequisite
|
|
109
|
+
effect. A `deps` edge is valid only when the dependent consumes a symbol,
|
|
110
|
+
signature, schema, endpoint, file format, or path named in that
|
|
111
|
+
dependency's Interface contract, the two tasks' `files` overlap, or
|
|
112
|
+
PLAN.md's Dependency notes name the exact landed effect the dependent
|
|
113
|
+
requires — a removal, a migration, a cutover — and how a reviewer sees it.
|
|
114
|
+
Judge each edge separately when a task lists several deps. Anything else
|
|
115
|
+
is narrative order, not a dependency: drop that edge and place both tasks
|
|
116
|
+
by the wave-order rules.
|
|
117
|
+
- Require non-empty Context and Approach, observable Acceptance criteria,
|
|
118
|
+
a Verify command that can fail when this task is skipped, that names a
|
|
119
|
+
path from that task's `files`, and that is not PLAN.md's project Verify
|
|
120
|
+
unless an owned SC names that command, an Intent coverage
|
|
121
|
+
section (`- None` or owned SCn ids), and Log sections.
|
|
122
|
+
- Require an Interface contract section in every task: `None` for
|
|
123
|
+
independent tasks; when tasks exchange a symbol, schema, endpoint, file
|
|
124
|
+
format, or path, exact shared shapes with identical text in every
|
|
125
|
+
involved task. Every contract line names a shape that task defines or
|
|
126
|
+
consumes through its own `files`; one block copied into tasks that
|
|
127
|
+
neither define nor consume its shapes is a gate failure, not sharing.
|
|
128
|
+
- Require deliverable-sized tasks naming real paths that match the existing
|
|
129
|
+
codebase: each task is the largest coherent vertical slice — feature plus
|
|
130
|
+
its tests and wiring — one agent run can complete. Reject a plan that
|
|
131
|
+
splits one deliverable across tasks when no file-scope, dependency, or
|
|
132
|
+
capacity conflict forces the split.
|
|
133
|
+
- Require a `Review depth` value (`full`, `deep`, or `verify-only`) on
|
|
134
|
+
every wave. Wave 1 and any wave touching authentication, authorization,
|
|
135
|
+
payments, data migration, or concurrency requires `full` or `deep`;
|
|
136
|
+
quick-lane single waves may use `verify-only`. The planner assigns `deep`
|
|
137
|
+
sparingly to waves where a wrong merge is irreversible or
|
|
138
|
+
security-critical.
|
|
139
|
+
- When INTENT.md `Surfaces:` is not `none`, require a PLAN.md
|
|
140
|
+
`## Surface contract` block per named surface with its Criteria, Entry,
|
|
141
|
+
States, Walkthrough, and the task that delivers it. Those criteria must be
|
|
142
|
+
among the SCn ids that task owns in its Intent coverage, and their Verify
|
|
143
|
+
must exercise the surface a person uses — a rendered page, a real
|
|
144
|
+
command's output — not an internal unit test.
|
|
145
|
+
Require the surface to land in the same wave as the capability behind
|
|
146
|
+
it, never in a later polish wave.
|
|
147
|
+
- Prove every intent constraint and synthesis decision is covered, that no
|
|
148
|
+
scope-out veto appears in a task, and that `Project verify` is a real,
|
|
149
|
+
non-placeholder command in PLAN.md. Every Verify — task and project —
|
|
150
|
+
runs in a fresh sidecar worktree with nothing installed, so a command
|
|
151
|
+
that needs dependencies must install them first
|
|
152
|
+
(`pnpm install --frozen-lockfile && ...`); a bare `pnpm typecheck` fails
|
|
153
|
+
there.
|
|
154
|
+
- For a Git-backed plan, run `python3 <absolute workflow_run.py>
|
|
155
|
+
gate-plan --repo <absolute repo root>` and `--project-dir .project/next`
|
|
156
|
+
for lookahead. Retain its JSON receipt with the plan gate evidence. It
|
|
157
|
+
runs pending discussion, intent coverage, task brief paths, and review
|
|
158
|
+
configuration gates in order; a failure stops the sequence. New declared
|
|
159
|
+
directories are allowed; existing ancestors must be directories at HEAD.
|
|
160
|
+
A task Verify must name an owned file unless its owned SC explicitly
|
|
161
|
+
names Project verify. Quick mode requires the review panel off.
|
|
162
|
+
Before Git exists, run the bundled `check_handoffs.py plan` and
|
|
163
|
+
`review_panel.py validate-plan` gates directly; build owns the deferred
|
|
164
|
+
base-dependent brief check. Approval still uses the journaled helper below.
|
|
165
|
+
4. Redispatch one complete corrected brief under logical task name `plan`,
|
|
166
|
+
following the runtime dispatch contract and including all gate failures.
|
|
167
|
+
Allow one revision round. If it still fails, use `pipeline_state.py
|
|
168
|
+
transition` with the exact current phase, status, milestone, branch, and
|
|
169
|
+
archive as expected fields, `--set-phase plan --set-status blocked`, and a
|
|
170
|
+
one-line event naming the failed plan gates. Require returned
|
|
171
|
+
`plan/blocked`, then
|
|
172
|
+
present **Outcome** with the failed gate, **Review** linking the resolved
|
|
173
|
+
absolute PLAN.md path (or STATE.md when PLAN.md is missing), and **Next**
|
|
174
|
+
naming the one correction or user decision required. Stop.
|
|
175
|
+
5. Show the wave number, goal, and task count for every wave as the outcome.
|
|
176
|
+
Link the resolved absolute `<track>/plan/PLAN.md` path and summarize the
|
|
177
|
+
linked `<track>/tasks/` task set. Then run the optional review panel
|
|
178
|
+
before the approval question:
|
|
179
|
+
- Inspect the host child-agent schema for advertised model slugs. Do not
|
|
180
|
+
guess slugs. Pass them to `python3 <absolute review_panel.py> resolve
|
|
181
|
+
--plan <absolute <track>/plan/PLAN.md> --intent <absolute
|
|
182
|
+
<track>/intent/INTENT.md> --advertised
|
|
183
|
+
<comma slugs> --parent-slug <current model slug when known>` and
|
|
184
|
+
`--charter <absolute .project/CHARTER.md>` when that file exists.
|
|
185
|
+
- `status: off` — skip the panel and remove any stale
|
|
186
|
+
`<track>/review/PLAN-PANEL.md` or `PLAN-PANEL.skipped.json`. The approval
|
|
187
|
+
question may include
|
|
188
|
+
`Approve with review panel (detected)` as an alternative; if chosen,
|
|
189
|
+
write `review_panel: detected` into PLAN.md Config, re-run resolve, and
|
|
190
|
+
continue this step.
|
|
191
|
+
- `status: skipped` — remove any stale
|
|
192
|
+
`<track>/review/PLAN-PANEL.md`, persist the exact JSON stdout from
|
|
193
|
+
`resolve` at `<track>/review/PLAN-PANEL.skipped.json`, then use
|
|
194
|
+
`pipeline_state.py transition` against `<track>` with the exact current
|
|
195
|
+
state as both expected and resulting phase/status and event `plan review
|
|
196
|
+
panel skipped: <helper reason>`. Require the returned unchanged
|
|
197
|
+
`plan/active` position and continue without a panel. Do not treat
|
|
198
|
+
this as a gate failure or infer enablement again from Config.
|
|
199
|
+
- `status: error` or exit 2 — use the same guarded transition to set
|
|
200
|
+
`plan/blocked` with an event naming the helper error, link PLAN.md, and stop.
|
|
201
|
+
A named family that is not advertised is an assertion failure.
|
|
202
|
+
- `status: ready` — for each selected family, spawn one independent child
|
|
203
|
+
with logical task name `review_plan_panel_<family>`, the reviewer role
|
|
204
|
+
in plan-panel mode, the plan-panel template, and the exact helper-returned
|
|
205
|
+
model slug when the host advertises model selection. Never override the
|
|
206
|
+
model on the planner. Each child stages its family file under a
|
|
207
|
+
disposable root; the parent validates and copies those files, removes
|
|
208
|
+
any stale `<track>/review/PLAN-PANEL.skipped.json`, then runs
|
|
209
|
+
`python3 <absolute review_panel.py> merge --kind plan --inputs <family
|
|
210
|
+
files> --output <absolute <track>/review/PLAN-PANEL.md> --mode
|
|
211
|
+
<detected|named>`. Do not average findings or auto-replan.
|
|
212
|
+
Before asking for approval, require exactly one panel artifact for non-off
|
|
213
|
+
Config: `PLAN-PANEL.md` for `ready`, or `PLAN-PANEL.skipped.json` for
|
|
214
|
+
`skipped`. Off Config requires neither. A mismatch blocks approval.
|
|
215
|
+
Ask one explicit next question: whether to approve this plan and start the
|
|
216
|
+
build. When PLAN-PANEL.md has `Actionable: 0` or the panel did not run,
|
|
217
|
+
list `Approve and start build (recommended)` first, with `Request changes`
|
|
218
|
+
as the alternative. When `Actionable` is greater than 0, list `Address
|
|
219
|
+
panel findings first (recommended)` first, then `Approve and start build`,
|
|
220
|
+
then `Request changes`. Link the applicable `<track>/review/PLAN-PANEL.md`
|
|
221
|
+
or skipped receipt. If the user
|
|
222
|
+
requests changes, keep `phase: plan`, `status: active`, revise, and re-gate.
|
|
223
|
+
6. On approval in an established repository, record the exact full current
|
|
224
|
+
HEAD before changing approval metadata, then run:
|
|
225
|
+
|
|
226
|
+
```text
|
|
227
|
+
python3 <absolute pipeline_state.py> approve \
|
|
228
|
+
--repo <absolute root> --kind plan \
|
|
229
|
+
--project-dir <.project or .project/next> \
|
|
230
|
+
--expected-head <recorded full HEAD>
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Before approval, the helper validates the task graph and brief paths.
|
|
234
|
+
Pending briefs may reference files supplied by transitive dependencies.
|
|
235
|
+
Landed briefs use their recorded historical base, with no dependency-file
|
|
236
|
+
allowance, so later file changes do not invalidate immutable briefs.
|
|
237
|
+
This applies to plan re-approval too; the dispatch CLI remains HEAD-only
|
|
238
|
+
with no overrides.
|
|
239
|
+
|
|
240
|
+
The helper journals before mutation, changes the track STATE from
|
|
241
|
+
`plan/active` to `plan/done` with event `plan approved`, validates that the
|
|
242
|
+
active worktree is on its bound branch, and checkpoints all pending
|
|
243
|
+
`.project/` artifacts under the top-level allowlist in
|
|
244
|
+
[isolation.PROJECT_ENTRIES](scripts/isolation.py)
|
|
245
|
+
with the canonical plan subject and body. Require its
|
|
246
|
+
typed result to report `schema: gsd-path/state-checkpoint/v1`, `status:
|
|
247
|
+
approved`, `kind: plan`, the requested `project_dir`, `state.status: done`,
|
|
248
|
+
and the returned current commit. Rerun the same command after interruption;
|
|
249
|
+
the matching journal owns recovery.
|
|
250
|
+
|
|
251
|
+
Defer that checkpoint only when the directory is not yet a Git repository
|
|
252
|
+
or `.project/REPOSITORY.md` records `Kind: new-github`. In that case run
|
|
253
|
+
the same `approve` command with `--defer-checkpoint` instead of
|
|
254
|
+
`--expected-head`; the helper journals the `plan approved` transition and
|
|
255
|
+
the build transition commit owns the pending artifacts. Patch-mode
|
|
256
|
+
approvals run `approve --repo <absolute root> --kind plan --patch`
|
|
257
|
+
(event `patch plan approved`) without a plan checkpoint because build's
|
|
258
|
+
patch re-entry commits the artifacts with its `build/active` transition.
|
|
259
|
+
`pipeline_state.py transition` never approves a plan. Confirm approval,
|
|
260
|
+
link PLAN.md again, and state that
|
|
261
|
+
build starts next. Do not add another approval gate. When routed by an
|
|
262
|
+
active `$gsd-path`, return control to that router so its bundled build
|
|
263
|
+
contract starts. When invoked directly, stop and tell the user to explicitly
|
|
264
|
+
invoke `$gsd-path`, which routes to build; do not invoke an explicit-only
|
|
265
|
+
sibling skill yourself.
|
|
266
|
+
|
|
267
|
+
## Ordering rules
|
|
268
|
+
|
|
269
|
+
- Put plan-invalidating assumptions in wave 1.
|
|
270
|
+
- Produce the thinnest runnable end-to-end slice in wave 2.
|
|
271
|
+
- Order later features by dependency, then polish.
|
|
272
|
+
|
|
273
|
+
## Quick mode
|
|
274
|
+
|
|
275
|
+
Legal entry: `define/done` where INTENT.md records `Lane: quick` (transition
|
|
276
|
+
to `plan/active`, logging that research and decide were skipped for the
|
|
277
|
+
quick lane). Quick mode dispatches no planner agent — the orchestrator writes
|
|
278
|
+
the artifacts directly:
|
|
279
|
+
|
|
280
|
+
1. Write `.project/research/SYNTHESIS.md` containing only `## Settled` lines
|
|
281
|
+
citing INTENT.md constraints (and, brownfield, `evidence-codebase.md`)
|
|
282
|
+
plus a minimal `## For the planner` naming the walking skeleton. No
|
|
283
|
+
invented decisions or runner-ups.
|
|
284
|
+
2. Write `.project/plan/PLAN.md` with exactly one wave — `Review depth:
|
|
285
|
+
verify-only` permitted — and at most two deliverable-sized task files
|
|
286
|
+
(project policy),
|
|
287
|
+
honoring every task-contract rule above and `.project/LESSONS.md` when it
|
|
288
|
+
exists. Write `review_panel: off` and `finding_skeptics: off` regardless
|
|
289
|
+
of INTENT.md.
|
|
290
|
+
3. Gate exactly as step 3 above and use the same outcome, Review link, and
|
|
291
|
+
single approval question as normal mode.
|
|
292
|
+
A quick plan that cannot satisfy the gates — more than two tasks, an open
|
|
293
|
+
choice, a cross-wave risk — corrects INTENT.md's `Lane:` to `standard`,
|
|
294
|
+
tells the user why, and returns to the standard pipeline at `define/done`.
|
|
295
|
+
|
|
296
|
+
## Milestone mode
|
|
297
|
+
|
|
298
|
+
Legal entry: `define/done` where INTENT.md records `Lane: milestone`
|
|
299
|
+
(transition to `plan/active`). Program decisions are already settled, so this
|
|
300
|
+
mode first writes the milestone's own synthesis — the archive requires
|
|
301
|
+
`research/SYNTHESIS.md` for every milestone, and it records exactly which
|
|
302
|
+
program decisions the milestone plan was built against:
|
|
303
|
+
|
|
304
|
+
1. Require the program `.project/SYNTHESIS.md`, `.project/CHARTER.md`, and
|
|
305
|
+
`.project/ROADMAP.md` with an entry matching the track STATE's `milestone`;
|
|
306
|
+
it must be `active` normally and `pending` in Lookahead mode.
|
|
307
|
+
2. Write `.project/research/SYNTHESIS.md` containing only `## Settled` lines
|
|
308
|
+
citing the program SYNTHESIS decisions, charter constraints, and the
|
|
309
|
+
resolved roadmap entry's success criteria, plus a minimal `## For the planner`
|
|
310
|
+
naming the milestone's walking skeleton. No invented decisions or
|
|
311
|
+
runner-ups.
|
|
312
|
+
3. Dispatch the planner per the standard contract (the brief includes
|
|
313
|
+
CHARTER.md, ROADMAP.md, and the resolved entry slug), then gate and approve
|
|
314
|
+
exactly as normal mode.
|
|
315
|
+
|
|
316
|
+
## Lookahead mode
|
|
317
|
+
|
|
318
|
+
Entered only when an active router supplies the lookahead track root
|
|
319
|
+
`.project/next/` while the active STATE.md is `build/active` in program
|
|
320
|
+
flow. Milestone-mode rules apply with every per-milestone path rooted at
|
|
321
|
+
`.project/next/`: the state file is `next/STATE.md`, INTENT.md is
|
|
322
|
+
`next/intent/INTENT.md`, the milestone synthesis is
|
|
323
|
+
`next/research/SYNTHESIS.md` (written here, per milestone mode), and the
|
|
324
|
+
outputs are `next/plan/PLAN.md` and `next/tasks/T###-slug.md`. Program
|
|
325
|
+
inputs — CHARTER.md, ROADMAP.md, the top-level SYNTHESIS.md, LESSONS.md —
|
|
326
|
+
are read from their active `.project/` paths. Lookahead-only differences:
|
|
327
|
+
|
|
328
|
+
- Resolve the roadmap entry only from `.project/next/STATE.md`'s `milestone`,
|
|
329
|
+
require that exact entry to remain `pending`, and never substitute the
|
|
330
|
+
building milestone's `active` entry.
|
|
331
|
+
|
|
332
|
+
- Task paths gate against the codebase at current HEAD while the active
|
|
333
|
+
milestone is still building. Where the building milestone's approved
|
|
334
|
+
PLAN.md declares paths the lookahead tasks will touch, name that overlap
|
|
335
|
+
in the task Context; the router's promotion and the build's normal
|
|
336
|
+
plan-defect repair absorb drift.
|
|
337
|
+
- The approval checkpoint commit stages `.project/` in full, which includes
|
|
338
|
+
`next/`; the deferral exceptions are unchanged. Its panel evidence is
|
|
339
|
+
`.project/next/review/PLAN-PANEL.md` or
|
|
340
|
+
`.project/next/review/PLAN-PANEL.skipped.json`, never an active-path copy.
|
|
341
|
+
- Patch mode is never legal in lookahead: there is no running build of the
|
|
342
|
+
lookahead milestone to patch. Route any such request to the active
|
|
343
|
+
milestone's build track.
|
|
344
|
+
- A promoted lookahead plan re-enters this phase as `plan/active` when the
|
|
345
|
+
router's promotion re-validation flags drifted task paths. Re-gate every
|
|
346
|
+
flagged task against current HEAD — repair contracts through documented
|
|
347
|
+
plan-defect repair or one planner redispatch under logical task name
|
|
348
|
+
`plan` — present the delta, and re-run the step 5-6 approval before
|
|
349
|
+
build.
|
|
350
|
+
|
|
351
|
+
Never write an active-path artifact in this mode.
|
|
352
|
+
|
|
353
|
+
## Patch mode
|
|
354
|
+
|
|
355
|
+
Turn verified findings into one appended wave instead of replanning.
|
|
356
|
+
Invoked by `$gsd-path-docs-audit` (remediation rulings) or `$gsd-path-ship final`
|
|
357
|
+
(`not-met` criteria); the invoker names the exact ordered list of one or more
|
|
358
|
+
findings source files and rows.
|
|
359
|
+
|
|
360
|
+
**Preconditions.** An existing approved `.project/plan/PLAN.md`. For a
|
|
361
|
+
final-review patch, require a valid `.project/review/PATCH-FINDINGS.md` and the
|
|
362
|
+
source artifacts named there. For a docs-audit patch, require the selected
|
|
363
|
+
`DOCS-AUDIT.md` rows and their recorded user rulings instead. Each selected
|
|
364
|
+
item must carry evidence. No `.project/plan/PLAN.md` → decline and route to
|
|
365
|
+
the normal pipeline (this includes an archived ship, whose plan moved into
|
|
366
|
+
`.project/archive/`); unruled audit findings → send them back for rulings
|
|
367
|
+
first.
|
|
368
|
+
|
|
369
|
+
**Process.**
|
|
370
|
+
|
|
371
|
+
1. Use `pipeline_state.py transition` with the complete `plan/done` or
|
|
372
|
+
`ship/blocked` state as expected, set `phase: plan`, `status: active`, and
|
|
373
|
+
event `patch plan reopened`. Require returned `plan/active`. A shipped
|
|
374
|
+
milestone cannot reopen because its plan is
|
|
375
|
+
archived; start a new milestone instead.
|
|
376
|
+
2. In final-review patch mode, run `python3 <absolute check_handoffs.py> patch
|
|
377
|
+
--repo <absolute repo root>`. In docs-audit patch mode, use the selected
|
|
378
|
+
`DOCS-AUDIT.md` rows and rulings as the source hand-off. Dispatch the planner
|
|
379
|
+
per the standard contract with deterministic logical task name `plan_patch`,
|
|
380
|
+
adding: the applicable hand-off path, its exact ordered findings, source
|
|
381
|
+
paths and selected rows, the existing PLAN.md and task files, and the instruction to
|
|
382
|
+
append wave W+1 (highest existing wave + 1) without modifying completed
|
|
383
|
+
waves or existing tasks. One task per accepted finding, carrying the
|
|
384
|
+
finding's evidence verbatim in its Context. A finding from a failing
|
|
385
|
+
project Verify, or one that repeats an earlier patch finding's pattern,
|
|
386
|
+
gets a task whose `files` cover every site in the codebase that matches
|
|
387
|
+
the same pattern — the planner searches for them — and whose Verify
|
|
388
|
+
proves the pattern is absent codebase-wide, not only at the reported
|
|
389
|
+
path; a gate that fails on the first error must not cost one patch wave
|
|
390
|
+
per file. `fix-doc` findings are tasks
|
|
391
|
+
too — their Verify re-runs the audit's claim check so the corrected doc
|
|
392
|
+
is proven, not assumed. A patch task that repairs an SC finding lists that
|
|
393
|
+
SCn in its Intent coverage and adds a coverage row; other patch tasks
|
|
394
|
+
write `- None`. Do not edit existing coverage rows or existing task Owns.
|
|
395
|
+
Cross-finding dependencies stay inside the patch
|
|
396
|
+
wave, split into further waves only if file scopes force it.
|
|
397
|
+
3. Gate exactly as in step 3 above, scoped to the new tasks plus one extra
|
|
398
|
+
check: patch tasks must not touch a scope-out veto or contradict a
|
|
399
|
+
SYNTHESIS decision — a finding that requires either goes back to the
|
|
400
|
+
user, not into the wave.
|
|
401
|
+
4. Show the patch wave outcome (finding → task mapping), link the resolved
|
|
402
|
+
absolute PLAN.md and task set, and ask the same two-option approval question.
|
|
403
|
+
On approval, relink the approved plan, run `python3 <absolute
|
|
404
|
+
pipeline_state.py> approve --repo <absolute root> --kind plan --patch`
|
|
405
|
+
(it records `plan/done` with event `patch plan approved` and no
|
|
406
|
+
checkpoint), then use the same provenance rule as normal
|
|
407
|
+
mode: an active router
|
|
408
|
+
resumes its bundled build contract, while a direct invocation stops and
|
|
409
|
+
tells the user to explicitly invoke `$gsd-path` or `$gsd-path-build`. The
|
|
410
|
+
build runs the new wave through the normal dispatch and review-gate loop
|
|
411
|
+
before final review runs again.
|