@opengsd/gsd-path 1.0.0 → 1.2.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 +33 -13
- package/CHANGELOG.md +68 -0
- package/DOCS.md +75 -6
- package/FULL.md +12 -15
- package/HOOKS.md +18 -9
- package/QUICK.md +8 -6
- package/README.md +218 -14
- package/RUNTIME.md +16 -5
- package/UPDATE.md +30 -11
- package/WORKFLOW.md +35 -16
- package/package.json +23 -1
- package/platforms/claude/dispatch.md +4 -4
- package/platforms/copilot/dispatch.md +4 -4
- package/platforms/cursor/dispatch.md +5 -10
- package/platforms/grok/dispatch.md +4 -6
- package/platforms/kimi/dispatch.md +4 -4
- package/platforms/kiro/dispatch.md +4 -6
- package/platforms/opencode/dispatch.md +4 -4
- package/platforms/qwen/dispatch.md +4 -4
- package/platforms/shared-agents/dispatch.md +12 -19
- package/scripts/_common.py +5 -0
- package/scripts/archive_milestone.py +30 -124
- package/scripts/bootstrap_repository.py +33 -4
- package/scripts/build_recovery.py +292 -0
- package/scripts/build_state.py +2 -0
- package/scripts/check_docs_audit.py +7 -3
- package/scripts/check_handoffs.py +7 -1
- package/scripts/check_task_briefs.py +3 -0
- package/scripts/detect_project.py +22 -3
- package/scripts/discussion_records.py +3 -0
- package/scripts/discussion_validate.py +8 -3
- package/scripts/dispatch_driver.py +233 -22
- package/scripts/git_guard.py +14 -5
- package/scripts/guard_hook.py +11 -1
- package/scripts/install.mjs +54 -1448
- package/scripts/install.py +155 -188
- package/scripts/integration.py +54 -28
- package/scripts/isolation.py +24 -6
- package/scripts/jev_review.py +138 -0
- package/scripts/lean_verification.py +3 -1
- package/scripts/loop_run.py +2 -0
- package/scripts/model_policy.py +279 -0
- package/scripts/path_config.py +248 -0
- package/scripts/pipeline_diagnose.py +15 -3
- package/scripts/pipeline_git.py +3 -0
- package/scripts/pipeline_state.py +117 -186
- package/scripts/pipeline_undo.py +14 -7
- package/scripts/promote_lookahead.py +33 -162
- package/scripts/review_panel.py +11 -0
- package/scripts/roadmap.py +326 -0
- package/scripts/runtime_store.py +278 -0
- package/scripts/skill-resources.json +182 -4
- package/scripts/state_checkpoint.py +114 -72
- package/scripts/state_promote.py +47 -44
- package/scripts/status_runtime.py +92 -6
- package/scripts/task_context.py +73 -0
- package/scripts/token_budget.py +40 -1
- package/scripts/workflow_run.py +128 -8
- package/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path/BUILD.md +54 -575
- package/skills/gsd-path/DECIDE.md +4 -6
- package/skills/gsd-path/DEFINE.md +23 -21
- package/skills/gsd-path/DOCS-AUDIT.md +2 -0
- package/skills/gsd-path/INSPECT.md +32 -8
- package/skills/gsd-path/PLAN.md +29 -19
- package/skills/gsd-path/RESEARCH.md +5 -6
- package/skills/gsd-path/ROADMAP.md +24 -58
- package/skills/gsd-path/SHIP.md +29 -17
- package/skills/gsd-path/SKILL.md +46 -22
- package/skills/gsd-path/references/build-abandon.md +33 -0
- package/skills/gsd-path/references/build-native.md +502 -0
- package/skills/gsd-path/references/build-recovery.md +78 -0
- package/skills/gsd-path/references/coder.md +8 -3
- package/skills/gsd-path/references/config.md +57 -0
- package/skills/gsd-path/references/dispatch.md +12 -19
- package/skills/gsd-path/references/docs-auditor.md +14 -0
- package/skills/gsd-path/references/jev-review.md +82 -0
- package/skills/gsd-path/references/model-policy.md +139 -0
- package/skills/gsd-path/references/reviewer-final.md +21 -0
- package/skills/gsd-path/references/reviewer-panel.md +17 -0
- package/skills/gsd-path/references/reviewer-skeptic.md +20 -0
- package/skills/gsd-path/references/reviewer-wave.md +89 -0
- package/skills/gsd-path/references/reviewer.md +12 -148
- package/skills/gsd-path/references/runtime-selection.md +25 -0
- package/skills/gsd-path/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
- package/skills/gsd-path/scripts/_common.py +5 -0
- package/skills/gsd-path/scripts/archive_milestone.py +30 -124
- package/skills/gsd-path/scripts/bootstrap_repository.py +33 -4
- package/skills/gsd-path/scripts/build_recovery.py +292 -0
- package/skills/gsd-path/scripts/build_state.py +2 -0
- package/skills/gsd-path/scripts/check_docs_audit.py +7 -3
- package/skills/gsd-path/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path/scripts/detect_project.py +22 -3
- package/skills/gsd-path/scripts/discussion_records.py +3 -0
- package/skills/gsd-path/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path/scripts/dispatch_driver.py +233 -22
- package/skills/gsd-path/scripts/git_guard.py +768 -0
- package/skills/gsd-path/scripts/integration.py +54 -28
- package/skills/gsd-path/scripts/isolation.py +24 -6
- package/skills/gsd-path/scripts/jev_review.py +138 -0
- package/skills/gsd-path/scripts/lean_verification.py +3 -1
- package/skills/gsd-path/scripts/loop_run.py +2 -0
- package/skills/gsd-path/scripts/model_policy.py +279 -0
- package/skills/gsd-path/scripts/path_config.py +248 -0
- package/skills/gsd-path/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path/scripts/promote_lookahead.py +33 -162
- package/skills/gsd-path/scripts/review_panel.py +11 -0
- package/skills/gsd-path/scripts/roadmap.py +326 -0
- package/skills/gsd-path/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path/scripts/state_promote.py +47 -44
- package/skills/gsd-path/scripts/status_runtime.py +208 -0
- package/skills/gsd-path/scripts/task_context.py +73 -0
- package/skills/gsd-path/scripts/token_budget.py +40 -1
- package/skills/gsd-path/scripts/workflow_run.py +128 -8
- package/skills/gsd-path/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path/templates/skeptic.md +1 -1
- package/skills/gsd-path/templates/task.md +2 -0
- package/skills/gsd-path/templates/wave-panel.md +1 -1
- package/skills/gsd-path/templates/wave-review.md +1 -1
- package/skills/gsd-path-build/SKILL.md +54 -575
- package/skills/gsd-path-build/references/build-abandon.md +33 -0
- package/skills/gsd-path-build/references/build-native.md +502 -0
- package/skills/gsd-path-build/references/build-recovery.md +78 -0
- package/skills/gsd-path-build/references/coder.md +8 -3
- package/skills/gsd-path-build/references/dispatch.md +12 -19
- package/skills/gsd-path-build/references/jev-review.md +82 -0
- package/skills/gsd-path-build/references/model-policy.md +139 -0
- package/skills/gsd-path-build/references/reviewer-final.md +21 -0
- package/skills/gsd-path-build/references/reviewer-panel.md +17 -0
- package/skills/gsd-path-build/references/reviewer-skeptic.md +20 -0
- package/skills/gsd-path-build/references/reviewer-wave.md +89 -0
- package/skills/gsd-path-build/references/reviewer.md +12 -148
- package/skills/gsd-path-build/references/runtime-selection.md +25 -0
- package/skills/gsd-path-build/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/__pycache__/check_handoffs.cpython-312.pyc +0 -0
- package/skills/gsd-path-build/scripts/_common.py +5 -0
- package/skills/gsd-path-build/scripts/archive_milestone.py +30 -124
- package/skills/gsd-path-build/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-build/scripts/build_state.py +2 -0
- package/skills/gsd-path-build/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-build/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-build/scripts/detect_project.py +1536 -0
- package/skills/gsd-path-build/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-build/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-build/scripts/dispatch_driver.py +233 -22
- package/skills/gsd-path-build/scripts/integration.py +54 -28
- package/skills/gsd-path-build/scripts/isolation.py +24 -6
- package/skills/gsd-path-build/scripts/jev_review.py +138 -0
- package/skills/gsd-path-build/scripts/loop_run.py +2 -0
- package/skills/gsd-path-build/scripts/model_policy.py +279 -0
- package/skills/gsd-path-build/scripts/path_config.py +248 -0
- package/skills/gsd-path-build/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-build/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-build/scripts/promote_lookahead.py +286 -0
- package/skills/gsd-path-build/scripts/review_panel.py +11 -0
- package/skills/gsd-path-build/scripts/roadmap.py +326 -0
- package/skills/gsd-path-build/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-build/scripts/state_promote.py +47 -44
- package/skills/gsd-path-build/scripts/task_context.py +73 -0
- package/skills/gsd-path-build/scripts/token_budget.py +40 -1
- package/skills/gsd-path-build/scripts/workflow_run.py +128 -8
- package/skills/gsd-path-build/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-build/templates/skeptic.md +1 -1
- package/skills/gsd-path-build/templates/task.md +2 -0
- package/skills/gsd-path-build/templates/wave-panel.md +1 -1
- package/skills/gsd-path-build/templates/wave-review.md +1 -1
- package/skills/gsd-path-decide/SKILL.md +4 -6
- package/skills/gsd-path-decide/references/dispatch.md +12 -19
- package/skills/gsd-path-decide/references/model-policy.md +139 -0
- package/skills/gsd-path-decide/references/runtime-selection.md +25 -0
- package/skills/gsd-path-decide/scripts/_common.py +5 -0
- package/skills/gsd-path-decide/scripts/archive_milestone.py +2171 -0
- package/skills/gsd-path-decide/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-decide/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-decide/scripts/detect_project.py +1536 -0
- package/skills/gsd-path-decide/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-decide/scripts/discussion_validate.py +1326 -0
- package/skills/gsd-path-decide/scripts/integration.py +1459 -0
- package/skills/gsd-path-decide/scripts/isolation.py +24 -6
- package/skills/gsd-path-decide/scripts/loop_run.py +839 -0
- package/skills/gsd-path-decide/scripts/model_policy.py +279 -0
- package/skills/gsd-path-decide/scripts/path_config.py +248 -0
- package/skills/gsd-path-decide/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-decide/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-decide/scripts/promote_lookahead.py +286 -0
- package/skills/gsd-path-decide/scripts/review_panel.py +564 -0
- package/skills/gsd-path-decide/scripts/roadmap.py +326 -0
- package/skills/gsd-path-decide/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-decide/scripts/state_promote.py +47 -44
- package/skills/gsd-path-decide/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-define/SKILL.md +23 -21
- package/skills/gsd-path-define/references/build-recovery.md +78 -0
- package/skills/gsd-path-define/references/runtime-selection.md +25 -0
- package/skills/gsd-path-define/scripts/_common.py +5 -0
- package/skills/gsd-path-define/scripts/archive_milestone.py +2171 -0
- package/skills/gsd-path-define/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-define/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-define/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-define/scripts/detect_project.py +22 -3
- package/skills/gsd-path-define/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-define/scripts/discussion_validate.py +1326 -0
- package/skills/gsd-path-define/scripts/integration.py +1459 -0
- package/skills/gsd-path-define/scripts/isolation.py +24 -6
- package/skills/gsd-path-define/scripts/loop_run.py +839 -0
- package/skills/gsd-path-define/scripts/model_policy.py +279 -0
- package/skills/gsd-path-define/scripts/path_config.py +248 -0
- package/skills/gsd-path-define/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-define/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-define/scripts/promote_lookahead.py +286 -0
- package/skills/gsd-path-define/scripts/review_panel.py +564 -0
- package/skills/gsd-path-define/scripts/roadmap.py +326 -0
- package/skills/gsd-path-define/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-define/scripts/state_promote.py +47 -44
- package/skills/gsd-path-define/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-discuss/SKILL.md +2 -0
- package/skills/gsd-path-discuss/references/runtime-selection.md +25 -0
- package/skills/gsd-path-discuss/scripts/_common.py +5 -0
- package/skills/gsd-path-discuss/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-discuss/scripts/loop_run.py +839 -0
- package/skills/gsd-path-discuss/scripts/model_policy.py +279 -0
- package/skills/gsd-path-discuss/scripts/path_config.py +248 -0
- package/skills/gsd-path-discuss/scripts/review_panel.py +564 -0
- package/skills/gsd-path-discuss/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-docs-audit/SKILL.md +2 -0
- package/skills/gsd-path-docs-audit/references/dispatch.md +12 -19
- package/skills/gsd-path-docs-audit/references/docs-auditor.md +14 -0
- package/skills/gsd-path-docs-audit/references/model-policy.md +139 -0
- package/skills/gsd-path-docs-audit/references/runtime-selection.md +25 -0
- package/skills/gsd-path-docs-audit/scripts/_common.py +5 -0
- package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +2171 -0
- package/skills/gsd-path-docs-audit/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +7 -3
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-docs-audit/scripts/detect_project.py +1536 -0
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +1326 -0
- package/skills/gsd-path-docs-audit/scripts/integration.py +1459 -0
- package/skills/gsd-path-docs-audit/scripts/isolation.py +24 -6
- package/skills/gsd-path-docs-audit/scripts/loop_run.py +839 -0
- package/skills/gsd-path-docs-audit/scripts/model_policy.py +279 -0
- package/skills/gsd-path-docs-audit/scripts/path_config.py +248 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +286 -0
- package/skills/gsd-path-docs-audit/scripts/review_panel.py +564 -0
- package/skills/gsd-path-docs-audit/scripts/roadmap.py +326 -0
- package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +47 -44
- package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-forensics/SKILL.md +9 -5
- package/skills/gsd-path-forensics/references/runtime-selection.md +25 -0
- package/skills/gsd-path-forensics/scripts/_common.py +5 -0
- package/skills/gsd-path-forensics/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-forensics/scripts/loop_run.py +839 -0
- package/skills/gsd-path-forensics/scripts/model_policy.py +279 -0
- package/skills/gsd-path-forensics/scripts/path_config.py +248 -0
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +15 -3
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +14 -7
- package/skills/gsd-path-forensics/scripts/review_panel.py +564 -0
- package/skills/gsd-path-forensics/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-inspect/SKILL.md +32 -8
- package/skills/gsd-path-inspect/references/dispatch.md +12 -19
- package/skills/gsd-path-inspect/references/docs-auditor.md +14 -0
- package/skills/gsd-path-inspect/references/model-policy.md +139 -0
- package/skills/gsd-path-inspect/references/runtime-selection.md +25 -0
- package/skills/gsd-path-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-inspect/scripts/_common.py +5 -0
- package/skills/gsd-path-inspect/scripts/archive_milestone.py +2171 -0
- package/skills/gsd-path-inspect/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-inspect/scripts/check_docs_audit.py +7 -3
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-inspect/scripts/detect_project.py +22 -3
- package/skills/gsd-path-inspect/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-inspect/scripts/discussion_validate.py +1326 -0
- package/skills/gsd-path-inspect/scripts/integration.py +1459 -0
- package/skills/gsd-path-inspect/scripts/isolation.py +24 -6
- package/skills/gsd-path-inspect/scripts/loop_run.py +839 -0
- package/skills/gsd-path-inspect/scripts/model_policy.py +279 -0
- package/skills/gsd-path-inspect/scripts/path_config.py +248 -0
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-inspect/scripts/promote_lookahead.py +286 -0
- package/skills/gsd-path-inspect/scripts/review_panel.py +564 -0
- package/skills/gsd-path-inspect/scripts/roadmap.py +326 -0
- package/skills/gsd-path-inspect/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-inspect/scripts/state_promote.py +47 -44
- package/skills/gsd-path-inspect/scripts/workflow_run.py +237 -0
- package/skills/gsd-path-inspect/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-loop/SKILL.md +2 -0
- package/skills/gsd-path-loop/references/runtime-selection.md +25 -0
- package/skills/gsd-path-loop/scripts/_common.py +5 -0
- package/skills/gsd-path-loop/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-loop/scripts/loop_run.py +2 -0
- package/skills/gsd-path-loop/scripts/model_policy.py +279 -0
- package/skills/gsd-path-loop/scripts/path_config.py +248 -0
- package/skills/gsd-path-loop/scripts/review_panel.py +564 -0
- package/skills/gsd-path-loop/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-migrate/SKILL.md +2 -0
- package/skills/gsd-path-migrate/references/runtime-selection.md +25 -0
- package/skills/gsd-path-migrate/scripts/_common.py +185 -0
- package/skills/gsd-path-migrate/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-migrate/scripts/loop_run.py +839 -0
- package/skills/gsd-path-migrate/scripts/model_policy.py +279 -0
- package/skills/gsd-path-migrate/scripts/path_config.py +248 -0
- package/skills/gsd-path-migrate/scripts/review_panel.py +564 -0
- package/skills/gsd-path-plan/SKILL.md +29 -19
- package/skills/gsd-path-plan/references/build-recovery.md +78 -0
- package/skills/gsd-path-plan/references/dispatch.md +12 -19
- package/skills/gsd-path-plan/references/model-policy.md +139 -0
- package/skills/gsd-path-plan/references/runtime-selection.md +25 -0
- package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/_common.py +5 -0
- package/skills/gsd-path-plan/scripts/archive_milestone.py +2171 -0
- package/skills/gsd-path-plan/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-plan/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-plan/scripts/detect_project.py +1536 -0
- package/skills/gsd-path-plan/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-plan/scripts/discussion_validate.py +1326 -0
- package/skills/gsd-path-plan/scripts/integration.py +1459 -0
- package/skills/gsd-path-plan/scripts/isolation.py +24 -6
- package/skills/gsd-path-plan/scripts/loop_run.py +839 -0
- package/skills/gsd-path-plan/scripts/model_policy.py +279 -0
- package/skills/gsd-path-plan/scripts/path_config.py +248 -0
- package/skills/gsd-path-plan/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-plan/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-plan/scripts/promote_lookahead.py +286 -0
- package/skills/gsd-path-plan/scripts/review_panel.py +11 -0
- package/skills/gsd-path-plan/scripts/roadmap.py +326 -0
- package/skills/gsd-path-plan/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-plan/scripts/state_promote.py +47 -44
- package/skills/gsd-path-plan/scripts/workflow_run.py +128 -8
- package/skills/gsd-path-plan/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-plan/templates/task.md +2 -0
- package/skills/gsd-path-research/SKILL.md +5 -6
- package/skills/gsd-path-research/references/dispatch.md +12 -19
- package/skills/gsd-path-research/references/model-policy.md +139 -0
- package/skills/gsd-path-research/references/runtime-selection.md +25 -0
- package/skills/gsd-path-research/scripts/_common.py +5 -0
- package/skills/gsd-path-research/scripts/archive_milestone.py +2171 -0
- package/skills/gsd-path-research/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-research/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-research/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-research/scripts/detect_project.py +1536 -0
- package/skills/gsd-path-research/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-research/scripts/discussion_validate.py +1326 -0
- package/skills/gsd-path-research/scripts/integration.py +1459 -0
- package/skills/gsd-path-research/scripts/isolation.py +24 -6
- package/skills/gsd-path-research/scripts/loop_run.py +839 -0
- package/skills/gsd-path-research/scripts/model_policy.py +279 -0
- package/skills/gsd-path-research/scripts/path_config.py +248 -0
- package/skills/gsd-path-research/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-research/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-research/scripts/promote_lookahead.py +286 -0
- package/skills/gsd-path-research/scripts/review_panel.py +564 -0
- package/skills/gsd-path-research/scripts/roadmap.py +326 -0
- package/skills/gsd-path-research/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-research/scripts/state_promote.py +47 -44
- package/skills/gsd-path-research/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-roadmap/SKILL.md +24 -58
- package/skills/gsd-path-roadmap/references/dispatch.md +12 -19
- package/skills/gsd-path-roadmap/references/model-policy.md +139 -0
- package/skills/gsd-path-roadmap/references/runtime-selection.md +25 -0
- package/skills/gsd-path-roadmap/scripts/_common.py +5 -0
- package/skills/gsd-path-roadmap/scripts/archive_milestone.py +30 -124
- package/skills/gsd-path-roadmap/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-roadmap/scripts/detect_project.py +22 -3
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-roadmap/scripts/integration.py +54 -28
- package/skills/gsd-path-roadmap/scripts/isolation.py +24 -6
- package/skills/gsd-path-roadmap/scripts/loop_run.py +839 -0
- package/skills/gsd-path-roadmap/scripts/model_policy.py +279 -0
- package/skills/gsd-path-roadmap/scripts/path_config.py +248 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +33 -162
- package/skills/gsd-path-roadmap/scripts/review_panel.py +11 -0
- package/skills/gsd-path-roadmap/scripts/roadmap.py +326 -0
- package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-roadmap/scripts/state_promote.py +47 -44
- package/skills/gsd-path-roadmap/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-ship/SKILL.md +29 -17
- package/skills/gsd-path-ship/references/dispatch.md +12 -19
- package/skills/gsd-path-ship/references/jev-review.md +82 -0
- package/skills/gsd-path-ship/references/model-policy.md +139 -0
- package/skills/gsd-path-ship/references/reviewer-final.md +21 -0
- package/skills/gsd-path-ship/references/reviewer-panel.md +17 -0
- package/skills/gsd-path-ship/references/reviewer-skeptic.md +20 -0
- package/skills/gsd-path-ship/references/reviewer-wave.md +89 -0
- package/skills/gsd-path-ship/references/reviewer.md +12 -148
- package/skills/gsd-path-ship/references/runtime-selection.md +25 -0
- package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/_common.py +5 -0
- package/skills/gsd-path-ship/scripts/archive_milestone.py +30 -124
- package/skills/gsd-path-ship/scripts/build_recovery.py +292 -0
- package/skills/gsd-path-ship/scripts/build_state.py +2 -0
- package/skills/gsd-path-ship/scripts/check_handoffs.py +7 -1
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +3 -0
- package/skills/gsd-path-ship/scripts/detect_project.py +1536 -0
- package/skills/gsd-path-ship/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-ship/scripts/discussion_validate.py +8 -3
- package/skills/gsd-path-ship/scripts/integration.py +54 -28
- package/skills/gsd-path-ship/scripts/isolation.py +24 -6
- package/skills/gsd-path-ship/scripts/jev_review.py +138 -0
- package/skills/gsd-path-ship/scripts/lean_verification.py +3 -1
- package/skills/gsd-path-ship/scripts/loop_run.py +839 -0
- package/skills/gsd-path-ship/scripts/model_policy.py +279 -0
- package/skills/gsd-path-ship/scripts/path_config.py +248 -0
- package/skills/gsd-path-ship/scripts/pipeline_git.py +3 -0
- package/skills/gsd-path-ship/scripts/pipeline_state.py +117 -186
- package/skills/gsd-path-ship/scripts/promote_lookahead.py +286 -0
- package/skills/gsd-path-ship/scripts/review_panel.py +11 -0
- package/skills/gsd-path-ship/scripts/roadmap.py +326 -0
- package/skills/gsd-path-ship/scripts/state_checkpoint.py +114 -72
- package/skills/gsd-path-ship/scripts/state_promote.py +47 -44
- package/skills/gsd-path-ship/scripts/workflow_run.py +128 -8
- package/skills/gsd-path-ship/scripts/worktree_paths.py +94 -0
- package/skills/gsd-path-ship/templates/wave-review.md +1 -1
- package/skills/gsd-path-undo/SKILL.md +2 -0
- package/skills/gsd-path-undo/references/runtime-selection.md +25 -0
- package/skills/gsd-path-undo/scripts/_common.py +5 -0
- package/skills/gsd-path-undo/scripts/discussion_records.py +3 -0
- package/skills/gsd-path-undo/scripts/loop_run.py +839 -0
- package/skills/gsd-path-undo/scripts/model_policy.py +279 -0
- package/skills/gsd-path-undo/scripts/path_config.py +248 -0
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +14 -7
- package/skills/gsd-path-undo/scripts/review_panel.py +564 -0
- package/skills/gsd-path-undo/scripts/worktree_paths.py +94 -0
- package/skills/path/BUILD.md +54 -575
- package/skills/path/DECIDE.md +4 -6
- package/skills/path/DEFINE.md +23 -21
- package/skills/path/DOCS-AUDIT.md +2 -0
- package/skills/path/INSPECT.md +32 -8
- package/skills/path/PLAN.md +29 -19
- package/skills/path/RESEARCH.md +5 -6
- package/skills/path/ROADMAP.md +24 -58
- package/skills/path/SHIP.md +29 -17
- package/skills/path/SKILL.md +46 -22
- package/skills/path/references/build-abandon.md +33 -0
- package/skills/path/references/build-native.md +502 -0
- package/skills/path/references/build-recovery.md +78 -0
- package/skills/path/references/coder.md +8 -3
- package/skills/path/references/config.md +57 -0
- package/skills/path/references/dispatch.md +12 -19
- package/skills/path/references/docs-auditor.md +14 -0
- package/skills/path/references/jev-review.md +82 -0
- package/skills/path/references/model-policy.md +139 -0
- package/skills/path/references/reviewer-final.md +21 -0
- package/skills/path/references/reviewer-panel.md +17 -0
- package/skills/path/references/reviewer-skeptic.md +20 -0
- package/skills/path/references/reviewer-wave.md +89 -0
- package/skills/path/references/reviewer.md +12 -148
- package/skills/path/references/runtime-selection.md +25 -0
- package/skills/path/scripts/_common.py +5 -0
- package/skills/path/scripts/archive_milestone.py +30 -124
- package/skills/path/scripts/bootstrap_repository.py +33 -4
- package/skills/path/scripts/build_recovery.py +292 -0
- package/skills/path/scripts/build_state.py +2 -0
- package/skills/path/scripts/check_docs_audit.py +7 -3
- package/skills/path/scripts/check_handoffs.py +7 -1
- package/skills/path/scripts/check_task_briefs.py +3 -0
- package/skills/path/scripts/detect_project.py +22 -3
- package/skills/path/scripts/discussion_records.py +3 -0
- package/skills/path/scripts/discussion_validate.py +8 -3
- package/skills/path/scripts/dispatch_driver.py +233 -22
- package/skills/path/scripts/git_guard.py +768 -0
- package/skills/path/scripts/integration.py +54 -28
- package/skills/path/scripts/isolation.py +24 -6
- package/skills/path/scripts/jev_review.py +138 -0
- package/skills/path/scripts/lean_verification.py +3 -1
- package/skills/path/scripts/loop_run.py +2 -0
- package/skills/path/scripts/model_policy.py +279 -0
- package/skills/path/scripts/path_config.py +248 -0
- package/skills/path/scripts/pipeline_git.py +3 -0
- package/skills/path/scripts/pipeline_state.py +117 -186
- package/skills/path/scripts/promote_lookahead.py +33 -162
- package/skills/path/scripts/review_panel.py +11 -0
- package/skills/path/scripts/roadmap.py +326 -0
- package/skills/path/scripts/state_checkpoint.py +114 -72
- package/skills/path/scripts/state_promote.py +47 -44
- package/skills/path/scripts/status_runtime.py +208 -0
- package/skills/path/scripts/task_context.py +73 -0
- package/skills/path/scripts/token_budget.py +40 -1
- package/skills/path/scripts/workflow_run.py +128 -8
- package/skills/path/scripts/worktree_paths.py +94 -0
- package/skills/path/templates/skeptic.md +1 -1
- package/skills/path/templates/task.md +2 -0
- package/skills/path/templates/wave-panel.md +1 -1
- package/skills/path/templates/wave-review.md +1 -1
package/skills/path/BUILD.md
CHANGED
|
@@ -3,6 +3,8 @@ name: gsd-path-build
|
|
|
3
3
|
description: Execute or resume an approved GSD Path plan with isolated task worktrees, deterministic commits, and independent wave review. Use only when the user explicitly invokes $gsd-path-build or an active $gsd-path router explicitly routes to this phase.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
Before executing project helpers, read [runtime selection](references/runtime-selection.md).
|
|
7
|
+
|
|
6
8
|
# GSD Path Build Orchestrator
|
|
7
9
|
|
|
8
10
|
Orchestrate coders, task landing, and reviewers from the main conversation.
|
|
@@ -22,23 +24,14 @@ rule; never invoke an explicit-only sibling skill yourself.
|
|
|
22
24
|
marks an interrupted milestone-abandon transaction: resume the Milestone
|
|
23
25
|
abandon procedure below before any recovery or dispatch. `build/done` is
|
|
24
26
|
recovery-only: follow [Completion](#completion) instead of dispatching.
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
for blocked-wave finding sets. Resolve `scripts/check_handoffs.py`
|
|
34
|
-
for Intent coverage. Resolve `scripts/pipeline_state.py` for guarded state
|
|
35
|
-
transitions. Resolve `scripts/isolation.py` for task isolation, recovery,
|
|
36
|
-
verify sidecars, task landing, and bookkeeping checkpoints; do not invent
|
|
37
|
-
`git worktree add`, `--detach`, commit, or cherry-pick commands. Resolve
|
|
38
|
-
`scripts/build_state.py` for the ready set, task reconciliation, the
|
|
39
|
-
landed-task proof, and the verify ledger
|
|
40
|
-
(`.project/build/verify-ledger.jsonl`, one JSON line per run: command,
|
|
41
|
-
commit, result, timestamp); do not select or reconcile tasks in prose.
|
|
27
|
+
- Resolve the bundled `scripts/dispatch_driver.py`, `scripts/workflow_run.py`,
|
|
28
|
+
`scripts/pipeline_state.py`, `scripts/isolation.py`, and `scripts/build_state.py`.
|
|
29
|
+
Helpers own task selection, state, Git, and evidence. Use their receipts.
|
|
30
|
+
- Read the [dispatch contract](references/dispatch.md) only when dispatching
|
|
31
|
+
native children or resolving host counters. Children read their assigned role
|
|
32
|
+
and template; the parent resolves those paths without loading their contents.
|
|
33
|
+
Load the task template only when writing or repairing a task. Load the
|
|
34
|
+
wave-panel and skeptic templates only when those branches apply.
|
|
42
35
|
- There is no board file. Task frontmatter is the only task-state record;
|
|
43
36
|
when a report or question needs a wave summary, render it inline from the
|
|
44
37
|
task files and wave reviews. Record escalations and plan defects in the
|
|
@@ -107,6 +100,11 @@ rule; never invoke an explicit-only sibling skill yourself.
|
|
|
107
100
|
checkpoint `.project/` records uses this helper. Record the exact full HEAD
|
|
108
101
|
before the first metadata change in that checkpoint, then run:
|
|
109
102
|
|
|
103
|
+
Explicit configuration edits in `.project/config.json` and
|
|
104
|
+
`.project/model-policy.json` are expected bookkeeping. Include them in the next
|
|
105
|
+
normal checkpoint before a clean dispatch base; they may remain pending while
|
|
106
|
+
an already dispatched task lands. Existing model selections stay pinned.
|
|
107
|
+
|
|
110
108
|
```text
|
|
111
109
|
python3 <absolute isolation.py> checkpoint \
|
|
112
110
|
--repo <absolute primary> \
|
|
@@ -128,573 +126,54 @@ brief unless the canonical `build: abandon milestone <slug>` checkpoint moves
|
|
|
128
126
|
that same brief into `.project/archive/`; build adds fix tasks and repairs
|
|
129
127
|
briefs, it never replans.
|
|
130
128
|
|
|
131
|
-
##
|
|
129
|
+
## Execute from runtime receipts
|
|
132
130
|
|
|
133
|
-
For each
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
**Dispatch driver.** Steps 1–5 below are deterministic, and the bundled
|
|
137
|
-
`scripts/dispatch_driver.py` runs them: recover, settle exited coders, the
|
|
138
|
-
bookkeeping checkpoint, `ready`, brief lint, `prepare-task`, `activate-task`,
|
|
139
|
-
one child per ready task, then Verify in the isolate, Log append, `land`,
|
|
140
|
-
`verify-record`, and `retire` in task-id order. Prefer it whenever the owner
|
|
141
|
-
supplies a child command (a headless CLI that reads the brief on stdin, for
|
|
142
|
-
example `claude -p --output-format json ...` or `codex exec --json ...`; the
|
|
143
|
-
owner's flags own the child's permissions):
|
|
131
|
+
For each wave in PLAN.md, use the existing dispatch driver when the owner has
|
|
132
|
+
supplied a child command. Preserve that command and its permission flags; never
|
|
133
|
+
invent a headless command or widen permissions to enable the driver.
|
|
144
134
|
|
|
145
135
|
```text
|
|
146
136
|
python3 <absolute dispatch_driver.py> round --repo <absolute primary> --wave <N> \
|
|
147
|
-
--child-command '<owner command>'
|
|
148
|
-
[--child-timeout <owner seconds>]
|
|
137
|
+
--child-command '<owner command>'
|
|
149
138
|
```
|
|
150
139
|
|
|
151
|
-
`round` owns
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
review
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
verbatim, or returns `escalate` for structural blockers, skeptic groups, the
|
|
174
|
-
cycle cap, or an all-refuted ruling, which stay with step 7 and the user.
|
|
175
|
-
The driver never writes a `verify-only` file (`status: not-applicable`);
|
|
176
|
-
`in-flight` means call `round` again; `question` means answer from the
|
|
177
|
-
approved artifacts or the user, record it with `answer --task-id <id>
|
|
178
|
-
--answer '<answer> — <citation>'`, and call `round` again, which redispatches
|
|
179
|
-
the retained isolate; `blocked` names the task, reason, and output and leaves
|
|
180
|
-
the isolate in place — apply the recovery, retry, or plan-defect procedure in
|
|
181
|
-
steps 1–2 by hand, then call `round` again. The driver counts dispatches per
|
|
182
|
-
task per milestone and stops at `--max-attempts` (default 2: the first
|
|
183
|
-
dispatch plus this contract's one logged redispatch); owner token limits, when
|
|
184
|
-
supplied, gate every dispatch through the milestone's budget ledger. Do not repeat a step the receipt
|
|
185
|
-
already proves. Without a child command, dispatch through the runtime
|
|
186
|
-
dispatch contract and perform steps 1–5 by hand.
|
|
187
|
-
|
|
188
|
-
1. **Recover before dispatch.** Run `python3 <absolute isolation.py> recover
|
|
189
|
-
--repo <absolute primary>`. It is read-only and proves every `done` task's
|
|
190
|
-
landing commit from its exact stamped base (first-parent scan for
|
|
191
|
-
`<task-id>: <task title>`, body `Task:`/`Base:`/`Files:`, the base task's
|
|
192
|
-
declared path allow-list from the task file at that base, exact landing
|
|
193
|
-
metadata, append-only task-file body, and
|
|
194
|
-
patch equality with a retained task branch). Pending and `in-progress`
|
|
195
|
-
tasks bypass landing-history proof and report retained resume state or
|
|
196
|
-
`none`; failed and blocked tasks with retained isolation report
|
|
197
|
-
`reconcile`. Act only on its verdicts;
|
|
198
|
-
do not re-derive them in prose, rerun Verify on a proven commit, use an
|
|
199
|
-
unanchored log grep, infer a SHA from `done`, or reset unknown work.
|
|
200
|
-
- `attested`: an owner ruling stands in for the landing commit (see the
|
|
201
|
-
block escalation below); treat it as landed and never redispatch.
|
|
202
|
-
- `recovered`: the task is landed (`land` already stamped `status: done`
|
|
203
|
-
and `base`). Retire a still-present task worktree with `isolation.py
|
|
204
|
-
retire` only when the report shows it present, clean, and on the task
|
|
205
|
-
branch. If only `task_branch` remains, finish its proven interrupted
|
|
206
|
-
retirement with `retire --branch <task_branch> --force --landed-commit
|
|
207
|
-
<commit>`; both absent is valid.
|
|
208
|
-
- `resume`: continue from the returned `base`, `task_branch`, and worktree
|
|
209
|
-
(the primary itself when no task branch exists); when the report shows
|
|
210
|
-
the worktree absent, return the task to `pending` only when ownership is
|
|
211
|
-
clear. When `dispatch_retry` is true, reuse the returned clean isolate,
|
|
212
|
-
write fresh dispatch metadata and agent there, then dispatch; do not
|
|
213
|
-
recreate it. When `landing_retry` is true, do not resume implementation
|
|
214
|
-
or redispatch; rerun `land` against the returned isolate and base.
|
|
215
|
-
- `reconcile`: do not resume implementation. Preserve the returned isolate
|
|
216
|
-
evidence and follow the failed/blocked reconciliation in step 2.
|
|
217
|
-
- `block` on a `done` task with reason `done but no landing commit proves
|
|
218
|
-
it` or `done task has invalid base`: the work was committed outside
|
|
219
|
-
`land`. Never repair history or task frontmatter by hand. Set
|
|
220
|
-
`build/blocked`, present **Outcome** naming every such task, and ask the
|
|
221
|
-
user for a ruling per task; put any suggested ruling text in its own
|
|
222
|
-
fenced code block so it pastes cleanly. On an explicit ruling, run that task's Verify
|
|
223
|
-
at HEAD, record it with `python3 <absolute build_state.py> verify-record
|
|
224
|
-
--repo <absolute primary> --command <task Verify> --commit <HEAD>
|
|
225
|
-
--result pass`, then run `python3 <absolute isolation.py> attest --repo
|
|
226
|
-
<absolute primary> --task-file <task file> --ruling <ruling verbatim>`
|
|
227
|
-
(add `--base <SHA>` only to repair an abbreviated or invalid recorded
|
|
228
|
-
base). The helper stamps the task and creates the attestation commit
|
|
229
|
-
itself; each one moves HEAD, so attest tasks one at a time and rerun
|
|
230
|
-
`recover` afterwards.
|
|
231
|
-
- Rewritten lineage: when every `done` task is rejected with `commit does
|
|
232
|
-
not descend from its Base:` after a rebase or replay, the owner may run
|
|
233
|
-
`python3 <absolute isolation.py> adopt-rebase --repo <absolute primary>
|
|
234
|
-
--original-head <preserved original tip> --head <HEAD> --ruling
|
|
235
|
-
"<ruling verbatim>"`, commit the receipt
|
|
236
|
-
`.project/build/rebase-adoption.json` as `.project/` bookkeeping, and
|
|
237
|
-
rerun `recover`. The original lineage must stay reachable: keep a local
|
|
238
|
-
branch on the old tip until the milestone ships. Adopted tasks report
|
|
239
|
-
`attested` with `provenance: owner-authorized-rebase`.
|
|
240
|
-
- `block` for any other reason: set `build/blocked` with the returned
|
|
241
|
-
reason and stop.
|
|
242
|
-
- `none`: take no recovery action for that task.
|
|
243
|
-
|
|
244
|
-
2. **Prepare the ready set.** Run `python3 <absolute build_state.py> ready
|
|
245
|
-
--repo <absolute primary>`. It is read-only: it validates every task's
|
|
246
|
-
frontmatter against its dispatch metadata and the recovery report, then
|
|
247
|
-
returns `ready` — the current wave's `pending` tasks whose dependencies are
|
|
248
|
-
all `done`, each with `id`, `title`, `deps`, `files`, `task_file`, and
|
|
249
|
-
`verify_heavy` — after proving that ready and `in-progress` tasks have
|
|
250
|
-
disjoint `files`. Dispatch exactly the tasks it returns; do not select,
|
|
251
|
-
order, or overlap-check tasks in prose. Readiness is continuous, not
|
|
252
|
-
layered: a task becomes selectable the moment its last dependency lands,
|
|
253
|
-
even while unrelated tasks still run, so rerun `ready` after each landing.
|
|
254
|
-
A `NEEDS-ORCHESTRATOR` block stays unselectable until its `Orchestrator
|
|
255
|
-
answer` is recorded in the task Log and the task is back to `pending`.
|
|
256
|
-
Its typed errors are the recovery rule:
|
|
257
|
-
- `task-recovery-required`: for each listed failed or blocked task run
|
|
258
|
-
`python3 <absolute build_state.py> reconcile --repo <absolute primary>
|
|
259
|
-
--task-id <id>` and act on its `classification`. `proven-landed`: the
|
|
260
|
-
task already landed at `landed_commit` and its frontmatter is stale —
|
|
261
|
-
reconcile the task file to that landed state and checkpoint it.
|
|
262
|
-
`resumable` or `reconcile`: apply the retry procedure below with the
|
|
263
|
-
returned `history.candidates` as the rejected evidence. `blocked`: set
|
|
264
|
-
`build/blocked` with the returned `reasons` and stop.
|
|
265
|
-
- `dependency-deadlock`: set `build/blocked` with its `tasks` list and stop.
|
|
266
|
-
- `ready-file-overlap` or `invalid-task-state`: a documented plan defect or
|
|
267
|
-
drifted bookkeeping; repair it before a new clean base.
|
|
268
|
-
A documented plan
|
|
269
|
-
defect may be repaired against INTENT.md and SYNTHESIS.md and logged before
|
|
270
|
-
a new clean base. A repair edits only the fields the lint or ruling named
|
|
271
|
-
in the tasks it named — `files`, Verify, Interface contract text, Intent
|
|
272
|
-
coverage rows, an ambiguous AC. It never adds, removes, splits, merges, or
|
|
273
|
-
renames tasks, moves a task between waves, or rewrites another task's
|
|
274
|
-
acceptance criteria; a defect that needs any of those sets `build/blocked`
|
|
275
|
-
with the lint output and returns to plan, which owns the task inventory.
|
|
276
|
-
A user ruling that changes a success criterion,
|
|
277
|
-
constraint, or veto is not a plan defect: set `build/blocked`, do not
|
|
278
|
-
rewrite the AC, and send `$gsd-path-define` to append INTENT.md
|
|
279
|
-
`## Corrections` before plan re-gates. A task Log is not that record. One failed implementation gets one logged redispatch when
|
|
280
|
-
its contract remains valid. Repeated failure, ambiguous ownership, a user
|
|
281
|
-
ruling, or a dependency deadlock sets build state to `blocked` and stops.
|
|
282
|
-
Concurrent tasks must have disjoint `files`; serialize overlapping fix
|
|
283
|
-
tasks. A retry never reuses a rejected dirty worktree: first copy its
|
|
284
|
-
validated append-only task Log delta into the primary task file, record the
|
|
285
|
-
rejected diff's exact path set and hash, and checkpoint the block bookkeeping.
|
|
286
|
-
After confirming every old change is task-owned, retire that exact worktree
|
|
287
|
-
with `python3 <absolute isolation.py> retire --repo <absolute primary>
|
|
288
|
-
--worktree <path> --branch <task_branch> --force --task-file <task path>`,
|
|
289
|
-
then create the retry. If retirement was interrupted after removing the
|
|
290
|
-
worktree, rerun the same command; the recorded failed or blocked task and
|
|
291
|
-
its exact base prove the remaining branch before deletion. Create the retry
|
|
292
|
-
from the new clean primary HEAD. After
|
|
293
|
-
resolving a recoverable `build/blocked` condition, use
|
|
294
|
-
`pipeline_state.py transition` with the blocked state and bound branch as
|
|
295
|
-
expected fields to set `build/active` and log the resolution. Checkpoint it
|
|
296
|
-
through the bookkeeping rule before recording that new dispatch-round base.
|
|
297
|
-
|
|
298
|
-
3. **Isolate every task.** Checkpoint pending bookkeeping through the rule
|
|
299
|
-
above, then record clean `HEAD` as
|
|
300
|
-
this dispatch round's base — tasks dispatched in the same round share it;
|
|
301
|
-
a later round unlocked by fresh landings records the later HEAD — and
|
|
302
|
-
lint every ready task's brief with the bundled
|
|
303
|
-
`scripts/check_task_briefs.py --repo <absolute repo root> --base <recorded
|
|
304
|
-
base>` and re-check Intent coverage with
|
|
305
|
-
`python3 <absolute check_handoffs.py> plan --repo <absolute repo root>`
|
|
306
|
-
before creating any worktree; a lint or coverage failure is a documented plan
|
|
307
|
-
defect — repair it against INTENT.md and SYNTHESIS.md, then re-establish
|
|
308
|
-
the base. Then isolate each ready task with
|
|
309
|
-
`python3 <absolute workflow_run.py> prepare-task --repo <absolute primary>
|
|
310
|
-
--expected-head <recorded base> --task-id <id> --round-size <N>` where N is the
|
|
311
|
-
number of tasks in this dispatch round. Serial (`N=1`) returns the primary
|
|
312
|
-
worktree and `task_branch: null` — the coder works on the bound branch.
|
|
313
|
-
The runner also creates a named verification sidecar at this clean base
|
|
314
|
-
before dispatch. Retain both helper results in the dispatch evidence.
|
|
315
|
-
Parallel (`N>=2`) creates a named `gsd-path-task/<id>` branch and linked
|
|
316
|
-
worktree at that base; never a detached HEAD. Record dispatch through
|
|
317
|
-
`python3 <absolute isolation.py> activate-task --repo <returned worktree>
|
|
318
|
-
--base <recorded base> --task-id <id> --agent build_<id> --task-file
|
|
319
|
-
<exact selected task-file path> [--task-branch <returned task_branch>]`.
|
|
320
|
-
The helper sets `base`, `worktree`, `task_branch`, `status: in-progress`,
|
|
321
|
-
and `agent` in the isolated task and records parallel build authorization.
|
|
322
|
-
Do not edit those fields directly. Do not commit this dispatch state: it lands
|
|
323
|
-
inside the task's own commit, and `recover` derives it from the task
|
|
324
|
-
branch and worktree meanwhile. The primary stays clean during a parallel
|
|
325
|
-
round. Do not append a dispatch Log entry: the isolated task later appends
|
|
326
|
-
at that location, and two parallel appends make the cherry-pick ambiguous. Reuse a retained worktree only when
|
|
327
|
-
its recorded base, branch, and task agree exactly.
|
|
328
|
-
|
|
329
|
-
4. **Dispatch the round.** Following the local runtime dispatch contract,
|
|
330
|
-
spawn one implementation-capable child per task with deterministic logical
|
|
331
|
-
task name `build_<task_id>`.
|
|
332
|
-
Its brief contains the absolute isolated-worktree root, coder role, task
|
|
333
|
-
file, task template, and the absolute INTENT.md path in that worktree.
|
|
334
|
-
Add no hidden implementation context; repair a
|
|
335
|
-
defective task contract before establishing the round base. Run ready work
|
|
336
|
-
up to capacity. Verify commands marked `Heavy: yes` (`verify_heavy` in the
|
|
337
|
-
ready set) run one at a time across every concurrent task, including the
|
|
338
|
-
step 5 rerun; light ones are unconstrained. Do not wait for the whole
|
|
339
|
-
round before unlocking dependents: each task landing in step 5 re-opens
|
|
340
|
-
step 2, and a newly ready
|
|
341
|
-
task dispatches in a fresh round at the current clean HEAD while unrelated
|
|
342
|
-
tasks still run. The wave advances to review only when every wave task is
|
|
343
|
-
`done`.
|
|
344
|
-
|
|
345
|
-
5. **Verify and land serially as results arrive.** A coder returns only
|
|
346
|
-
`ready` or `blocked`; it never owns frontmatter or Git. Process each
|
|
347
|
-
completion when it lands — never wait for slower in-flight tasks first;
|
|
348
|
-
when several results wait, land them in task-id order.
|
|
349
|
-
|
|
350
|
-
- For `ready`, compare the complete worktree diff to `base`. Permit only
|
|
351
|
-
declared `files` plus append-only Log changes in that task file. Include
|
|
352
|
-
additions, deletions, renames, and binary changes; an unexpected path
|
|
353
|
-
blocks before any product commit.
|
|
354
|
-
- For serial work, reproduce the validated complete task patch, including
|
|
355
|
-
untracked additions, in the pre-created verification sidecar. Keep the
|
|
356
|
-
primary patch intact. Check its product diff against the primary task
|
|
357
|
-
diff before verifying; retire the sidecar through `isolation.py retire`
|
|
358
|
-
after preserving its evidence and removing only those reproduced changes.
|
|
359
|
-
Parallel work uses the task's existing isolated worktree.
|
|
360
|
-
- Run the task's Verify command in that isolated worktree. This rerun is the
|
|
361
|
-
authoritative task evidence; a command run in the primary or a sibling
|
|
362
|
-
worktree never counts. Append its exact result to the task Log. After
|
|
363
|
-
`land` returns, when `git rev-parse <landed commit>^` equals the
|
|
364
|
-
recorded `base` the landed tree is the verified tree: record the run
|
|
365
|
-
with `python3 <absolute build_state.py> verify-record --repo <absolute
|
|
366
|
-
primary> --command <task Verify> --commit <landed commit> --result
|
|
367
|
-
pass`. The ledger is `.project` bookkeeping; the next checkpoint
|
|
368
|
-
commits it.
|
|
369
|
-
- Land with
|
|
370
|
-
`python3 <absolute isolation.py> land --repo <absolute primary>
|
|
371
|
-
--source <isolated worktree> --base <recorded base> --task-id <id>
|
|
372
|
-
--title <task title> --task-file <task path> --allow-path <each declared
|
|
373
|
-
file>`. Do not invent commit or cherry-pick commands. For a serial round,
|
|
374
|
-
the primary must still be on the bound branch at the recorded base. A
|
|
375
|
-
non-zero exit reports the exact landing failure, such as an unexpected
|
|
376
|
-
path, base or branch mismatch, invalid task proof, conflict, or empty diff.
|
|
377
|
-
On conflict the helper aborts and leaves the primary clean on the bound
|
|
378
|
-
branch. Never leave task landing in progress.
|
|
379
|
-
- `land` stamps `status: done`, `base`, and null `worktree`/`task_branch`
|
|
380
|
-
into the task frontmatter and records `Base:` in the commit body, so the
|
|
381
|
-
product commit is the task's only commit; there is no `commit`
|
|
382
|
-
frontmatter field — `recover` proves the SHA from git. Do not write a
|
|
383
|
-
separate bookkeeping commit. Retire the isolate with
|
|
384
|
-
`python3 <absolute isolation.py> retire --repo <absolute primary>
|
|
385
|
-
--worktree <isolated worktree> [--branch <task_branch>]`. Serial rounds
|
|
386
|
-
return `retired: false` and leave the bound branch untouched. Each
|
|
387
|
-
completed task landing re-opens step 2: dispatch newly
|
|
388
|
-
ready dependents in a fresh round at the current clean HEAD instead of
|
|
389
|
-
idling behind unrelated in-flight tasks.
|
|
390
|
-
- A block whose Log delta leads with `NEEDS-ORCHESTRATOR:` is a contract
|
|
391
|
-
question, not a failure. When the approved artifacts (PLAN.md,
|
|
392
|
-
INTENT.md, SYNTHESIS.md, and the Interface contracts of every involved
|
|
393
|
-
task) pin exactly one answer, append `Orchestrator answer: <answer> —
|
|
394
|
-
<artifact citation>` to the task Log, return the task to `pending`,
|
|
395
|
-
checkpoint the bookkeeping, and let a later layer redispatch it; a question
|
|
396
|
-
redispatch never consumes the failed-implementation redispatch. When the
|
|
397
|
-
runtime's structured layer exposes a blocking ask/reply channel, relay
|
|
398
|
-
the answer through it with the worker held alive per the runtime
|
|
399
|
-
dispatch contract instead of redispatching. A dispatch-driver question
|
|
400
|
-
keeps the isolate active: record the answer with `dispatch_driver.py
|
|
401
|
-
answer`, and the next `round` redispatches that same isolate. When
|
|
402
|
-
the artifacts admit more than one reading, ask the user through an
|
|
403
|
-
interactive user-input tool when available, record the ruling verbatim
|
|
404
|
-
as the answer, and repair the task contract as a documented plan defect
|
|
405
|
-
when the ruling changes it — except a ruling that changes a success
|
|
406
|
-
criterion, constraint, or veto, which follows the define-Corrections
|
|
407
|
-
path above. A question block creates no product commit
|
|
408
|
-
and preserves the isolated worktree under the same retirement rule. Before
|
|
409
|
-
changing its canonical bookkeeping, revoke a parallel isolate's active
|
|
410
|
-
dispatch with `python3 <absolute isolation.py> deactivate-task --repo
|
|
411
|
-
<isolated worktree> --task-id <id> --task-branch <task_branch>`.
|
|
412
|
-
- A blocked report, invalid diff, or failed Verify creates no product
|
|
413
|
-
commit. Validate and copy the isolated task's append-only Log delta once;
|
|
414
|
-
it is the coder's sole block/implementation narrative. Add orchestrator
|
|
415
|
-
evidence only for a distinct diff or Verify rejection. Before changing the
|
|
416
|
-
task to `blocked` or `failed`, revoke a parallel isolate's active dispatch
|
|
417
|
-
with `python3 <absolute isolation.py> deactivate-task
|
|
418
|
-
--repo <isolated worktree> --task-id <id> --task-branch <task_branch>`.
|
|
419
|
-
Then update and checkpoint the bookkeeping and apply the recovery
|
|
420
|
-
rule. Preserve the isolated worktree unless and until the explicit clean
|
|
421
|
-
retry-retirement procedure in step 2 owns and removes it.
|
|
422
|
-
|
|
423
|
-
6. **Review the wave.** The build orchestrator owns wave reviews; ship never
|
|
424
|
-
runs them. Only after every wave task is done, read the wave's
|
|
425
|
-
`Review depth` from PLAN.md (default `full`). At `full` or `deep` the
|
|
426
|
-
dispatch driver's `review` action performs the sidecar, brief, validate,
|
|
427
|
-
collect, and retire work of this step; perform it by hand only without a
|
|
428
|
-
child command.
|
|
429
|
-
- `full`: spawn one independent reviewer using deterministic logical task
|
|
430
|
-
name `review_wave_<wave>_cycle_<cycle>`. Supply every task path, its
|
|
431
|
-
recorded base and proven landing commit, the reviewer role, and
|
|
432
|
-
wave-review template, and the absolute INTENT.md path.
|
|
433
|
-
When INTENT selects quick lane and PLAN has one full wave, also assign
|
|
434
|
-
final scope: supply PLAN.md's Surface contract and the recorded review HEAD.
|
|
435
|
-
The same reviewer checks all success criteria and any remaining walkthrough
|
|
436
|
-
in this pass, records `Review scope: final` and `Reviewed HEAD`, and adds
|
|
437
|
-
Surface/Check/Observed fields to each surface criterion. Reuse recorded
|
|
438
|
-
command evidence when it already proves the named walkthrough; execute
|
|
439
|
-
only missing checks. Ship can then derive FINAL.md without another reviewer.
|
|
440
|
-
Record current clean primary HEAD as the review collection base. Create
|
|
441
|
-
a fresh review sidecar there; the serial task verification sidecar belongs
|
|
442
|
-
to the earlier task base and cannot be collected after landing.
|
|
443
|
-
Use `python3 <absolute isolation.py> isolate-verify --repo <absolute primary>
|
|
444
|
-
--base <recorded review base> --name wave-<N>-cycle-<C>`. Each task's
|
|
445
|
-
recorded base and landing commit still define its isolated review diff.
|
|
446
|
-
Keep primary HEAD fixed until collection completes. Brief the
|
|
447
|
-
recorded isolated Verify output per task (the Log entry the
|
|
448
|
-
orchestrator appended at landing). The reviewer must not re-run that
|
|
449
|
-
command or PLAN.md's project Verify. The reviewer
|
|
450
|
-
stages `.project/review/wave-N.cycleC.md` there; the
|
|
451
|
-
orchestrator validates it, atomically copies it to the primary canonical
|
|
452
|
-
path, and only then retires that sidecar with `retire`.
|
|
453
|
-
- `deep`: spawn two independent reviewers in parallel, each with a fresh
|
|
454
|
-
isolated context and its own verify sidecar from `isolate-verify` at the
|
|
455
|
-
recorded review base (`--name wave-<N>-cycle-<C>-contract` and
|
|
456
|
-
`wave-<N>-cycle-<C>-adversarial`). Supply both every task path, its
|
|
457
|
-
recorded base and proven landing commit, the reviewer role, and the
|
|
458
|
-
wave-review template, and the absolute INTENT.md path. The contract lens —
|
|
459
|
-
logical task name `review_wave_<wave>_cycle_<cycle>_contract` — does the
|
|
460
|
-
full review: apply each task's `commit^..commit` product patch to the
|
|
461
|
-
recorded base, check the recorded Verify plus the isolated diff, and
|
|
462
|
-
check every acceptance criterion,
|
|
463
|
-
owned INTENT success criterion, and interface contract. The adversarial
|
|
464
|
-
lens — logical task name
|
|
465
|
-
`review_wave_<wave>_cycle_<cycle>_adversarial` — tries to kill the work:
|
|
466
|
-
security holes, unhandled edge cases, failure modes, data-loss and
|
|
467
|
-
concurrency risks, and missing error handling. Each stages its own file
|
|
468
|
-
in its own worktree — `.project/review/wave-N.cycleC.contract.md` and
|
|
469
|
-
`.project/review/wave-N.cycleC.adversarial.md`; the orchestrator validates
|
|
470
|
-
each, atomically copies both to their primary canonical paths, and only
|
|
471
|
-
then retires those sidecars. The wave passes only when both lenses
|
|
472
|
-
return `pass`; any `blocked` lens blocks the wave, and both files'
|
|
473
|
-
findings feed the fix-task batching in step 7.
|
|
474
|
-
- A review file is written only during that cycle, at that cycle's recorded
|
|
475
|
-
base, by the writer the selected depth names: a dispatched reviewer at
|
|
476
|
-
`full` or `deep`, or the orchestrator at `verify-only`. Never backfill,
|
|
477
|
-
split, rename, or reconstruct a review file for a cycle that already ran,
|
|
478
|
-
and never write a placeholder verdict for a task that did not exist at
|
|
479
|
-
that cycle. A missing or non-canonical earlier artifact is reported to
|
|
480
|
-
the user; the
|
|
481
|
-
only repair is a new review cycle at the current HEAD, which counts
|
|
482
|
-
toward the cap.
|
|
483
|
-
- `verify-only`: spawn no reviewer. The orchestrator writes
|
|
484
|
-
`.project/review/wave-N.cycleC.md` itself from evidence it already
|
|
485
|
-
holds — per task, the Verify evidence and the declared-files diff
|
|
486
|
-
check — recording `Depth: verify-only`. Same command, same commit
|
|
487
|
-
reuses the recorded pass: the task's Verify evidence is the ledger
|
|
488
|
-
entry when `python3 <absolute build_state.py> verify-lookup --repo
|
|
489
|
-
<absolute primary> --command <task Verify> --commit <landed commit>`
|
|
490
|
-
returns `reuse: true`; otherwise run the command in an
|
|
491
|
-
`isolate-verify --historical-task <task id>` sidecar at that commit, record it with
|
|
492
|
-
`verify-record`, and use that result. A re-review after a fix cycle
|
|
493
|
-
follows the same rule. It checks each acceptance
|
|
494
|
-
criterion and each INTENT success criterion owned by the wave's tasks
|
|
495
|
-
against that evidence and the diff; anything it cannot
|
|
496
|
-
confirm from them is a finding, not a pass. Never spawn a review panel
|
|
497
|
-
at `verify-only`.
|
|
498
|
-
- After the canonical inherit reviewer (or orchestrator-written
|
|
499
|
-
`verify-only` file) is collected, run the optional review panel only
|
|
500
|
-
for `full` and `deep`. Inspect advertised model slugs and run
|
|
501
|
-
`python3 <absolute review_panel.py> resolve --plan <absolute PLAN.md>
|
|
502
|
-
--intent <absolute INTENT.md> --advertised <comma slugs>
|
|
503
|
-
--parent-slug <current model slug when known>` and `--charter
|
|
504
|
-
<absolute .project/CHARTER.md>` when that file exists. `status: off`
|
|
505
|
-
continues with no current-cycle panel artifact. For `skipped`,
|
|
506
|
-
persist the helper's exact JSON stdout as
|
|
507
|
-
`.project/review/wave-N.cycleC.panel.skipped.json` and continue without
|
|
508
|
-
a panel; do not translate or summarize the receipt. Exit 2 / `error`
|
|
509
|
-
blocks the wave. `ready` requires that skipped-receipt path to be absent,
|
|
510
|
-
then spawns one child per selected family with
|
|
511
|
-
logical task name `review_wave_<wave>_cycle_<cycle>_panel_<family>`,
|
|
512
|
-
the reviewer role in wave-panel mode, the wave-panel template, and the
|
|
513
|
-
exact helper-returned model slug when the host advertises model
|
|
514
|
-
selection. On `deep`, each panel brief is the adversarial lens only.
|
|
515
|
-
Never override the model on the canonical reviewer. Each child stages
|
|
516
|
-
its family file in its own verify sidecar from `isolate-verify`
|
|
517
|
-
(`--name wave-<N>-cycle-<C>-panel-<family>`); the parent validates
|
|
518
|
-
those files and runs `python3 <absolute review_panel.py> merge --kind
|
|
519
|
-
wave --wave <N> --cycle <C> --inputs <family files> --output
|
|
520
|
-
<absolute .project/review/wave-N.cycleC.panel.md> --mode
|
|
521
|
-
<detected|named>`. The inherit reviewer remains the only Wave verdict.
|
|
522
|
-
Do not average panel findings into that verdict or auto-create fix
|
|
523
|
-
tasks from preference findings.
|
|
524
|
-
- After the canonical inherit reviewer file (and each deep lens file) is
|
|
525
|
-
on the primary path, run
|
|
526
|
-
`python3 <absolute check_handoffs.py> wave --repo <absolute primary>
|
|
527
|
-
--review <canonical wave-review path>`. A non-zero exit is a blocked
|
|
528
|
-
wave, not a pass, including `verify-only`. Do not advance on helper
|
|
529
|
-
failure.
|
|
530
|
-
|
|
531
|
-
7. **Fix or advance.** A valid canonical `pass` advances unless an
|
|
532
|
-
actionable review-panel finding is waiting for a user ruling. On
|
|
533
|
-
`blocked`, run `python3 <absolute review_findings.py> collect --repo
|
|
534
|
-
<absolute primary> --wave <N> --cycle <C>`, adding one `--helper-failure
|
|
535
|
-
"<helper and stderr>"` per bundled helper that exited non-zero in this
|
|
536
|
-
cycle. The helper alone reads PLAN.md Config (`max_review_cycles`,
|
|
537
|
-
`finding_skeptics`, `wave_budget`), the cycle's lens files, and every
|
|
538
|
-
skeptic file of the wave; it groups blocking findings by criterion
|
|
539
|
-
locator, collapses true duplicates, carries earlier refutations forward,
|
|
540
|
-
separates structural blockers, batches fix groups by disjoint file scope,
|
|
541
|
-
and reports `cap_reached`. Exit 2 blocks the wave. Never regroup,
|
|
542
|
-
re-derive a locator, or re-decide refutation in model reasoning; act on
|
|
543
|
-
the result in this order:
|
|
544
|
-
- `structural_blockers` non-empty: a missing or invalid lens, panel, or
|
|
545
|
-
skeptic artifact, a helper failure, or a finding that names no
|
|
546
|
-
contract criterion never enters skeptic filtering. Keep it blocking
|
|
547
|
-
through the ordinary blocked-wave handling — a fix task when applicable
|
|
548
|
-
or `build/blocked` escalation otherwise.
|
|
549
|
-
- `cap_reached` true: skip every branch below and use the cycle-cap
|
|
550
|
-
escalation at the end of this step.
|
|
551
|
-
- `skeptic_groups` non-empty: spawn one independent read-only skeptic
|
|
552
|
-
per listed locator, concurrently up to the advertised child capacity,
|
|
553
|
-
with logical task name
|
|
554
|
-
`review_wave_<wave>_cycle_<cycle>_skeptic_<criterion_locator>`, the
|
|
555
|
-
reviewer role in skeptic mode, the skeptic template, and its own verify
|
|
556
|
-
sidecar from `isolate-verify`
|
|
557
|
-
(`--name wave-<N>-cycle-<C>-skeptic-<criterion_locator>`) at the
|
|
558
|
-
recorded review base. Brief each with the group's `locator`,
|
|
559
|
-
`criterion` verbatim, every `observations` entry verbatim, the group's
|
|
560
|
-
`tasks` files, their recorded bases and proven landing commits, and the
|
|
561
|
-
absolute INTENT.md path. Each skeptic stages
|
|
562
|
-
`.project/review/wave-N.cycleC.skeptic-<criterion_locator>.md` in its
|
|
563
|
-
sidecar; validate each against the skeptic template, atomically copy it
|
|
564
|
-
to the primary canonical path, then retire that sidecar. Rerun the
|
|
565
|
-
helper; a locator refuted in an earlier cycle never gets a second
|
|
566
|
-
skeptic, and the helper already routes it.
|
|
567
|
-
- `all_refuted` true: stop and ask. Present **Outcome** with the blocked
|
|
568
|
-
verdict and the refutation count, **Review** linking the lens and
|
|
569
|
-
skeptic files, and **Next** listing `Re-run the review cycle with the
|
|
570
|
-
skeptic files in the reviewer briefs (recommended — no finding survived
|
|
571
|
-
scrutiny)` first, then `Open fix tasks from the findings anyway (an
|
|
572
|
-
explicit ruling that overrides their refutations)`. A selected re-run
|
|
573
|
-
consumes a cycle. After the user selects either option, record exact
|
|
574
|
-
full HEAD, then use `pipeline_state.py transition` with the exact
|
|
575
|
-
current phase, status, branch, and archive as expected and unchanged
|
|
576
|
-
phase/status as the result. Append `wave <N> cycle <C> all-refuted
|
|
577
|
-
ruling: <selected option verbatim>` to the STATE.md Log and require the
|
|
578
|
-
returned position to remain `build/active`. Checkpoint STATE.md and the
|
|
579
|
-
collected skeptic artifacts through the Bookkeeping checkpoint rule with
|
|
580
|
-
subject `build: record wave <N> cycle <C> skeptic ruling`, body `Why:
|
|
581
|
-
persist the all-refuted user ruling before acting`, and `Wave: <N>`. Do
|
|
582
|
-
not start the selected review cycle or create, batch, or dispatch fix
|
|
583
|
-
tasks until the checkpoint returns its commit. When the persisted ruling
|
|
584
|
-
selects `Open fix tasks from the findings anyway`, the override set is
|
|
585
|
-
every `refuted_groups` locator with its preserved `observations`; its
|
|
586
|
-
governing refutation is the group's `skeptic` entry (the current
|
|
587
|
-
cycle's file, or the earlier cycle's file for a same-evidence repeat).
|
|
588
|
-
Add that set to `fix_groups` for batching. No other ruling re-admits
|
|
589
|
-
refuted groups. Preserve their skeptic verdicts and eligibility
|
|
590
|
-
history. After a crash, resume the recorded choice without asking
|
|
591
|
-
again.
|
|
592
|
-
- Otherwise batch `fix_batches` into complete fix tasks from the task
|
|
593
|
-
template — one task per batch, never one per finding — each carrying
|
|
594
|
-
its groups' failed criteria and observed evidence verbatim. A group
|
|
595
|
-
with `repeat` true is evidence its earlier fix failed, never a new
|
|
596
|
-
finding; a re-review never spawns a duplicate fix task for a finding
|
|
597
|
-
already carried. Write each fix task to `.project/tasks/` with `wave`
|
|
598
|
-
set to the current wave or a newly appended `## Wave N` heading in
|
|
599
|
-
PLAN.md before dispatch. Its dependencies include every source task in
|
|
600
|
-
the batch; its files match the batch. In `## Review findings`, use one
|
|
601
|
-
`### <locator>` block per group, `Criterion: <verbatim criterion>`, and
|
|
602
|
-
every observation verbatim. Run the repair through the same isolated
|
|
603
|
-
layer loop, even when its appended wave repairs an earlier blocked wave.
|
|
604
|
-
After landing, call `review_findings.py repair-evidence --repo <primary>
|
|
605
|
-
--wave <source wave> --cycle <source cycle> --task <repair id>` and save
|
|
606
|
-
its JSON as the repair evidence for the next review. The helper validates
|
|
607
|
-
the carried batch, original and repair landings, isolated product scope,
|
|
608
|
-
unchanged source reports and reusable Verify. On success, brief the next
|
|
609
|
-
original-wave review with this receipt and the reviewer role's
|
|
610
|
-
**Re-review after a proven repair** contract. Reuse command evidence;
|
|
611
|
-
the new review judges the repaired product against the original criteria.
|
|
612
|
-
Preserve prior verdicts and source tasks. On helper rejection, resolve
|
|
613
|
-
the evidence blocker rather than redispatching an already proven fix.
|
|
614
|
-
At the cap, record all attempts in the STATE.md log and ask the user —
|
|
615
|
-
through an interactive user-input tool when available — after linking
|
|
616
|
-
the resolved absolute blocking wave review, every deep lens file for the
|
|
617
|
-
cycle, and every skeptic file collected for the wave, plus the STATE.md
|
|
618
|
-
attempt log. Ask whether to redirect the approach, raise the cap, or send
|
|
619
|
-
define to amend INTENT.md `## Corrections` — never rewrite an AC from a
|
|
620
|
-
Log waiver — or, in program flow (ROADMAP.md exists), to abandon the
|
|
621
|
-
milestone under the Milestone abandon procedure — listing the
|
|
622
|
-
orchestrator's recommended option first marked `(recommended)` with a
|
|
623
|
-
one-line reason drawn from the review evidence. Never choose silently.
|
|
624
|
-
When the canonical verdict is `pass` and `wave-N.cycleC.panel.md` reports
|
|
625
|
-
`Actionable` greater than 0, do not advance silently: present **Outcome**
|
|
626
|
-
with the canonical pass plus the actionable count, **Review** linking the
|
|
627
|
-
panel file, and **Next** listing `Open fix tasks from panel findings
|
|
628
|
-
(recommended)` first, then `Advance and keep panel findings as warnings`.
|
|
629
|
-
Preference-only panel warnings do not block advance. On pass, checkpoint
|
|
630
|
-
the review artifact, the panel file when present, STATE.md, and wave
|
|
631
|
-
bookkeeping, then report `wave N/M done, C review cycle(s)`.
|
|
140
|
+
`round` owns entry transition, recovery, ready-set checks, brief lint, isolation,
|
|
141
|
+
child dispatch, authoritative Verify, landing, ledger, retirement, and bookkeeping.
|
|
142
|
+
Do not replay those steps or rewrite their results in another report.
|
|
143
|
+
|
|
144
|
+
| Receipt | Next action |
|
|
145
|
+
|---|---|
|
|
146
|
+
| `in-flight` | Resume the same action to collect its existing children. |
|
|
147
|
+
| `done` from round | Run `review` with the same repo, wave, child command, and the current cycle. |
|
|
148
|
+
| Passing review, no panel required | Continue with the next wave or Completion. |
|
|
149
|
+
| `panel_required: true` | Read the panel procedure in [native build](references/build-native.md), then use the driver's `panel` action. |
|
|
150
|
+
| Blocked review with findings | Read step 7 in [native build](references/build-native.md); use `skeptics` or `fix-tasks` only as the finding receipt directs. |
|
|
151
|
+
| `question` | Answer from approved artifacts or escalate; record with `answer --task-id <id> --answer '<answer> — <citation>'`, then resume round. |
|
|
152
|
+
| Task/recovery `blocked` or structural escalation | Read the matching recovery or plan-defect branch in [native build](references/build-native.md). |
|
|
153
|
+
|
|
154
|
+
Without an owner-supplied child command, read [native build](references/build-native.md)
|
|
155
|
+
and the [dispatch contract](references/dispatch.md). That path uses native child
|
|
156
|
+
tools with the same contracts and evidence. A `verify-only` wave also reads the
|
|
157
|
+
native review procedure because the driver does not author that artifact.
|
|
158
|
+
|
|
159
|
+
A failing helper stops the step: report stderr and run the forensics diagnostic
|
|
160
|
+
under AGENTS.md. A live `in-flight` receipt is resumable work, not a failed helper.
|
|
161
|
+
Apply owner budgets through the dispatch contract. Never infer a new limit.
|
|
632
162
|
|
|
633
163
|
## Completion
|
|
634
164
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
proof, entering `ship/active`, and checkpointing. A blocked receipt stops
|
|
639
|
-
completion; a `done` receipt proves these steps, so do not repeat
|
|
640
|
-
them. For manual completion:
|
|
641
|
-
after every wave passes, record exact full HEAD and prove every task landed
|
|
642
|
-
with `python3 <absolute workflow_run.py> build-evidence --repo <absolute primary>
|
|
643
|
-
--expected-head <HEAD>`. The runner writes the wrapped `verify-landed` result
|
|
644
|
-
to `.project/build/evidence.json`; that path is the only landing-proof
|
|
645
|
-
location the ship runtime recognizes, so never save the receipt under another
|
|
646
|
-
name. The result must return one
|
|
647
|
-
`proven-landed` or `attested` evidence entry per task, and any non-zero exit
|
|
648
|
-
blocks completion. A `done` task without landing proof follows the `block`
|
|
649
|
-
handling in step 1 above (owner ruling, Verify, `verify-record`, `attest`).
|
|
650
|
-
Then run
|
|
651
|
-
`pipeline_state.py transition`, expecting `build/active` plus the exact branch
|
|
652
|
-
and archive, to set `phase: ship`, `status: active` with event `build done;
|
|
653
|
-
final review pending`. Checkpoint that transition through the rule above with
|
|
654
|
-
subject `build: complete milestone` and a concrete `Why:` body. Do not run
|
|
655
|
-
PLAN.md's project Verify here — ship runs it once. This
|
|
656
|
-
keeps the primary worktree clean and avoids a separate review-phase transition
|
|
657
|
-
checkpoint. Report waves, exact task commits, fixed findings, and remaining risk.
|
|
658
|
-
Link the resolved absolute final wave review as the review surface and state
|
|
659
|
-
that ship is next. Do not merge to the default branch, tag, mark `shipped`, or
|
|
660
|
-
integrate; ship owns FINAL.md, project Verify, and those steps. When invoked
|
|
661
|
-
directly, stop and tell the user to explicitly
|
|
662
|
-
invoke `$gsd-path`, which routes to ship; do not invoke an explicit-only sibling
|
|
663
|
-
skill yourself.
|
|
664
|
-
If a crash leaves `build/done`, use that phase and status as the expected
|
|
665
|
-
transition values, then checkpoint the same `ship/active` result before
|
|
666
|
-
returning to the router.
|
|
165
|
+
```text
|
|
166
|
+
python3 <absolute dispatch_driver.py> complete --repo <absolute primary>
|
|
167
|
+
```
|
|
667
168
|
|
|
668
|
-
|
|
169
|
+
Use this runtime even when coders used native child tools. It proves all tasks
|
|
170
|
+
landed and wave reviews passed, writes the canonical build evidence, enters
|
|
171
|
+
`ship/active`, and checkpoints. A blocked receipt stops completion. On a done
|
|
172
|
+
receipt, report waves, task commits, fixed findings, and remaining risk; link the
|
|
173
|
+
absolute final wave review and use the executable phase handoff in AGENTS.md. Ship owns project Verify,
|
|
174
|
+
final review, archive, and publication; do not repeat or enter them here.
|
|
669
175
|
|
|
670
|
-
|
|
671
|
-
review-cycle-cap escalation, a decision invalidation, or a direct request.
|
|
672
|
-
Require `.project/ROADMAP.md`; a single-milestone project has no abandon
|
|
673
|
-
path — stop and let the user decide how to restart.
|
|
176
|
+
## Milestone abandon
|
|
674
177
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
exact path set and hash in the STATE.md log. Never discard work the
|
|
678
|
-
recorded metadata cannot own.
|
|
679
|
-
2. Run the bundled `scripts/archive_milestone.py abandon --repo <absolute
|
|
680
|
-
repo root> --slug <milestone slug> --reason <user ruling, verbatim>`.
|
|
681
|
-
This one helper-owned transaction journals the exact request and starting
|
|
682
|
-
HEAD before mutation; archives the partial artifacts without review gates;
|
|
683
|
-
marks the exact ROADMAP entry `Status: abandoned` with its `Archive:` path;
|
|
684
|
-
appends `- <NNN>-<slug> — abandoned: <collapsed ruling>` exactly once to
|
|
685
|
-
LESSONS.md; transitions STATE to `roadmap/active` with `milestone: null`
|
|
686
|
-
and `archive: null`; and creates the checkpoint with exact subject `build:
|
|
687
|
-
abandon milestone <slug>` and body `Why: <collapsed ruling>`. The manifest
|
|
688
|
-
`Reason:` and checkpoint `Why:` are the same normalized ruling.
|
|
689
|
-
3. Rerun the same command with the same slug and ruling after any interruption.
|
|
690
|
-
It resumes archive moves, metadata, state transition, or checkpoint from
|
|
691
|
-
the journaled starting HEAD; a changed slug, ruling, archive, branch, or
|
|
692
|
-
manifest reason blocks. Success returns the archive, exact checkpoint
|
|
693
|
-
commit, and `committed` or `already-complete` status. Never edit or commit
|
|
694
|
-
any part of this transaction manually and never select another sequence
|
|
695
|
-
number.
|
|
696
|
-
4. Return to the router, which routes `roadmap/active` to the roadmap
|
|
697
|
-
contract in re-slice mode. The abandoned code stays on the build branch
|
|
698
|
-
until the next milestone's integration, then reaches the default branch as
|
|
699
|
-
inert history; the re-slice plans around it. Never revert product commits
|
|
700
|
-
yourself.
|
|
178
|
+
Only when the owner abandons a program milestone or STATE.archive records an
|
|
179
|
+
interrupted abandon, read [milestone abandon](references/build-abandon.md).
|