@opengsd/gsd-path 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +397 -0
- package/DOCS.md +341 -0
- package/FULL.md +475 -0
- package/GUIDE.md +23 -0
- package/HOOKS.md +273 -0
- package/LICENSE +21 -0
- package/MIGRATE.md +100 -0
- package/QUICK.md +146 -0
- package/README.md +280 -0
- package/RUNTIME.md +229 -0
- package/UPDATE.md +196 -0
- package/WORKFLOW.md +683 -0
- package/package.json +80 -0
- package/platforms/claude/dispatch.md +63 -0
- package/platforms/copilot/dispatch.md +61 -0
- package/platforms/cursor/agent.md +17 -0
- package/platforms/cursor/dispatch.md +63 -0
- package/platforms/grok/dispatch.md +61 -0
- package/platforms/kimi/dispatch.md +64 -0
- package/platforms/kiro/dispatch.md +58 -0
- package/platforms/opencode/dispatch.md +62 -0
- package/platforms/qwen/dispatch.md +60 -0
- package/platforms/shared-agents/dispatch.md +131 -0
- package/plugin.json +14 -0
- package/scripts/_common.py +180 -0
- package/scripts/archive_milestone.py +2265 -0
- package/scripts/bootstrap_repository.py +710 -0
- package/scripts/build_state.py +854 -0
- package/scripts/check_docs_audit.py +463 -0
- package/scripts/check_handoffs.py +1855 -0
- package/scripts/check_task_briefs.py +376 -0
- package/scripts/check_update.py +93 -0
- package/scripts/core_hook_gate.py +34 -0
- package/scripts/core_hook_settings.py +119 -0
- package/scripts/detect_project.py +1517 -0
- package/scripts/discussion_records.py +619 -0
- package/scripts/discussion_validate.py +1321 -0
- package/scripts/dispatch_driver.py +1812 -0
- package/scripts/git_guard.py +759 -0
- package/scripts/guard_hook.py +2124 -0
- package/scripts/install.mjs +3239 -0
- package/scripts/install.py +3008 -0
- package/scripts/integration.py +1433 -0
- package/scripts/isolation.py +3538 -0
- package/scripts/lean_verification.py +256 -0
- package/scripts/loop_run.py +837 -0
- package/scripts/migrate_core.py +169 -0
- package/scripts/pipeline_diagnose.py +715 -0
- package/scripts/pipeline_git.py +940 -0
- package/scripts/pipeline_state.py +2291 -0
- package/scripts/pipeline_undo.py +1039 -0
- package/scripts/promote_lookahead.py +415 -0
- package/scripts/review_findings.py +714 -0
- package/scripts/review_panel.py +553 -0
- package/scripts/skill-resources.json +340 -0
- package/scripts/state_checkpoint.py +1039 -0
- package/scripts/state_promote.py +743 -0
- package/scripts/status_runtime.py +122 -0
- package/scripts/sync_skill_resources.py +259 -0
- package/scripts/token_budget.py +146 -0
- package/scripts/wizard.mjs +179 -0
- package/scripts/workflow_run.py +117 -0
- package/skills/gsd-path/BUILD.md +700 -0
- package/skills/gsd-path/DECIDE.md +115 -0
- package/skills/gsd-path/DEFINE.md +297 -0
- package/skills/gsd-path/DOCS-AUDIT.md +190 -0
- package/skills/gsd-path/INSPECT.md +167 -0
- package/skills/gsd-path/PLAN.md +411 -0
- package/skills/gsd-path/RESEARCH.md +159 -0
- package/skills/gsd-path/ROADMAP.md +215 -0
- package/skills/gsd-path/SHIP.md +412 -0
- package/skills/gsd-path/SKILL.md +471 -0
- package/skills/gsd-path/agents/openai.yaml +6 -0
- package/skills/gsd-path/references/codebase-mapper.md +52 -0
- package/skills/gsd-path/references/coder.md +90 -0
- package/skills/gsd-path/references/decider.md +36 -0
- package/skills/gsd-path/references/dispatch.md +131 -0
- package/skills/gsd-path/references/docs-auditor.md +60 -0
- package/skills/gsd-path/references/planner.md +104 -0
- package/skills/gsd-path/references/researcher.md +42 -0
- package/skills/gsd-path/references/reviewer.md +188 -0
- package/skills/gsd-path/references/roadmapper.md +48 -0
- package/skills/gsd-path/scripts/_common.py +180 -0
- package/skills/gsd-path/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path/scripts/bootstrap_repository.py +710 -0
- package/skills/gsd-path/scripts/build_state.py +854 -0
- package/skills/gsd-path/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path/scripts/check_update.py +93 -0
- package/skills/gsd-path/scripts/detect_project.py +1517 -0
- package/skills/gsd-path/scripts/discussion_records.py +619 -0
- package/skills/gsd-path/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path/scripts/dispatch_driver.py +1812 -0
- package/skills/gsd-path/scripts/integration.py +1433 -0
- package/skills/gsd-path/scripts/isolation.py +3538 -0
- package/skills/gsd-path/scripts/lean_verification.py +256 -0
- package/skills/gsd-path/scripts/loop_run.py +837 -0
- package/skills/gsd-path/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path/scripts/promote_lookahead.py +415 -0
- package/skills/gsd-path/scripts/review_findings.py +714 -0
- package/skills/gsd-path/scripts/review_panel.py +553 -0
- package/skills/gsd-path/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path/scripts/state_promote.py +743 -0
- package/skills/gsd-path/scripts/token_budget.py +146 -0
- package/skills/gsd-path/scripts/workflow_run.py +117 -0
- package/skills/gsd-path/templates/answers.md +29 -0
- package/skills/gsd-path/templates/archive-manifest.md +37 -0
- package/skills/gsd-path/templates/charter.md +50 -0
- package/skills/gsd-path/templates/codebase.md +46 -0
- package/skills/gsd-path/templates/dialogue.md +21 -0
- package/skills/gsd-path/templates/docs-audit.md +69 -0
- package/skills/gsd-path/templates/evidence.md +24 -0
- package/skills/gsd-path/templates/final-review.md +27 -0
- package/skills/gsd-path/templates/gap-review.md +20 -0
- package/skills/gsd-path/templates/intent.md +98 -0
- package/skills/gsd-path/templates/loop.md +59 -0
- package/skills/gsd-path/templates/patch-findings.md +16 -0
- package/skills/gsd-path/templates/plan-panel.md +25 -0
- package/skills/gsd-path/templates/plan.md +89 -0
- package/skills/gsd-path/templates/repository.md +16 -0
- package/skills/gsd-path/templates/research-handoff.md +25 -0
- package/skills/gsd-path/templates/roadmap.md +38 -0
- package/skills/gsd-path/templates/skeptic.md +36 -0
- package/skills/gsd-path/templates/state.md +27 -0
- package/skills/gsd-path/templates/synthesis.md +36 -0
- package/skills/gsd-path/templates/task.md +74 -0
- package/skills/gsd-path/templates/wave-panel.md +25 -0
- package/skills/gsd-path/templates/wave-review.md +64 -0
- package/skills/gsd-path-build/SKILL.md +700 -0
- package/skills/gsd-path-build/agents/openai.yaml +6 -0
- package/skills/gsd-path-build/references/coder.md +90 -0
- package/skills/gsd-path-build/references/dispatch.md +131 -0
- package/skills/gsd-path-build/references/reviewer.md +188 -0
- package/skills/gsd-path-build/scripts/_common.py +180 -0
- package/skills/gsd-path-build/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-build/scripts/build_state.py +854 -0
- package/skills/gsd-path-build/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-build/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-build/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-build/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-build/scripts/dispatch_driver.py +1812 -0
- package/skills/gsd-path-build/scripts/integration.py +1433 -0
- package/skills/gsd-path-build/scripts/isolation.py +3538 -0
- package/skills/gsd-path-build/scripts/loop_run.py +837 -0
- package/skills/gsd-path-build/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-build/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-build/scripts/review_findings.py +714 -0
- package/skills/gsd-path-build/scripts/review_panel.py +553 -0
- package/skills/gsd-path-build/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-build/scripts/state_promote.py +743 -0
- package/skills/gsd-path-build/scripts/token_budget.py +146 -0
- package/skills/gsd-path-build/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-build/templates/skeptic.md +36 -0
- package/skills/gsd-path-build/templates/task.md +74 -0
- package/skills/gsd-path-build/templates/wave-panel.md +25 -0
- package/skills/gsd-path-build/templates/wave-review.md +64 -0
- package/skills/gsd-path-decide/SKILL.md +115 -0
- package/skills/gsd-path-decide/agents/openai.yaml +6 -0
- package/skills/gsd-path-decide/references/decider.md +36 -0
- package/skills/gsd-path-decide/references/dispatch.md +131 -0
- package/skills/gsd-path-decide/scripts/_common.py +180 -0
- package/skills/gsd-path-decide/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-decide/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-decide/scripts/isolation.py +3538 -0
- package/skills/gsd-path-decide/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-decide/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-decide/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-decide/scripts/state_promote.py +743 -0
- package/skills/gsd-path-decide/templates/synthesis.md +36 -0
- package/skills/gsd-path-define/SKILL.md +297 -0
- package/skills/gsd-path-define/agents/openai.yaml +6 -0
- package/skills/gsd-path-define/scripts/_common.py +180 -0
- package/skills/gsd-path-define/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-define/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-define/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-define/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-define/scripts/isolation.py +3538 -0
- package/skills/gsd-path-define/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-define/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-define/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-define/scripts/state_promote.py +743 -0
- package/skills/gsd-path-define/templates/charter.md +50 -0
- package/skills/gsd-path-define/templates/intent.md +98 -0
- package/skills/gsd-path-define/templates/state.md +27 -0
- package/skills/gsd-path-discuss/SKILL.md +162 -0
- package/skills/gsd-path-discuss/agents/openai.yaml +6 -0
- package/skills/gsd-path-discuss/scripts/_common.py +180 -0
- package/skills/gsd-path-discuss/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-discuss/templates/answers.md +29 -0
- package/skills/gsd-path-discuss/templates/dialogue.md +21 -0
- package/skills/gsd-path-docs-audit/SKILL.md +190 -0
- package/skills/gsd-path-docs-audit/agents/openai.yaml +6 -0
- package/skills/gsd-path-docs-audit/references/dispatch.md +131 -0
- package/skills/gsd-path-docs-audit/references/docs-auditor.md +60 -0
- package/skills/gsd-path-docs-audit/scripts/_common.py +180 -0
- package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-docs-audit/scripts/isolation.py +3538 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +743 -0
- package/skills/gsd-path-docs-audit/templates/docs-audit.md +69 -0
- package/skills/gsd-path-forensics/SKILL.md +39 -0
- package/skills/gsd-path-forensics/agents/openai.yaml +6 -0
- package/skills/gsd-path-forensics/scripts/_common.py +180 -0
- package/skills/gsd-path-forensics/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +715 -0
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +1039 -0
- package/skills/gsd-path-inspect/SKILL.md +167 -0
- package/skills/gsd-path-inspect/agents/openai.yaml +6 -0
- package/skills/gsd-path-inspect/references/codebase-mapper.md +52 -0
- package/skills/gsd-path-inspect/references/dispatch.md +131 -0
- package/skills/gsd-path-inspect/references/docs-auditor.md +60 -0
- package/skills/gsd-path-inspect/scripts/_common.py +180 -0
- package/skills/gsd-path-inspect/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-inspect/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-inspect/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-inspect/scripts/isolation.py +3538 -0
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-inspect/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-inspect/scripts/state_promote.py +743 -0
- package/skills/gsd-path-inspect/templates/codebase.md +46 -0
- package/skills/gsd-path-inspect/templates/docs-audit.md +69 -0
- package/skills/gsd-path-inspect/templates/state.md +27 -0
- package/skills/gsd-path-loop/SKILL.md +98 -0
- package/skills/gsd-path-loop/agents/openai.yaml +6 -0
- package/skills/gsd-path-loop/examples/ci-repair.LOOP.md +61 -0
- package/skills/gsd-path-loop/scripts/_common.py +180 -0
- package/skills/gsd-path-loop/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-loop/scripts/loop_run.py +837 -0
- package/skills/gsd-path-loop/templates/loop.md +59 -0
- package/skills/gsd-path-migrate/SKILL.md +134 -0
- package/skills/gsd-path-migrate/agents/openai.yaml +6 -0
- package/skills/gsd-path-migrate/scripts/core_hook_gate.py +34 -0
- package/skills/gsd-path-migrate/scripts/core_hook_settings.py +119 -0
- package/skills/gsd-path-migrate/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-migrate/scripts/migrate_core.py +169 -0
- package/skills/gsd-path-plan/SKILL.md +411 -0
- package/skills/gsd-path-plan/agents/openai.yaml +6 -0
- package/skills/gsd-path-plan/references/dispatch.md +131 -0
- package/skills/gsd-path-plan/references/planner.md +104 -0
- package/skills/gsd-path-plan/scripts/_common.py +180 -0
- package/skills/gsd-path-plan/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-plan/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-plan/scripts/isolation.py +3538 -0
- package/skills/gsd-path-plan/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-plan/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-plan/scripts/review_panel.py +553 -0
- package/skills/gsd-path-plan/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-plan/scripts/state_promote.py +743 -0
- package/skills/gsd-path-plan/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-plan/templates/patch-findings.md +16 -0
- package/skills/gsd-path-plan/templates/plan-panel.md +25 -0
- package/skills/gsd-path-plan/templates/plan.md +89 -0
- package/skills/gsd-path-plan/templates/task.md +74 -0
- package/skills/gsd-path-research/SKILL.md +159 -0
- package/skills/gsd-path-research/agents/openai.yaml +6 -0
- package/skills/gsd-path-research/references/dispatch.md +131 -0
- package/skills/gsd-path-research/references/researcher.md +42 -0
- package/skills/gsd-path-research/scripts/_common.py +180 -0
- package/skills/gsd-path-research/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-research/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-research/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-research/scripts/isolation.py +3538 -0
- package/skills/gsd-path-research/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-research/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-research/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-research/scripts/state_promote.py +743 -0
- package/skills/gsd-path-research/templates/evidence.md +24 -0
- package/skills/gsd-path-research/templates/research-handoff.md +25 -0
- package/skills/gsd-path-roadmap/SKILL.md +215 -0
- package/skills/gsd-path-roadmap/agents/openai.yaml +6 -0
- package/skills/gsd-path-roadmap/references/dispatch.md +131 -0
- package/skills/gsd-path-roadmap/references/roadmapper.md +48 -0
- package/skills/gsd-path-roadmap/scripts/_common.py +180 -0
- package/skills/gsd-path-roadmap/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-roadmap/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-roadmap/scripts/integration.py +1433 -0
- package/skills/gsd-path-roadmap/scripts/isolation.py +3538 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +415 -0
- package/skills/gsd-path-roadmap/scripts/review_panel.py +553 -0
- package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-roadmap/scripts/state_promote.py +743 -0
- package/skills/gsd-path-roadmap/templates/roadmap.md +38 -0
- package/skills/gsd-path-ship/SKILL.md +412 -0
- package/skills/gsd-path-ship/agents/openai.yaml +6 -0
- package/skills/gsd-path-ship/references/dispatch.md +131 -0
- package/skills/gsd-path-ship/references/reviewer.md +188 -0
- package/skills/gsd-path-ship/scripts/_common.py +180 -0
- package/skills/gsd-path-ship/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-ship/scripts/build_state.py +854 -0
- package/skills/gsd-path-ship/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-ship/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-ship/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-ship/scripts/integration.py +1433 -0
- package/skills/gsd-path-ship/scripts/isolation.py +3538 -0
- package/skills/gsd-path-ship/scripts/lean_verification.py +256 -0
- package/skills/gsd-path-ship/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-ship/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-ship/scripts/review_panel.py +553 -0
- package/skills/gsd-path-ship/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-ship/scripts/state_promote.py +743 -0
- package/skills/gsd-path-ship/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-ship/templates/archive-manifest.md +37 -0
- package/skills/gsd-path-ship/templates/final-review.md +27 -0
- package/skills/gsd-path-ship/templates/gap-review.md +20 -0
- package/skills/gsd-path-ship/templates/patch-findings.md +16 -0
- package/skills/gsd-path-ship/templates/wave-review.md +64 -0
- package/skills/gsd-path-undo/SKILL.md +45 -0
- package/skills/gsd-path-undo/agents/openai.yaml +6 -0
- package/skills/gsd-path-undo/scripts/_common.py +180 -0
- package/skills/gsd-path-undo/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +1039 -0
- package/skills/path/BUILD.md +700 -0
- package/skills/path/DECIDE.md +115 -0
- package/skills/path/DEFINE.md +297 -0
- package/skills/path/DOCS-AUDIT.md +190 -0
- package/skills/path/INSPECT.md +167 -0
- package/skills/path/PLAN.md +411 -0
- package/skills/path/RESEARCH.md +159 -0
- package/skills/path/ROADMAP.md +215 -0
- package/skills/path/SHIP.md +412 -0
- package/skills/path/SKILL.md +471 -0
- package/skills/path/agents/openai.yaml +6 -0
- package/skills/path/references/codebase-mapper.md +52 -0
- package/skills/path/references/coder.md +90 -0
- package/skills/path/references/decider.md +36 -0
- package/skills/path/references/dispatch.md +131 -0
- package/skills/path/references/docs-auditor.md +60 -0
- package/skills/path/references/planner.md +104 -0
- package/skills/path/references/researcher.md +42 -0
- package/skills/path/references/reviewer.md +188 -0
- package/skills/path/references/roadmapper.md +48 -0
- package/skills/path/scripts/_common.py +180 -0
- package/skills/path/scripts/archive_milestone.py +2265 -0
- package/skills/path/scripts/bootstrap_repository.py +710 -0
- package/skills/path/scripts/build_state.py +854 -0
- package/skills/path/scripts/check_docs_audit.py +463 -0
- package/skills/path/scripts/check_handoffs.py +1855 -0
- package/skills/path/scripts/check_task_briefs.py +376 -0
- package/skills/path/scripts/check_update.py +93 -0
- package/skills/path/scripts/detect_project.py +1517 -0
- package/skills/path/scripts/discussion_records.py +619 -0
- package/skills/path/scripts/discussion_validate.py +1321 -0
- package/skills/path/scripts/dispatch_driver.py +1812 -0
- package/skills/path/scripts/integration.py +1433 -0
- package/skills/path/scripts/isolation.py +3538 -0
- package/skills/path/scripts/lean_verification.py +256 -0
- package/skills/path/scripts/loop_run.py +837 -0
- package/skills/path/scripts/pipeline_git.py +940 -0
- package/skills/path/scripts/pipeline_state.py +2291 -0
- package/skills/path/scripts/promote_lookahead.py +415 -0
- package/skills/path/scripts/review_findings.py +714 -0
- package/skills/path/scripts/review_panel.py +553 -0
- package/skills/path/scripts/state_checkpoint.py +1039 -0
- package/skills/path/scripts/state_promote.py +743 -0
- package/skills/path/scripts/token_budget.py +146 -0
- package/skills/path/scripts/workflow_run.py +117 -0
- package/skills/path/templates/answers.md +29 -0
- package/skills/path/templates/archive-manifest.md +37 -0
- package/skills/path/templates/charter.md +50 -0
- package/skills/path/templates/codebase.md +46 -0
- package/skills/path/templates/dialogue.md +21 -0
- package/skills/path/templates/docs-audit.md +69 -0
- package/skills/path/templates/evidence.md +24 -0
- package/skills/path/templates/final-review.md +27 -0
- package/skills/path/templates/gap-review.md +20 -0
- package/skills/path/templates/intent.md +98 -0
- package/skills/path/templates/loop.md +59 -0
- package/skills/path/templates/patch-findings.md +16 -0
- package/skills/path/templates/plan-panel.md +25 -0
- package/skills/path/templates/plan.md +89 -0
- package/skills/path/templates/repository.md +16 -0
- package/skills/path/templates/research-handoff.md +25 -0
- package/skills/path/templates/roadmap.md +38 -0
- package/skills/path/templates/skeptic.md +36 -0
- package/skills/path/templates/state.md +27 -0
- package/skills/path/templates/synthesis.md +36 -0
- package/skills/path/templates/task.md +74 -0
- package/skills/path/templates/wave-panel.md +25 -0
- package/skills/path/templates/wave-review.md +64 -0
package/README.md
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# GSD Path
|
|
2
|
+
|
|
3
|
+
A disk-backed project pipeline for AI coding agents. It turns a raw idea into
|
|
4
|
+
shipped code through gated phases — inspect, define, research, decide,
|
|
5
|
+
roadmap, plan, build, and ship — with every handoff written to `.project/`
|
|
6
|
+
so any session can resume from disk alone. A single milestone or a full
|
|
7
|
+
multi-milestone program: program flow adds a charter and roadmap above the
|
|
8
|
+
milestone loop. While a milestone builds, the next one can be planned in
|
|
9
|
+
parallel under `.project/next/` (lookahead); a building milestone can also be
|
|
10
|
+
abandoned on an explicit ruling, archiving its partial work for a re-slice.
|
|
11
|
+
|
|
12
|
+
**Supported hosts:** Codex, Claude Code, Grok, OpenCode, GitHub Copilot CLI,
|
|
13
|
+
Qwen Code, Antigravity CLI, Cursor, Zed, Kiro, and Kimi Code.
|
|
14
|
+
Support means the installer and dispatch contract exist. See the
|
|
15
|
+
[host trust matrix](https://github.com/open-gsd/gsd-path/blob/main/docs/trust-validation/HOST-MATRIX.md) for live milestone
|
|
16
|
+
proof and each host's guard tier.
|
|
17
|
+
|
|
18
|
+
## Documentation
|
|
19
|
+
|
|
20
|
+
**Start at [DOCS.md](DOCS.md)** — install, use, understand, and update in one hub.
|
|
21
|
+
|
|
22
|
+
| Guide | Use when |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| **[DOCS.md](DOCS.md)** | Full map + FAQ (recommended) |
|
|
25
|
+
| **[QUICK.md](QUICK.md)** | First run checklist (~5 min) |
|
|
26
|
+
| **[FULL.md](FULL.md)** | Complete install-to-ship walkthrough |
|
|
27
|
+
| **[UPDATE.md](UPDATE.md)** | Refresh skills, hooks, or contracts |
|
|
28
|
+
| [WORKFLOW.md](WORKFLOW.md) | Phase-by-phase agent SOP |
|
|
29
|
+
| [HOOKS.md](HOOKS.md) | Optional archive/git guard hooks |
|
|
30
|
+
| [GUIDE.md](GUIDE.md) | Pointer to the guides above |
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# New user
|
|
34
|
+
node scripts/install.mjs --all --dry-run && node scripts/install.mjs --all
|
|
35
|
+
cd your-repo && node scripts/install.mjs --all --project "$(pwd)"
|
|
36
|
+
# In agent: invoke the router (see Install summary below)
|
|
37
|
+
|
|
38
|
+
# Already installed
|
|
39
|
+
node scripts/install.mjs --update
|
|
40
|
+
cd your-repo && node scripts/install.mjs --update --project "$(pwd)" # also refresh .gsd-path/
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Interactive: `npx @opengsd/gsd-path` with no flags opens the OpenGSD wizard (pick hosts, scope, contracts, hooks; dry-run first)
|
|
44
|
+
|
|
45
|
+
npm (once published to npm): `npx @opengsd/gsd-path --all` · Help: `node scripts/install.mjs --help`
|
|
46
|
+
|
|
47
|
+
## Skills
|
|
48
|
+
|
|
49
|
+
Canonical explicit-only skills are installed.
|
|
50
|
+
Invoke the **router** by default; use phase skills for one step only, or use a
|
|
51
|
+
sidecar to discuss, diagnose, or undo without advancing.
|
|
52
|
+
|
|
53
|
+
| Skill | Role |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| `path` | Router short name — same as `gsd-path` (`/path`, `$path`) |
|
|
56
|
+
| `gsd-path` | Router — detects state, runs next phase (`status` reports without advancing) |
|
|
57
|
+
| `gsd-path-inspect` | Phase 0 — brownfield codebase map + doc audit |
|
|
58
|
+
| `gsd-path-define` | Phase 1 — intent definition |
|
|
59
|
+
| `gsd-path-research` | Phase 2 — parallel evidence researchers |
|
|
60
|
+
| `gsd-path-decide` | Phase 3 — evidence → decisions |
|
|
61
|
+
| `gsd-path-roadmap` | Phase 3.5 — program: slice charter into milestone roadmap |
|
|
62
|
+
| `gsd-path-plan` | Phase 4 — waves and task contracts |
|
|
63
|
+
| `gsd-path-build` | Phase 5 — parallel coders + serial task landing |
|
|
64
|
+
| `gsd-path-ship` | Phase 6 — verify, approve, archive, and ship |
|
|
65
|
+
| `gsd-path-discuss` | Any-phase discussion with durable dialogue and answers |
|
|
66
|
+
| `gsd-path-docs-audit` | Standalone doc-vs-code drift check |
|
|
67
|
+
| `gsd-path-loop` | Standalone bounded loop runner driven by a LOOP.md spec |
|
|
68
|
+
| `gsd-path-forensics` | Read-only stuck-pipeline diagnosis |
|
|
69
|
+
| `gsd-path-migrate` | [Import GSD Core work and review hook coexistence](MIGRATE.md) |
|
|
70
|
+
| `gsd-path-undo` | Helper-owned undo of unpublished pipeline work |
|
|
71
|
+
|
|
72
|
+
See [invocation by host](#install-summary). Phase names keep the `gsd-path-` prefix.
|
|
73
|
+
|
|
74
|
+
## The flow
|
|
75
|
+
|
|
76
|
+
```mermaid
|
|
77
|
+
flowchart TD
|
|
78
|
+
R{"gsd-path router"} --> I["0 · inspect (brownfield)"]
|
|
79
|
+
R --> D["1 · define → INTENT.md / CHARTER.md"]
|
|
80
|
+
I --> D
|
|
81
|
+
D -->|"standard / program lane"| RE["2 · research → evidence files"]
|
|
82
|
+
D -->|"quick lane"| P
|
|
83
|
+
RE --> DE["3 · decide → SYNTHESIS.md"]
|
|
84
|
+
DE -->|"program scope"| RM["3.5 · roadmap → ROADMAP.md"]
|
|
85
|
+
RM -->|"approved → checkpoint commit"| DM["define (milestone mode)"]
|
|
86
|
+
DM --> MQ{"roadmap entry has open questions?"}
|
|
87
|
+
MQ -->|"yes"| RE
|
|
88
|
+
MQ -->|"no"| P["4 · plan → PLAN.md + task contracts"]
|
|
89
|
+
DE -->|"milestone / single-project scope"| P
|
|
90
|
+
P -->|"approved → checkpoint commit"| B["5 · build"]
|
|
91
|
+
B --> W{"wave loop"}
|
|
92
|
+
W -->|"briefs linted at base SHA"| C["parallel coders, isolated worktrees"]
|
|
93
|
+
C -->|"streaming: dependents dispatch as deps land"| V{"wave review"}
|
|
94
|
+
V -->|"full — or deep: contract + adversarial lenses"| F{"verdict"}
|
|
95
|
+
F -->|"blocked → criterion triage"| W
|
|
96
|
+
F -->|"pass → next wave"| W
|
|
97
|
+
F -->|"all waves pass"| S["6 · ship — final review"]
|
|
98
|
+
C -.->|"NEEDS-ORCHESTRATOR question"| O["orchestrator answers from artifacts, or asks you"]
|
|
99
|
+
O -.-> C
|
|
100
|
+
B -.->|"lookahead: next milestone in .project/next/"| MI["inspect current code + docs"]
|
|
101
|
+
MI --> MB["define (milestone + brownfield mode)"]
|
|
102
|
+
MB --> MQ
|
|
103
|
+
B -->|"explicit ruling: abandon milestone"| AB["archive partial work → re-slice roadmap"]
|
|
104
|
+
AB --> RM
|
|
105
|
+
S -->|"approved → archive + ship commit"| MG["direct merge or user-merged PR + tag"]
|
|
106
|
+
MG -->|"validate-integrated passes"| A["shipped"]
|
|
107
|
+
A -->|"another program milestone → bind next gsd-path/M00N"| MI
|
|
108
|
+
A -->|"single-milestone restart → bind next gsd-path/M00N"| I
|
|
109
|
+
A -->|"program complete"| PC["stop"]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
For an existing Git repository, initialization writes STATE.md first. Before
|
|
113
|
+
entering inspect or define, the router fetches `origin/main`, creates or adopts
|
|
114
|
+
`gsd-path/M001` there, and records the binding in state. Build only uses that
|
|
115
|
+
recorded milestone branch; it never creates or selects one. See the
|
|
116
|
+
[phase workflow](WORKFLOW.md#phase-0--inspect-gsd-path-inspect).
|
|
117
|
+
|
|
118
|
+
At any non-shipped phase, `/gsd-path-discuss` (or `$gsd-path-discuss` in
|
|
119
|
+
Codex) records the conversation in `.project/discuss/` without advancing or
|
|
120
|
+
editing the phase handoff. Required decisions carry a named owner and remain
|
|
121
|
+
pending until that phase records how it applied them; the router will not
|
|
122
|
+
advance past an unresolved required follow-up.
|
|
123
|
+
|
|
124
|
+
**Build, under the hood:**
|
|
125
|
+
|
|
126
|
+
- Task briefs are linted against the real base tree (`check_task_briefs.py`)
|
|
127
|
+
before any agent is dispatched, and every coder runs a preflight — paths
|
|
128
|
+
exist or are declared, interface contracts match siblings verbatim — so a
|
|
129
|
+
wrong map dies in the first minute.
|
|
130
|
+
- Task isolation and landing go through `isolation.py`: named branches only,
|
|
131
|
+
never a detached HEAD. A serial dispatch round works on the bound branch;
|
|
132
|
+
a parallel round gets `gsd-path-task/<id>`.
|
|
133
|
+
- Dispatch streams: a dependent task starts the moment its dependencies
|
|
134
|
+
land, never idling behind unrelated in-flight tasks. Task landing
|
|
135
|
+
stays serial and every Verify reruns in the isolated worktree.
|
|
136
|
+
- Wave review depth is `full`, `verify-only`, or `deep`; findings carry
|
|
137
|
+
forward by criterion across fix cycles. Each depth's writer and evidence
|
|
138
|
+
rules live in the canonical [build contract](skills/gsd-path-build/SKILL.md).
|
|
139
|
+
Optional skeptic triage for blocked `deep` reviews is defined in
|
|
140
|
+
[WORKFLOW.md](WORKFLOW.md#phase-4--plan-gsd-path-plan).
|
|
141
|
+
- A coder with an ambiguous contract asks `NEEDS-ORCHESTRATOR` instead of
|
|
142
|
+
guessing; on hosts with a blocking ask/reply channel the worker stays
|
|
143
|
+
alive for the answer.
|
|
144
|
+
- Roadmap and plan approvals are checkpoint commits, so planning work never
|
|
145
|
+
sits uncommitted until build.
|
|
146
|
+
|
|
147
|
+
Invoke the router explicitly to start or advance a phase. Once a project has an
|
|
148
|
+
owned `.project/STATE.md`, a plain prompt such as “continue the project” answers
|
|
149
|
+
read-only with the current handoff and names the next skill; it never advances
|
|
150
|
+
a phase or edits state. Phase skills stop at their handoff; invoke the router
|
|
151
|
+
again to continue.
|
|
152
|
+
The discussion sidecar is the exception: it can be invoked at any non-shipped
|
|
153
|
+
phase and returns only a durable conversation record.
|
|
154
|
+
|
|
155
|
+
The router classifies **brownfield**, **greenfield**, owned, and orphaned
|
|
156
|
+
project state before routing; see [DOCS.md](DOCS.md#faq). Brownfield →
|
|
157
|
+
inspect then define. Greenfield → define. It does not infer the verdict from
|
|
158
|
+
a directory listing.
|
|
159
|
+
**Quick lane** (tiny scope) may skip research/decide — see [FULL.md](FULL.md).
|
|
160
|
+
|
|
161
|
+
For an explicit new-GitHub request, the router previews the owner, visibility,
|
|
162
|
+
default checkout, `gsd-path/M001` branch, and sibling linked worktree. A
|
|
163
|
+
journaled helper performs the approved creation and safely resumes a matching
|
|
164
|
+
partial remote/clone/worktree transaction; the default checkout stays clean.
|
|
165
|
+
|
|
166
|
+
## Handoff contract
|
|
167
|
+
|
|
168
|
+
```text
|
|
169
|
+
.project/
|
|
170
|
+
STATE.md phase, branch, archive transaction
|
|
171
|
+
REPOSITORY.md persistent new-GitHub checkout/worktree binding
|
|
172
|
+
CHARTER.md program scope and vetoes; never archives
|
|
173
|
+
ROADMAP.md milestone slicing; never archives
|
|
174
|
+
SYNTHESIS.md program decisions (top level); never archives
|
|
175
|
+
next/ lookahead track: next milestone's artifacts during build
|
|
176
|
+
intent/INTENT.md goal, vetoes, constraints, surfaces
|
|
177
|
+
research/
|
|
178
|
+
evidence-codebase.md brownfield ground truth (inspect)
|
|
179
|
+
DOCS-AUDIT.md doc verdicts + remediation queue
|
|
180
|
+
RESEARCH.md dispatch manifest (dimensions researched/skipped)
|
|
181
|
+
evidence-domain.md domain evidence
|
|
182
|
+
evidence-stack.md stack evidence
|
|
183
|
+
evidence-pitfalls.md pitfalls evidence
|
|
184
|
+
evidence-similar.md similar projects evidence
|
|
185
|
+
SYNTHESIS.md gated decisions
|
|
186
|
+
plan/PLAN.md waves, dependencies, surface contract, verify
|
|
187
|
+
tasks/T###-slug.md task contract: files, interface, criteria, base SHA, status
|
|
188
|
+
review/ review evidence; see WORKFLOW.md#handoff-contract
|
|
189
|
+
discuss/DIALOGUE.md any-phase dialogue transcript
|
|
190
|
+
discuss/ANSWERS.md durable discussion answers and decisions
|
|
191
|
+
LESSONS.md optional carried-forward planning lessons
|
|
192
|
+
archive/<NNN>-<slug>/ shipped milestones (read-only after ship)
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Shipping moves milestone artifacts into `archive/` with a MANIFEST. It then
|
|
196
|
+
either merges the milestone's `gsd-path/M00N` branch into `main` directly or
|
|
197
|
+
opens/reuses a GitHub PR and waits for its user-controlled merge. Path reports
|
|
198
|
+
shipped only after a two-parent merge and the milestone tag validate. Before
|
|
199
|
+
any next-milestone files change, the router binds
|
|
200
|
+
a new `gsd-path/M00N` at the updated `origin/main`. `STATE.md`, `REPOSITORY.md`,
|
|
201
|
+
`LESSONS.md`, `next/`, and the program artifacts (`CHARTER.md`, `ROADMAP.md`,
|
|
202
|
+
top-level `SYNTHESIS.md`) remain active project metadata.
|
|
203
|
+
|
|
204
|
+
## Install (summary)
|
|
205
|
+
|
|
206
|
+
Node 18.17+. Project installs also require Python 3.9+. Validates package,
|
|
207
|
+
backs up existing skills, and rolls back on failure.
|
|
208
|
+
**Always** `--dry-run` first when unsure.
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
node scripts/install.mjs --all --dry-run
|
|
212
|
+
node scripts/install.mjs --all
|
|
213
|
+
node scripts/install.mjs --claude --cursor
|
|
214
|
+
node scripts/install.mjs --all --local
|
|
215
|
+
node scripts/install.mjs --all --project /path/to/project
|
|
216
|
+
node scripts/install.mjs --update
|
|
217
|
+
node scripts/install.mjs --all --update --project /path/to/project # refresh .gsd-path/; keeps contracts
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
| Flag | User skills root | Invoke |
|
|
221
|
+
| --- | --- | --- |
|
|
222
|
+
| `--codex`, `--zed` | `~/.agents/skills` | Codex: `$path` or `$gsd-path`; Zed: `/path` or `/gsd-path` |
|
|
223
|
+
| `--claude` | `~/.claude/skills` | `/path` or `/gsd-path` |
|
|
224
|
+
| `--cursor` | `~/.cursor/skills` (+ subagent) | `/path` or `/gsd-path` |
|
|
225
|
+
| `--grok` | `~/.grok/skills` | `/path` or `/gsd-path` |
|
|
226
|
+
| `--opencode` | OpenCode config `skills/` | `/path` or `/gsd-path` (OpenCode v2 host) |
|
|
227
|
+
| `--copilot` | `~/.copilot/skills` | `/path` or `/gsd-path` |
|
|
228
|
+
| `--qwen` | `~/.qwen/skills` | `/path` or `/gsd-path` |
|
|
229
|
+
| `--antigravity` | Antigravity skills dir | `/path` or `/gsd-path` |
|
|
230
|
+
| `--kiro` | `~/.kiro/skills` | `/path` or `/gsd-path` |
|
|
231
|
+
| `--kimi` | `~/.kimi-code/skills` | `/path` or `/gsd-path` |
|
|
232
|
+
|
|
233
|
+
OpenCode stable: ask to load and use the `gsd-path` skill.
|
|
234
|
+
`gsd-path` remains the canonical router name; `path` is its short menu alias.
|
|
235
|
+
For a single phase, use `$gsd-path-plan` in Codex or `/gsd-path-plan` on slash hosts.
|
|
236
|
+
|
|
237
|
+
`scripts/install.py` — Python install, including `--local` and `--update`.
|
|
238
|
+
The Node CLI remains the interactive and npm entry point. See [FULL.md](FULL.md) and
|
|
239
|
+
[UPDATE.md](UPDATE.md) for `--hooks`, `--hooks-refresh`, `--local`, and host notes.
|
|
240
|
+
|
|
241
|
+
Optional **`--hooks`** with `--project` — [HOOKS.md](HOOKS.md).
|
|
242
|
+
|
|
243
|
+
Something off? `node scripts/install.mjs --doctor [--project PATH]` — read-only
|
|
244
|
+
health check of installs, guard hooks, and pipeline state.
|
|
245
|
+
|
|
246
|
+
## Agent execution
|
|
247
|
+
|
|
248
|
+
Define and build orchestrators run in the main task. Researchers, deciders,
|
|
249
|
+
planners, coders, and reviewers delegate via host-specific adapters. See
|
|
250
|
+
[FULL.md — Agent execution](FULL.md#agent-execution-how-work-is-delegated) for
|
|
251
|
+
the authoritative host API table and delegation rules.
|
|
252
|
+
|
|
253
|
+
`platforms/` is installer-only — not user-invoked skills.
|
|
254
|
+
|
|
255
|
+
## Testing
|
|
256
|
+
|
|
257
|
+
Contributors and CI use one offline gate. See **[TEST_ENVIRONMENT.md](TEST_ENVIRONMENT.md)** for prerequisites, tiers, fixtures, and troubleshooting.
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
make install && make verify # same path as GitHub Actions CI
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Repository layout
|
|
264
|
+
|
|
265
|
+
| Path | Purpose |
|
|
266
|
+
| --- | --- |
|
|
267
|
+
| `DOCS.md` | Documentation hub |
|
|
268
|
+
| `QUICK.md` | Quick start |
|
|
269
|
+
| `FULL.md` | Full guide |
|
|
270
|
+
| `UPDATE.md` | Updating |
|
|
271
|
+
| `HOOKS.md` | Guard hooks |
|
|
272
|
+
| `skills/` | Canonical skills and generated aliases declared in [the resource manifest](scripts/skill-resources.json) |
|
|
273
|
+
| `platforms/` | Host dispatch adapters |
|
|
274
|
+
| `scripts/install.mjs` | Installer (npm `gsd-path` bin) |
|
|
275
|
+
| `scripts/install.py` | Python installer |
|
|
276
|
+
| `AGENTS.md` | Operating rules (installed to projects) |
|
|
277
|
+
| `WORKFLOW.md` | Phase SOP (installed to projects) |
|
|
278
|
+
| `TEST_ENVIRONMENT.md` | Local/CI test setup and tiers |
|
|
279
|
+
| `fixtures/` | Sample `.project/` pipeline for manual runs |
|
|
280
|
+
| `LICENSE` | MIT |
|
package/RUNTIME.md
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Workflow runner and observed token budgets
|
|
2
|
+
|
|
3
|
+
The runner assembles arguments for existing canonical helpers. It returns a JSON
|
|
4
|
+
receipt containing each command, exit code, stdout, stderr, and parsed result.
|
|
5
|
+
`build-evidence` also appends a step with `script` and `evidence` fields naming
|
|
6
|
+
the written proof file.
|
|
7
|
+
A failed helper stops the sequence before any later gate or checkpoint. Preserve
|
|
8
|
+
that receipt with the phase evidence; a blocked receipt routes to forensics.
|
|
9
|
+
It does not dispatch models or supply owner approvals.
|
|
10
|
+
|
|
11
|
+
## Workflow commands
|
|
12
|
+
|
|
13
|
+
Use the absolute `workflow_run.py` path in the active skill's scripts directory.
|
|
14
|
+
All commands require `--repo <absolute repository root>`.
|
|
15
|
+
|
|
16
|
+
| Command | Required input | Result |
|
|
17
|
+
| --- | --- | --- |
|
|
18
|
+
| `route` | Optional `--project-dir .project/next` | Canonical route; follow its action even when it blocks or requests recovery. |
|
|
19
|
+
| `gate-plan` | Git HEAD; optional lookahead project directory | Pending discussion, intent coverage, brief paths, and panel configuration checked in order. |
|
|
20
|
+
| `approve-plan` | Owner approval and `--expected-head <reviewed full SHA>` | Plan gates followed by the existing journaled approval checkpoint. |
|
|
21
|
+
| `lint-round` | Git HEAD; optional `--project-dir .project/next` | Task brief checks against HEAD, then plan handoff checks. |
|
|
22
|
+
| `prepare-task` | `--expected-head <clean base> --task-id <id> --round-size <ready task count>` | Canonical task isolation; serial work also gets a verification sidecar before the primary becomes dirty. |
|
|
23
|
+
| `build-evidence` | `--expected-head <full SHA>` | Canonical landing proof written to `<project-dir>/build/evidence.json` (default: `.project/build/evidence.json`). |
|
|
24
|
+
|
|
25
|
+
Plan approval recovery remains `pipeline_state.py resume-checkpoint`. Pre-Git
|
|
26
|
+
approvals and patch approvals retain their existing canonical flows. The runner
|
|
27
|
+
never changes a recorded base, retries a failed mutation, or repairs state itself.
|
|
28
|
+
|
|
29
|
+
Checkpoint inputs must use the top-level `.project` entries defined by
|
|
30
|
+
[`isolation.PROJECT_ENTRIES`](scripts/isolation.py); ship verification uses the
|
|
31
|
+
same allowlist. `isolation.py checkpoint` refuses pending paths under any other
|
|
32
|
+
top-level entry and asks for their removal before checkpointing. This check does
|
|
33
|
+
not inspect nested entries inside an allowed directory.
|
|
34
|
+
|
|
35
|
+
For serial work, keep the returned verification sidecar until the coder finishes.
|
|
36
|
+
Validate the full task diff, reproduce only that patch in the sidecar, compare the
|
|
37
|
+
product diffs, and run Task Verify there. Record that exact evidence before landing.
|
|
38
|
+
The runner avoids having to remove a live product patch merely to create a sidecar.
|
|
39
|
+
Task verification, wave review, and ship-only project verification retain their
|
|
40
|
+
existing responsibilities.
|
|
41
|
+
|
|
42
|
+
## Dispatch driver
|
|
43
|
+
|
|
44
|
+
`dispatch_driver.py` in the router and build bundles runs one build wave's
|
|
45
|
+
deterministic loop so the orchestrating model only supplies judgment. `round`
|
|
46
|
+
and `finish` run recovery against Git and the task files before processing
|
|
47
|
+
dispatch records under the Git common directory
|
|
48
|
+
(`gsd-path/dispatch/<milestone slug>/<task>/attempt-N/`). The milestone slug
|
|
49
|
+
replaces `/` in the bound branch with `-` (for example, `gsd-path/M001`
|
|
50
|
+
becomes `gsd-path-M001`). `answer` and `status`
|
|
51
|
+
read the newest attempt records. Records are keyed by the bound branch, so a
|
|
52
|
+
new milestone starts with no attempts and the previous milestone's records
|
|
53
|
+
remain as evidence.
|
|
54
|
+
Review attempts use `gsd-path/dispatch/<milestone slug>/reviews/<logical name>/attempt-N/`;
|
|
55
|
+
panel attempts use the same layout under `panels/` instead of `reviews/`, and
|
|
56
|
+
skeptic attempts under `skeptics/`.
|
|
57
|
+
`status` and `answer` cover task attempts only.
|
|
58
|
+
|
|
59
|
+
| Command | Result |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `round --repo <root> --wave <N> --child-command '<cmd>' [--wait <s>] [--child-timeout <s>] [--capacity <N>] [--max-attempts <N>] [--task-limit <N> --session-limit <N> --budget-authority '<policy>']` | Enter `build/active` from `plan/done` or `build/blocked` (event `build started`, checkpoint `build: start milestone`); recover, settle exited children, `ready`, checkpoint bookkeeping, lint, isolate, dispatch; Verify, land, record, retire each result in task-id order. Receipt status `done`, `in-flight`, `question`, or `blocked`; a dependency deadlock or blocked recovery also sets `build/blocked` and checkpoints it. |
|
|
62
|
+
| `review --repo <root> --wave <N> --cycle <C> --child-command '<cmd>' [--wait <s>] [--child-timeout <s>] [--repair-evidence <receipt>]` | Step 6 at `full` or `deep` depth: clean review base, one verify sidecar and reviewer child per lens, validate in the sidecar, collect, retire; after every lens settles, checkpoint a `pass` when no panel is configured, or return the `review_findings.py collect` grouping on `blocked`. `verify-only` returns `not-applicable`; `panel_required` reports the PLAN panel setting. |
|
|
63
|
+
| `panel --repo <root> --wave <N> --cycle <C> --advertised <slugs> [--parent-slug <slug>] --child-command '<cmd with {model}>' [--wait <s>]` | Step 6 panel: `review_panel.py resolve`; `off`, a persisted skipped receipt, or one panelist per family in its own sidecar; collect, `review_panel.py merge`, then the single on-pass checkpoint with the review. |
|
|
64
|
+
| `skeptics --repo <root> --wave <N> --cycle <C> --child-command '<cmd>' [--wait <s>] [--child-timeout <s>]` | Step 7 skeptic branch: one read-only skeptic per `skeptic_groups` locator in its own sidecar at the recorded review base, briefed with the criterion, every observation, and the cited tasks verbatim; validate with `review_findings.py`, collect, retire, then rerun the helper. `none` without skeptic groups; `escalate` for structural blockers or the cycle cap. The skeptic files stay uncommitted for the fix-task or ruling checkpoint. |
|
|
65
|
+
| `fix-tasks --repo <root> --wave <N> --cycle <C>` | Step 7 batching: one fix task per `review_findings.py collect` batch with the failed criteria and observations verbatim, lint-checked; `escalate` for structural blockers, skeptic groups, cycle cap, or all-refuted. |
|
|
66
|
+
| `complete --repo <root>` | Completion: clean primary at `build/active` (or a crash-left `build/done`), no unfinished wave, the archive-time review cycle check (`discussion_validate.review_cycle_counts`: contiguous cycles, passing last cycle, panel and skeptic artifacts present); `workflow_run.py build-evidence` at HEAD; `pipeline_state.py transition` to `ship/active` with event `build done; final review pending`; checkpoint `build: complete milestone`. |
|
|
67
|
+
| `finish --repo <root> --task-id <id>` | Recover first; return a proven landing without repeating Verify, or verify, land, record, and retire one returned task. Without a dispatch record, derive the isolate from task frontmatter. |
|
|
68
|
+
| `answer --repo <root> --task-id <id> --answer '<text>'` | Append `Orchestrator answer:` to the isolate's task Log; the next `round` redispatches that isolate. |
|
|
69
|
+
| `status --repo <root>` | Every task's newest dispatch record. |
|
|
70
|
+
|
|
71
|
+
The child command is owner-supplied shell words. The driver runs it with the
|
|
72
|
+
isolated worktree as its working directory and the self-contained brief on
|
|
73
|
+
stdin; the owner's flags decide the child's permissions and model. Verified
|
|
74
|
+
templates: `claude -p --output-format json <owner permission flags>` and
|
|
75
|
+
`codex exec --json <owner sandbox flags>`. A coder child ends its final message with
|
|
76
|
+
`RESULT: <task id> ready|blocked`; no line means blocked. A Log delta whose
|
|
77
|
+
first entry after the last recorded `Orchestrator answer:` leads with
|
|
78
|
+
`NEEDS-ORCHESTRATOR:` is a question only when the child exits successfully;
|
|
79
|
+
a timeout or nonzero exit is a failure even if the child wrote a question.
|
|
80
|
+
Canonical reviewer children instead return the `Wave verdict:` line in their
|
|
81
|
+
validated review artifact; they do not need a `RESULT:` line.
|
|
82
|
+
Panel children write family findings without a Wave verdict. The panel command
|
|
83
|
+
replaces literal `{model}` in its child command with the resolved family slug.
|
|
84
|
+
`--wave` is required and pins the parent-selected wave, including on resumed
|
|
85
|
+
calls. In `round`, an unfinished earlier wave blocks dispatch before the bookkeeping
|
|
86
|
+
checkpoint. Child completion is recorded in `exit.json`; the parent alone
|
|
87
|
+
writes `state.json`.
|
|
88
|
+
For `review`, `panel`, and `skeptics`, when the child process is gone and `finished_at` is
|
|
89
|
+
unset, the driver rereads that attempt's state and exit receipt before
|
|
90
|
+
collecting the result or blocking with
|
|
91
|
+
`child wrapper exited without recording a result`.
|
|
92
|
+
`--wait`, `--child-timeout`, and `--capacity` (concurrent children) have
|
|
93
|
+
no defaults. `--max-attempts` defaults to 2 dispatches per task per milestone,
|
|
94
|
+
the build contract's one logged redispatch after the first attempt; question
|
|
95
|
+
redispatches do not count. At the limit `round` returns `blocked` naming the
|
|
96
|
+
task, and a person rules.
|
|
97
|
+
|
|
98
|
+
Token budgets are opt-in. Passing `--task-limit`, `--session-limit`, and
|
|
99
|
+
`--budget-authority` together configures this milestone's ledger at
|
|
100
|
+
`gsd-path/budget/<milestone slug>.json` under the Git common directory, records
|
|
101
|
+
each child's usage from its captured stdout when it exits, and runs `admit`
|
|
102
|
+
before preparing or activating a fresh task and before each question
|
|
103
|
+
redispatch; a blocked admission stops the round. The ledger's
|
|
104
|
+
policy is fixed once configured. Later rounds and `finish` enforce that policy
|
|
105
|
+
even when budget flags are omitted; only explicit flags configure it. Each
|
|
106
|
+
attempt records its own usage, including question redispatches. A new milestone
|
|
107
|
+
gets a new ledger. Usage
|
|
108
|
+
is read from Codex `--json` events or Claude `--output-format json`; output
|
|
109
|
+
that proves no usage stops the round rather than estimating. At most one `Heavy: yes`
|
|
110
|
+
Verify task is in flight at a time, and a round stops at a wave boundary.
|
|
111
|
+
Without `--wait`, the call returns after processing currently available work;
|
|
112
|
+
children continue running. `--capacity`, when supplied, must be positive.
|
|
113
|
+
|
|
114
|
+
Every action except `status` holds a
|
|
115
|
+
repository-scoped advisory lock for the whole call, including `--wait`.
|
|
116
|
+
A concurrent invocation returns `blocked`
|
|
117
|
+
with `another dispatch_driver invocation holds the lock`; wait for the
|
|
118
|
+
active call to return before retrying. Bookkeeping also blocks if an
|
|
119
|
+
in-progress primary task has no open dispatch record.
|
|
120
|
+
|
|
121
|
+
Verify output is saved in `verify.json`. A `verify-record` ledger entry is
|
|
122
|
+
written only when the landing commit's parent equals the recorded task base;
|
|
123
|
+
a later parallel landing can therefore have no ledger entry.
|
|
124
|
+
|
|
125
|
+
For task attempts, the driver reports and never repairs: a failed child, a failed Verify, a
|
|
126
|
+
recovery or reconciliation verdict, or a `ready` error returns `blocked` with
|
|
127
|
+
the evidence, and the isolate stays in place for the build contract's
|
|
128
|
+
documented procedure.
|
|
129
|
+
|
|
130
|
+
Resume an `in-flight` review with the same wave and cycle. Missing lens records
|
|
131
|
+
are dispatched only while the primary is clean and HEAD still matches the
|
|
132
|
+
recorded base. For cycle 2 or later, every previous-cycle lens artifact must
|
|
133
|
+
exist before dispatch. Invalid review files remain in their sidecars for
|
|
134
|
+
inspection. Collection progress is saved before cleanup; a cleanup failure
|
|
135
|
+
returns `blocked` with helper findings, and a later call retries cleanup.
|
|
136
|
+
Reusing a collected verdict requires the canonical artifact to match its saved
|
|
137
|
+
validation hash. Review inputs must still match the recorded base: only this
|
|
138
|
+
cycle's review artifacts may differ, and HEAD may advance only by the cycle's
|
|
139
|
+
own review checkpoint. Other changes block reuse and require a new cycle.
|
|
140
|
+
|
|
141
|
+
Resume an `in-flight` panel with `panel` for the same wave and cycle. Before
|
|
142
|
+
the first spawn, it saves the families, slugs, mode, and base in
|
|
143
|
+
`panels/wave-N-cycle-C/roster.json` under the milestone's dispatch directory.
|
|
144
|
+
Missing families resume only at that base. Merge waits for the whole roster
|
|
145
|
+
and successful cleanup; later calls retry pending cleanup. Before merging or
|
|
146
|
+
checkpointing, HEAD must still equal the recorded base. Only this cycle's
|
|
147
|
+
review files, panel family files, merged panel, and skipped receipt may differ.
|
|
148
|
+
Other changes return `blocked` with
|
|
149
|
+
`inputs changed after the review base; run a new cycle` and no checkpoint.
|
|
150
|
+
A skipped-panel retry uses the base saved in this cycle's review records;
|
|
151
|
+
missing records block with `review base is not recorded; run review first`.
|
|
152
|
+
An interrupted checkpoint's skipped receipt is reused only if it is a JSON
|
|
153
|
+
object with `status: skipped`; other contents block as an invalid receipt.
|
|
154
|
+
The same input guard runs before writing or reusing that receipt and again
|
|
155
|
+
before checkpointing. Panel `status`
|
|
156
|
+
describes panel processing; `review_verdict` holds the canonical verdict.
|
|
157
|
+
A blocked canonical review leaves `checkpoint: null`, including for a skipped
|
|
158
|
+
panel, so `fix-tasks` can checkpoint the blocked review with its repairs.
|
|
159
|
+
|
|
160
|
+
Resume an `in-flight` skeptic run with `skeptics` for the same wave and cycle.
|
|
161
|
+
Dispatching missing locators requires HEAD to equal the recorded review base.
|
|
162
|
+
Panel and skeptic collection save validated fields and a content hash before
|
|
163
|
+
moving the staged file. If interrupted after that move, collection resumes
|
|
164
|
+
through its receipt only when the canonical file matches the saved hash.
|
|
165
|
+
|
|
166
|
+
`fix-tasks` reconciles existing repair tasks and PLAN rows before linting and
|
|
167
|
+
checkpointing. It creates missing batches in an appended repair wave and
|
|
168
|
+
reports new tasks in `created`, reused tasks in `existing`, and batches already
|
|
169
|
+
covered by other repair tasks in `carried`. Status `created` includes restored
|
|
170
|
+
PLAN rows or pending project bookkeeping; `exists` means nothing was written
|
|
171
|
+
and no project changes needed a checkpoint. Status `none` means no batches
|
|
172
|
+
need work; `escalate` leaves the named decisions with build step 7 and the user.
|
|
173
|
+
Each generated fix-task Verify runs the distinct source Verify commands in
|
|
174
|
+
separate subshells under `set -e`. An `exit 0` or trailing comment in one source
|
|
175
|
+
cannot skip the next source command, and a failing subshell stops the Verify.
|
|
176
|
+
|
|
177
|
+
## Token accounting
|
|
178
|
+
|
|
179
|
+
`token_budget.py` is in the router and build bundles. Limits have no defaults.
|
|
180
|
+
The dispatch driver owns its ledger as described [above](#dispatch-driver).
|
|
181
|
+
For manual accounting, configure one ledger for the logical session, outside
|
|
182
|
+
the worktree, using the owner's exact
|
|
183
|
+
limits and their authority. For example, use a path under the Git common directory
|
|
184
|
+
returned by Git; do not assume `.git` is a directory in a linked worktree.
|
|
185
|
+
|
|
186
|
+
```text
|
|
187
|
+
python3 <token_budget.py> configure --ledger <absolute ledger> --task-limit <owner value> --session-limit <owner value> --authority <quoted owner policy>
|
|
188
|
+
python3 <token_budget.py> record --ledger <absolute ledger> --task <logical task> --events <completed host event file>
|
|
189
|
+
python3 <token_budget.py> admit --ledger <absolute ledger> --task <next logical task>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
The metric is the host's `output_tokens`, including its reported reasoning output;
|
|
193
|
+
reasoning is not added again. Input and cached input are not included. Resumptions
|
|
194
|
+
reuse the ledger and task identity. Each CLI invocation uses its immutable event
|
|
195
|
+
file. Re-observing that file is idempotent; new invocations accumulate. Native
|
|
196
|
+
single-invocation child sessions and Claude `--output-format json` usage
|
|
197
|
+
receipts are supported. Resumed native child logs with
|
|
198
|
+
ambiguous cumulative counters fail closed; use separate CLI run receipts instead.
|
|
199
|
+
Record every completed parent invocation and child, not only coder work.
|
|
200
|
+
|
|
201
|
+
`admit` blocks once observed task or session output reaches the configured limit.
|
|
202
|
+
A negative exit is not permission to start a new ledger, rename the task, or omit
|
|
203
|
+
usage. Incomplete usage cannot establish remaining budget. Configuration preserves
|
|
204
|
+
existing observations and refuses a changed policy for the same session ledger.
|
|
205
|
+
|
|
206
|
+
This is **observed admission enforcement**. Concurrent, unreported, and in-flight
|
|
207
|
+
usage remains unproven. Codex CLI 0.153.4 exposes usage after execution but its help
|
|
208
|
+
and published configuration list no hard output-token cap. Use
|
|
209
|
+
`admit --require-hard-cap` when hard enforcement is required: this host returns
|
|
210
|
+
blocked with `hard_cap_supported: false`. These helpers do not make a strict
|
|
211
|
+
budget-compliance claim. Other hosts need a verified counter/cap adapter.
|
|
212
|
+
|
|
213
|
+
Sources checked for this host: local `codex exec --help`,
|
|
214
|
+
[official CLI reference](https://developers.openai.com/codex/cli/reference), and
|
|
215
|
+
[official configuration reference](https://developers.openai.com/codex/config-reference).
|
|
216
|
+
The Responses API's generation limits are a different interface; they do not
|
|
217
|
+
establish a Codex CLI capability.
|
|
218
|
+
|
|
219
|
+
## Lean final verification
|
|
220
|
+
|
|
221
|
+
The ship bundle's `workflow_run.py prepare-final --repo <root> --expected-head
|
|
222
|
+
<full SHA>` sequences landing proof, isolated project Verify, evidence collection,
|
|
223
|
+
and final reuse. A command/commit receipt stores exact stdout/stderr once; retry
|
|
224
|
+
rebuilds its gap view and cleans up an interrupted sidecar without another run.
|
|
225
|
+
Legacy receipts without output require reconciliation if no valid proof can be
|
|
226
|
+
recovered. A full quick-lane wave explicitly covering final scope supplies FINAL.md
|
|
227
|
+
when every criterion and surface walkthrough is proven and Git shows unchanged
|
|
228
|
+
product and contracts. Other scopes retain final review. The output names whether
|
|
229
|
+
review is needed; models do not route reuse by comparing prose or file sizes.
|