@opengsd/gsd-path 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +397 -0
- package/DOCS.md +341 -0
- package/FULL.md +475 -0
- package/GUIDE.md +23 -0
- package/HOOKS.md +273 -0
- package/LICENSE +21 -0
- package/MIGRATE.md +100 -0
- package/QUICK.md +146 -0
- package/README.md +280 -0
- package/RUNTIME.md +229 -0
- package/UPDATE.md +196 -0
- package/WORKFLOW.md +683 -0
- package/package.json +80 -0
- package/platforms/claude/dispatch.md +63 -0
- package/platforms/copilot/dispatch.md +61 -0
- package/platforms/cursor/agent.md +17 -0
- package/platforms/cursor/dispatch.md +63 -0
- package/platforms/grok/dispatch.md +61 -0
- package/platforms/kimi/dispatch.md +64 -0
- package/platforms/kiro/dispatch.md +58 -0
- package/platforms/opencode/dispatch.md +62 -0
- package/platforms/qwen/dispatch.md +60 -0
- package/platforms/shared-agents/dispatch.md +131 -0
- package/plugin.json +14 -0
- package/scripts/_common.py +180 -0
- package/scripts/archive_milestone.py +2265 -0
- package/scripts/bootstrap_repository.py +710 -0
- package/scripts/build_state.py +854 -0
- package/scripts/check_docs_audit.py +463 -0
- package/scripts/check_handoffs.py +1855 -0
- package/scripts/check_task_briefs.py +376 -0
- package/scripts/check_update.py +93 -0
- package/scripts/core_hook_gate.py +34 -0
- package/scripts/core_hook_settings.py +119 -0
- package/scripts/detect_project.py +1517 -0
- package/scripts/discussion_records.py +619 -0
- package/scripts/discussion_validate.py +1321 -0
- package/scripts/dispatch_driver.py +1812 -0
- package/scripts/git_guard.py +759 -0
- package/scripts/guard_hook.py +2124 -0
- package/scripts/install.mjs +3239 -0
- package/scripts/install.py +3008 -0
- package/scripts/integration.py +1433 -0
- package/scripts/isolation.py +3538 -0
- package/scripts/lean_verification.py +256 -0
- package/scripts/loop_run.py +837 -0
- package/scripts/migrate_core.py +169 -0
- package/scripts/pipeline_diagnose.py +715 -0
- package/scripts/pipeline_git.py +940 -0
- package/scripts/pipeline_state.py +2291 -0
- package/scripts/pipeline_undo.py +1039 -0
- package/scripts/promote_lookahead.py +415 -0
- package/scripts/review_findings.py +714 -0
- package/scripts/review_panel.py +553 -0
- package/scripts/skill-resources.json +340 -0
- package/scripts/state_checkpoint.py +1039 -0
- package/scripts/state_promote.py +743 -0
- package/scripts/status_runtime.py +122 -0
- package/scripts/sync_skill_resources.py +259 -0
- package/scripts/token_budget.py +146 -0
- package/scripts/wizard.mjs +179 -0
- package/scripts/workflow_run.py +117 -0
- package/skills/gsd-path/BUILD.md +700 -0
- package/skills/gsd-path/DECIDE.md +115 -0
- package/skills/gsd-path/DEFINE.md +297 -0
- package/skills/gsd-path/DOCS-AUDIT.md +190 -0
- package/skills/gsd-path/INSPECT.md +167 -0
- package/skills/gsd-path/PLAN.md +411 -0
- package/skills/gsd-path/RESEARCH.md +159 -0
- package/skills/gsd-path/ROADMAP.md +215 -0
- package/skills/gsd-path/SHIP.md +412 -0
- package/skills/gsd-path/SKILL.md +471 -0
- package/skills/gsd-path/agents/openai.yaml +6 -0
- package/skills/gsd-path/references/codebase-mapper.md +52 -0
- package/skills/gsd-path/references/coder.md +90 -0
- package/skills/gsd-path/references/decider.md +36 -0
- package/skills/gsd-path/references/dispatch.md +131 -0
- package/skills/gsd-path/references/docs-auditor.md +60 -0
- package/skills/gsd-path/references/planner.md +104 -0
- package/skills/gsd-path/references/researcher.md +42 -0
- package/skills/gsd-path/references/reviewer.md +188 -0
- package/skills/gsd-path/references/roadmapper.md +48 -0
- package/skills/gsd-path/scripts/_common.py +180 -0
- package/skills/gsd-path/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path/scripts/bootstrap_repository.py +710 -0
- package/skills/gsd-path/scripts/build_state.py +854 -0
- package/skills/gsd-path/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path/scripts/check_update.py +93 -0
- package/skills/gsd-path/scripts/detect_project.py +1517 -0
- package/skills/gsd-path/scripts/discussion_records.py +619 -0
- package/skills/gsd-path/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path/scripts/dispatch_driver.py +1812 -0
- package/skills/gsd-path/scripts/integration.py +1433 -0
- package/skills/gsd-path/scripts/isolation.py +3538 -0
- package/skills/gsd-path/scripts/lean_verification.py +256 -0
- package/skills/gsd-path/scripts/loop_run.py +837 -0
- package/skills/gsd-path/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path/scripts/promote_lookahead.py +415 -0
- package/skills/gsd-path/scripts/review_findings.py +714 -0
- package/skills/gsd-path/scripts/review_panel.py +553 -0
- package/skills/gsd-path/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path/scripts/state_promote.py +743 -0
- package/skills/gsd-path/scripts/token_budget.py +146 -0
- package/skills/gsd-path/scripts/workflow_run.py +117 -0
- package/skills/gsd-path/templates/answers.md +29 -0
- package/skills/gsd-path/templates/archive-manifest.md +37 -0
- package/skills/gsd-path/templates/charter.md +50 -0
- package/skills/gsd-path/templates/codebase.md +46 -0
- package/skills/gsd-path/templates/dialogue.md +21 -0
- package/skills/gsd-path/templates/docs-audit.md +69 -0
- package/skills/gsd-path/templates/evidence.md +24 -0
- package/skills/gsd-path/templates/final-review.md +27 -0
- package/skills/gsd-path/templates/gap-review.md +20 -0
- package/skills/gsd-path/templates/intent.md +98 -0
- package/skills/gsd-path/templates/loop.md +59 -0
- package/skills/gsd-path/templates/patch-findings.md +16 -0
- package/skills/gsd-path/templates/plan-panel.md +25 -0
- package/skills/gsd-path/templates/plan.md +89 -0
- package/skills/gsd-path/templates/repository.md +16 -0
- package/skills/gsd-path/templates/research-handoff.md +25 -0
- package/skills/gsd-path/templates/roadmap.md +38 -0
- package/skills/gsd-path/templates/skeptic.md +36 -0
- package/skills/gsd-path/templates/state.md +27 -0
- package/skills/gsd-path/templates/synthesis.md +36 -0
- package/skills/gsd-path/templates/task.md +74 -0
- package/skills/gsd-path/templates/wave-panel.md +25 -0
- package/skills/gsd-path/templates/wave-review.md +64 -0
- package/skills/gsd-path-build/SKILL.md +700 -0
- package/skills/gsd-path-build/agents/openai.yaml +6 -0
- package/skills/gsd-path-build/references/coder.md +90 -0
- package/skills/gsd-path-build/references/dispatch.md +131 -0
- package/skills/gsd-path-build/references/reviewer.md +188 -0
- package/skills/gsd-path-build/scripts/_common.py +180 -0
- package/skills/gsd-path-build/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-build/scripts/build_state.py +854 -0
- package/skills/gsd-path-build/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-build/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-build/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-build/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-build/scripts/dispatch_driver.py +1812 -0
- package/skills/gsd-path-build/scripts/integration.py +1433 -0
- package/skills/gsd-path-build/scripts/isolation.py +3538 -0
- package/skills/gsd-path-build/scripts/loop_run.py +837 -0
- package/skills/gsd-path-build/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-build/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-build/scripts/review_findings.py +714 -0
- package/skills/gsd-path-build/scripts/review_panel.py +553 -0
- package/skills/gsd-path-build/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-build/scripts/state_promote.py +743 -0
- package/skills/gsd-path-build/scripts/token_budget.py +146 -0
- package/skills/gsd-path-build/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-build/templates/skeptic.md +36 -0
- package/skills/gsd-path-build/templates/task.md +74 -0
- package/skills/gsd-path-build/templates/wave-panel.md +25 -0
- package/skills/gsd-path-build/templates/wave-review.md +64 -0
- package/skills/gsd-path-decide/SKILL.md +115 -0
- package/skills/gsd-path-decide/agents/openai.yaml +6 -0
- package/skills/gsd-path-decide/references/decider.md +36 -0
- package/skills/gsd-path-decide/references/dispatch.md +131 -0
- package/skills/gsd-path-decide/scripts/_common.py +180 -0
- package/skills/gsd-path-decide/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-decide/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-decide/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-decide/scripts/isolation.py +3538 -0
- package/skills/gsd-path-decide/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-decide/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-decide/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-decide/scripts/state_promote.py +743 -0
- package/skills/gsd-path-decide/templates/synthesis.md +36 -0
- package/skills/gsd-path-define/SKILL.md +297 -0
- package/skills/gsd-path-define/agents/openai.yaml +6 -0
- package/skills/gsd-path-define/scripts/_common.py +180 -0
- package/skills/gsd-path-define/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-define/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-define/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-define/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-define/scripts/isolation.py +3538 -0
- package/skills/gsd-path-define/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-define/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-define/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-define/scripts/state_promote.py +743 -0
- package/skills/gsd-path-define/templates/charter.md +50 -0
- package/skills/gsd-path-define/templates/intent.md +98 -0
- package/skills/gsd-path-define/templates/state.md +27 -0
- package/skills/gsd-path-discuss/SKILL.md +162 -0
- package/skills/gsd-path-discuss/agents/openai.yaml +6 -0
- package/skills/gsd-path-discuss/scripts/_common.py +180 -0
- package/skills/gsd-path-discuss/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-discuss/templates/answers.md +29 -0
- package/skills/gsd-path-discuss/templates/dialogue.md +21 -0
- package/skills/gsd-path-docs-audit/SKILL.md +190 -0
- package/skills/gsd-path-docs-audit/agents/openai.yaml +6 -0
- package/skills/gsd-path-docs-audit/references/dispatch.md +131 -0
- package/skills/gsd-path-docs-audit/references/docs-auditor.md +60 -0
- package/skills/gsd-path-docs-audit/scripts/_common.py +180 -0
- package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-docs-audit/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-docs-audit/scripts/isolation.py +3538 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-docs-audit/scripts/state_promote.py +743 -0
- package/skills/gsd-path-docs-audit/templates/docs-audit.md +69 -0
- package/skills/gsd-path-forensics/SKILL.md +39 -0
- package/skills/gsd-path-forensics/agents/openai.yaml +6 -0
- package/skills/gsd-path-forensics/scripts/_common.py +180 -0
- package/skills/gsd-path-forensics/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +715 -0
- package/skills/gsd-path-forensics/scripts/pipeline_undo.py +1039 -0
- package/skills/gsd-path-inspect/SKILL.md +167 -0
- package/skills/gsd-path-inspect/agents/openai.yaml +6 -0
- package/skills/gsd-path-inspect/references/codebase-mapper.md +52 -0
- package/skills/gsd-path-inspect/references/dispatch.md +131 -0
- package/skills/gsd-path-inspect/references/docs-auditor.md +60 -0
- package/skills/gsd-path-inspect/scripts/_common.py +180 -0
- package/skills/gsd-path-inspect/scripts/check_docs_audit.py +463 -0
- package/skills/gsd-path-inspect/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-inspect/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-inspect/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-inspect/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-inspect/scripts/isolation.py +3538 -0
- package/skills/gsd-path-inspect/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-inspect/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-inspect/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-inspect/scripts/state_promote.py +743 -0
- package/skills/gsd-path-inspect/templates/codebase.md +46 -0
- package/skills/gsd-path-inspect/templates/docs-audit.md +69 -0
- package/skills/gsd-path-inspect/templates/state.md +27 -0
- package/skills/gsd-path-loop/SKILL.md +98 -0
- package/skills/gsd-path-loop/agents/openai.yaml +6 -0
- package/skills/gsd-path-loop/examples/ci-repair.LOOP.md +61 -0
- package/skills/gsd-path-loop/scripts/_common.py +180 -0
- package/skills/gsd-path-loop/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-loop/scripts/loop_run.py +837 -0
- package/skills/gsd-path-loop/templates/loop.md +59 -0
- package/skills/gsd-path-migrate/SKILL.md +134 -0
- package/skills/gsd-path-migrate/agents/openai.yaml +6 -0
- package/skills/gsd-path-migrate/scripts/core_hook_gate.py +34 -0
- package/skills/gsd-path-migrate/scripts/core_hook_settings.py +119 -0
- package/skills/gsd-path-migrate/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-migrate/scripts/migrate_core.py +169 -0
- package/skills/gsd-path-plan/SKILL.md +411 -0
- package/skills/gsd-path-plan/agents/openai.yaml +6 -0
- package/skills/gsd-path-plan/references/dispatch.md +131 -0
- package/skills/gsd-path-plan/references/planner.md +104 -0
- package/skills/gsd-path-plan/scripts/_common.py +180 -0
- package/skills/gsd-path-plan/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-plan/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-plan/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-plan/scripts/isolation.py +3538 -0
- package/skills/gsd-path-plan/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-plan/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-plan/scripts/review_panel.py +553 -0
- package/skills/gsd-path-plan/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-plan/scripts/state_promote.py +743 -0
- package/skills/gsd-path-plan/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-plan/templates/patch-findings.md +16 -0
- package/skills/gsd-path-plan/templates/plan-panel.md +25 -0
- package/skills/gsd-path-plan/templates/plan.md +89 -0
- package/skills/gsd-path-plan/templates/task.md +74 -0
- package/skills/gsd-path-research/SKILL.md +159 -0
- package/skills/gsd-path-research/agents/openai.yaml +6 -0
- package/skills/gsd-path-research/references/dispatch.md +131 -0
- package/skills/gsd-path-research/references/researcher.md +42 -0
- package/skills/gsd-path-research/scripts/_common.py +180 -0
- package/skills/gsd-path-research/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-research/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-research/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-research/scripts/isolation.py +3538 -0
- package/skills/gsd-path-research/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-research/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-research/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-research/scripts/state_promote.py +743 -0
- package/skills/gsd-path-research/templates/evidence.md +24 -0
- package/skills/gsd-path-research/templates/research-handoff.md +25 -0
- package/skills/gsd-path-roadmap/SKILL.md +215 -0
- package/skills/gsd-path-roadmap/agents/openai.yaml +6 -0
- package/skills/gsd-path-roadmap/references/dispatch.md +131 -0
- package/skills/gsd-path-roadmap/references/roadmapper.md +48 -0
- package/skills/gsd-path-roadmap/scripts/_common.py +180 -0
- package/skills/gsd-path-roadmap/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-roadmap/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-roadmap/scripts/detect_project.py +1517 -0
- package/skills/gsd-path-roadmap/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-roadmap/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-roadmap/scripts/integration.py +1433 -0
- package/skills/gsd-path-roadmap/scripts/isolation.py +3538 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-roadmap/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +415 -0
- package/skills/gsd-path-roadmap/scripts/review_panel.py +553 -0
- package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-roadmap/scripts/state_promote.py +743 -0
- package/skills/gsd-path-roadmap/templates/roadmap.md +38 -0
- package/skills/gsd-path-ship/SKILL.md +412 -0
- package/skills/gsd-path-ship/agents/openai.yaml +6 -0
- package/skills/gsd-path-ship/references/dispatch.md +131 -0
- package/skills/gsd-path-ship/references/reviewer.md +188 -0
- package/skills/gsd-path-ship/scripts/_common.py +180 -0
- package/skills/gsd-path-ship/scripts/archive_milestone.py +2265 -0
- package/skills/gsd-path-ship/scripts/build_state.py +854 -0
- package/skills/gsd-path-ship/scripts/check_handoffs.py +1855 -0
- package/skills/gsd-path-ship/scripts/check_task_briefs.py +376 -0
- package/skills/gsd-path-ship/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-ship/scripts/discussion_validate.py +1321 -0
- package/skills/gsd-path-ship/scripts/integration.py +1433 -0
- package/skills/gsd-path-ship/scripts/isolation.py +3538 -0
- package/skills/gsd-path-ship/scripts/lean_verification.py +256 -0
- package/skills/gsd-path-ship/scripts/pipeline_git.py +940 -0
- package/skills/gsd-path-ship/scripts/pipeline_state.py +2291 -0
- package/skills/gsd-path-ship/scripts/review_panel.py +553 -0
- package/skills/gsd-path-ship/scripts/state_checkpoint.py +1039 -0
- package/skills/gsd-path-ship/scripts/state_promote.py +743 -0
- package/skills/gsd-path-ship/scripts/workflow_run.py +117 -0
- package/skills/gsd-path-ship/templates/archive-manifest.md +37 -0
- package/skills/gsd-path-ship/templates/final-review.md +27 -0
- package/skills/gsd-path-ship/templates/gap-review.md +20 -0
- package/skills/gsd-path-ship/templates/patch-findings.md +16 -0
- package/skills/gsd-path-ship/templates/wave-review.md +64 -0
- package/skills/gsd-path-undo/SKILL.md +45 -0
- package/skills/gsd-path-undo/agents/openai.yaml +6 -0
- package/skills/gsd-path-undo/scripts/_common.py +180 -0
- package/skills/gsd-path-undo/scripts/discussion_records.py +619 -0
- package/skills/gsd-path-undo/scripts/pipeline_undo.py +1039 -0
- package/skills/path/BUILD.md +700 -0
- package/skills/path/DECIDE.md +115 -0
- package/skills/path/DEFINE.md +297 -0
- package/skills/path/DOCS-AUDIT.md +190 -0
- package/skills/path/INSPECT.md +167 -0
- package/skills/path/PLAN.md +411 -0
- package/skills/path/RESEARCH.md +159 -0
- package/skills/path/ROADMAP.md +215 -0
- package/skills/path/SHIP.md +412 -0
- package/skills/path/SKILL.md +471 -0
- package/skills/path/agents/openai.yaml +6 -0
- package/skills/path/references/codebase-mapper.md +52 -0
- package/skills/path/references/coder.md +90 -0
- package/skills/path/references/decider.md +36 -0
- package/skills/path/references/dispatch.md +131 -0
- package/skills/path/references/docs-auditor.md +60 -0
- package/skills/path/references/planner.md +104 -0
- package/skills/path/references/researcher.md +42 -0
- package/skills/path/references/reviewer.md +188 -0
- package/skills/path/references/roadmapper.md +48 -0
- package/skills/path/scripts/_common.py +180 -0
- package/skills/path/scripts/archive_milestone.py +2265 -0
- package/skills/path/scripts/bootstrap_repository.py +710 -0
- package/skills/path/scripts/build_state.py +854 -0
- package/skills/path/scripts/check_docs_audit.py +463 -0
- package/skills/path/scripts/check_handoffs.py +1855 -0
- package/skills/path/scripts/check_task_briefs.py +376 -0
- package/skills/path/scripts/check_update.py +93 -0
- package/skills/path/scripts/detect_project.py +1517 -0
- package/skills/path/scripts/discussion_records.py +619 -0
- package/skills/path/scripts/discussion_validate.py +1321 -0
- package/skills/path/scripts/dispatch_driver.py +1812 -0
- package/skills/path/scripts/integration.py +1433 -0
- package/skills/path/scripts/isolation.py +3538 -0
- package/skills/path/scripts/lean_verification.py +256 -0
- package/skills/path/scripts/loop_run.py +837 -0
- package/skills/path/scripts/pipeline_git.py +940 -0
- package/skills/path/scripts/pipeline_state.py +2291 -0
- package/skills/path/scripts/promote_lookahead.py +415 -0
- package/skills/path/scripts/review_findings.py +714 -0
- package/skills/path/scripts/review_panel.py +553 -0
- package/skills/path/scripts/state_checkpoint.py +1039 -0
- package/skills/path/scripts/state_promote.py +743 -0
- package/skills/path/scripts/token_budget.py +146 -0
- package/skills/path/scripts/workflow_run.py +117 -0
- package/skills/path/templates/answers.md +29 -0
- package/skills/path/templates/archive-manifest.md +37 -0
- package/skills/path/templates/charter.md +50 -0
- package/skills/path/templates/codebase.md +46 -0
- package/skills/path/templates/dialogue.md +21 -0
- package/skills/path/templates/docs-audit.md +69 -0
- package/skills/path/templates/evidence.md +24 -0
- package/skills/path/templates/final-review.md +27 -0
- package/skills/path/templates/gap-review.md +20 -0
- package/skills/path/templates/intent.md +98 -0
- package/skills/path/templates/loop.md +59 -0
- package/skills/path/templates/patch-findings.md +16 -0
- package/skills/path/templates/plan-panel.md +25 -0
- package/skills/path/templates/plan.md +89 -0
- package/skills/path/templates/repository.md +16 -0
- package/skills/path/templates/research-handoff.md +25 -0
- package/skills/path/templates/roadmap.md +38 -0
- package/skills/path/templates/skeptic.md +36 -0
- package/skills/path/templates/state.md +27 -0
- package/skills/path/templates/synthesis.md +36 -0
- package/skills/path/templates/task.md +74 -0
- package/skills/path/templates/wave-panel.md +25 -0
- package/skills/path/templates/wave-review.md +64 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Persist observed Codex output usage and block admission after exhaustion.
|
|
3
|
+
|
|
4
|
+
This is an admission gate, not an in-flight generation cap. Codex CLI does not
|
|
5
|
+
expose a hard output-token cap. Unobserved calls are not budget evidence.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import argparse
|
|
9
|
+
import json
|
|
10
|
+
import sys
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
from _common import atomic_write
|
|
15
|
+
from loop_run import log_lock
|
|
16
|
+
except ModuleNotFoundError: # pragma: no cover - package imports
|
|
17
|
+
from scripts._common import atomic_write
|
|
18
|
+
from scripts.loop_run import log_lock
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
SCHEMA = "gsd-path/token-budget/v1"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def positive(value):
|
|
25
|
+
result = int(value)
|
|
26
|
+
if result <= 0:
|
|
27
|
+
raise argparse.ArgumentTypeError("budget must be positive")
|
|
28
|
+
return result
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def output_usage(path: Path) -> int:
|
|
32
|
+
usages = []
|
|
33
|
+
child_usage = None
|
|
34
|
+
child = False
|
|
35
|
+
starts = 0
|
|
36
|
+
complete = False
|
|
37
|
+
text = path.read_text(encoding="utf-8")
|
|
38
|
+
try:
|
|
39
|
+
document = json.loads(text)
|
|
40
|
+
except ValueError:
|
|
41
|
+
document = None
|
|
42
|
+
if isinstance(document, dict) and isinstance(document.get("usage"), dict):
|
|
43
|
+
# Claude Code `-p --output-format json`: one document with the run's usage.
|
|
44
|
+
usages.append(document["usage"].get("output_tokens"))
|
|
45
|
+
text = ""
|
|
46
|
+
for line in text.splitlines():
|
|
47
|
+
event = json.loads(line)
|
|
48
|
+
if "raw" in event:
|
|
49
|
+
event = json.loads(event["raw"])
|
|
50
|
+
if event.get("type") == "turn.completed":
|
|
51
|
+
usages.append(event["usage"]["output_tokens"])
|
|
52
|
+
payload = event.get("payload", {})
|
|
53
|
+
if event.get("type") == "session_meta":
|
|
54
|
+
source = payload.get("source", {})
|
|
55
|
+
child = isinstance(source, dict) and "subagent" in source
|
|
56
|
+
if event.get("type") == "event_msg":
|
|
57
|
+
if payload.get("type") == "task_started":
|
|
58
|
+
starts += 1
|
|
59
|
+
complete = False
|
|
60
|
+
elif payload.get("type") == "token_count" and payload.get("info"):
|
|
61
|
+
child_usage = payload["info"]["total_token_usage"]["output_tokens"]
|
|
62
|
+
elif payload.get("type") == "task_complete":
|
|
63
|
+
complete = True
|
|
64
|
+
if not usages and child and starts == 1 and complete and child_usage is not None:
|
|
65
|
+
# Only a single native invocation has an unambiguous cumulative counter.
|
|
66
|
+
usages = [child_usage]
|
|
67
|
+
if not usages or any(type(value) is not int or value < 0 for value in usages):
|
|
68
|
+
raise ValueError("complete supported output usage is unavailable; budget is unproven")
|
|
69
|
+
return sum(usages)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def operate(args):
|
|
73
|
+
ledger = args.ledger.absolute()
|
|
74
|
+
if ledger.is_symlink():
|
|
75
|
+
raise ValueError("ledger must be a real file")
|
|
76
|
+
with log_lock({"log": str(ledger)}):
|
|
77
|
+
if args.action == "configure":
|
|
78
|
+
policy = {"schema": SCHEMA, "host": "codex-cli", "metric": "output_tokens",
|
|
79
|
+
"task_limit": args.task_limit, "session_limit": args.session_limit,
|
|
80
|
+
"authority": args.authority}
|
|
81
|
+
if ledger.exists():
|
|
82
|
+
data = json.loads(ledger.read_text())
|
|
83
|
+
if any(data.get(key) != value for key, value in policy.items()):
|
|
84
|
+
raise ValueError("existing session policy differs; configuration cannot reset usage")
|
|
85
|
+
else:
|
|
86
|
+
data = {**policy, "observations": {}}
|
|
87
|
+
atomic_write(ledger, json.dumps(data, indent=2) + "\n")
|
|
88
|
+
return {"status": "configured", "hard_cap_supported": False}
|
|
89
|
+
data = json.loads(ledger.read_text())
|
|
90
|
+
if data.get("schema") != SCHEMA or data.get("host") != "codex-cli":
|
|
91
|
+
raise ValueError("unsupported budget ledger")
|
|
92
|
+
if args.action == "record":
|
|
93
|
+
source = str(args.events.resolve())
|
|
94
|
+
observation = {"task": args.task, "output_tokens": output_usage(args.events)}
|
|
95
|
+
previous = data["observations"].get(source)
|
|
96
|
+
if previous and (previous["task"] != args.task or
|
|
97
|
+
previous["output_tokens"] > observation["output_tokens"]):
|
|
98
|
+
raise ValueError("observation cannot change task or reduce recorded usage")
|
|
99
|
+
data["observations"][source] = observation
|
|
100
|
+
atomic_write(ledger, json.dumps(data, indent=2) + "\n")
|
|
101
|
+
return {"status": "recorded", **observation, "hard_cap_supported": False}
|
|
102
|
+
observations = data["observations"].values()
|
|
103
|
+
task_used = sum(row["output_tokens"] for row in observations if row["task"] == args.task)
|
|
104
|
+
session_used = sum(row["output_tokens"] for row in observations)
|
|
105
|
+
task_remaining = max(0, data["task_limit"] - task_used)
|
|
106
|
+
session_remaining = max(0, data["session_limit"] - session_used)
|
|
107
|
+
reason = "observed usage is within budget; unobserved and in-flight usage is unproven"
|
|
108
|
+
blocked = not task_remaining or not session_remaining
|
|
109
|
+
if blocked:
|
|
110
|
+
reason = "observed output budget exhausted"
|
|
111
|
+
if args.require_hard_cap:
|
|
112
|
+
blocked = True
|
|
113
|
+
reason = "hard generation cap unsupported by Codex CLI"
|
|
114
|
+
return {"decision": "blocked" if blocked else "admit", "reason": reason,
|
|
115
|
+
"task_output_tokens": task_used, "session_output_tokens": session_used,
|
|
116
|
+
"task_remaining": task_remaining, "session_remaining": session_remaining,
|
|
117
|
+
"hard_cap_supported": False, "enforcement": "observed-admission-only"}
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def main(argv=None):
|
|
121
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
122
|
+
subparsers = parser.add_subparsers(dest="action", required=True)
|
|
123
|
+
for name in ("configure", "record", "admit"):
|
|
124
|
+
command = subparsers.add_parser(name)
|
|
125
|
+
command.add_argument("--ledger", type=Path, required=True)
|
|
126
|
+
if name == "configure":
|
|
127
|
+
command.add_argument("--task-limit", type=positive, required=True)
|
|
128
|
+
command.add_argument("--session-limit", type=positive, required=True)
|
|
129
|
+
command.add_argument("--authority", required=True)
|
|
130
|
+
else:
|
|
131
|
+
command.add_argument("--task", required=True)
|
|
132
|
+
if name == "record":
|
|
133
|
+
command.add_argument("--events", type=Path, required=True)
|
|
134
|
+
if name == "admit":
|
|
135
|
+
command.add_argument("--require-hard-cap", action="store_true")
|
|
136
|
+
try:
|
|
137
|
+
result = operate(parser.parse_args(argv))
|
|
138
|
+
except (ValueError, OSError, KeyError, TypeError) as error:
|
|
139
|
+
print(json.dumps({"decision": "blocked", "reason": str(error)}))
|
|
140
|
+
return 1
|
|
141
|
+
print(json.dumps(result, sort_keys=True))
|
|
142
|
+
return 1 if result.get("decision") == "blocked" else 0
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
if __name__ == "__main__":
|
|
146
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Run canonical workflow helpers with fixed arguments and fail-stop receipts."""
|
|
3
|
+
|
|
4
|
+
import argparse
|
|
5
|
+
import json
|
|
6
|
+
import subprocess
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
from scripts import _common
|
|
12
|
+
except ImportError: # bundled copy inside a skill's scripts directory
|
|
13
|
+
import _common
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class StepFailed(RuntimeError):
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def run_workflow(repo: Path, action: str, project_dir: str, expected_head: str = None,
|
|
21
|
+
task_id: str = None, round_size: int = None) -> dict:
|
|
22
|
+
steps = []
|
|
23
|
+
scripts = Path(__file__).resolve().parent
|
|
24
|
+
|
|
25
|
+
def step(script, *arguments):
|
|
26
|
+
command = [sys.executable, "-B", str(scripts / script), *arguments]
|
|
27
|
+
completed = subprocess.run(command, cwd=repo, capture_output=True, text=True)
|
|
28
|
+
receipt = {"script": script, "command": command, "exit_code": completed.returncode,
|
|
29
|
+
"stdout": completed.stdout, "stderr": completed.stderr}
|
|
30
|
+
steps.append(receipt)
|
|
31
|
+
if completed.stderr:
|
|
32
|
+
sys.stderr.write(completed.stderr)
|
|
33
|
+
if completed.returncode:
|
|
34
|
+
raise StepFailed(script)
|
|
35
|
+
try:
|
|
36
|
+
receipt["result"] = json.loads(completed.stdout)
|
|
37
|
+
except json.JSONDecodeError as error:
|
|
38
|
+
raise StepFailed(f"{script} did not return JSON") from error
|
|
39
|
+
return receipt["result"]
|
|
40
|
+
|
|
41
|
+
common = ["--repo", str(repo), "--project-dir", project_dir]
|
|
42
|
+
try:
|
|
43
|
+
if action == "route":
|
|
44
|
+
step("pipeline_state.py", "route", *common)
|
|
45
|
+
elif action == "lint-round":
|
|
46
|
+
head = subprocess.run(["git", "rev-parse", "--verify", "HEAD"],
|
|
47
|
+
cwd=repo, capture_output=True, text=True, check=True).stdout.strip()
|
|
48
|
+
step("check_task_briefs.py", "--repo", str(repo), "--base", head,
|
|
49
|
+
"--tasks-dir", f"{project_dir}/tasks")
|
|
50
|
+
step("check_handoffs.py", "plan", *common)
|
|
51
|
+
elif action == "prepare-task":
|
|
52
|
+
task = step("isolation.py", "isolate-task", "--repo", str(repo),
|
|
53
|
+
"--base", expected_head, "--task-id", task_id,
|
|
54
|
+
"--round-size", str(round_size))
|
|
55
|
+
if task["mode"] == "serial":
|
|
56
|
+
step("isolation.py", "isolate-verify", "--repo", str(repo),
|
|
57
|
+
"--base", expected_head, "--name", f"task-{task_id.lower()}-verify")
|
|
58
|
+
elif action == "build-evidence":
|
|
59
|
+
proof = step("build_state.py", "verify-landed", *common, "--head", expected_head)
|
|
60
|
+
# The landing proof has one canonical home; lean final-review reuse allows only this path.
|
|
61
|
+
evidence = repo / project_dir / "build" / "evidence.json"
|
|
62
|
+
_common.atomic_write(evidence, json.dumps(proof, indent=2, sort_keys=True) + "\n")
|
|
63
|
+
steps.append({"script": "workflow_run.py", "evidence": str(evidence)})
|
|
64
|
+
elif action == "prepare-final":
|
|
65
|
+
if project_dir != ".project":
|
|
66
|
+
raise StepFailed("final review requires the active milestone")
|
|
67
|
+
pending = step("discussion_records.py", "pending", "--repo", str(repo))
|
|
68
|
+
if pending["pending"]:
|
|
69
|
+
raise StepFailed("pending discussion requires its owner disposition")
|
|
70
|
+
step("build_state.py", "verify-landed", *common, "--head", expected_head)
|
|
71
|
+
step("lean_verification.py", "--repo", str(repo), "--expected-head", expected_head)
|
|
72
|
+
else:
|
|
73
|
+
pending = step("discussion_records.py", "pending", "--repo", str(repo))
|
|
74
|
+
if pending["pending"]:
|
|
75
|
+
raise StepFailed("pending discussion requires its owner disposition")
|
|
76
|
+
step("check_handoffs.py", "plan", *common)
|
|
77
|
+
head = subprocess.run(["git", "rev-parse", "--verify", "HEAD"],
|
|
78
|
+
cwd=repo, capture_output=True, text=True, check=True).stdout.strip()
|
|
79
|
+
step("check_task_briefs.py", "--repo", str(repo), "--base", head,
|
|
80
|
+
"--tasks-dir", f"{project_dir}/tasks")
|
|
81
|
+
panel = ["validate-plan", "--plan", str(repo / project_dir / "plan/PLAN.md"),
|
|
82
|
+
"--intent", str(repo / project_dir / "intent/INTENT.md")]
|
|
83
|
+
charter = repo / ".project/CHARTER.md"
|
|
84
|
+
if charter.exists():
|
|
85
|
+
panel += ["--charter", str(charter)]
|
|
86
|
+
step("review_panel.py", *panel)
|
|
87
|
+
if action == "approve-plan":
|
|
88
|
+
step("pipeline_state.py", "approve", *common, "--kind", "plan",
|
|
89
|
+
"--expected-head", expected_head)
|
|
90
|
+
except (StepFailed, OSError, subprocess.CalledProcessError) as error:
|
|
91
|
+
return {"status": "blocked", "reason": str(error), "steps": steps,
|
|
92
|
+
"next": "$gsd-path-forensics"}
|
|
93
|
+
return {"status": "complete", "steps": steps}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def main(argv=None):
|
|
97
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
98
|
+
parser.add_argument("action", choices=("route", "gate-plan", "approve-plan", "build-evidence", "lint-round", "prepare-task", "prepare-final"))
|
|
99
|
+
parser.add_argument("--repo", type=Path, required=True)
|
|
100
|
+
parser.add_argument("--project-dir", choices=(".project", ".project/next"), default=".project")
|
|
101
|
+
parser.add_argument("--expected-head")
|
|
102
|
+
parser.add_argument("--task-id")
|
|
103
|
+
parser.add_argument("--round-size", type=int)
|
|
104
|
+
arguments = parser.parse_args(argv)
|
|
105
|
+
if arguments.action in {"approve-plan", "build-evidence", "prepare-task", "prepare-final"} and not arguments.expected_head:
|
|
106
|
+
parser.error(f"{arguments.action} requires --expected-head")
|
|
107
|
+
if arguments.action == "prepare-task" and (not arguments.task_id or arguments.round_size is None):
|
|
108
|
+
parser.error("prepare-task requires --task-id and --round-size")
|
|
109
|
+
result = run_workflow(arguments.repo.resolve(), arguments.action,
|
|
110
|
+
arguments.project_dir, arguments.expected_head,
|
|
111
|
+
arguments.task_id, arguments.round_size)
|
|
112
|
+
print(json.dumps(result, sort_keys=True))
|
|
113
|
+
return 0 if result["status"] == "complete" else 1
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
if __name__ == "__main__":
|
|
117
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# GSD Path Discussion — Answers
|
|
2
|
+
|
|
3
|
+
<!-- Written by $gsd-path-discuss. Append one record per turn; never rewrite prior answers. -->
|
|
4
|
+
|
|
5
|
+
## Answer A001 — <YYYY-MM-DD> — <topic>
|
|
6
|
+
|
|
7
|
+
- **Thread**: T001
|
|
8
|
+
- **Turn**: D001
|
|
9
|
+
- **Supersedes**: none | A###
|
|
10
|
+
- **Question**: <the question being answered>
|
|
11
|
+
- **Status**: working | NEEDS-USER | final
|
|
12
|
+
- **Phase/status**: <phase>/<status>
|
|
13
|
+
- **Conclusion**: <answer first>
|
|
14
|
+
- **Reasoning / pushback**: <why, including rejected premise or safer alternative>
|
|
15
|
+
- **Evidence**: <exact repository paths and line references; commands only if run>
|
|
16
|
+
- **Research**: <not needed — reason, or query, checked sources, and confidence>
|
|
17
|
+
- **Confidence**: high | medium | low | unverifiable
|
|
18
|
+
- **Unresolved**: <none, or NEEDS-USER / RESEARCH question>
|
|
19
|
+
- **Next owner**: <none, user, or named GSD Path phase>
|
|
20
|
+
- **Target artifact**: <none or canonical .project path>
|
|
21
|
+
- **Follow-up**: none | required
|
|
22
|
+
|
|
23
|
+
## Disposition X001 — <YYYY-MM-DD>
|
|
24
|
+
|
|
25
|
+
- **Answer**: A###
|
|
26
|
+
- **Status**: applied | acknowledged-no-change | superseded | rejected-by-user
|
|
27
|
+
- **Owner**: <phase or router>
|
|
28
|
+
- **Artifact**: <canonical path or none>
|
|
29
|
+
- **Evidence**: <what was changed, why no change was needed, or the user ruling>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Archive — <NNN>-<milestone-slug>
|
|
2
|
+
|
|
3
|
+
<!-- Written at ship time by $gsd-path-ship final. The archive's table of
|
|
4
|
+
contents: a future audit must be able to reconstruct the milestone
|
|
5
|
+
from this file. Append-only once written. The validator requires
|
|
6
|
+
"Final verdict:" to be exactly the string shown below. -->
|
|
7
|
+
|
|
8
|
+
Milestone: <name>
|
|
9
|
+
Shipped: <date>
|
|
10
|
+
Final verdict: all criteria met; project verify passed
|
|
11
|
+
Waves: <n> Tasks: <n> done / <n> total Review cycles used: <per wave, e.g. 1/2/1>
|
|
12
|
+
Carried forward: <none, or "N DOCS-AUDIT ruling(s)">
|
|
13
|
+
|
|
14
|
+
## Success criteria at ship
|
|
15
|
+
|
|
16
|
+
<!-- Evidence is copied verbatim from FINAL.md; escape a literal pipe as
|
|
17
|
+
\| so the row keeps its three cells. -->
|
|
18
|
+
|
|
19
|
+
| Criterion | Verdict | Evidence |
|
|
20
|
+
|-----------|---------|----------|
|
|
21
|
+
| <criterion copied from FINAL.md> | met | <FINAL Reference; else Check; else Observed> |
|
|
22
|
+
|
|
23
|
+
## Contents
|
|
24
|
+
|
|
25
|
+
<!-- Every file moved into this archive, one per line, relative paths. -->
|
|
26
|
+
- intent/INTENT.md
|
|
27
|
+
- research/...
|
|
28
|
+
- plan/PLAN.md
|
|
29
|
+
- tasks/...
|
|
30
|
+
- review/...
|
|
31
|
+
|
|
32
|
+
## Notes
|
|
33
|
+
|
|
34
|
+
<!-- Anything the next milestone should know: escalations that shaped the
|
|
35
|
+
build, accepted drift, known debt. Write at least one substantive bullet;
|
|
36
|
+
use "none" if clean. -->
|
|
37
|
+
- <note>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Charter — <program name>
|
|
2
|
+
|
|
3
|
+
<!-- Written by $gsd-path-define program mode. Enduring program intent:
|
|
4
|
+
vetoes and constraints here override every milestone. Amended only by an
|
|
5
|
+
explicit user ruling recorded under Corrections. Lives at .project/
|
|
6
|
+
top level and persists across milestones; it never archives. -->
|
|
7
|
+
|
|
8
|
+
Review panel: off <!-- off | detected | claude,gpt,grok,composer,gemini,
|
|
9
|
+
deepseek,kimi,qwen — durable
|
|
10
|
+
program default for optional cross-model plan and
|
|
11
|
+
wave review. Milestone INTENT copies this value and
|
|
12
|
+
may override it. off is the default. Named values
|
|
13
|
+
name at most 3 families. -->
|
|
14
|
+
|
|
15
|
+
## Vision
|
|
16
|
+
|
|
17
|
+
<2–4 sentences: the program's end state and why it matters.>
|
|
18
|
+
|
|
19
|
+
## Full scope: in
|
|
20
|
+
|
|
21
|
+
<!-- Everything the program will deliver, grouped by capability area. The
|
|
22
|
+
roadmap slices this list; every item must map to at least one milestone. -->
|
|
23
|
+
- <capability area>: <what it includes>
|
|
24
|
+
|
|
25
|
+
## Full scope: out (vetoes)
|
|
26
|
+
|
|
27
|
+
<!-- Hard limits. No milestone, research dispatch, plan, or task may include
|
|
28
|
+
these. -->
|
|
29
|
+
- <vetoed item> — <user's stated reason, verbatim where possible>
|
|
30
|
+
|
|
31
|
+
## Constraints
|
|
32
|
+
|
|
33
|
+
<Program-level stack, budget, deadline, integrations, compliance.>
|
|
34
|
+
|
|
35
|
+
## Program success criteria
|
|
36
|
+
|
|
37
|
+
<!-- Observable statements checked when the last milestone ships. -->
|
|
38
|
+
1. <criterion — a thing you can run/measure/see>
|
|
39
|
+
|
|
40
|
+
## Open questions
|
|
41
|
+
|
|
42
|
+
<!-- Unresolved at program define end. Tags: RESEARCH (program research
|
|
43
|
+
answers it), NEEDS-USER (a human decision, surface at next checkpoint). -->
|
|
44
|
+
- [RESEARCH] <question>
|
|
45
|
+
- [NEEDS-USER] <question>
|
|
46
|
+
|
|
47
|
+
## Corrections
|
|
48
|
+
|
|
49
|
+
<!-- Verbatim user rulings that amend this charter. Append-only. -->
|
|
50
|
+
- <date>: "<what the user said>"
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Evidence — codebase
|
|
2
|
+
|
|
3
|
+
<!-- Written by the codebase mapper during $gsd-path-inspect. Read by define
|
|
4
|
+
(brownfield mode), researchers (fifth standard dimension), the planner
|
|
5
|
+
(conventions are binding), and reviewers. -->
|
|
6
|
+
|
|
7
|
+
Repo root: <absolute path>
|
|
8
|
+
Scanned: <date>
|
|
9
|
+
Checks run: <exact commands run and their results, e.g. `npm test` → 37/40 pass>
|
|
10
|
+
|
|
11
|
+
## Map
|
|
12
|
+
|
|
13
|
+
- **Stack**: <languages, frameworks, versions actually in use, from manifests>
|
|
14
|
+
- **Entry points**: <binaries, main modules, routes — how this thing starts>
|
|
15
|
+
- **Architecture**: <layers and flow in 3–5 sentences>
|
|
16
|
+
- **Conventions**: <naming, error handling, test style, commit style — binding on the planner>
|
|
17
|
+
- **Maturity**: <what runs, test coverage shape, what is scaffolding>
|
|
18
|
+
- **Recent activity**: <where the last N commits cluster — what was being worked on>
|
|
19
|
+
|
|
20
|
+
## Finding: <short claim as heading>
|
|
21
|
+
|
|
22
|
+
- **Claim**: <one specific, falsifiable statement about this codebase>
|
|
23
|
+
- **Source**: <file:line or command actually run>
|
|
24
|
+
- **Confidence**: <high | medium | low>
|
|
25
|
+
- **Why it matters here**: <what inspection/planning gets wrong without this>
|
|
26
|
+
|
|
27
|
+
<!-- Record every load-bearing surprise or half-built area observed. There is
|
|
28
|
+
no minimum finding quota; explain an empty section if none were found. -->
|
|
29
|
+
|
|
30
|
+
## Apparent intent
|
|
31
|
+
|
|
32
|
+
<!-- Inference, clearly flagged — what the project seems to be becoming. -->
|
|
33
|
+
|
|
34
|
+
- <inference> — based on <evidence>
|
|
35
|
+
|
|
36
|
+
## Open questions for define
|
|
37
|
+
|
|
38
|
+
<!-- What only the user can settle about this codebase. -->
|
|
39
|
+
|
|
40
|
+
- <question>
|
|
41
|
+
|
|
42
|
+
## Blocked areas
|
|
43
|
+
|
|
44
|
+
<!-- What could not be inspected and why. "none" if clean. -->
|
|
45
|
+
|
|
46
|
+
- <area> — <what blocked inspection>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# GSD Path Discussion — Dialogue
|
|
2
|
+
|
|
3
|
+
<!-- Written by $gsd-path-discuss. Append turns; never rewrite prior turns. -->
|
|
4
|
+
|
|
5
|
+
## Turns
|
|
6
|
+
|
|
7
|
+
### D001 — <YYYY-MM-DD> — <phase>/<status> — <topic>
|
|
8
|
+
|
|
9
|
+
- **Thread**: T001
|
|
10
|
+
- **Reply to**: none | D###
|
|
11
|
+
- **User (verbatim)**:
|
|
12
|
+
|
|
13
|
+
> <copy the user's message exactly>
|
|
14
|
+
|
|
15
|
+
- **Assistant**:
|
|
16
|
+
|
|
17
|
+
<copy the answer returned to the user>
|
|
18
|
+
|
|
19
|
+
- **Evidence checked**: <repository paths, line references, commands actually run, or none>
|
|
20
|
+
- **Research**: <not needed — reason, or query/sources/confidence>
|
|
21
|
+
- **Thread status**: working | NEEDS-USER | final
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Docs Audit
|
|
2
|
+
|
|
3
|
+
<!-- Written by the docs auditor ($gsd-path-docs-audit or $gsd-path-inspect).
|
|
4
|
+
Every verdict carries evidence; a verdict without evidence is a defect. -->
|
|
5
|
+
|
|
6
|
+
Repo root: <absolute path>
|
|
7
|
+
Audited: <date>
|
|
8
|
+
Audited HEAD: <40-hex commit the claims were checked at, or none>
|
|
9
|
+
Alignment mode: <yes | no — yes when .project/ artifacts were also audited>
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
|
|
13
|
+
| Verdict | Count |
|
|
14
|
+
|---------|-------|
|
|
15
|
+
| verified | <n> |
|
|
16
|
+
| stale | <n> |
|
|
17
|
+
| aspirational | <n> |
|
|
18
|
+
| unverifiable | <n> |
|
|
19
|
+
| descriptive docs (no testable claims) | <n> |
|
|
20
|
+
|
|
21
|
+
Worst drift: <one sentence — the most misleading claim found>
|
|
22
|
+
|
|
23
|
+
## Doc: <path/to/doc.md>
|
|
24
|
+
|
|
25
|
+
| Claim | Type | Verdict | Evidence |
|
|
26
|
+
|-------|------|---------|----------|
|
|
27
|
+
| "<claim, short-quoted>" | command \| feature \| structure \| status \| config \| integration | verified \| stale \| aspirational \| unverifiable | <file:line or command → result> |
|
|
28
|
+
|
|
29
|
+
<!-- One section per doc that has at least one testable claim. Docs without
|
|
30
|
+
testable claims go in the Descriptive docs list below, never in their
|
|
31
|
+
own section. Evidence with exactly one `unchanged: ` prefix marks a row
|
|
32
|
+
carried from the prior audit under the role's delta rule. Copy an
|
|
33
|
+
already-carried row verbatim without adding another prefix. -->
|
|
34
|
+
|
|
35
|
+
## Descriptive docs
|
|
36
|
+
|
|
37
|
+
<!-- Every inventoried doc with no testable claims, one path per line.
|
|
38
|
+
The union of this list and the Doc section paths must equal the frozen
|
|
39
|
+
inventory exactly. -->
|
|
40
|
+
|
|
41
|
+
- <path/to/doc.md>
|
|
42
|
+
|
|
43
|
+
## Alignment (alignment mode only)
|
|
44
|
+
|
|
45
|
+
- **INTENT success criteria**: <each → met so far | not yet | contradicted, with evidence>
|
|
46
|
+
- **Done tasks**: <each status:done task → recover-proven landing SHA? Verify re-run result?>
|
|
47
|
+
- **SYNTHESIS decisions**: <each → code conforms? evidence>
|
|
48
|
+
- **STATE vs frontmatter**: <agree | discrepancies listed>
|
|
49
|
+
|
|
50
|
+
## User rulings
|
|
51
|
+
|
|
52
|
+
<!-- Appended after the ruling walk (standalone runs). Verbatim, append-only.
|
|
53
|
+
accept-drift rulings suppress the item in future audits.
|
|
54
|
+
`planned: no` rows are the alignment queue: $gsd-path and $gsd-path-plan offer
|
|
55
|
+
to absorb them until drained. When a ruling becomes a task, set
|
|
56
|
+
planned to the task id — never delete the row. -->
|
|
57
|
+
|
|
58
|
+
| Queue # | Ruling | User's words | Planned |
|
|
59
|
+
|---------|--------|--------------|---------|
|
|
60
|
+
| 1 | fix-code \| fix-doc \| accept-drift | "<verbatim>" | no \| <task id> \| n/a (accept-drift) |
|
|
61
|
+
|
|
62
|
+
## Remediation queue
|
|
63
|
+
|
|
64
|
+
<!-- Every non-verified claim, classified. The user rules on this queue;
|
|
65
|
+
the auditor never fixes anything. -->
|
|
66
|
+
|
|
67
|
+
| # | Doc | Claim | Verdict | Class | Suggested action |
|
|
68
|
+
|---|-----|-------|---------|-------|------------------|
|
|
69
|
+
| 1 | <doc> | <claim> | stale | fix-doc \| fix-code \| NEEDS-USER | <one line> |
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Evidence — <dimension>
|
|
2
|
+
|
|
3
|
+
<!-- Written by one researcher role. Consumed by the decider. -->
|
|
4
|
+
|
|
5
|
+
Dimension: <domain | stack | pitfalls | similar | custom>
|
|
6
|
+
Questions assigned: <exact RESEARCH questions joined by "; ", or "none">
|
|
7
|
+
|
|
8
|
+
## Finding: <short claim as heading>
|
|
9
|
+
|
|
10
|
+
- **Claim**: <one specific, falsifiable statement>
|
|
11
|
+
- **Source**: <URL / doc / repo path actually opened>
|
|
12
|
+
- **Confidence**: <high | medium | low>
|
|
13
|
+
- **Why it matters here**: <one line tying this to INTENT.md>
|
|
14
|
+
|
|
15
|
+
<!-- One block per load-bearing finding — no quota. Repeat as needed. -->
|
|
16
|
+
|
|
17
|
+
## Assigned questions — answers
|
|
18
|
+
|
|
19
|
+
- <question> → <answer with source, or "no reliable source found">
|
|
20
|
+
|
|
21
|
+
## Dead ends
|
|
22
|
+
|
|
23
|
+
<!-- What was checked and didn't pan out, so nobody re-treads it. -->
|
|
24
|
+
- <path explored> — <why it's a dead end>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Final Review — <project name>
|
|
2
|
+
|
|
3
|
+
<!-- Authorship and evidence reuse follow the ship phase contract. Each INTENT.md success
|
|
4
|
+
criterion appears exactly once and carries checked evidence. A criterion
|
|
5
|
+
listed in PLAN.md's Surface contract also names its Surface, and its
|
|
6
|
+
Check is the walkthrough performed — never internal test output. Embedded
|
|
7
|
+
angle brackets are valid in concrete Check and Observed values. -->
|
|
8
|
+
|
|
9
|
+
Reviewed HEAD: <full SHA>
|
|
10
|
+
Overall verdict: <pass | blocked>
|
|
11
|
+
|
|
12
|
+
<!-- pass only when every criterion is met; blocked when any criterion is
|
|
13
|
+
not-met or unverifiable. -->
|
|
14
|
+
|
|
15
|
+
## Success criteria
|
|
16
|
+
|
|
17
|
+
### SC1 — <criterion copied verbatim from INTENT.md>
|
|
18
|
+
|
|
19
|
+
- **Verdict**: <met | not-met | unverifiable>
|
|
20
|
+
- **Surface**: <the surface PLAN.md's Surface contract lists this criterion under; omit the whole field for any other criterion>
|
|
21
|
+
- **Check**: `<command actually run, or "none">`
|
|
22
|
+
- **Observed**: <relevant output or observed behavior>
|
|
23
|
+
- **Reference**: <file:line, artifact path, or "none">
|
|
24
|
+
- **Finding**: <none, or what was found instead>
|
|
25
|
+
- **Fix direction**: <none, or concrete direction for a patch task>
|
|
26
|
+
|
|
27
|
+
<!-- Repeat once per success criterion, preserving INTENT.md order. -->
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Gap Review — <N>: <risk identity>
|
|
2
|
+
|
|
3
|
+
<!-- Written by one final gap reviewer. This file covers exactly one
|
|
4
|
+
cross-wave integration risk named in the review brief. -->
|
|
5
|
+
|
|
6
|
+
Reviewed HEAD: <full SHA>
|
|
7
|
+
Gap verdict: <pass | blocked>
|
|
8
|
+
Risk: <same risk identity as the heading>
|
|
9
|
+
Waves checked: <wave numbers>
|
|
10
|
+
|
|
11
|
+
## Checked evidence
|
|
12
|
+
|
|
13
|
+
- **Check**: `<command actually run, or "none">`
|
|
14
|
+
- **Observed**: <relevant output or observed behavior>
|
|
15
|
+
- **Reference**: <file:line, artifact path, or "none">
|
|
16
|
+
|
|
17
|
+
## Finding
|
|
18
|
+
|
|
19
|
+
- **Found**: <evidence-backed result>
|
|
20
|
+
- **Fix direction**: <none when pass; concrete direction when blocked>
|