@opengsd/gsd-path 1.4.0 → 1.6.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/CHANGELOG.md +460 -341
- package/DOCS.md +16 -5
- package/FULL.md +67 -6
- package/HOOKS.md +158 -10
- package/MIGRATE.md +12 -0
- package/QUICK.md +4 -2
- package/README.md +136 -116
- package/RUNTIME.md +24 -6
- package/UPDATE.md +39 -3
- package/WORKFLOW.md +80 -4
- package/package.json +5 -2
- package/platforms/shared-agents/dispatch.md +13 -0
- package/scripts/_common.py +256 -2
- package/scripts/archive_milestone.py +14 -13
- package/scripts/build_recovery.py +155 -58
- package/scripts/build_state.py +274 -8
- package/scripts/check_docs_audit.py +77 -4
- package/scripts/check_handoffs.py +635 -57
- package/scripts/check_task_briefs.py +293 -32
- package/scripts/detect_project.py +260 -20
- package/scripts/discussion_records.py +9 -1
- package/scripts/discussion_validate.py +93 -35
- package/scripts/dispatch_driver.py +549 -53
- package/scripts/git_guard.py +27 -8
- package/scripts/guard_hook.py +2630 -210
- package/scripts/install.mjs +99 -11
- package/scripts/install.py +231 -46
- package/scripts/integration.py +244 -65
- package/scripts/isolation.py +539 -70
- package/scripts/loop_run.py +16 -4
- package/scripts/members.py +77 -32
- package/scripts/migrate_core.py +2 -0
- package/scripts/model_policy.py +5 -1
- package/scripts/path_config.py +3 -3
- package/scripts/pipeline_diagnose.py +17 -2
- package/scripts/pipeline_git.py +131 -42
- package/scripts/pipeline_state.py +139 -39
- package/scripts/pipeline_undo.py +118 -16
- package/scripts/promote_lookahead.py +3 -3
- package/scripts/review_findings.py +180 -44
- package/scripts/roadmap.py +9 -1
- package/scripts/runtime_store.py +21 -2
- package/scripts/skill-resources.json +9 -2
- package/scripts/state_checkpoint.py +39 -36
- package/scripts/state_promote.py +15 -4
- package/scripts/status_runtime.py +22 -4
- package/scripts/task_context.py +14 -3
- package/scripts/wizard.mjs +1 -0
- package/scripts/workflow_run.py +14 -4
- package/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path/DEFINE.md +34 -5
- package/skills/gsd-path/PLAN.md +14 -3
- package/skills/gsd-path/RESEARCH.md +11 -0
- package/skills/gsd-path/ROADMAP.md +16 -6
- package/skills/gsd-path/SHIP.md +32 -5
- package/skills/gsd-path/SKILL.md +52 -24
- package/skills/gsd-path/references/build-native.md +112 -10
- package/skills/gsd-path/references/build-recovery.md +13 -0
- package/skills/gsd-path/references/coder.md +7 -3
- package/skills/gsd-path/references/dispatch.md +13 -0
- package/skills/gsd-path/references/docs-auditor.md +5 -0
- package/skills/gsd-path/references/operating-rules.md +11 -3
- package/skills/gsd-path/references/planner.md +26 -4
- package/skills/gsd-path/references/reviewer-final.md +20 -2
- package/skills/gsd-path/references/reviewer-wave.md +56 -12
- package/skills/gsd-path/references/reviewer.md +3 -1
- package/skills/gsd-path/references/runtime-selection.md +9 -0
- package/skills/gsd-path/references/spec-probes.md +150 -0
- package/skills/gsd-path/scripts/_common.py +256 -2
- package/skills/gsd-path/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path/scripts/build_recovery.py +155 -58
- package/skills/gsd-path/scripts/build_state.py +274 -8
- package/skills/gsd-path/scripts/check_docs_audit.py +77 -4
- package/skills/gsd-path/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path/scripts/detect_project.py +260 -20
- package/skills/gsd-path/scripts/discussion_records.py +9 -1
- package/skills/gsd-path/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path/scripts/dispatch_driver.py +549 -53
- package/skills/gsd-path/scripts/git_guard.py +27 -8
- package/skills/gsd-path/scripts/integration.py +244 -65
- package/skills/gsd-path/scripts/isolation.py +539 -70
- package/skills/gsd-path/scripts/loop_run.py +16 -4
- package/skills/gsd-path/scripts/members.py +77 -32
- package/skills/gsd-path/scripts/model_policy.py +5 -1
- package/skills/gsd-path/scripts/path_config.py +3 -3
- package/skills/gsd-path/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path/scripts/review_findings.py +180 -44
- package/skills/gsd-path/scripts/roadmap.py +9 -1
- package/skills/gsd-path/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path/scripts/state_promote.py +15 -4
- package/skills/gsd-path/scripts/status_runtime.py +22 -4
- package/skills/gsd-path/scripts/task_context.py +14 -3
- package/skills/gsd-path/scripts/workflow_run.py +14 -4
- package/skills/gsd-path/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path/templates/docs-audit.md +5 -1
- package/skills/gsd-path/templates/final-review.md +11 -2
- package/skills/gsd-path/templates/intent.md +30 -0
- package/skills/gsd-path/templates/patch-findings.md +3 -3
- package/skills/gsd-path/templates/plan.md +17 -2
- package/skills/gsd-path/templates/research-handoff.md +14 -3
- package/skills/gsd-path/templates/state.md +2 -1
- package/skills/gsd-path/templates/task.md +1 -0
- package/skills/gsd-path/templates/wave-review.md +28 -9
- package/skills/gsd-path-build/references/build-native.md +112 -10
- package/skills/gsd-path-build/references/build-recovery.md +13 -0
- package/skills/gsd-path-build/references/coder.md +7 -3
- package/skills/gsd-path-build/references/dispatch.md +13 -0
- package/skills/gsd-path-build/references/operating-rules.md +11 -3
- package/skills/gsd-path-build/references/reviewer-final.md +20 -2
- package/skills/gsd-path-build/references/reviewer-wave.md +56 -12
- package/skills/gsd-path-build/references/reviewer.md +3 -1
- package/skills/gsd-path-build/references/runtime-selection.md +9 -0
- package/skills/gsd-path-build/references/spec-probes.md +150 -0
- package/skills/gsd-path-build/scripts/_common.py +256 -2
- package/skills/gsd-path-build/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-build/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-build/scripts/build_state.py +274 -8
- package/skills/gsd-path-build/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-build/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-build/scripts/detect_project.py +260 -20
- package/skills/gsd-path-build/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-build/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-build/scripts/dispatch_driver.py +549 -53
- package/skills/gsd-path-build/scripts/integration.py +244 -65
- package/skills/gsd-path-build/scripts/isolation.py +539 -70
- package/skills/gsd-path-build/scripts/loop_run.py +16 -4
- package/skills/gsd-path-build/scripts/members.py +77 -32
- package/skills/gsd-path-build/scripts/model_policy.py +5 -1
- package/skills/gsd-path-build/scripts/path_config.py +3 -3
- package/skills/gsd-path-build/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-build/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-build/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-build/scripts/review_findings.py +180 -44
- package/skills/gsd-path-build/scripts/roadmap.py +9 -1
- package/skills/gsd-path-build/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-build/scripts/state_promote.py +15 -4
- package/skills/gsd-path-build/scripts/task_context.py +14 -3
- package/skills/gsd-path-build/scripts/workflow_run.py +14 -4
- package/skills/gsd-path-build/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-build/templates/task.md +1 -0
- package/skills/gsd-path-build/templates/wave-review.md +28 -9
- package/skills/gsd-path-decide/references/dispatch.md +13 -0
- package/skills/gsd-path-decide/references/operating-rules.md +11 -3
- package/skills/gsd-path-decide/references/runtime-selection.md +9 -0
- package/skills/gsd-path-decide/scripts/_common.py +256 -2
- package/skills/gsd-path-decide/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-decide/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-decide/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-decide/scripts/detect_project.py +260 -20
- package/skills/gsd-path-decide/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-decide/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-decide/scripts/integration.py +244 -65
- package/skills/gsd-path-decide/scripts/isolation.py +539 -70
- package/skills/gsd-path-decide/scripts/loop_run.py +16 -4
- package/skills/gsd-path-decide/scripts/members.py +77 -32
- package/skills/gsd-path-decide/scripts/model_policy.py +5 -1
- package/skills/gsd-path-decide/scripts/path_config.py +3 -3
- package/skills/gsd-path-decide/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-decide/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-decide/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-decide/scripts/roadmap.py +9 -1
- package/skills/gsd-path-decide/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-decide/scripts/state_promote.py +15 -4
- package/skills/gsd-path-decide/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-define/SKILL.md +34 -5
- package/skills/gsd-path-define/references/build-recovery.md +13 -0
- package/skills/gsd-path-define/references/operating-rules.md +11 -3
- package/skills/gsd-path-define/references/runtime-selection.md +9 -0
- package/skills/gsd-path-define/references/spec-probes.md +150 -0
- package/skills/gsd-path-define/scripts/_common.py +256 -2
- package/skills/gsd-path-define/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-define/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-define/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-define/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-define/scripts/detect_project.py +260 -20
- package/skills/gsd-path-define/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-define/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-define/scripts/integration.py +244 -65
- package/skills/gsd-path-define/scripts/isolation.py +539 -70
- package/skills/gsd-path-define/scripts/loop_run.py +16 -4
- package/skills/gsd-path-define/scripts/members.py +77 -32
- package/skills/gsd-path-define/scripts/model_policy.py +5 -1
- package/skills/gsd-path-define/scripts/path_config.py +3 -3
- package/skills/gsd-path-define/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-define/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-define/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-define/scripts/roadmap.py +9 -1
- package/skills/gsd-path-define/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-define/scripts/state_promote.py +15 -4
- package/skills/gsd-path-define/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-define/templates/intent.md +30 -0
- package/skills/gsd-path-define/templates/state.md +2 -1
- package/skills/gsd-path-discuss/references/operating-rules.md +11 -3
- package/skills/gsd-path-discuss/references/runtime-selection.md +9 -0
- package/skills/gsd-path-discuss/scripts/_common.py +256 -2
- package/skills/gsd-path-discuss/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-discuss/scripts/loop_run.py +16 -4
- package/skills/gsd-path-discuss/scripts/model_policy.py +5 -1
- package/skills/gsd-path-discuss/scripts/path_config.py +3 -3
- package/skills/gsd-path-discuss/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-docs-audit/references/dispatch.md +13 -0
- package/skills/gsd-path-docs-audit/references/docs-auditor.md +5 -0
- package/skills/gsd-path-docs-audit/references/operating-rules.md +11 -3
- package/skills/gsd-path-docs-audit/references/runtime-selection.md +9 -0
- package/skills/gsd-path-docs-audit/scripts/_common.py +256 -2
- package/skills/gsd-path-docs-audit/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-docs-audit/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +77 -4
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-docs-audit/scripts/detect_project.py +260 -20
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-docs-audit/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-docs-audit/scripts/integration.py +244 -65
- package/skills/gsd-path-docs-audit/scripts/isolation.py +539 -70
- package/skills/gsd-path-docs-audit/scripts/loop_run.py +16 -4
- package/skills/gsd-path-docs-audit/scripts/members.py +77 -32
- package/skills/gsd-path-docs-audit/scripts/model_policy.py +5 -1
- package/skills/gsd-path-docs-audit/scripts/path_config.py +3 -3
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-docs-audit/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-docs-audit/scripts/roadmap.py +9 -1
- package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +15 -4
- package/skills/gsd-path-docs-audit/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-docs-audit/templates/docs-audit.md +5 -1
- package/skills/gsd-path-forensics/references/operating-rules.md +11 -3
- package/skills/gsd-path-forensics/references/runtime-selection.md +9 -0
- package/skills/gsd-path-forensics/scripts/_common.py +256 -2
- package/skills/gsd-path-forensics/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-forensics/scripts/loop_run.py +16 -4
- package/skills/gsd-path-forensics/scripts/model_policy.py +5 -1
- package/skills/gsd-path-forensics/scripts/path_config.py +3 -3
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +17 -2
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +118 -16
- package/skills/gsd-path-forensics/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-inspect/references/dispatch.md +13 -0
- package/skills/gsd-path-inspect/references/docs-auditor.md +5 -0
- package/skills/gsd-path-inspect/references/operating-rules.md +11 -3
- package/skills/gsd-path-inspect/references/runtime-selection.md +9 -0
- package/skills/gsd-path-inspect/scripts/_common.py +256 -2
- package/skills/gsd-path-inspect/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-inspect/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-inspect/scripts/check_docs_audit.py +77 -4
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-inspect/scripts/detect_project.py +260 -20
- package/skills/gsd-path-inspect/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-inspect/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-inspect/scripts/integration.py +244 -65
- package/skills/gsd-path-inspect/scripts/isolation.py +539 -70
- package/skills/gsd-path-inspect/scripts/loop_run.py +16 -4
- package/skills/gsd-path-inspect/scripts/members.py +77 -32
- package/skills/gsd-path-inspect/scripts/model_policy.py +5 -1
- package/skills/gsd-path-inspect/scripts/path_config.py +3 -3
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-inspect/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-inspect/scripts/roadmap.py +9 -1
- package/skills/gsd-path-inspect/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-inspect/scripts/state_promote.py +15 -4
- package/skills/gsd-path-inspect/scripts/workflow_run.py +14 -4
- package/skills/gsd-path-inspect/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-inspect/templates/docs-audit.md +5 -1
- package/skills/gsd-path-inspect/templates/state.md +2 -1
- package/skills/gsd-path-loop/references/operating-rules.md +11 -3
- package/skills/gsd-path-loop/references/runtime-selection.md +9 -0
- package/skills/gsd-path-loop/scripts/_common.py +256 -2
- package/skills/gsd-path-loop/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-loop/scripts/loop_run.py +16 -4
- package/skills/gsd-path-loop/scripts/model_policy.py +5 -1
- package/skills/gsd-path-loop/scripts/path_config.py +3 -3
- package/skills/gsd-path-loop/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-migrate/SKILL.md +8 -0
- package/skills/gsd-path-migrate/references/operating-rules.md +11 -3
- package/skills/gsd-path-migrate/references/runtime-selection.md +9 -0
- package/skills/gsd-path-migrate/scripts/_common.py +256 -2
- package/skills/gsd-path-migrate/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-migrate/scripts/loop_run.py +16 -4
- package/skills/gsd-path-migrate/scripts/migrate_core.py +2 -0
- package/skills/gsd-path-migrate/scripts/model_policy.py +5 -1
- package/skills/gsd-path-migrate/scripts/path_config.py +3 -3
- package/skills/gsd-path-plan/SKILL.md +14 -3
- package/skills/gsd-path-plan/references/build-recovery.md +13 -0
- package/skills/gsd-path-plan/references/dispatch.md +13 -0
- package/skills/gsd-path-plan/references/operating-rules.md +11 -3
- package/skills/gsd-path-plan/references/planner.md +26 -4
- package/skills/gsd-path-plan/references/runtime-selection.md +9 -0
- package/skills/gsd-path-plan/references/spec-probes.md +150 -0
- package/skills/gsd-path-plan/scripts/_common.py +256 -2
- package/skills/gsd-path-plan/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-plan/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-plan/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-plan/scripts/detect_project.py +260 -20
- package/skills/gsd-path-plan/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-plan/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-plan/scripts/integration.py +244 -65
- package/skills/gsd-path-plan/scripts/isolation.py +539 -70
- package/skills/gsd-path-plan/scripts/loop_run.py +16 -4
- package/skills/gsd-path-plan/scripts/members.py +77 -32
- package/skills/gsd-path-plan/scripts/model_policy.py +5 -1
- package/skills/gsd-path-plan/scripts/path_config.py +3 -3
- package/skills/gsd-path-plan/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-plan/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-plan/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-plan/scripts/roadmap.py +9 -1
- package/skills/gsd-path-plan/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-plan/scripts/state_promote.py +15 -4
- package/skills/gsd-path-plan/scripts/workflow_run.py +14 -4
- package/skills/gsd-path-plan/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-plan/templates/patch-findings.md +3 -3
- package/skills/gsd-path-plan/templates/plan.md +17 -2
- package/skills/gsd-path-plan/templates/task.md +1 -0
- package/skills/gsd-path-research/SKILL.md +11 -0
- package/skills/gsd-path-research/references/dispatch.md +13 -0
- package/skills/gsd-path-research/references/operating-rules.md +11 -3
- package/skills/gsd-path-research/references/runtime-selection.md +9 -0
- package/skills/gsd-path-research/scripts/_common.py +256 -2
- package/skills/gsd-path-research/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-research/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-research/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-research/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-research/scripts/detect_project.py +260 -20
- package/skills/gsd-path-research/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-research/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-research/scripts/integration.py +244 -65
- package/skills/gsd-path-research/scripts/isolation.py +539 -70
- package/skills/gsd-path-research/scripts/loop_run.py +16 -4
- package/skills/gsd-path-research/scripts/members.py +77 -32
- package/skills/gsd-path-research/scripts/model_policy.py +5 -1
- package/skills/gsd-path-research/scripts/path_config.py +3 -3
- package/skills/gsd-path-research/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-research/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-research/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-research/scripts/roadmap.py +9 -1
- package/skills/gsd-path-research/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-research/scripts/state_promote.py +15 -4
- package/skills/gsd-path-research/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-research/templates/research-handoff.md +14 -3
- package/skills/gsd-path-roadmap/SKILL.md +16 -6
- package/skills/gsd-path-roadmap/references/dispatch.md +13 -0
- package/skills/gsd-path-roadmap/references/operating-rules.md +11 -3
- package/skills/gsd-path-roadmap/references/runtime-selection.md +9 -0
- package/skills/gsd-path-roadmap/scripts/_common.py +256 -2
- package/skills/gsd-path-roadmap/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-roadmap/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-roadmap/scripts/detect_project.py +260 -20
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-roadmap/scripts/integration.py +244 -65
- package/skills/gsd-path-roadmap/scripts/isolation.py +539 -70
- package/skills/gsd-path-roadmap/scripts/loop_run.py +16 -4
- package/skills/gsd-path-roadmap/scripts/members.py +77 -32
- package/skills/gsd-path-roadmap/scripts/model_policy.py +5 -1
- package/skills/gsd-path-roadmap/scripts/path_config.py +3 -3
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-roadmap/scripts/roadmap.py +9 -1
- package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-roadmap/scripts/state_promote.py +15 -4
- package/skills/gsd-path-roadmap/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-ship/SKILL.md +32 -5
- package/skills/gsd-path-ship/references/dispatch.md +13 -0
- package/skills/gsd-path-ship/references/operating-rules.md +11 -3
- package/skills/gsd-path-ship/references/reviewer-final.md +20 -2
- package/skills/gsd-path-ship/references/reviewer-wave.md +56 -12
- package/skills/gsd-path-ship/references/reviewer.md +3 -1
- package/skills/gsd-path-ship/references/runtime-selection.md +9 -0
- package/skills/gsd-path-ship/references/spec-probes.md +150 -0
- package/skills/gsd-path-ship/scripts/_common.py +256 -2
- package/skills/gsd-path-ship/scripts/archive_milestone.py +14 -13
- package/skills/gsd-path-ship/scripts/build_recovery.py +155 -58
- package/skills/gsd-path-ship/scripts/build_state.py +274 -8
- package/skills/gsd-path-ship/scripts/check_handoffs.py +635 -57
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +293 -32
- package/skills/gsd-path-ship/scripts/detect_project.py +260 -20
- package/skills/gsd-path-ship/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-ship/scripts/discussion_validate.py +93 -35
- package/skills/gsd-path-ship/scripts/integration.py +244 -65
- package/skills/gsd-path-ship/scripts/isolation.py +539 -70
- package/skills/gsd-path-ship/scripts/loop_run.py +16 -4
- package/skills/gsd-path-ship/scripts/members.py +77 -32
- package/skills/gsd-path-ship/scripts/model_policy.py +5 -1
- package/skills/gsd-path-ship/scripts/path_config.py +3 -3
- package/skills/gsd-path-ship/scripts/pipeline_git.py +131 -42
- package/skills/gsd-path-ship/scripts/pipeline_state.py +139 -39
- package/skills/gsd-path-ship/scripts/promote_lookahead.py +3 -3
- package/skills/gsd-path-ship/scripts/roadmap.py +9 -1
- package/skills/gsd-path-ship/scripts/state_checkpoint.py +39 -36
- package/skills/gsd-path-ship/scripts/state_promote.py +15 -4
- package/skills/gsd-path-ship/scripts/workflow_run.py +14 -4
- package/skills/gsd-path-ship/scripts/worktree_paths.py +54 -2
- package/skills/gsd-path-ship/templates/final-review.md +11 -2
- package/skills/gsd-path-ship/templates/patch-findings.md +3 -3
- package/skills/gsd-path-ship/templates/wave-review.md +28 -9
- package/skills/gsd-path-undo/references/operating-rules.md +11 -3
- package/skills/gsd-path-undo/references/runtime-selection.md +9 -0
- package/skills/gsd-path-undo/scripts/_common.py +256 -2
- package/skills/gsd-path-undo/scripts/discussion_records.py +9 -1
- package/skills/gsd-path-undo/scripts/loop_run.py +16 -4
- package/skills/gsd-path-undo/scripts/model_policy.py +5 -1
- package/skills/gsd-path-undo/scripts/path_config.py +3 -3
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +118 -16
- package/skills/gsd-path-undo/scripts/worktree_paths.py +54 -2
- package/skills/path/DEFINE.md +34 -5
- package/skills/path/PLAN.md +14 -3
- package/skills/path/RESEARCH.md +11 -0
- package/skills/path/ROADMAP.md +16 -6
- package/skills/path/SHIP.md +32 -5
- package/skills/path/SKILL.md +52 -24
- package/skills/path/references/build-native.md +112 -10
- package/skills/path/references/build-recovery.md +13 -0
- package/skills/path/references/coder.md +7 -3
- package/skills/path/references/dispatch.md +13 -0
- package/skills/path/references/docs-auditor.md +5 -0
- package/skills/path/references/operating-rules.md +11 -3
- package/skills/path/references/planner.md +26 -4
- package/skills/path/references/reviewer-final.md +20 -2
- package/skills/path/references/reviewer-wave.md +56 -12
- package/skills/path/references/reviewer.md +3 -1
- package/skills/path/references/runtime-selection.md +9 -0
- package/skills/path/references/spec-probes.md +150 -0
- package/skills/path/scripts/_common.py +256 -2
- package/skills/path/scripts/archive_milestone.py +14 -13
- package/skills/path/scripts/build_recovery.py +155 -58
- package/skills/path/scripts/build_state.py +274 -8
- package/skills/path/scripts/check_docs_audit.py +77 -4
- package/skills/path/scripts/check_handoffs.py +635 -57
- package/skills/path/scripts/check_task_briefs.py +293 -32
- package/skills/path/scripts/detect_project.py +260 -20
- package/skills/path/scripts/discussion_records.py +9 -1
- package/skills/path/scripts/discussion_validate.py +93 -35
- package/skills/path/scripts/dispatch_driver.py +549 -53
- package/skills/path/scripts/git_guard.py +27 -8
- package/skills/path/scripts/integration.py +244 -65
- package/skills/path/scripts/isolation.py +539 -70
- package/skills/path/scripts/loop_run.py +16 -4
- package/skills/path/scripts/members.py +77 -32
- package/skills/path/scripts/model_policy.py +5 -1
- package/skills/path/scripts/path_config.py +3 -3
- package/skills/path/scripts/pipeline_git.py +131 -42
- package/skills/path/scripts/pipeline_state.py +139 -39
- package/skills/path/scripts/promote_lookahead.py +3 -3
- package/skills/path/scripts/review_findings.py +180 -44
- package/skills/path/scripts/roadmap.py +9 -1
- package/skills/path/scripts/state_checkpoint.py +39 -36
- package/skills/path/scripts/state_promote.py +15 -4
- package/skills/path/scripts/status_runtime.py +22 -4
- package/skills/path/scripts/task_context.py +14 -3
- package/skills/path/scripts/workflow_run.py +14 -4
- package/skills/path/scripts/worktree_paths.py +54 -2
- package/skills/path/templates/docs-audit.md +5 -1
- package/skills/path/templates/final-review.md +11 -2
- package/skills/path/templates/intent.md +30 -0
- package/skills/path/templates/patch-findings.md +3 -3
- package/skills/path/templates/plan.md +17 -2
- package/skills/path/templates/research-handoff.md +14 -3
- package/skills/path/templates/state.md +2 -1
- package/skills/path/templates/task.md +1 -0
- package/skills/path/templates/wave-review.md +28 -9
- 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-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-inspect/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-plan/scripts/__pycache__/_common.cpython-312.pyc +0 -0
- package/skills/gsd-path-ship/scripts/__pycache__/_common.cpython-312.pyc +0 -0
|
@@ -27,7 +27,8 @@ return to `$gsd-path` for ownership checking. Legal entry is
|
|
|
27
27
|
yet, `roadmap/active|blocked`, or a
|
|
28
28
|
milestone-boundary re-slice: `inspect/active` or `define/active` with no
|
|
29
29
|
approved INTENT.md for the next milestone and a user request to re-scope the
|
|
30
|
-
remaining `pending` entries,
|
|
30
|
+
remaining `pending` entries or, at `define/active` only, to change the scope
|
|
31
|
+
of the `active` entry,
|
|
31
32
|
or `roadmap/active` with STATE.milestone null and an `abandoned` entry in
|
|
32
33
|
ROADMAP.md (the post-abandon re-slice the build orchestrator hands off).
|
|
33
34
|
Enter from `decide/done` only with `pipeline_state.py transition`, exact
|
|
@@ -35,6 +36,8 @@ expected phase/status/milestone/branch/archive fields, event `roadmap started`,
|
|
|
35
36
|
and `--set-phase roadmap --set-status active`; never edit STATE directly. In a
|
|
36
37
|
milestone-boundary re-slice, preserve the entering `inspect/active` or
|
|
37
38
|
`define/active` state throughout the re-slice.
|
|
39
|
+
A `define/active` state that the router reports in `corrections` mode already
|
|
40
|
+
has an approved INTENT.md; it blocks.
|
|
38
41
|
Any later phase blocks; mid-milestone
|
|
39
42
|
re-scope is never legal — finish or ship the active milestone first. A
|
|
40
43
|
`decide/done` state with ROADMAP.md already present is milestone-scope decide;
|
|
@@ -71,8 +74,11 @@ precondition fails.
|
|
|
71
74
|
give `.project/ROADMAP.before-reslice.md` with the instruction to preserve
|
|
72
75
|
`shipped` entries byte-for-byte except Status/Archive/Integrated fields and
|
|
73
76
|
to never modify `abandoned` entries at all. For a milestone-boundary
|
|
74
|
-
re-slice
|
|
75
|
-
`pending` entries are in scope.
|
|
77
|
+
re-slice entered at `inspect/active`, also preserve the existing `active`
|
|
78
|
+
entry byte-for-byte; only `pending` entries are in scope. Entered at
|
|
79
|
+
`define/active`, the `active` entry may also change as the user ruled, but
|
|
80
|
+
its heading (id and slug) and its Status, Depends on, Archive, and
|
|
81
|
+
Integrated fields stay unchanged.
|
|
76
82
|
The output is exactly `.project/ROADMAP.md` — no other location is
|
|
77
83
|
canonical.
|
|
78
84
|
3. Gate ROADMAP.md:
|
|
@@ -96,8 +102,11 @@ precondition fails.
|
|
|
96
102
|
- On a re-slice, `shipped` entries differ from
|
|
97
103
|
`.project/ROADMAP.before-reslice.md` only in Status/Archive/Integrated;
|
|
98
104
|
`abandoned` entries are byte-for-byte identical.
|
|
99
|
-
- On a milestone-boundary re-slice
|
|
100
|
-
identical to
|
|
105
|
+
- On a milestone-boundary re-slice entered at `inspect/active`, the prior
|
|
106
|
+
`active` entry is byte-for-byte identical to
|
|
107
|
+
`.project/ROADMAP.before-reslice.md`. Entered at `define/active`, it
|
|
108
|
+
stays the only `active` entry and keeps its heading and its Status,
|
|
109
|
+
Depends on, Archive, and Integrated fields.
|
|
101
110
|
4. Redispatch one complete corrected brief under logical task name `roadmap`,
|
|
102
111
|
following the runtime dispatch contract and including all gate failures.
|
|
103
112
|
Allow one revision round. If it still fails, keep the entering
|
|
@@ -160,7 +169,8 @@ precondition fails.
|
|
|
160
169
|
|
|
161
170
|
The helper owns roadmap selection, expected state, baseline cleanup and
|
|
162
171
|
the approval checkpoint. It journals before mutation, retains the baseline
|
|
163
|
-
bytes for recovery, and refuses changes to settled
|
|
172
|
+
bytes for recovery, and refuses changes to settled entries and every
|
|
173
|
+
`active` entry change that step 2 does not permit.
|
|
164
174
|
A milestone-boundary re-slice retains Inspect or Define; a post-abandon
|
|
165
175
|
re-slice enters Inspect. Require its typed result to report `status:
|
|
166
176
|
approved`, the requested kind, milestone and returned commit. After an
|
package/skills/gsd-path/SHIP.md
CHANGED
|
@@ -159,7 +159,12 @@ so the position is unchanged. Then:
|
|
|
159
159
|
then stop and do not invent a patch finding. A `not-met`,
|
|
160
160
|
`unverifiable`, or blocked gap with valid evidence sets `ship/blocked`,
|
|
161
161
|
writes `.project/review/PATCH-FINDINGS.md` from the patch-findings template,
|
|
162
|
-
|
|
162
|
+
copying the full `Risk: ...` line into each gap finding's Locator, its
|
|
163
|
+
`Found` field into Evidence, and its `Fix direction` field verbatim. For a
|
|
164
|
+
`FINAL.md` finding, use its `SC<n>` id as Locator and copy its `Finding` and
|
|
165
|
+
`Fix direction` fields verbatim. The patch validator requires these source
|
|
166
|
+
field values to match exactly; do not shorten or paraphrase them. Run
|
|
167
|
+
`python3 <absolute check_handoffs.py> patch --repo <absolute repo
|
|
163
168
|
root>`. Present the blocked outcome, link the resolved absolute
|
|
164
169
|
PATCH-FINDINGS.md path, and state that patch planning is next. The manifest
|
|
165
170
|
contains exactly those FINAL.md and gap rows. When routed by an active
|
|
@@ -262,7 +267,11 @@ The persisted `STATE.archive` field is the transaction identity.
|
|
|
262
267
|
`python3 <absolute archive_milestone.py> close-members --repo <root>`
|
|
263
268
|
after preflight passes and before recording shipment. It closes each
|
|
264
269
|
locked member in lock order in that member's integration mode and
|
|
265
|
-
journals each one.
|
|
270
|
+
journals each one. Each member closes onto the default branch that
|
|
271
|
+
MEMBERS.md records for it (`main` when its section has no
|
|
272
|
+
`Default branch`); when the command reports
|
|
273
|
+
`remote default must be <recorded>`, stop and report it. When it returns
|
|
274
|
+
`awaiting-merge`, report the member PR
|
|
266
275
|
link, stop, and rerun the same command after the user merges it; never
|
|
267
276
|
merge a member PR yourself. When it returns `integrated`, keep its `body`
|
|
268
277
|
for the ship commit below.
|
|
@@ -305,8 +314,10 @@ The persisted `STATE.archive` field is the transaction identity.
|
|
|
305
314
|
milestone is not shipped until integration below passes.
|
|
306
315
|
7. Integrate only after the postcommit `validate` passes, with the recorded
|
|
307
316
|
ship commit and exact reviewed HEAD unchanged. Run `python3 <absolute archive_milestone.py> integrate --repo <root> --slug <STATE.milestone>`.
|
|
308
|
-
This helper validates the ship commit, fetches origin, requires remote
|
|
309
|
-
default `main
|
|
317
|
+
This helper validates the ship commit, fetches origin, requires the remote
|
|
318
|
+
default to equal STATE `default_branch` (`main` when the field is absent),
|
|
319
|
+
and follows the locked `STATE.integration` mode. `main` and `origin/main`
|
|
320
|
+
below mean that recorded branch:
|
|
310
321
|
|
|
311
322
|
- `direct` owns the resumable merge transaction. It creates the canonical
|
|
312
323
|
named integration worktree, performs the hook-verified `--no-ff` merge,
|
|
@@ -339,6 +350,22 @@ The persisted `STATE.archive` field is the transaction identity.
|
|
|
339
350
|
landing SHA. A closed unmerged PR, squash, rebase, merge queue, moved
|
|
340
351
|
head, duplicate PR, or non-GitHub.com origin blocks. The remote bound
|
|
341
352
|
branch may be absent after a valid merge because GitHub may auto-delete it.
|
|
353
|
+
- `external-landing` is for an origin where Path cannot open the review
|
|
354
|
+
itself, such as GitLab, Gitea, or GitHub Enterprise Server. It needs no
|
|
355
|
+
forge CLI. The helper publishes the bound branch at the exact ship commit,
|
|
356
|
+
never pushes `main`, and returns `status: awaiting-merge` with `branch`,
|
|
357
|
+
`merge_subject`, and `merge_body`. Present **Outcome**, and state in
|
|
358
|
+
**Next** that the user must open a merge request from `branch` to `main`
|
|
359
|
+
in their own forge and merge it with a merge commit. The merge commit
|
|
360
|
+
message must be exactly `merge_subject`, a blank line, then `merge_body`;
|
|
361
|
+
show both values verbatim in a code block. Stop this ship invocation;
|
|
362
|
+
Path never opens or merges the request. The forge may delete the source
|
|
363
|
+
branch after the merge. On rerun after the merge, the helper requires exactly
|
|
364
|
+
one commit with that subject on `origin/main` first-parent history, that
|
|
365
|
+
exact body, and two parents with the ship commit as second parent. It
|
|
366
|
+
then writes and pushes the annotated milestone tag containing the ship
|
|
367
|
+
SHA and landing SHA. A squash, rebase, fast-forward, or different merge
|
|
368
|
+
message blocks.
|
|
342
369
|
|
|
343
370
|
A passing run returns the same proof exposed by `validate-integrated`.
|
|
344
371
|
A non-zero result blocks; rerun the exact `integrate` command to resume a
|
|
@@ -349,7 +376,7 @@ The persisted `STATE.archive` field is the transaction identity.
|
|
|
349
376
|
continuing. Never merge into or re-ship the closed branch.
|
|
350
377
|
For a later validation recheck with origin network access, run
|
|
351
378
|
`python3 <absolute archive_milestone.py> validate-integrated --repo <root> --slug <STATE.milestone>`.
|
|
352
|
-
|
|
379
|
+
All integration modes refresh the remote-default and mirrored milestone-tag
|
|
353
380
|
refs when an `origin` remote exists. Without that remote, validation resolves
|
|
354
381
|
the existing remote-default refs locally, preserving offline direct-mode
|
|
355
382
|
fixtures. PR mode also revalidates the PR identity, state, merge provenance,
|
package/skills/gsd-path/SKILL.md
CHANGED
|
@@ -179,6 +179,23 @@ selects a milestone branch.
|
|
|
179
179
|
`define/active`; report that no brownfield signal fired, and route to
|
|
180
180
|
the bundled [define contract](DEFINE.md).
|
|
181
181
|
|
|
182
|
+
## Default branch
|
|
183
|
+
|
|
184
|
+
`initialize` records the default branch of `origin` one time, as STATE
|
|
185
|
+
`default_branch`. It reads the local `refs/remotes/origin/HEAD`; when that ref
|
|
186
|
+
is unset it records `main`. When the repository has an `origin`, run
|
|
187
|
+
`git remote set-head origin --auto` before `initialize`, so that the record is
|
|
188
|
+
the default branch of the forge. A STATE file without the field means `main`.
|
|
189
|
+
|
|
190
|
+
`<default_branch>` in the commands below is the `default_branch` value in the
|
|
191
|
+
`validate`, `route`, and `status` JSON, beside `state`. Never edit the field,
|
|
192
|
+
and never take the name from a later `origin/HEAD` lookup. When a helper
|
|
193
|
+
reports that the remote default differs from the recorded one, stop and report
|
|
194
|
+
it. In a project with members, STATE `default_branch` is the default branch of
|
|
195
|
+
the coordinator only. `members.py add` records the default branch of each
|
|
196
|
+
member in `.project/MEMBERS.md`; the member helpers read that record. The
|
|
197
|
+
names can differ.
|
|
198
|
+
|
|
182
199
|
## Integration choice
|
|
183
200
|
|
|
184
201
|
New state uses the user shipping default (built-in: `direct`) for
|
|
@@ -190,7 +207,7 @@ helper; never edit these fields by hand:
|
|
|
190
207
|
python3 <absolute-bundled-pipeline-state.py> configure-integration \
|
|
191
208
|
--repo <absolute-root> \
|
|
192
209
|
--scope <default-or-milestone> \
|
|
193
|
-
--mode <direct
|
|
210
|
+
--mode <direct|pull-request|external-landing>
|
|
194
211
|
```
|
|
195
212
|
|
|
196
213
|
`default` changes the project setting and changes the current milestone only
|
|
@@ -212,16 +229,23 @@ milestone boundary, never during build or ship. Resolve the bundled
|
|
|
212
229
|
`scripts/members.py` to an absolute path and use it; never edit MEMBERS.md
|
|
213
230
|
or a member marker by hand.
|
|
214
231
|
|
|
215
|
-
- To add an existing repository, it needs a GitHub.com `origin
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
232
|
+
- To add an existing repository, it needs a GitHub.com `origin`, a clean
|
|
233
|
+
worktree, and no active milestone of its own. Its default branch can have
|
|
234
|
+
any name. Run `git remote set-head origin --auto` in the member first: `add`
|
|
235
|
+
reads the member's local `origin/HEAD` one time and records the name in
|
|
236
|
+
MEMBERS.md as `Default branch`; an unset `origin/HEAD` records `main`. Ask
|
|
237
|
+
for the member name, checkout path, and integration (`direct`,
|
|
238
|
+
`pull-request`, or `default`, which follows the milestone's choice), then run
|
|
219
239
|
`python3 <members.py> add --repo <absolute-root> --name <name> --checkout <path> --integration <mode>`.
|
|
240
|
+
When `validate` or member close later reports
|
|
241
|
+
`remote default must be <recorded>`, stop and report it; never edit the
|
|
242
|
+
record.
|
|
220
243
|
- To create a new member repository, present the exact `owner/name`,
|
|
221
244
|
visibility, and checkout path as the **Review** surface and get approval
|
|
222
245
|
first, as for a new GitHub repository. Then run the same command with
|
|
223
246
|
`--create <owner/name> --visibility <visibility>`. It journals the approved
|
|
224
|
-
target before creating anything; rerun the identical command to resume.
|
|
247
|
+
target before creating anything; rerun the identical command to resume. A
|
|
248
|
+
new member repository uses `main`.
|
|
225
249
|
- After adding a member, tell the user to install its guard hooks:
|
|
226
250
|
`npx @opengsd/gsd-path@latest --member-of <absolute-root> --project <member checkout>`.
|
|
227
251
|
- `python3 <members.py> validate --repo <absolute-root>` checks every member;
|
|
@@ -269,8 +293,8 @@ integration ancestry, cleanliness, and journal ownership before continuing.
|
|
|
269
293
|
After it returns, continue the state transition or lookahead promotion below.
|
|
270
294
|
Do not reconstruct this classification from Git output or Log prose.
|
|
271
295
|
When the route returns `allow_remote_absent: true`, also pass
|
|
272
|
-
`--allow-missing-previous`; this is valid only because
|
|
273
|
-
auto-deleted the published bound branch.
|
|
296
|
+
`--allow-missing-previous`; this is valid only because the forge may have
|
|
297
|
+
auto-deleted the published bound branch after the merge.
|
|
274
298
|
|
|
275
299
|
Before ordinary routing, inspect `STATE.archive`.
|
|
276
300
|
|
|
@@ -328,7 +352,7 @@ promotion, `resume-next-handoff` resumes the verified `bind-next` transaction,
|
|
|
328
352
|
`resume-undo` invokes `$gsd-path-undo` with the returned kind and expected HEAD,
|
|
329
353
|
`block` stops with the returned reason. `bind-initial`
|
|
330
354
|
means initialization is complete and phase work must wait for the initial
|
|
331
|
-
router binding: resolve the exact fetched `origin
|
|
355
|
+
router binding: resolve the exact fetched `origin/<default_branch>` SHA, call `bind-initial` as
|
|
332
356
|
above with `route.branch`, then persist its returned branch with
|
|
333
357
|
`pipeline_state.py transition` using the route result's `state` phase and status plus its
|
|
334
358
|
null branch and archive as expected fields. Set `--set-branch` to the helper's
|
|
@@ -371,7 +395,8 @@ on `NEEDS-USER`. Planning owns the single build-approval gate; never ask a
|
|
|
371
395
|
second time. One user-driven exception to normal routing: at a program milestone
|
|
372
396
|
boundary — `inspect/active` or `define/active` with no approved INTENT.md for
|
|
373
397
|
the next milestone — a user request to re-scope the remaining `pending`
|
|
374
|
-
entries
|
|
398
|
+
entries, or at `define/active` the `active` entry, routes to the bundled
|
|
399
|
+
[roadmap contract](ROADMAP.md) in re-slice mode.
|
|
375
400
|
|
|
376
401
|
## Lookahead planning (program flow)
|
|
377
402
|
|
|
@@ -400,7 +425,9 @@ template](templates/state.md) with `pipeline: gsd-path/v2`, `phase:
|
|
|
400
425
|
inspect`, `status: active`, the selector's exact returned `milestone` slug as
|
|
401
426
|
`milestone`, `branch: null`, and `archive: null`. Copy the active project's
|
|
402
427
|
`integration_default` into both integration mode fields and set
|
|
403
|
-
`integration_source: default`.
|
|
428
|
+
`integration_source: default`. Set `default_branch` to the active project's
|
|
429
|
+
value; when the active STATE.md has no `default_branch` line, delete that line
|
|
430
|
+
from the new file. Then follow the bundled
|
|
404
431
|
phase contracts in their Lookahead mode — inspect, define (milestone +
|
|
405
432
|
brownfield), research (only when the entry lists open questions), decide, and
|
|
406
433
|
plan — rooted at `.project/next/`.
|
|
@@ -424,14 +451,14 @@ bundled integration check (`validate-integrated`); pending integration routes
|
|
|
424
451
|
back to ship, never here. Preserve the previous archive path, ship SHA,
|
|
425
452
|
integration SHA, and build branch in the state Log. Before fetching or binding
|
|
426
453
|
the next program branch, fetch origin and resolve the exact current
|
|
427
|
-
`origin
|
|
454
|
+
`origin/<default_branch>` SHA. For a program roadmap, resolve the branch from that exact
|
|
428
455
|
fetched commit through the bundled helper. With a saved lookahead track, run:
|
|
429
456
|
|
|
430
457
|
```text
|
|
431
458
|
python3 <absolute-bundled-promote-lookahead.py> select-base \
|
|
432
459
|
--repo <absolute-primary-root> \
|
|
433
|
-
--base <exact-
|
|
434
|
-
--remote-default origin
|
|
460
|
+
--base <exact-remote-default-sha> \
|
|
461
|
+
--remote-default origin/<default_branch> \
|
|
435
462
|
--lookahead
|
|
436
463
|
```
|
|
437
464
|
|
|
@@ -440,8 +467,8 @@ Without a saved lookahead track, run:
|
|
|
440
467
|
```text
|
|
441
468
|
python3 <absolute-bundled-promote-lookahead.py> select-base \
|
|
442
469
|
--repo <absolute-primary-root> \
|
|
443
|
-
--base <exact-
|
|
444
|
-
--remote-default origin
|
|
470
|
+
--base <exact-remote-default-sha> \
|
|
471
|
+
--remote-default origin/<default_branch>
|
|
445
472
|
```
|
|
446
473
|
|
|
447
474
|
When the helper returns `status: complete`, report program completion and stop;
|
|
@@ -457,21 +484,22 @@ python3 <absolute-bundled-pipeline-git.py> bind-next \
|
|
|
457
484
|
--branch <selected-branch> \
|
|
458
485
|
--previous-branch <STATE.branch> \
|
|
459
486
|
--ship <exact-ship-sha> \
|
|
460
|
-
--remote-default origin
|
|
461
|
-
--base <exact-
|
|
487
|
+
--remote-default origin/<default_branch> \
|
|
488
|
+
--base <exact-remote-default-sha> \
|
|
462
489
|
--landing <validate-integrated-landing-sha>
|
|
463
490
|
```
|
|
464
491
|
|
|
465
492
|
Add `--allow-missing-previous` when `validate-integrated` returned
|
|
466
|
-
`mode: pull-request` and `origin/<STATE.branch>`
|
|
467
|
-
that
|
|
468
|
-
the handoff. The helper independently
|
|
469
|
-
milestone tag
|
|
493
|
+
`mode: pull-request` or `mode: external-landing` and `origin/<STATE.branch>`
|
|
494
|
+
is absent. The forge may delete that source branch after merge; the local
|
|
495
|
+
branch and exact ship SHA still bind the handoff. The helper independently
|
|
496
|
+
verifies the published milestone tag for `STATE.integration` and the merge
|
|
497
|
+
topology before accepting the missing branch.
|
|
470
498
|
|
|
471
499
|
The helper requires the previous branch, while it still exists locally, to
|
|
472
500
|
remain at the ship SHA, proves the ship commit is integrated into the exact
|
|
473
501
|
base, rejects local or remote branch collisions,
|
|
474
|
-
and switches the clean primary worktree without tracking
|
|
502
|
+
and switches the clean primary worktree without tracking the default branch. It then
|
|
475
503
|
retires the integrated previous branch — deleted locally and on origin; the
|
|
476
504
|
ship commit stays reachable from the integration merge and its tag. Repeating the
|
|
477
505
|
same command while the new branch is current at the unchanged base is the
|
|
@@ -488,7 +516,7 @@ Log, then:
|
|
|
488
516
|
--repo <absolute-primary-root> \
|
|
489
517
|
--milestone <next-slug> \
|
|
490
518
|
--branch gsd-path/M00N \
|
|
491
|
-
--base <exact-current-
|
|
519
|
+
--base <exact-current-remote-default-sha> \
|
|
492
520
|
--landing <exact-milestone-merge-sha>
|
|
493
521
|
```
|
|
494
522
|
|
|
@@ -24,6 +24,14 @@ python3 <absolute dispatch_driver.py> round --repo <absolute primary> --wave <N>
|
|
|
24
24
|
[--child-timeout <owner seconds>]
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
+
Use the absolute `dispatch_driver.py` from the active installed
|
|
28
|
+
`gsd-path-build` skill when orchestrating a consuming project's build; that
|
|
29
|
+
copy resolves role briefs and templates from its own skill bundle. The
|
|
30
|
+
repository or npm package also supports the top-level `scripts/dispatch_driver.py`:
|
|
31
|
+
when a default is not beside that script, it resolves from the shipped
|
|
32
|
+
`skills/gsd-path` bundle. Explicit `--role-brief`, `--task-template`, and
|
|
33
|
+
`--template` paths override those defaults and must name existing files.
|
|
34
|
+
|
|
27
35
|
`round` owns the entry transition described in Preconditions and branch
|
|
28
36
|
binding, checkpointed as `build: start milestone`, and sets `build/blocked`
|
|
29
37
|
on a dependency deadlock or a blocked
|
|
@@ -120,6 +128,10 @@ dispatch contract and perform steps 1–5 by hand.
|
|
|
120
128
|
rerun `recover`. The original lineage must stay reachable: keep a local
|
|
121
129
|
branch on the old tip until the milestone ships. Adopted tasks report
|
|
122
130
|
`attested` with `provenance: owner-authorized-rebase`.
|
|
131
|
+
- `block` with a `leftover` path: the task is landed, and that path is what
|
|
132
|
+
a failed removal left of its isolate; it holds nothing that Git does not
|
|
133
|
+
have. Do not set `build/blocked`. Stop with the returned reason; after
|
|
134
|
+
the path is removed, rerun `recover`.
|
|
123
135
|
- `block` for any other reason: set `build/blocked` with the returned
|
|
124
136
|
reason and stop.
|
|
125
137
|
- `none`: take no recovery action for that task.
|
|
@@ -134,8 +146,27 @@ dispatch contract and perform steps 1–5 by hand.
|
|
|
134
146
|
order, or overlap-check tasks in prose. Readiness is continuous, not
|
|
135
147
|
layered: a task becomes selectable the moment its last dependency lands,
|
|
136
148
|
even while unrelated tasks still run, so rerun `ready` after each landing.
|
|
149
|
+
Two tasks that each share a file with the same `done` task of an earlier
|
|
150
|
+
wave never run together: `ready` returns one and holds the other until the
|
|
151
|
+
first is `done`. The second then starts from a base that has the first
|
|
152
|
+
landing, and the step 5 rerun of the earlier Verify checks both edits. A
|
|
153
|
+
task with a retained isolate keeps its turn. A task that a `supersedes`
|
|
154
|
+
field retires still counts: the superseding task never runs together
|
|
155
|
+
with a task that shares a file with the superseded task.
|
|
137
156
|
A `NEEDS-ORCHESTRATOR` block stays unselectable until its `Orchestrator
|
|
138
157
|
answer` is recorded in the task Log and the task is back to `pending`.
|
|
158
|
+
An all-done wave whose latest canonical review cycle has any blocked lens
|
|
159
|
+
gates later waves: `ready` selects unfinished later tasks with a `## Review
|
|
160
|
+
findings` section that depend on it, sets `current_wave` to the earliest
|
|
161
|
+
repair wave, and adds `repair_for_wave` with the source wave. When no such
|
|
162
|
+
repair remains, `ready` returns no tasks and adds `blocked_review` (`wave`,
|
|
163
|
+
`cycle`, `waiting_waves`); a later passing canonical review cycle releases
|
|
164
|
+
the waiting waves.
|
|
165
|
+
`unreviewed_waves`, when present, lists earlier waves whose tasks are all
|
|
166
|
+
`done` and that have no canonical review file. A repair wave is not
|
|
167
|
+
listed: the next review cycle of its source wave judges it. `ready` reports
|
|
168
|
+
the listed waves and does not hold the returned tasks: run step 6 for each
|
|
169
|
+
listed wave before you dispatch.
|
|
139
170
|
Its typed errors are the recovery rule:
|
|
140
171
|
- `task-recovery-required`: for each listed failed or blocked task run
|
|
141
172
|
`python3 <absolute build_state.py> reconcile --repo <absolute primary>
|
|
@@ -196,7 +227,7 @@ dispatch contract and perform steps 1–5 by hand.
|
|
|
196
227
|
a later round unlocked by fresh landings records the later HEAD — and
|
|
197
228
|
lint every ready task's brief with the bundled
|
|
198
229
|
`scripts/check_task_briefs.py --repo <absolute repo root> --base <recorded
|
|
199
|
-
base>` and re-check Intent coverage with
|
|
230
|
+
base> --project-dir <routed project dir>` and re-check Intent coverage with
|
|
200
231
|
`python3 <absolute check_handoffs.py> plan --repo <absolute repo root>`
|
|
201
232
|
before creating any worktree; a lint or coverage failure is a documented plan
|
|
202
233
|
defect — repair it against INTENT.md and SYNTHESIS.md, then re-establish
|
|
@@ -248,7 +279,8 @@ dispatch contract and perform steps 1–5 by hand.
|
|
|
248
279
|
defective task contract before establishing the round base. Run ready work
|
|
249
280
|
up to capacity. Verify commands marked `Heavy: yes` (`verify_heavy` in the
|
|
250
281
|
ready set) run one at a time across every concurrent task, including the
|
|
251
|
-
step 5 rerun; light ones are unconstrained.
|
|
282
|
+
step 5 rerun; light ones are unconstrained. `verify_heavy` is also true
|
|
283
|
+
when step 5 reruns a heavy Verify of an earlier task. Do not wait for the whole
|
|
252
284
|
round before unlocking dependents: each task landing in step 5 re-opens
|
|
253
285
|
step 2, and a newly ready
|
|
254
286
|
task dispatches in a fresh round at the current clean HEAD while unrelated
|
|
@@ -274,8 +306,35 @@ dispatch contract and perform steps 1–5 by hand.
|
|
|
274
306
|
native child tools; no child command is needed. It reproduces serial work
|
|
275
307
|
in its prepared sidecar, runs authoritative Verify, records exact output,
|
|
276
308
|
lands through `isolation.py`, records eligible ledger evidence, and retires
|
|
277
|
-
the isolate.
|
|
278
|
-
|
|
309
|
+
the isolate. Authoritative Verify is the task's own Verify, then the
|
|
310
|
+
Verify of each `done` task of an earlier wave, in the same repo, that
|
|
311
|
+
shares a declared file with this task. `finish` selects those commands;
|
|
312
|
+
never select them by hand. An earlier command does not run again in two
|
|
313
|
+
cases only: it is identical to the own Verify, or the own Verify is the
|
|
314
|
+
unchanged Verify that `fix-tasks` wrote from the task's `deps` and the
|
|
315
|
+
command belongs to one of them. A Verify that only contains the command
|
|
316
|
+
text does not replace the rerun. A failed earlier-task Verify blocks the landing as a
|
|
317
|
+
failed own Verify does. The receipt (`regressions`) and the task Log
|
|
318
|
+
entry `orchestrator regression Verify of <task id>` name the earlier
|
|
319
|
+
task. The ledger records only the own command.
|
|
320
|
+
A plan-approved `supersedes` field retires the Verify of each earlier
|
|
321
|
+
task that it names: `finish` does not run that Verify for the task, or
|
|
322
|
+
for a task that lands after the task is `done`. The receipt (`retired`)
|
|
323
|
+
and the task Log entry `orchestrator regression Verify of <task id>
|
|
324
|
+
retired: superseded by <task id>` name both tasks. When the generated
|
|
325
|
+
Verify of a fix task loses only the copy of a retired Verify, the
|
|
326
|
+
`retired` entry has the key `part` and the Log entry is `orchestrator
|
|
327
|
+
regression Verify of <fix task id>: part of <task id> retired:
|
|
328
|
+
superseded by <task id>`. The superseding
|
|
329
|
+
task inherits the role of each task that it names, also through a
|
|
330
|
+
chain: after it is `done`, its Verify runs in the place of the retired
|
|
331
|
+
Verify for each later landing that shares a file with a superseded
|
|
332
|
+
task, also in its own wave. The Log entry is `orchestrator regression
|
|
333
|
+
Verify of <task id> (supersedes <task id>)`.
|
|
334
|
+
A `landed` receipt proves those steps; do not run them again
|
|
335
|
+
or author another implementation narrative. A `cleanup_warning` on a
|
|
336
|
+
landing means only that the isolate was not removed: the task is landed,
|
|
337
|
+
and the next `round` or `finish` checks the isolate again. A blocked receipt preserves
|
|
279
338
|
its failure evidence and follows the recovery rule, never a manual bypass.
|
|
280
339
|
Keep the pre-finish declared-path check above. Each landing re-opens step 2
|
|
281
340
|
so ready dependents can run while unrelated children remain in flight.
|
|
@@ -488,26 +547,69 @@ dispatch contract and perform steps 1–5 by hand.
|
|
|
488
547
|
again.
|
|
489
548
|
- Otherwise batch `fix_batches` into complete fix tasks from the task
|
|
490
549
|
template — one task per batch, never one per finding — each carrying
|
|
491
|
-
its groups' failed criteria and observed evidence verbatim.
|
|
550
|
+
its groups' failed criteria and observed evidence verbatim. Each batch
|
|
551
|
+
is in one repo: a batch with `repo` is for that member and its fix task
|
|
552
|
+
has `repo: <member>`; a batch without `repo` is for the coordinator. A
|
|
553
|
+
finding whose source tasks are in two repos gives one batch for each
|
|
554
|
+
repo. A group
|
|
492
555
|
with `repeat` true is evidence its earlier fix failed, never a new
|
|
493
556
|
finding; a re-review never spawns a duplicate fix task for a finding
|
|
494
|
-
|
|
557
|
+
that a fix task not yet `done` already carries in the same repo. A
|
|
558
|
+
repeat after its fix
|
|
559
|
+
landed gets the next fix task. After a build recovery, a changed wave
|
|
560
|
+
is reviewed again from cycle 1; the fix tasks and PLAN.md repair wave
|
|
561
|
+
of the review that recovery set aside do not count for the new one.
|
|
562
|
+
Write each fix task to `.project/tasks/` with `wave`
|
|
495
563
|
set to the current wave or a newly appended `## Wave N` heading in
|
|
496
|
-
PLAN.md before dispatch. Its dependencies include every source task
|
|
497
|
-
the batch
|
|
564
|
+
PLAN.md before dispatch. Its dependencies include every source task of
|
|
565
|
+
the batch that is in the same repo, and every landed fix task of the
|
|
566
|
+
same source wave and repo that carried one of its findings; its Verify
|
|
567
|
+
runs the Verify of those source tasks; its files are the batch files or a subset of them, never
|
|
568
|
+
none. When a finding names a fix site outside the batch files, follow
|
|
569
|
+
[build recovery](build-recovery.md) to plan, which adds a repair task
|
|
570
|
+
with those files, the batch's `## Review findings` and the same
|
|
571
|
+
dependencies; `repair-evidence` accepts that task. In
|
|
572
|
+
`## Review findings`, use one
|
|
498
573
|
`### <locator>` block per group, `Criterion: <verbatim criterion>`, and
|
|
499
574
|
every observation verbatim. Run the repair through the same isolated
|
|
500
575
|
layer loop, even when its appended wave repairs an earlier blocked wave.
|
|
576
|
+
An appended repair wave has the highest wave number and still runs before
|
|
577
|
+
the pending waves, because `ready` gates them on the blocked wave (step
|
|
578
|
+
2). Do not renumber waves or move the repair wave.
|
|
501
579
|
After landing, call `review_findings.py repair-evidence --repo <primary>
|
|
502
580
|
--wave <source wave> --cycle <source cycle> --task <repair id>` and save
|
|
503
|
-
its JSON as the repair evidence for the next review. The helper
|
|
581
|
+
its JSON as the repair evidence for the next review. The helper selects
|
|
582
|
+
the batch by the repair's locators and repo, then validates
|
|
504
583
|
the carried batch, original and repair landings, isolated product scope,
|
|
505
|
-
unchanged source reports and reusable Verify.
|
|
584
|
+
unchanged source reports and reusable Verify. For a member repair it
|
|
585
|
+
checks the product in the member repository, against the member commits
|
|
586
|
+
and the member Verify record, and the receipt adds `member`,
|
|
587
|
+
`member_base` and `member_commit`. Another change to the checked files
|
|
588
|
+
is accepted only when it is the landing of a linked repair: a `done`
|
|
589
|
+
task of the same repo that carries one of the repair's findings in
|
|
590
|
+
`## Review findings`, with the same locator and criterion, and is
|
|
591
|
+
joined to the repair by `deps`. A finding on an acceptance criterion of
|
|
592
|
+
a fix task counts as the finding that this fix task carries with the
|
|
593
|
+
same criterion; the same criterion text under another locator is
|
|
594
|
+
another finding. Linked
|
|
595
|
+
repairs in the repair base are in `earlier_repairs`. Linked repairs
|
|
596
|
+
after the repair are in `later_repairs`; then the landing and the
|
|
597
|
+
recorded Verify of the last one are the evidence, and `chain_files`
|
|
598
|
+
lists the files checked from the repair base to the tip: those of the
|
|
599
|
+
repair and of every later linked repair. From the repair base to the
|
|
600
|
+
parent of the repair landing, no landing can change these files, also
|
|
601
|
+
not a linked one. On success, brief the next
|
|
506
602
|
original-wave review with this receipt and the reviewer role's
|
|
507
603
|
**Re-review after a proven repair** contract. Reuse command evidence;
|
|
508
604
|
the new review judges the repaired product against the original criteria.
|
|
509
605
|
Preserve prior verdicts and source tasks. On helper rejection, resolve
|
|
510
606
|
the evidence blocker rather than redispatching an already proven fix.
|
|
607
|
+
When the blocker cannot be resolved, for example `repair base contains
|
|
608
|
+
unlinked changes to original product` or `product changed after the
|
|
609
|
+
repair landing` because a task that is not a linked repair changed the
|
|
610
|
+
same files, run the next review cycle of the source wave in full at the
|
|
611
|
+
current HEAD, without the receipt. This is the supported fallback: it
|
|
612
|
+
needs no ruling and no plan change.
|
|
511
613
|
At the cap, record all attempts in the STATE.md log and ask the user —
|
|
512
614
|
through an interactive user-input tool when available — after linking
|
|
513
615
|
the resolved absolute blocking wave review, every deep lens file for the
|
|
@@ -69,6 +69,19 @@ checks landed-task preservation and restored intent ownership, restores review
|
|
|
69
69
|
evidence only for unchanged contracts, and creates the normal journaled plan
|
|
70
70
|
checkpoint. A failed approval leaves recovery open.
|
|
71
71
|
|
|
72
|
+
A wave keeps its review evidence when INTENT.md, its own `## Wave N` section,
|
|
73
|
+
its task files, and every other non-wave PLAN.md section are byte-identical to
|
|
74
|
+
the recovery base. Two edits are exempt: the value of the `max_review_cycles`
|
|
75
|
+
and `wave_budget` lines in `## Config`, and all of `## Dependency notes`. In
|
|
76
|
+
`## Config` only those two values may change; any other edit there, a comment
|
|
77
|
+
edit included, drops the evidence of every wave, as does any other non-wave
|
|
78
|
+
edit. A `- review_panel:` line that is added, removed, or changed anywhere in
|
|
79
|
+
PLAN.md also drops the evidence of every wave. The approval result reports
|
|
80
|
+
this in `recovery_reviews`: `restored` lists the waves that kept their evidence, and
|
|
81
|
+
`review_again` lists each wave that lost it, with the reason. Review every
|
|
82
|
+
`review_again` wave again after build resumes; completion refuses a wave
|
|
83
|
+
without a passing review.
|
|
84
|
+
|
|
72
85
|
Return through `plan/done → build/active` with event `build started`. The dispatch
|
|
73
86
|
driver uses a separate record directory for this recovery base, while retaining
|
|
74
87
|
the milestone budget ledger. Resume only from the new approved task inventory.
|
|
@@ -51,9 +51,13 @@ costs the run.
|
|
|
51
51
|
2. Satisfy every acceptance criterion and every owned INTENT success
|
|
52
52
|
criterion within the Approach constraints, matching conventions in the
|
|
53
53
|
listed files.
|
|
54
|
-
3. Edit only
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
3. Edit only paths in `files`, plus the task file's Log. A declared
|
|
55
|
+
directory covers the files below it; a declared file covers only itself.
|
|
56
|
+
There is no exception for imports, routes, generated files, or wiring.
|
|
57
|
+
4. Run Verify. Fix failures only within the allowed paths. The orchestrator
|
|
58
|
+
also runs the Verify of each earlier-wave task that shares a file with
|
|
59
|
+
yours. A Log entry `orchestrator regression Verify of <task id>` with
|
|
60
|
+
`fail` names a task you broke; make its Verify pass too.
|
|
57
61
|
5. Append the implementation and Verify result to Log. On a block, append the
|
|
58
62
|
specific reason. Do not edit frontmatter state.
|
|
59
63
|
|
|
@@ -44,6 +44,19 @@ use exactly one matching branch:
|
|
|
44
44
|
create another worktree. Encode task dependencies explicitly; launch
|
|
45
45
|
independent children concurrently up to the host's advertised
|
|
46
46
|
concurrent-subagent capacity.
|
|
47
|
+
- A `muse.subagent_spawn` tool (with `muse.subagent_wait`,
|
|
48
|
+
`muse.subagent_read_result`, and `muse.subagent_send_message` siblings) is
|
|
49
|
+
Muse Code. Omit `subagent_type` (general-purpose, full capability), pass the
|
|
50
|
+
logical task name as `task_name` and `role`, and the complete brief as
|
|
51
|
+
`objective`. Never set `worktree_isolation`. Keep the returned
|
|
52
|
+
`subagent_id`; send a correction to a still-live child with
|
|
53
|
+
`muse.subagent_send_message` mode `followup` and the complete new prompt,
|
|
54
|
+
otherwise start a fresh child. Collect with `muse.subagent_wait`
|
|
55
|
+
(`wait_for: task_terminal`) then `muse.subagent_read_result`; on
|
|
56
|
+
`root_capacity_exhausted`, wait for a child to finish and retry. Spawn has no
|
|
57
|
+
model or effort argument, so record no such capability. If only
|
|
58
|
+
`muse.workflow` is exposed (untrusted workspace), do not script or inline
|
|
59
|
+
the work; stop and report that the workspace must be trusted.
|
|
47
60
|
|
|
48
61
|
For every branch:
|
|
49
62
|
|
|
@@ -59,6 +59,11 @@ actually does. Read-only: change nothing outside your single output file.
|
|
|
59
59
|
5. **Classify remediation** for every non-verified claim: `fix-doc`,
|
|
60
60
|
`fix-code`, or `NEEDS-USER` when the right side of the conflict is not
|
|
61
61
|
yours to decide.
|
|
62
|
+
Number queue rows with unique, strictly increasing positive integers; they
|
|
63
|
+
need not be contiguous. A row that persists from the prior audit keeps its
|
|
64
|
+
number. A new row takes a number greater than every prior queue number and
|
|
65
|
+
every `## User rulings` Queue #. Never reuse a retired number: a ruling
|
|
66
|
+
stays bound to the item it was made for.
|
|
62
67
|
|
|
63
68
|
## Rules
|
|
64
69
|
|
|
@@ -38,8 +38,8 @@ bundles this file; spawned agents follow their role brief instead.
|
|
|
38
38
|
the lookahead planning track for the next milestone; it follows the same
|
|
39
39
|
marker rule, owns no task frontmatter, and never binds a branch.
|
|
40
40
|
- STATE.integration_default is the project closeout choice and
|
|
41
|
-
STATE.integration is the current milestone choice. Both are `direct
|
|
42
|
-
`pull-request`; STATE.integration_source is `default` or `milestone` and
|
|
41
|
+
STATE.integration is the current milestone choice. Both are `direct`,
|
|
42
|
+
`pull-request`, or `external-landing`; STATE.integration_source is `default` or `milestone` and
|
|
43
43
|
preserves explicit override provenance. Older v2 state defaults to `direct`,
|
|
44
44
|
and modes may be changed only through `pipeline_state.py
|
|
45
45
|
configure-integration` before build. A next milestone resets its current
|
|
@@ -82,7 +82,9 @@ bundles this file; spawned agents follow their role brief instead.
|
|
|
82
82
|
`isolation.py attest` may stand in for it: one `.project/`-only commit that
|
|
83
83
|
names the base, the attested HEAD, the declared files that changed, the
|
|
84
84
|
task Verify recorded as passing at that HEAD, and the ruling verbatim.
|
|
85
|
-
`recover` reports it as `attested`, never as a proven landing.
|
|
85
|
+
`recover` reports it as `attested`, never as a proven landing. Attestation
|
|
86
|
+
matches the declared files literally: work that is only below a declared
|
|
87
|
+
directory can land but cannot be attested.
|
|
86
88
|
- All pipeline work for a milestone lives on `gsd-path/M00N` (M001, M002,
|
|
87
89
|
…) bound in STATE.branch. The next milestone binds a new unused
|
|
88
90
|
`gsd-path/M00N` at the remote default after the previous ship integrates.
|
|
@@ -90,6 +92,12 @@ bundles this file; spawned agents follow their role brief instead.
|
|
|
90
92
|
branch — either Path's direct merge or a Path-owned PR merged by the user.
|
|
91
93
|
The bound branch never receives merges or back-merges and is never the
|
|
92
94
|
GitHub default.
|
|
95
|
+
- The default branch is the one that STATE `default_branch` records at
|
|
96
|
+
initialization; a STATE file without the field means `main`. `main` and
|
|
97
|
+
`origin/main` in these rules mean that branch. Never change the record and
|
|
98
|
+
never take the name from a later `origin/HEAD` lookup. For a member
|
|
99
|
+
repository, the branch is the one that its `.project/MEMBERS.md` section
|
|
100
|
+
records as `Default branch`; a section without the field means `main`.
|
|
93
101
|
- After initialization writes STATE.md, and before entering the first pipeline
|
|
94
102
|
phase in an existing Git repository, the router calls
|
|
95
103
|
`scripts/pipeline_git.py bind-initial` with the selected M00N and exact
|