@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,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.
|