@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,38 @@
|
|
|
1
|
+
# Roadmap — <program name>
|
|
2
|
+
|
|
3
|
+
<!-- Written and owned by $gsd-path-roadmap. Rolling-wave: milestone-granularity
|
|
4
|
+
scope for EVERY milestone; waves and tasks are planned only for the active
|
|
5
|
+
milestone. Never edit a shipped entry except its Status, Archive, and
|
|
6
|
+
Integrated fields; never edit an abandoned entry at all. Lives at
|
|
7
|
+
.project/ top
|
|
8
|
+
level and persists across milestones; it never archives. -->
|
|
9
|
+
|
|
10
|
+
## Milestones
|
|
11
|
+
|
|
12
|
+
### M001 — <slug>
|
|
13
|
+
|
|
14
|
+
Goal: <one sentence — the independently shippable outcome>
|
|
15
|
+
Depends on: [] # milestone ids; acyclic; earlier ids only
|
|
16
|
+
Surfaces: none # none | the human-facing surfaces this milestone
|
|
17
|
+
# delivers (web app, CLI, HTTP API). Each one needs a
|
|
18
|
+
# success criterion observable there.
|
|
19
|
+
Status: pending # pending | active | shipped | abandoned
|
|
20
|
+
Archive: null # .project/archive/<NNN>-<slug>/ recorded at ship
|
|
21
|
+
Integrated: null # optional; merge SHA of the integrate commit onto
|
|
22
|
+
# the remote default, filled after integration
|
|
23
|
+
|
|
24
|
+
Scope: in
|
|
25
|
+
- <deliverable sized capability>
|
|
26
|
+
|
|
27
|
+
Scope: out
|
|
28
|
+
- <explicit exclusion deferred to a later milestone or vetoed>
|
|
29
|
+
|
|
30
|
+
Success criteria
|
|
31
|
+
1. <observable criterion the milestone's final review can check>
|
|
32
|
+
|
|
33
|
+
Risks
|
|
34
|
+
- <risk that could invalidate this milestone or its dependents>
|
|
35
|
+
|
|
36
|
+
Open questions
|
|
37
|
+
- None # any real question here inserts milestone-scoped
|
|
38
|
+
# research + decide before that milestone's planning
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-path-ship
|
|
3
|
+
description: Verify a completed GSD Path milestone, manage evidence-backed patch decisions, request final shipping approval, and archive the validated result. Use only when the user explicitly invokes $gsd-path-ship or an active $gsd-path router or build orchestrator explicitly routes to this phase.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GSD Path Ship Phase
|
|
7
|
+
|
|
8
|
+
Reuse proven review scope; dispatch reviewers for remaining claims. They never fix
|
|
9
|
+
product code.
|
|
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
|
+
Require `pipeline: gsd-path/v2` in `.project/STATE.md`; a missing or different
|
|
15
|
+
marker returns to `$gsd-path` for ownership checking. Read the local
|
|
16
|
+
[reviewer role](references/reviewer.md) and
|
|
17
|
+
[dispatch contract](references/dispatch.md), resolve them to absolute paths,
|
|
18
|
+
and follow that runtime-specific dispatch contract. Resolve
|
|
19
|
+
`scripts/isolation.py` for verify sidecars; do not invent detached checkouts.
|
|
20
|
+
Resolve `scripts/build_state.py` for the landed-task proof and the verify
|
|
21
|
+
ledger.
|
|
22
|
+
|
|
23
|
+
This skill
|
|
24
|
+
verifies first and never archives or ships before explicit final approval.
|
|
25
|
+
|
|
26
|
+
Wave reviews are owned by the build orchestrator; this phase never runs them.
|
|
27
|
+
|
|
28
|
+
## Final mode
|
|
29
|
+
|
|
30
|
+
If STATE.md has a concrete `archive` path and phase is `ship` or `shipped`,
|
|
31
|
+
skip ordinary final-mode preconditions and resume **Archive transaction**
|
|
32
|
+
below. Also enter archive recovery when STATE is `ship/active`, `archive` is
|
|
33
|
+
null, and the only otherwise-unexpected path is the deterministic
|
|
34
|
+
`.project/.STATE.md.gsd-path-tmp`; `prepare` removes that interrupted temp
|
|
35
|
+
before safely persisting a transaction identity. Moved artifacts are
|
|
36
|
+
transaction state, not missing inputs. A concrete archive in any other phase
|
|
37
|
+
blocks without mutation. Otherwise, first scan ANSWERS.md for pending required
|
|
38
|
+
follow-ups under AGENTS.md. Apply an answer addressed to
|
|
39
|
+
`gsd-path-ship` only through current review
|
|
40
|
+
artifacts. Pass the record's exact stored owner to `dispose` so the disposition
|
|
41
|
+
receipt preserves that durable owner name; use `gsd-path-ship` for new records.
|
|
42
|
+
If it changes approved intent/plan or names another owner, keep
|
|
43
|
+
`ship/blocked`, link ANSWERS.md and the target artifact, and ask the user
|
|
44
|
+
before dispatch or ship. Every `ship/blocked` write and the step 7 log-only
|
|
45
|
+
event use `pipeline_state.py transition` with expected `ship/active` and the
|
|
46
|
+
exact current branch and archive values: blocking passes `--set-status
|
|
47
|
+
blocked`; the log-only event passes `--set-status active` and the event text,
|
|
48
|
+
so the position is unchanged. Then:
|
|
49
|
+
|
|
50
|
+
1. Require STATE `ship/active` produced and committed by the build
|
|
51
|
+
orchestrator, `.project/intent/INTENT.md`,
|
|
52
|
+
`.project/plan/PLAN.md`, all task files, all passing wave reviews, the bound
|
|
53
|
+
build branch, and no product or unrelated changes. On retry, existing
|
|
54
|
+
uncommitted assigned final-review outputs may remain. Resolve and record the
|
|
55
|
+
exact full reviewed `HEAD` before dispatch, then prove every task landed
|
|
56
|
+
through the runtime in step 3. Its landing check must return one
|
|
57
|
+
`proven-landed` or `attested` entry per task. For rebase recovery, see
|
|
58
|
+
`$gsd-path-build` step 1. Its receipt
|
|
59
|
+
`.project/build/rebase-adoption.json` may remain uncommitted only after
|
|
60
|
+
the runtime's `build_state.verify_landed_tasks` check passes. Keep bookkeeping in STATE.md
|
|
61
|
+
and assigned artifacts; never create extra `.project/` execution reports. Reuse an output only when its
|
|
62
|
+
`Reviewed HEAD` equals that SHA and the complete numbered gap-risk mapping
|
|
63
|
+
still equals the freshly derived risk list. Regenerate the exact assigned
|
|
64
|
+
output set when stale, removing only superseded `final-gap-N.md` files. A
|
|
65
|
+
stale committed output may be replaced or removed only when Git and
|
|
66
|
+
task logs prove it is the immediately preceding `ship/blocked` finding
|
|
67
|
+
set, the approved patch tasks copied every finding verbatim, and those tasks
|
|
68
|
+
are now done; otherwise it blocks. Git history preserves the superseded
|
|
69
|
+
finding, while final review itself still creates no pre-ship commit.
|
|
70
|
+
2. Derive a stable numbered list of cross-wave integration risks from
|
|
71
|
+
interfaces and flows that span waves. List only genuine risks that could
|
|
72
|
+
plausibly fail; never pad the list. Include PLAN.md's project Verify as
|
|
73
|
+
numbered risk 1. The orchestrator runs that command once in step 3 and
|
|
74
|
+
writes its gap artifact; do not dispatch a gap reviewer for it. Resolve the local
|
|
75
|
+
[final-review template](templates/final-review.md),
|
|
76
|
+
[gap-review template](templates/gap-review.md), [patch-findings
|
|
77
|
+
template](templates/patch-findings.md), and `scripts/check_handoffs.py`.
|
|
78
|
+
3. Run `python3 <absolute workflow_run.py> prepare-final --repo
|
|
79
|
+
<absolute primary> --expected-head <HEAD>` from this skill's bundled scripts.
|
|
80
|
+
This owns pending-discussion and landing checks, project Verify isolation,
|
|
81
|
+
execution, output recording, collection, cleanup, and final-review reuse.
|
|
82
|
+
Keep its JSON receipt; do not reconstruct those operations in shell calls.
|
|
83
|
+
Exact stdout/stderr live once in `.project/build/verify-ledger.jsonl`;
|
|
84
|
+
`final-gap-1.md` is the generated view referencing that entry. Re-entry at
|
|
85
|
+
the same command and commit reuses the execution, including a failed one,
|
|
86
|
+
and finishes interrupted collection without running the command again.
|
|
87
|
+
Missing legacy output requires evidence reconciliation, not a blind rerun.
|
|
88
|
+
Any non-zero result stops this step; preserve its stderr and diagnose through
|
|
89
|
+
the bundled forensics contract. Do not launch reviewers while project Verify
|
|
90
|
+
is failing. Record the command failure in STATE.md and link its gap evidence.
|
|
91
|
+
|
|
92
|
+
Read the final step's `result.final`. `reused: true` means FINAL.md already
|
|
93
|
+
proves final scope: do not dispatch `review_final` or rewrite it. For a
|
|
94
|
+
quick lane with one full wave, reuse requires a committed review explicitly
|
|
95
|
+
covering final scope, every success criterion and required walkthrough,
|
|
96
|
+
and unchanged product and approved contracts. The helper generates FINAL.md
|
|
97
|
+
as a view of that proof. Multiple waves, deep/verify-only reviews, missing
|
|
98
|
+
evidence, or changed inputs require fresh final review. Existing valid final
|
|
99
|
+
evidence at the current HEAD is also reused on retry.
|
|
100
|
+
|
|
101
|
+
4. For each numbered risk other than project Verify without a reusable output,
|
|
102
|
+
dispatch one reviewer through the shared capacity-aware contract at the
|
|
103
|
+
exact reviewed HEAD. Use logical task name `review_gap_<number>` and assign only
|
|
104
|
+
`.project/review/final-gap-N.md`. Before each dispatch, create its distinct
|
|
105
|
+
sidecar with `python3 <absolute isolation.py> isolate-verify --repo
|
|
106
|
+
<absolute primary> --base <HEAD> --name review-gap-<number>` and supply the
|
|
107
|
+
returned path.
|
|
108
|
+
Review commands and staged outputs run only there, never in the primary
|
|
109
|
+
worktree. For every returned artifact, substitute its returned worktree,
|
|
110
|
+
branch, and assigned `.project/review/...` path into `python3 <absolute isolation.py> collect-artifact --repo <primary>
|
|
111
|
+
--source <worktree> --base <HEAD> --branch <branch> --source-path <assigned path>
|
|
112
|
+
--destination-path <assigned path>`. If replacing an admitted stale output,
|
|
113
|
+
include `--expected-destination <its recorded SHA-256>`. Require returned
|
|
114
|
+
fields to match, then run `python3 <absolute isolation.py> retire --repo
|
|
115
|
+
<primary> --worktree <worktree> --branch <branch>`. The helper must observe only
|
|
116
|
+
the assigned artifact in each sidecar. Model-written copies into the
|
|
117
|
+
primary do not count as collection.
|
|
118
|
+
After every gap artifact is present, reuse a valid FINAL.md admitted by
|
|
119
|
+
step 3 or create a fresh sidecar with `isolate-verify --name review-final`
|
|
120
|
+
and dispatch the integration reviewer under logical task name
|
|
121
|
+
`review_final`, assigning only
|
|
122
|
+
`.project/review/FINAL.md`. Its complete brief includes the exact recorded
|
|
123
|
+
project Verify ledger entry, every collected gap verdict so Overall verdict is
|
|
124
|
+
consistent with them, and PLAN.md's `## Surface contract` when INTENT.md
|
|
125
|
+
names surfaces — that reviewer performs each Walkthrough and records the
|
|
126
|
+
surface and what it showed on every criterion the contract lists. Collect FINAL.md and retire its sidecar through the
|
|
127
|
+
same helper flow.
|
|
128
|
+
5. Only after `final-gap-1.md` and every dispatched reviewer artifact have
|
|
129
|
+
been collected and all review sidecars retired, validate every artifact.
|
|
130
|
+
Every success criterion is `met`, `not-met`, or
|
|
131
|
+
`unverifiable` with checked evidence; every gap is `pass` or `blocked` with
|
|
132
|
+
checked evidence. Every output must record the same exact full reviewed
|
|
133
|
+
HEAD, and each numbered gap heading and Risk value must match its dispatch
|
|
134
|
+
risk. Run
|
|
135
|
+
`python3 <absolute check_handoffs.py> final --repo <absolute repo root>`
|
|
136
|
+
before any archive question: FINAL.md needs one `### SCn — ...` block per
|
|
137
|
+
INTENT success criterion, `Overall verdict: pass` requires every
|
|
138
|
+
verdict `met` with a non-`none` Check or Reference, and every criterion
|
|
139
|
+
listed in PLAN.md's Surface contract requires a matching `Surface` field
|
|
140
|
+
and a non-`none` Check. A non-zero exit is
|
|
141
|
+
`ship/blocked`; never rerun project Verify to repair the evidence.
|
|
142
|
+
6. Redispatch one complete corrected brief for a missing or invalid reviewer
|
|
143
|
+
artifact under the same logical task name, following the runtime dispatch
|
|
144
|
+
contract. Before dispatch, record the invalid destination's exact SHA-256.
|
|
145
|
+
Give the retry a fresh verify sidecar, collect its corrected artifact with
|
|
146
|
+
the same `collect-artifact` command plus
|
|
147
|
+
`--expected-destination <recorded SHA-256>`, retire the sidecar, and rerun
|
|
148
|
+
the final handoff gate. If it remains invalid, set `ship/blocked` with
|
|
149
|
+
the exact contract failure and a `NEEDS-USER` dispatch-failure entry. Present
|
|
150
|
+
**Outcome** with the invalid output, **Review** linking that output or
|
|
151
|
+
STATE.md when it is missing, and **Next** naming the required correction;
|
|
152
|
+
then stop and do not invent a patch finding. A `not-met`,
|
|
153
|
+
`unverifiable`, or blocked gap with valid evidence sets `ship/blocked`,
|
|
154
|
+
writes `.project/review/PATCH-FINDINGS.md` from the patch-findings template,
|
|
155
|
+
and runs `python3 <absolute check_handoffs.py> patch --repo <absolute repo
|
|
156
|
+
root>`. Present the blocked outcome, link the resolved absolute
|
|
157
|
+
PATCH-FINDINGS.md path, and state that patch planning is next. The manifest
|
|
158
|
+
contains exactly those FINAL.md and gap rows. When routed by an active
|
|
159
|
+
`$gsd-path`, return control so its bundled plan contract opens patch mode.
|
|
160
|
+
When invoked directly, stop and tell the user to explicitly invoke
|
|
161
|
+
`$gsd-path`, which routes those sources to plan patch mode; do not invoke an
|
|
162
|
+
explicit-only sibling skill yourself. Ship never writes tasks or PLAN.md.
|
|
163
|
+
The patch build commits this prior finding set with the approved patch
|
|
164
|
+
artifacts before execution.
|
|
165
|
+
7. Only when every criterion is `met`, every gap passes, project Verify passes,
|
|
166
|
+
and no required discussion follow-up is pending, keep STATE.md at `phase:
|
|
167
|
+
ship`, `status: active`, append `final gate passed; shipping approval
|
|
168
|
+
pending`. Present **Outcome** with the final verdict, **Review** linking the
|
|
169
|
+
resolved absolute FINAL.md path and summarizing the gap artifacts, and
|
|
170
|
+
**Next** asking whether to `Archive and ship (recommended)` or `Stop for
|
|
171
|
+
review`. The recommendation is grounded in the passing gates. Begin the
|
|
172
|
+
transaction below only after approval; declining leaves review active and
|
|
173
|
+
makes no archive mutation. Do not mark or report `shipped` yet.
|
|
174
|
+
|
|
175
|
+
## Archive transaction
|
|
176
|
+
|
|
177
|
+
Resolve the project's guard-owned `.gsd-path/runtime/archive_milestone.py` and
|
|
178
|
+
`.gsd-path/runtime/pipeline_state.py` to absolute paths for `prepare`,
|
|
179
|
+
`render-manifest`, `preflight`, `record-shipment`, `validate`, `integrate`, and
|
|
180
|
+
`validate-integrated`. Invoke them with `python3`; the files need not be
|
|
181
|
+
executable. Skill-bundle copies are not the guard's trust anchor, even when
|
|
182
|
+
byte-identical. The archive helper is the sole MANIFEST.md and integration writer.
|
|
183
|
+
The persisted `STATE.archive` field is the transaction identity.
|
|
184
|
+
|
|
185
|
+
1. Normally require STATE `ship/active`, the bound build branch, and no
|
|
186
|
+
non-`.project` change. The sole crash-recovery exception is
|
|
187
|
+
`shipped/done` with a concrete target that is absent from HEAD; this is an
|
|
188
|
+
uncommitted transaction and resumes without rewinding STATE. On every
|
|
189
|
+
initial run or retry, run:
|
|
190
|
+
`python3 <absolute archive_milestone.py> prepare --repo <root> --slug <STATE.milestone>`.
|
|
191
|
+
On a fresh transaction, `prepare` refuses a `review/FINAL.md` whose
|
|
192
|
+
`Reviewed HEAD` differs from current HEAD, before persisting STATE.archive
|
|
193
|
+
or creating archive directories. Regenerate the final review for the current
|
|
194
|
+
commit before archiving; preflight and validation retain their own checks.
|
|
195
|
+
The helper strict-loads STATE.md, requires its canonical `gsd-path/M00N`
|
|
196
|
+
branch with `N >= 1` to equal the next collision-free archive sequence,
|
|
197
|
+
rejects any `000-*` archive entry, and writes the exact
|
|
198
|
+
`.project/archive/<NNN>-<slug>` path atomically to STATE.md before moving
|
|
199
|
+
anything, and then moves the active milestone. On every retry run
|
|
200
|
+
the same command; it reuses STATE.archive and never recomputes N.
|
|
201
|
+
2. The helper requires exactly one of each active or archived top-level
|
|
202
|
+
artifact, permits active and archived `research/` together only for the
|
|
203
|
+
byte-identical pending DOCS-AUDIT carry-forward, and recreates its parent
|
|
204
|
+
before an atomic copy. Any other collision or missing artifact blocks.
|
|
205
|
+
For a non-off PLAN review-panel policy it also requires exactly one plan
|
|
206
|
+
resolution artifact: `review/PLAN-PANEL.md` for `ready`, or the exact
|
|
207
|
+
helper JSON in `review/PLAN-PANEL.skipped.json` for `skipped`. Each full or
|
|
208
|
+
deep wave cycle likewise requires exactly one merged `.panel.md` artifact
|
|
209
|
+
or exact `.panel.skipped.json` receipt. Configuration alone never proves
|
|
210
|
+
that a panel was ready or skipped.
|
|
211
|
+
3. Append milestone lessons to `.project/LESSONS.md` (create it when
|
|
212
|
+
missing): one line per repeat-offender criterion across this milestone's
|
|
213
|
+
wave reviews and one per escalation in the STATE.md log, formatted
|
|
214
|
+
`- <NNN>-<slug> — <lesson>`. Skip the file entirely when there are none.
|
|
215
|
+
LESSONS.md stays in the active root across milestones — it ships inside
|
|
216
|
+
the ship commit but never archives — and the planner reads it. The same
|
|
217
|
+
persistence applies to program artifacts when present: CHARTER.md,
|
|
218
|
+
ROADMAP.md, and a top-level program SYNTHESIS.md ship in the commit but
|
|
219
|
+
never archive.
|
|
220
|
+
Then run `python3 <absolute archive_milestone.py> render-manifest --repo <root>`. The helper derives final verdicts, wave/task/cycle counts,
|
|
221
|
+
carry-forward count, and the exact archive inventory, then atomically
|
|
222
|
+
replaces MANIFEST.md through its deterministic same-directory temporary.
|
|
223
|
+
Never render or edit the manifest directly. `prepare` removes that exact
|
|
224
|
+
temporary after a crash. If the target exists in HEAD, `prepare` and
|
|
225
|
+
`render-manifest` refuse mutation and the only valid action is `validate`.
|
|
226
|
+
4. Run `python3 <absolute archive_milestone.py> preflight --repo <root>` while
|
|
227
|
+
STATE is `ship/active`, or while it is `shipped/done` in the uncommitted
|
|
228
|
+
crash window above. It validates Git root/branch, current target absence from
|
|
229
|
+
HEAD, immutable older archives, canonical real files, exact active-root
|
|
230
|
+
allowlist and carry-forward, reviewed revision, manifest metadata and
|
|
231
|
+
criteria against FINAL.md, exact ordered PLAN wave task/title rows with
|
|
232
|
+
non-placeholder evidence for every task and owned success criterion, actual
|
|
233
|
+
cycle counts, completed Notes, and the exact file inventory. Canonical
|
|
234
|
+
`wave-N.cycleC.repair-T###.json` receipts are auxiliary evidence, not review
|
|
235
|
+
verdicts; their payload identity must match their filename. Same-wave repair
|
|
236
|
+
tasks enter review coverage only after their receipt's source cycle, and a
|
|
237
|
+
later review cycle is required. Concrete evidence may contain generic types
|
|
238
|
+
such as `Result<T>` or comparisons. Markdown code spans with matching
|
|
239
|
+
backtick delimiters may contain placeholder-shaped quoted evidence, such
|
|
240
|
+
as `Queues unavailable: <stored reason>`. A whole value containing only
|
|
241
|
+
`<record observation>` remains invalid, even inside a code span; unquoted
|
|
242
|
+
template placeholders also remain invalid.
|
|
243
|
+
Immediately
|
|
244
|
+
before this command, recheck for an active
|
|
245
|
+
`discuss/` copy created after prepare; if present, rerun `prepare`, regenerate
|
|
246
|
+
MANIFEST.md by rerunning `render-manifest`, and only then preflight. Do not
|
|
247
|
+
commit when it fails. A failure over a missing or non-canonical review
|
|
248
|
+
artifact is never repaired by writing, splitting, or renaming a review
|
|
249
|
+
file after the fact; report it and let the user rule — a new review cycle
|
|
250
|
+
at the current HEAD is the only artifact-producing remedy. The archive helper independently binds every FINAL.md
|
|
251
|
+
`SCn` heading id and normalized text to the archived INTENT.md; a renamed or
|
|
252
|
+
easier criterion blocks even if the earlier handoff gate was bypassed.
|
|
253
|
+
5. Only after preflight passes, record shipment through the journaled helper;
|
|
254
|
+
for a program it atomically replaces both ROADMAP.md and STATE.md, setting
|
|
255
|
+
the current entry to `Status: shipped` with the exact `Archive:` pointer:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
python3 <absolute pipeline_state.py> record-shipment --repo <root> --archive <STATE.archive> --event "archive preflight passed; shipment recorded"
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Require the returned state to be `shipped/done` with the unchanged branch
|
|
262
|
+
and archive. When this was the last pending roadmap entry, use the event
|
|
263
|
+
`archive preflight passed; shipment recorded; program complete` instead.
|
|
264
|
+
When CHARTER.md and ROADMAP.md are both absent, this same command preserves
|
|
265
|
+
the single-milestone flow and updates STATE.md only.
|
|
266
|
+
Retry this exact command after interruption; it resumes its journal and is
|
|
267
|
+
idempotent after completion. Stage only
|
|
268
|
+
`.project/` paths, inspect the staged path list against the transaction and
|
|
269
|
+
create the ship phase's one commit with exact subject
|
|
270
|
+
`ship: M00N — <milestone-slug>` and a body of exactly two consecutive lines,
|
|
271
|
+
`Archive: .project/archive/<NNN>-<slug>` then
|
|
272
|
+
`Reviewed-HEAD: <reviewed SHA>`, with no comment lines or blank line between them
|
|
273
|
+
(pass the body as one `-m` value or from a message file). M00N and NNN come from STATE.archive.
|
|
274
|
+
There is no untracked-project exception and no product or older-archive
|
|
275
|
+
path may enter this commit.
|
|
276
|
+
6. Immediately run `python3 <absolute archive_milestone.py> validate --repo <root>`. It requires the committed shipped state, exact archive and
|
|
277
|
+
manifest, valid carry-forward, no active milestone artifacts, a clean
|
|
278
|
+
worktree, exactly one current-milestone commit with the canonical ship
|
|
279
|
+
subject and body in first-parent history, only `.project/` paths in that
|
|
280
|
+
commit, and bound-worktree HEAD exactly equal to that ship commit. Any
|
|
281
|
+
later product or `.project/` commit blocks validation. A passing validate completes the
|
|
282
|
+
archive transaction; record its returned archive path and full commit
|
|
283
|
+
SHA, and link the archived MANIFEST.md as the final review surface. The
|
|
284
|
+
milestone is not shipped until integration below passes.
|
|
285
|
+
7. Integrate only after the postcommit `validate` passes, with the recorded
|
|
286
|
+
ship commit and exact reviewed HEAD unchanged. Run `python3 <absolute archive_milestone.py> integrate --repo <root> --slug <STATE.milestone>`.
|
|
287
|
+
This helper validates the ship commit, fetches origin, requires remote
|
|
288
|
+
default `main`, and follows the locked `STATE.integration` mode:
|
|
289
|
+
|
|
290
|
+
- `direct` owns the resumable merge transaction. It creates the canonical
|
|
291
|
+
named integration worktree, performs the hook-verified `--no-ff` merge,
|
|
292
|
+
refuses to resolve conflicts, creates the annotated milestone tag, pushes
|
|
293
|
+
main then the bound branch then the tag, and removes its worktree and
|
|
294
|
+
branch. Before publishing the bound branch it reads the live origin ref:
|
|
295
|
+
absence is created with an absent-ref lease, the exact ship commit is an
|
|
296
|
+
idempotent success, an owner-adopted rebased milestone (archived
|
|
297
|
+
`build/rebase-adoption.json`) may advance the ref from the adopted head
|
|
298
|
+
to its immediate, canonical `.project/`-only ship child under an exact-SHA
|
|
299
|
+
lease after the helper proves the clean ship state, receipt, and archived
|
|
300
|
+
tasks. Every other value blocks. If origin/main advances
|
|
301
|
+
after the local merge but rejects the push, a retry may discard and
|
|
302
|
+
rebuild only the unpublished canonical merge and tag under the helper's
|
|
303
|
+
existing recovery checks.
|
|
304
|
+
- `pull-request` requires `gh` authentication for GitHub.com and a
|
|
305
|
+
GitHub.com origin. It publishes the exact ship commit, reuses only the
|
|
306
|
+
single PR from origin's bound branch at that commit or creates one with
|
|
307
|
+
the canonical integration title and body plus the GSD Path credit footer.
|
|
308
|
+
Any competing PR to `main` at the ship commit blocks. While the eligible
|
|
309
|
+
PR is open, the helper returns `status: awaiting-merge`. Present
|
|
310
|
+
**Outcome**, link
|
|
311
|
+
the returned PR as **Review**, and state in **Next** that the user must
|
|
312
|
+
merge it with GitHub's merge-commit method. Stop this ship invocation;
|
|
313
|
+
Path never enables auto-merge or merges the PR. On rerun after a human
|
|
314
|
+
GitHub user merges it, the helper requires the PR head to remain the ship
|
|
315
|
+
commit and its landing to be a two-parent merge with that ship commit as
|
|
316
|
+
second parent on `origin/main` first-parent history. It then writes and
|
|
317
|
+
pushes the annotated milestone tag containing the PR URL, ship SHA, and
|
|
318
|
+
landing SHA. A closed unmerged PR, squash, rebase, merge queue, moved
|
|
319
|
+
head, duplicate PR, or non-GitHub.com origin blocks. The remote bound
|
|
320
|
+
branch may be absent after a valid merge because GitHub may auto-delete it.
|
|
321
|
+
|
|
322
|
+
A passing run returns the same proof exposed by `validate-integrated`.
|
|
323
|
+
A non-zero result blocks; rerun the exact `integrate` command to resume a
|
|
324
|
+
safe partial transaction instead of repairing refs or Git state manually.
|
|
325
|
+
An integration conflict is not a safe retry: the helper aborts the merge
|
|
326
|
+
and leaves the closed milestone branch unchanged. Invoke
|
|
327
|
+
`$gsd-path-forensics` and obtain a user-approved recovery plan before
|
|
328
|
+
continuing. Never merge into or re-ship the closed branch.
|
|
329
|
+
For a later validation recheck with origin network access, run
|
|
330
|
+
`python3 <absolute archive_milestone.py> validate-integrated --repo <root> --slug <STATE.milestone>`.
|
|
331
|
+
Both integration modes refresh the remote-default and mirrored milestone-tag
|
|
332
|
+
refs when an `origin` remote exists. Without that remote, validation resolves
|
|
333
|
+
the existing remote-default refs locally, preserving offline direct-mode
|
|
334
|
+
fixtures. PR mode also revalidates the PR identity, state, merge provenance,
|
|
335
|
+
and live branch and tag publication.
|
|
336
|
+
Report shipped only when the integration result passes.
|
|
337
|
+
Leave the primary worktree and STATE.branch on the shipped
|
|
338
|
+
`gsd-path/M00N` at the ship commit. The router owns the later handoff to a
|
|
339
|
+
new milestone branch after this gate.
|
|
340
|
+
8. If a crash occurs before STATE's atomic rename, discard only the exact
|
|
341
|
+
deterministic state temp through `prepare`. If it occurs after STATE becomes
|
|
342
|
+
`shipped/done` but before commit, run `prepare` and `preflight` under the
|
|
343
|
+
explicit uncommitted exception, then create the one ship commit. Resume the
|
|
344
|
+
named transaction even when active final-review inputs have moved. If the
|
|
345
|
+
target exists in HEAD, validate it rather than running `prepare` or creating
|
|
346
|
+
another commit. Any inconsistent committed transaction blocks; never
|
|
347
|
+
mutate a committed archive.
|
|
348
|
+
The fourth crash window is integration. Its transaction id is the ship
|
|
349
|
+
commit, and partial merge, tag, push, and cleanup states are resumed only by
|
|
350
|
+
rerunning `integrate`; it reuses NNN from STATE.archive. While integration
|
|
351
|
+
is pending, never report shipped or start the next milestone; route back to
|
|
352
|
+
ship.
|
|
353
|
+
|
|
354
|
+
## Published validation recovery
|
|
355
|
+
|
|
356
|
+
Use this recovery only when STATE is `shipped/done`, the archive and ship
|
|
357
|
+
commit are already published, and `validate-integrated` is blocked by a defect
|
|
358
|
+
fixed in a newer trusted GSD Path checkout. Never run `prepare`,
|
|
359
|
+
`render-manifest`, `preflight`, `record-shipment`, or `integrate`, and never
|
|
360
|
+
edit the committed archive, STATE.md, Git history, or published refs and tags.
|
|
361
|
+
Only the validation checkout's local refs may be refreshed by the commands below.
|
|
362
|
+
Run this recovery setup from a separate checkout, outside the closed primary
|
|
363
|
+
worktree's guard.
|
|
364
|
+
|
|
365
|
+
1. Create separate disposable trust and validation checkouts from the same
|
|
366
|
+
published origin and `STATE.branch`. This separation is required because a
|
|
367
|
+
managed runtime refresh may dirty a checkout when `.gsd-path/` is tracked,
|
|
368
|
+
while archive validation requires a clean checkout. Never use the primary
|
|
369
|
+
worktree for either role.
|
|
370
|
+
2. From the trusted fixed GSD Path checkout, preview and then refresh only the
|
|
371
|
+
disposable trust checkout's managed trust anchor:
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
node <trusted-gsd-path>/scripts/install.mjs --hooks-refresh --dry-run --project <trust-root>
|
|
375
|
+
node <trusted-gsd-path>/scripts/install.mjs --hooks-refresh --project <trust-root>
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
Continue only when the preview names managed `.gsd-path/` runtime or guard
|
|
379
|
+
files and no `.project/` path. The installer owns the atomic refresh and
|
|
380
|
+
refuses unmanaged or unsafe runtime entries.
|
|
381
|
+
3. Use only the refreshed project-local trust anchor to refresh publication
|
|
382
|
+
refs in the clean validation checkout and validate its integrated milestone:
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
python3 <trust-root>/.gsd-path/runtime/archive_milestone.py refresh-origin --repo <validation-root>
|
|
386
|
+
python3 <trust-root>/.gsd-path/runtime/archive_milestone.py validate-integrated --repo <validation-root> --slug <STATE.milestone>
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
4. A pass restores the normal shipped handoff without another commit or
|
|
390
|
+
publication action. Remove only the disposable checkouts. A failure is a
|
|
391
|
+
new validation finding: report it with the primary worktree's archived
|
|
392
|
+
MANIFEST.md and stop. Never repair an already-committed archive to satisfy
|
|
393
|
+
a newer validator.
|
|
394
|
+
|
|
395
|
+
Legacy ship and integration subjects may be ignored only while scanning older
|
|
396
|
+
milestones. They never satisfy the current milestone transaction. Current
|
|
397
|
+
validation requires exactly one canonical ship commit. Direct integration
|
|
398
|
+
also requires the canonical integration subject and body; PR integration uses
|
|
399
|
+
the exact PR metadata, annotated tag metadata, and merge topology instead.
|
|
400
|
+
|
|
401
|
+
## Rules
|
|
402
|
+
|
|
403
|
+
- Judge written expectations only: INTENT.md criteria in final mode, walked
|
|
404
|
+
through PLAN.md's Surface contract for every criterion covering a surface.
|
|
405
|
+
- Require criterion, observed result, exact file or command evidence, and fix
|
|
406
|
+
direction for every failure.
|
|
407
|
+
- Warn on ambiguity, but do not invent stronger requirements.
|
|
408
|
+
- Never count `unverifiable`, an unreviewed risk, or an unvalidated archive as
|
|
409
|
+
shipped.
|
|
410
|
+
- Never merge or back-merge into the bound branch; ship's integration is its
|
|
411
|
+
only path to the default branch. Never enter the default checkout; its
|
|
412
|
+
local default branch ref may lag origin.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Shared Agent Skills dispatch
|
|
2
|
+
|
|
3
|
+
Apply this contract whenever a GSD Path skill delegates work from the shared
|
|
4
|
+
`~/.agents/skills` bundle. Inspect the advertised child-agent tool schema and
|
|
5
|
+
use exactly one matching branch:
|
|
6
|
+
|
|
7
|
+
- A `spawn_agent` tool exposing `task_name`, `agent_type`, and `fork_turns` is
|
|
8
|
+
Codex. Use `fork_turns: "none"`; coders use the built-in `worker` type and
|
|
9
|
+
every other role uses `default`. Reuse a completed logical target with
|
|
10
|
+
`followup_task`. For Codex reasoning effort, use `high` for the portable
|
|
11
|
+
`heavy` tier and `low` for the portable `light` tier; leave reasoning effort
|
|
12
|
+
unset for the session-default tier, and never pass `heavy` or `light` as a
|
|
13
|
+
literal Codex value.
|
|
14
|
+
- A `spawn_agent` tool without those Codex fields is Zed. Spawn one isolated,
|
|
15
|
+
full-capability child per brief. Zed children are not resumable, so retries
|
|
16
|
+
use a fresh child and a complete prompt.
|
|
17
|
+
- An `invoke_subagent` tool advertising `TypeName`, `Workspace`, and `Role` is
|
|
18
|
+
Antigravity. Use `TypeName: self`, the exact supplied root as `Workspace`,
|
|
19
|
+
and the logical task name as `Role`. Keep the returned child ID and use
|
|
20
|
+
`send_message` for follow-up work when available; otherwise start a fresh
|
|
21
|
+
child with the complete prompt.
|
|
22
|
+
- A `spawn_subagent` tool advertising the `general-purpose` type is Grok. Use
|
|
23
|
+
`subagent_type: general-purpose`, `capability_mode: all`, the exact supplied
|
|
24
|
+
root as `cwd`, `isolation: none`, and `background: true`. Supply the logical
|
|
25
|
+
task name as `description`, keep the returned ID, and use `resume_from` with
|
|
26
|
+
the complete new prompt for later work. Wait for a colliding active child and
|
|
27
|
+
collect results with `wait_commands_or_subagents`.
|
|
28
|
+
- A `Task` tool advertising the custom `gsd-path` subagent is Cursor. Use that
|
|
29
|
+
model-inheriting, full-capability child. Resume it by returned agent ID when
|
|
30
|
+
available; otherwise retry with a fresh child and a complete prompt.
|
|
31
|
+
- A `Task` tool advertising the built-in `general` subagent is OpenCode. Use
|
|
32
|
+
that child; if an installed OpenCode v2 host exposes the renamed `subagent`
|
|
33
|
+
tool instead, use its advertised schema with the built-in `general` agent.
|
|
34
|
+
Supply the logical task name as the child description. Reuse a returned
|
|
35
|
+
child-session ID only when the host advertises a resume parameter; otherwise
|
|
36
|
+
use a fresh `general` child and the complete prompt.
|
|
37
|
+
- A `task` tool advertising the `general-purpose` child is GitHub Copilot CLI.
|
|
38
|
+
Use that child. Keep its returned ID for follow-up while the host exposes
|
|
39
|
+
it; otherwise retry with a fresh child and a complete prompt.
|
|
40
|
+
- An `invoke_sub_agent` tool with a `general-purpose` subagent is Kiro. Use
|
|
41
|
+
that child for every role; there is no worker/default type split. Start a
|
|
42
|
+
fresh general-purpose child for every correction, retry, post-patch review,
|
|
43
|
+
repeated audit, or later milestone — Kiro subagents are not resumable and
|
|
44
|
+
disk artifacts are the source of truth. Supply the logical task name as the
|
|
45
|
+
task description. Set the child working directory to the exact repository or
|
|
46
|
+
linked-worktree root supplied by GSD Path; do not ask Kiro or the child to
|
|
47
|
+
create another worktree. Encode task dependencies explicitly; launch
|
|
48
|
+
independent children concurrently up to the host's advertised
|
|
49
|
+
concurrent-subagent capacity.
|
|
50
|
+
|
|
51
|
+
For every branch:
|
|
52
|
+
|
|
53
|
+
- Supply the deterministic logical task name: `inspect_codebase`,
|
|
54
|
+
`inspect_docs`, `docs_audit`, `research_<dimension>`, `decide`, `roadmap`,
|
|
55
|
+
`plan`,
|
|
56
|
+
`plan_patch`, `build_<task_id>`, `review_wave_<wave>_cycle_<cycle>`
|
|
57
|
+
(a `deep` wave review appends the lens suffix `_contract` or
|
|
58
|
+
`_adversarial`; an optional review panel uses
|
|
59
|
+
`review_wave_<wave>_cycle_<cycle>_panel_<family>`; an optional finding
|
|
60
|
+
skeptic uses `review_wave_<wave>_cycle_<cycle>_skeptic_<criterion_locator>`),
|
|
61
|
+
`review_plan_panel_<family>`,
|
|
62
|
+
`review_final`, or `review_gap_<number>`. Normalize variable parts to
|
|
63
|
+
lowercase ASCII and replace non-alphanumeric runs with one underscore.
|
|
64
|
+
Never add a random suffix or collide with a running logical target.
|
|
65
|
+
- Resolve the phase's linked role brief to an absolute path, include it in the
|
|
66
|
+
prompt, and require the child to read it before acting. The role brief
|
|
67
|
+
supplies the read-only boundary for auditors and reviewers.
|
|
68
|
+
- Tier hints: use the portable `heavy` tier for `plan`, `plan_patch`, `decide`,
|
|
69
|
+
and `roadmap`, the portable `light` tier for `inspect_docs` and `docs_audit`,
|
|
70
|
+
and the session-default tier for every other role. Apply the Codex mapping
|
|
71
|
+
above when its schema advertises reasoning-effort selection. On every other
|
|
72
|
+
host, use only an exact native equivalent advertised by that host; otherwise
|
|
73
|
+
do not override the model or reasoning effort. The only exception is a
|
|
74
|
+
review-panel child: when the host advertises model selection, pass the exact
|
|
75
|
+
slug returned by `scripts/review_panel.py resolve` for that family. Never
|
|
76
|
+
override the model on the canonical reviewer, planner, coder, or any other
|
|
77
|
+
role.
|
|
78
|
+
Host isolation: none. The child's working directory is the exact absolute
|
|
79
|
+
root GSD Path supplied; a host SHA checkout or extra worktree is a contract
|
|
80
|
+
failure. Never ask the host to create a worktree. Give the child the exact
|
|
81
|
+
repository or linked-worktree root supplied by GSD Path.
|
|
82
|
+
- Send a self-contained prompt with absolute input, template, and output paths
|
|
83
|
+
plus the child's bounded responsibility. Every brief also names the absolute
|
|
84
|
+
`AGENTS.md` and `WORKFLOW.md` paths (or explicitly says they are absent), the
|
|
85
|
+
next phase that consumes the output, the gate it must satisfy, and the
|
|
86
|
+
terminal result it must return. A coder prompt also names its isolated
|
|
87
|
+
linked-worktree root; no child may infer the primary worktree.
|
|
88
|
+
- The parent is the sole dispatcher and lifecycle owner. If the runtime exposes
|
|
89
|
+
structured Run/Task/Dispatch orchestration, bind one Run, create one Task per
|
|
90
|
+
independent brief with explicit dependencies, inject the brief, and wait for
|
|
91
|
+
every `worker_done`, `escalation`, or question before applying the gate.
|
|
92
|
+
Verify the task and dispatch records before reporting the work as
|
|
93
|
+
orchestrated. On runtimes without that layer, use the host adapter's
|
|
94
|
+
equivalent and preserve the same logical name, completion state,
|
|
95
|
+
timeout/cancellation, and cleanup rules; never silently delegate again from a
|
|
96
|
+
child.
|
|
97
|
+
- When the structured layer exposes a blocking ask/reply channel, route a
|
|
98
|
+
coder's `NEEDS-ORCHESTRATOR` question through it as a live question with
|
|
99
|
+
the worker held alive for the reply, instead of block-and-redispatch. The
|
|
100
|
+
answer is still appended to the task Log as
|
|
101
|
+
`Orchestrator answer:` so the portable on-disk record stays complete, and a
|
|
102
|
+
timed-out or unavailable channel falls back to the portable block path.
|
|
103
|
+
- A child that receives a disposable worktree stages its assigned artifact
|
|
104
|
+
under that root. The parent validates it and atomically transfers it to the
|
|
105
|
+
canonical project path before removing the exact disposable root. A child
|
|
106
|
+
never writes a disposable-review output directly into the primary worktree.
|
|
107
|
+
- Launch independent briefs concurrently up to the advertised child capacity,
|
|
108
|
+
batch any remainder without combining briefs, and collect every result
|
|
109
|
+
before applying the phase gate. Do not leave an active child, logical task, or
|
|
110
|
+
temporary worktree after collection; a timeout or cancellation is a blocked
|
|
111
|
+
result, not a silent success.
|
|
112
|
+
- If the tool schema is ambiguous or the required full-capability child is
|
|
113
|
+
unavailable, stop and report the missing capability. Do not guess the host
|
|
114
|
+
or silently collapse an independence boundary into the main context.
|
|
115
|
+
|
|
116
|
+
## Configured output budgets
|
|
117
|
+
|
|
118
|
+
When the owner supplies token budgets, use the router bundle's
|
|
119
|
+
`scripts/token_budget.py` with the owner's exact task and session values and
|
|
120
|
+
quoted authority. Keep one ledger outside the worktree under the Git common
|
|
121
|
+
directory for the full logical session; resumptions reuse it. Record completed
|
|
122
|
+
parent CLI run events and each native child's session events with stable logical
|
|
123
|
+
task names before the next dispatch. The helper reads host counters and refuses
|
|
124
|
+
incomplete or ambiguous usage; never estimate tokens or reset the ledger.
|
|
125
|
+
Run `admit` for the next task and stop dispatch on a blocked result. Preserve
|
|
126
|
+
its output in the dispatch evidence. This gates observed usage only: concurrent
|
|
127
|
+
or in-flight work can overrun before the host reports usage. Codex CLI has no
|
|
128
|
+
advertised hard output cap; report that limitation once. If the owner requires
|
|
129
|
+
hard generation enforcement, use `admit --require-hard-cap`; unsupported means
|
|
130
|
+
blocked, not budget compliance. Other hosts require a verified native counter
|
|
131
|
+
and cap adapter before any enforcement claim.
|