@opengsd/gsd-core 1.10.0 → 1.11.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/agents/gsd-debug-session-manager.md +11 -0
- package/agents/gsd-doc-synthesizer.md +2 -4
- package/agents/gsd-executor.md +5 -5
- package/agents/gsd-mempalace-curator.md +5 -2
- package/agents/gsd-phase-researcher.md +20 -1
- package/agents/gsd-plan-checker.md +37 -0
- package/agents/gsd-planner.md +44 -46
- package/agents/gsd-user-profiler.md +3 -0
- package/agents/gsd-verifier.md +12 -3
- package/bin/install.js +841 -971
- package/bin/lib/ui-safety-gate.cjs +2 -0
- package/commands/gsd/code-review.md +1 -1
- package/commands/gsd/execute-phase.md +1 -1
- package/commands/gsd/map-codebase.md +1 -1
- package/commands/gsd/mempalace-capture.md +1 -1
- package/commands/gsd/mempalace-recall.md +1 -1
- package/commands/gsd/new-milestone.md +1 -1
- package/commands/gsd/quick.md +1 -1
- package/commands/gsd/review-backlog.md +2 -1
- package/commands/gsd/verify-work.md +1 -1
- package/gsd-core/bin/gsd-tools.cjs +469 -88
- package/gsd-core/bin/lib/active-workstream-store.cjs +138 -22
- package/gsd-core/bin/lib/agent-install-check.cjs +230 -32
- package/gsd-core/bin/lib/api-coverage.cjs +3 -5
- package/gsd-core/bin/lib/artifacts.cjs +3 -0
- package/gsd-core/bin/lib/assumption-delta.cjs +2 -4
- package/gsd-core/bin/lib/audit-command-router.cjs +9 -2
- package/gsd-core/bin/lib/audit.cjs +876 -240
- package/gsd-core/bin/lib/broken-windows.cjs +1 -1
- package/gsd-core/bin/lib/capability-consent.cjs +149 -15
- package/gsd-core/bin/lib/capability-lifecycle.cjs +45 -0
- package/gsd-core/bin/lib/capability-registry.cjs +575 -101
- package/gsd-core/bin/lib/capability-source.cjs +92 -0
- package/gsd-core/bin/lib/capability-trust.cjs +444 -25
- package/gsd-core/bin/lib/capability-validator.cjs +495 -22
- package/gsd-core/bin/lib/capability-writer.cjs +3 -2
- package/gsd-core/bin/lib/check-command-router.cjs +71 -37
- package/gsd-core/bin/lib/claude-orchestration.cjs +56 -3
- package/gsd-core/bin/lib/codex-agent-toml.cjs +329 -0
- package/gsd-core/bin/lib/command-aliases.cjs +22 -0
- package/gsd-core/bin/lib/command-roster.cjs +44 -1
- package/gsd-core/bin/lib/commands.cjs +651 -86
- package/gsd-core/bin/lib/commonjs-marker.cjs +12 -6
- package/gsd-core/bin/lib/complexity-trigger.cjs +1172 -0
- package/gsd-core/bin/lib/config-loader.cjs +75 -0
- package/gsd-core/bin/lib/config.cjs +10 -1
- package/gsd-core/bin/lib/core-utils.cjs +127 -29
- package/gsd-core/bin/lib/decisions.cjs +23 -0
- package/gsd-core/bin/lib/fallow-runner.cjs +20 -44
- package/gsd-core/bin/lib/frontmatter.cjs +155 -20
- package/gsd-core/bin/lib/gap-checker.cjs +68 -7
- package/gsd-core/bin/lib/git-base-branch.cjs +102 -0
- package/gsd-core/bin/lib/gsd2-import.cjs +10 -1
- package/gsd-core/bin/lib/health-diagnostic-rules/agent-install.cjs +101 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/config-validation.cjs +348 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/consistency.cjs +145 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/install-surface-shadowing.cjs +98 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/milestone-archive-hygiene.cjs +100 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +222 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/roadmap-disk-consistency.cjs +265 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/root-existence.cjs +161 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +303 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/worktree-health.cjs +173 -0
- package/gsd-core/bin/lib/health-diagnostic-types.cjs +68 -0
- package/gsd-core/bin/lib/health-diagnostic.cjs +431 -0
- package/gsd-core/bin/lib/host-runtime-detection.cjs +134 -0
- package/gsd-core/bin/lib/init.cjs +321 -129
- package/gsd-core/bin/lib/install-effort-resolver.cjs +73 -30
- package/gsd-core/bin/lib/install-engine.cjs +745 -258
- package/gsd-core/bin/lib/install-fs-adapter.cjs +262 -0
- package/gsd-core/bin/lib/install-model-override-resolver.cjs +203 -0
- package/gsd-core/bin/lib/install-profiles.cjs +134 -57
- package/gsd-core/bin/lib/install-scope.cjs +270 -0
- package/gsd-core/bin/lib/install-shadow-report.cjs +385 -0
- package/gsd-core/bin/lib/installed-surface-resolver.cjs +381 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +138 -31
- package/gsd-core/bin/lib/io.cjs +10 -0
- package/gsd-core/bin/lib/markdown-sectionizer.cjs +2 -1
- package/gsd-core/bin/lib/markdown-table.cjs +133 -20
- package/gsd-core/bin/lib/milestone-lock.cjs +248 -0
- package/gsd-core/bin/lib/milestone.cjs +754 -70
- package/gsd-core/bin/lib/model-catalog.cjs +59 -1
- package/gsd-core/bin/lib/model-resolver.cjs +183 -40
- package/gsd-core/bin/lib/normalize-test-command.cjs +1 -1
- package/gsd-core/bin/lib/pattern.cjs +122 -0
- package/gsd-core/bin/lib/phase-estimation.cjs +1 -1
- package/gsd-core/bin/lib/phase-id.cjs +444 -36
- package/gsd-core/bin/lib/phase-lifecycle.cjs +28 -3
- package/gsd-core/bin/lib/phase-locator.cjs +125 -18
- package/gsd-core/bin/lib/phase.cjs +646 -143
- package/gsd-core/bin/lib/plan-dependency-graph.cjs +72 -1
- package/gsd-core/bin/lib/plan-drift-guard.cjs +120 -0
- package/gsd-core/bin/lib/plan-scan.cjs +86 -2
- package/gsd-core/bin/lib/planning-scope.cjs +31 -0
- package/gsd-core/bin/lib/planning-snapshot.cjs +890 -0
- package/gsd-core/bin/lib/planning-workspace.cjs +56 -6
- package/gsd-core/bin/lib/probe-core.cjs +1 -1
- package/gsd-core/bin/lib/profile-output.cjs +1 -1
- package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +740 -0
- package/gsd-core/bin/lib/retired-artifact-cleanup.cjs +11 -6
- package/gsd-core/bin/lib/review-lane-descriptor.cjs +13 -4
- package/gsd-core/bin/lib/review-lane-invocation.cjs +30 -0
- package/gsd-core/bin/lib/review-lane-runner.cjs +421 -66
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +13 -18
- package/gsd-core/bin/lib/roadmap-command-router.cjs +34 -0
- package/gsd-core/bin/lib/roadmap-parser.cjs +943 -184
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +37 -10
- package/gsd-core/bin/lib/roadmap.cjs +385 -94
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +608 -46
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +14 -2
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +426 -55
- package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +3 -2
- package/gsd-core/bin/lib/runtime-homes.cjs +69 -3
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +115 -3
- package/gsd-core/bin/lib/runtime-name-policy.cjs +3 -1
- package/gsd-core/bin/lib/runtime-slash.cjs +27 -9
- package/gsd-core/bin/lib/security.cjs +104 -5
- package/gsd-core/bin/lib/shell-command-projection.cjs +275 -3
- package/gsd-core/bin/lib/smart-entry.cjs +142 -22
- package/gsd-core/bin/lib/state-command-router.cjs +5 -1
- package/gsd-core/bin/lib/state-document.cjs +152 -8
- package/gsd-core/bin/lib/state-transition.cjs +371 -117
- package/gsd-core/bin/lib/state.cjs +1794 -357
- package/gsd-core/bin/lib/surface.cjs +23 -9
- package/gsd-core/bin/lib/text-lines.cjs +80 -0
- package/gsd-core/bin/lib/token-scanner.cjs +76 -0
- package/gsd-core/bin/lib/uat-predicate.cjs +9 -3
- package/gsd-core/bin/lib/uat.cjs +399 -56
- package/gsd-core/bin/lib/ui-frontend-evidence.cjs +157 -0
- package/gsd-core/bin/lib/ui-safety-gate.cjs +14 -5
- package/gsd-core/bin/lib/unusable-input.cjs +24 -0
- package/gsd-core/bin/lib/update-context.cjs +8 -2
- package/gsd-core/bin/lib/user-artifact-staging.cjs +705 -0
- package/gsd-core/bin/lib/validate.cjs +20 -6
- package/gsd-core/bin/lib/vendor/README.md +37 -0
- package/gsd-core/bin/lib/vendor/re2js.cjs +6480 -0
- package/gsd-core/bin/lib/vendor/re2js.d.cts +938 -0
- package/gsd-core/bin/lib/verification-command-router.cjs +2 -1
- package/gsd-core/bin/lib/verification.cjs +258 -8
- package/gsd-core/bin/lib/verify.cjs +368 -888
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +53 -32
- package/gsd-core/bin/lib/workstream-inventory.cjs +63 -10
- package/gsd-core/bin/lib/workstream.cjs +2 -2
- package/gsd-core/bin/lib/worktree-safety.cjs +176 -9
- package/gsd-core/bin/shared/config-defaults.manifest.json +1 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +7 -1
- package/gsd-core/references/agent-contracts.md +43 -26
- package/gsd-core/references/checkpoints.md +2 -2
- package/gsd-core/references/context-budget.md +1 -1
- package/gsd-core/references/dispatch-isolation-gate.md +138 -0
- package/gsd-core/references/doc-conflict-engine.md +1 -1
- package/gsd-core/references/execute-mvp-tdd.md +3 -3
- package/gsd-core/references/execute-phase-between-wave-reset.md +6 -2
- package/gsd-core/references/execute-phase-context-guard.md +1 -1
- package/gsd-core/references/execute-phase-response-language.md +1 -1
- package/gsd-core/references/execute-phase-wave-guard.md +6 -2
- package/gsd-core/references/gate-prompts.md +1 -1
- package/gsd-core/references/git-planning-commit.md +2 -1
- package/gsd-core/references/loop-hook-dispatch.md +39 -2
- package/gsd-core/references/model-profiles.md +12 -4
- package/gsd-core/references/mvp-concepts.md +9 -9
- package/gsd-core/references/planner-guidance.md +3 -9
- package/gsd-core/references/planner-preconditions.md +1 -1
- package/gsd-core/references/planner-reviews.md +1 -1
- package/gsd-core/references/planning-config.md +8 -6
- package/gsd-core/references/revision-loop.md +1 -1
- package/gsd-core/references/specless-probe-fallback.md +1 -1
- package/gsd-core/references/universal-anti-patterns.md +3 -3
- package/gsd-core/references/verifier-phase-gates.md +192 -0
- package/gsd-core/references/verify-mvp-mode.md +1 -1
- package/gsd-core/references/workstream-flag.md +22 -6
- package/gsd-core/templates/discussion-log.md +1 -1
- package/gsd-core/templates/phase-prompt.md +2 -4
- package/gsd-core/templates/state.md +4 -4
- package/gsd-core/templates/verification-report.md +9 -1
- package/gsd-core/workflows/ai-integration-phase.md +9 -11
- package/gsd-core/workflows/autonomous.md +1 -1
- package/gsd-core/workflows/cleanup.md +62 -3
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +13 -3
- package/gsd-core/workflows/code-review-fix.md +37 -10
- package/gsd-core/workflows/code-review.md +38 -12
- package/gsd-core/workflows/complete-milestone.md +141 -18
- package/gsd-core/workflows/debug.md +7 -5
- package/gsd-core/workflows/diagnose-issues.md +35 -9
- package/gsd-core/workflows/discuss-phase/modes/chain.md +2 -1
- package/gsd-core/workflows/discuss-phase/modes/default.md +1 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +2 -1
- package/gsd-core/workflows/edit-phase.md +26 -1
- package/gsd-core/workflows/eval-review.md +3 -5
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +31 -6
- package/gsd-core/workflows/execute-phase/steps/per-plan-executor-routing.md +77 -0
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +2 -0
- package/gsd-core/workflows/execute-phase.md +38 -50
- package/gsd-core/workflows/execute-plan.md +36 -4
- package/gsd-core/workflows/explore.md +131 -4
- package/gsd-core/workflows/fast.md +10 -2
- package/gsd-core/workflows/health.md +73 -4
- package/gsd-core/workflows/import.md +4 -4
- package/gsd-core/workflows/ingest-docs.md +5 -5
- package/gsd-core/workflows/mvp-phase.md +6 -3
- package/gsd-core/workflows/new-milestone.md +14 -9
- package/gsd-core/workflows/new-project.md +14 -14
- package/gsd-core/workflows/next.md +12 -0
- package/gsd-core/workflows/plan-phase.md +41 -17
- package/gsd-core/workflows/plan-review-convergence.md +50 -2
- package/gsd-core/workflows/progress.md +34 -6
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +4 -4
- package/gsd-core/workflows/quick/steps/quick-verification.md +27 -6
- package/gsd-core/workflows/quick/steps/research-phase.md +2 -2
- package/gsd-core/workflows/quick.md +35 -15
- package/gsd-core/workflows/review.md +26 -5
- package/gsd-core/workflows/secure-phase.md +1 -1
- package/gsd-core/workflows/session-report.md +2 -1
- package/gsd-core/workflows/settings.md +66 -2
- package/gsd-core/workflows/ship.md +104 -44
- package/gsd-core/workflows/spec-phase.md +30 -12
- package/gsd-core/workflows/sync-skills.md +63 -8
- package/gsd-core/workflows/transition.md +46 -11
- package/gsd-core/workflows/ui-phase.md +5 -5
- package/gsd-core/workflows/ui-review.md +2 -2
- package/gsd-core/workflows/update.md +1 -1
- package/gsd-core/workflows/validate-phase.md +1 -1
- package/gsd-core/workflows/verify-work.md +9 -7
- package/hooks/dist/gsd-agent-isolation-guard.js +103 -14
- package/hooks/dist/gsd-check-update-worker.js +56 -13
- package/hooks/dist/gsd-check-update.js +19 -1
- package/hooks/dist/gsd-cursor-pre-tool.js +0 -3
- package/hooks/dist/gsd-cursor-subagent-start.js +77 -2
- package/hooks/dist/gsd-cursor-subagent-stop.js +3 -2
- package/hooks/dist/gsd-prompt-guard.js +21 -20
- package/hooks/dist/gsd-read-injection-scanner.js +38 -24
- package/hooks/dist/gsd-statusline.js +18 -0
- package/hooks/dist/gsd-update-banner.js +22 -1
- package/hooks/dist/gsd-workflow-guard.js +134 -36
- package/hooks/dist/lib/git-cmd.js +92 -59
- package/hooks/dist/lib/injection-patterns.js +45 -0
- package/hooks/dist/lib/isolation-deny-reason.js +39 -0
- package/hooks/dist/lib/isolation-sentinel.js +9 -0
- package/hooks/gsd-agent-isolation-guard.js +103 -14
- package/hooks/gsd-check-update-worker.js +56 -13
- package/hooks/gsd-check-update.js +19 -1
- package/hooks/gsd-cursor-pre-tool.js +0 -3
- package/hooks/gsd-cursor-subagent-start.js +77 -2
- package/hooks/gsd-cursor-subagent-stop.js +3 -2
- package/hooks/gsd-prompt-guard.js +21 -20
- package/hooks/gsd-read-injection-scanner.js +38 -24
- package/hooks/gsd-statusline.js +18 -0
- package/hooks/gsd-update-banner.js +22 -1
- package/hooks/gsd-workflow-guard.js +134 -36
- package/hooks/lib/git-cmd.js +92 -59
- package/hooks/lib/injection-patterns.js +45 -0
- package/hooks/lib/isolation-deny-reason.js +39 -0
- package/hooks/lib/isolation-sentinel.js +9 -0
- package/package.json +21 -9
- package/pi/gsd.cjs +19 -5
- package/scripts/baselines/planning-prompt-drift-baseline.json +4 -0
- package/scripts/baselines/planning-snapshot-bypass-baseline.json +12 -0
- package/scripts/baselines/unreachable-guard-drift-baseline.json +4 -0
- package/scripts/changeset/lint.cjs +60 -5
- package/scripts/check-alias-drift.cjs +7 -43
- package/scripts/check-contract-drift.cjs +297 -0
- package/scripts/ci-test-scope.cjs +19 -2
- package/scripts/command-contract-helpers.cjs +903 -1
- package/scripts/gen-adr-index.cjs +728 -38
- package/scripts/gen-capability-registry.cjs +3 -15
- package/scripts/gen-context-index.cjs +2 -11
- package/scripts/gen-health-docs.cjs +390 -0
- package/scripts/gen-inventory-manifest.cjs +50 -4
- package/scripts/gen-loop-host-contract.cjs +4 -24
- package/scripts/gen-registry.cjs +3 -14
- package/scripts/lib/alias-drift-families.cjs +46 -0
- package/scripts/lib/drift-scan.cjs +278 -0
- package/scripts/lint-allow-test-rule-refs.allowlist.json +1 -26
- package/scripts/lint-allow-test-rule-refs.effective-ceiling.json +4 -0
- package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +3 -0
- package/scripts/lint-canary-version-leak.cjs +73 -0
- package/scripts/lint-command-contract.cjs +96 -13
- package/scripts/lint-completion-predicate-drift.cjs +933 -0
- package/scripts/lint-completion-ratio-drift.cjs +214 -0
- package/scripts/lint-default-flip-documentation.cjs +193 -0
- package/scripts/lint-eslint-glob-coverage.allowlist.json +34 -0
- package/scripts/lint-eslint-glob-coverage.cjs +340 -0
- package/scripts/lint-frontmatter-scalar-broad-grep.cjs +237 -0
- package/scripts/lint-health-diagnostic-rule-table.cjs +404 -0
- package/scripts/lint-hooks-runtime-build-seam.cjs +262 -0
- package/scripts/lint-milestone-window-drift.cjs +468 -0
- package/scripts/lint-phase-enumeration-drift.cjs +479 -0
- package/scripts/lint-plan-count-drift.cjs +318 -0
- package/scripts/lint-planning-artifact-writer-drift.cjs +398 -0
- package/scripts/lint-planning-prompt-drift.cjs +434 -0
- package/scripts/lint-planning-snapshot-bypass-drift.cjs +544 -0
- package/scripts/lint-regression-test-names.cjs +15 -13
- package/scripts/lint-removed-but-needed.cjs +320 -0
- package/scripts/lint-state-field-drift.cjs +805 -0
- package/scripts/lint-state-write-path-drift.cjs +1045 -0
- package/scripts/lint-test-file-count.allowlist.json +21 -10
- package/scripts/lint-unreachable-guard-drift.cjs +843 -0
- package/scripts/lint-vendored-deps.cjs +124 -0
- package/scripts/pr-changed-files.cjs +63 -0
- package/scripts/pr-template-policy.cjs +14 -4
- package/scripts/prompt-injection-scan.sh +25 -0
- package/scripts/require-issue-link-policy.cjs +192 -0
- package/scripts/state-write-path-drift-baseline.json +19 -0
- package/scripts/sync-runtime-launcher.cjs +2 -4
- package/skills/gsd-autonomous/SKILL.md +0 -1
- package/skills/gsd-code-review/SKILL.md +1 -1
- package/skills/gsd-execute-phase/SKILL.md +1 -2
- package/skills/gsd-map-codebase/SKILL.md +1 -1
- package/skills/gsd-mempalace-capture/SKILL.md +1 -1
- package/skills/gsd-mempalace-recall/SKILL.md +1 -1
- package/skills/gsd-new-milestone/SKILL.md +1 -1
- package/skills/gsd-next/SKILL.md +0 -1
- package/skills/gsd-plan-phase/SKILL.md +0 -1
- package/skills/gsd-progress/SKILL.md +0 -1
- package/skills/gsd-quick/SKILL.md +1 -1
- package/skills/gsd-review-backlog/SKILL.md +2 -1
- package/skills/gsd-stats/SKILL.md +0 -1
- package/skills/gsd-verify-work/SKILL.md +1 -1
- package/vscode/package.json +1 -1
- package/gsd-core/workflows/discovery-phase.md +0 -298
- package/gsd-core/workflows/plan-milestone-gaps.md +0 -281
- package/gsd-core/workflows/verify-phase.md +0 -574
- package/scripts/affected-tests-lib.cjs +0 -554
- package/scripts/lint-allow-test-rule-refs.cjs +0 -162
- package/scripts/run-affected-tests.cjs +0 -7
- package/scripts/run-tests.cjs +0 -1051
|
@@ -33,6 +33,7 @@ Received from spawning orchestrator:
|
|
|
33
33
|
- `tdd_mode` — boolean; true if TDD gate is active
|
|
34
34
|
- `goal` — `find_root_cause_only` | `find_and_fix`
|
|
35
35
|
- `specialist_dispatch_enabled` — boolean; true if specialist skill review is enabled
|
|
36
|
+
- `resume` — boolean; present only on an orchestrator auto-resume re-spawn (#3448), accompanied by `resume_status` and `resume_next_action` (the checkpoint's `status`/`next_action` read from the debug file at resume time). When `resume: true`, any earlier checkpoint in the session was already answered — carry that disposition and the recorded next action into the Step 2 dispatch.
|
|
36
37
|
</session_parameters>
|
|
37
38
|
|
|
38
39
|
<process>
|
|
@@ -75,6 +76,16 @@ Continue debugging {slug}. Evidence is in the debug file.
|
|
|
75
76
|
</required_reading>
|
|
76
77
|
</prior_state>
|
|
77
78
|
|
|
79
|
+
{if resume: "<resume_directive>
|
|
80
|
+
DATA_START
|
|
81
|
+
**Status at pause:** {resume_status}
|
|
82
|
+
**Recorded next action — resume here and proceed directly on it:** {resume_next_action}
|
|
83
|
+
**Prior checkpoints:** already answered by the user; do not re-raise them. Route only
|
|
84
|
+
genuinely NEW human input (a pending decision or destructive-action approval) back through
|
|
85
|
+
the checkpoint loop, never a re-ask of an answered one.
|
|
86
|
+
DATA_END
|
|
87
|
+
</resume_directive>"}
|
|
88
|
+
|
|
78
89
|
<mode>
|
|
79
90
|
symptoms_prefilled: {symptoms_prefilled}
|
|
80
91
|
goal: {goal}
|
|
@@ -17,7 +17,7 @@ You are a GSD doc synthesizer. You consume per-doc classification JSON files and
|
|
|
17
17
|
You do NOT prompt the user. You do NOT write PROJECT.md, REQUIREMENTS.md, or ROADMAP.md — those are produced downstream by `gsd-roadmapper` using your output. Your job is synthesis + conflict surfacing.
|
|
18
18
|
|
|
19
19
|
**CRITICAL: Mandatory Initial Read**
|
|
20
|
-
If the prompt contains a `<required_reading>` block, load every file listed there first — especially `references/doc-conflict-engine.md` which defines your conflict report format.
|
|
20
|
+
If the prompt contains a `<required_reading>` block, load every file listed there first — especially `gsd-core/references/doc-conflict-engine.md` which defines your conflict report format.
|
|
21
21
|
</role>
|
|
22
22
|
|
|
23
23
|
@~/.claude/gsd-core/references/untrusted-input-boundary.md
|
|
@@ -173,7 +173,7 @@ Absent fields → mark absent (empty / omit), never fabricate. LOCKED-vs-LOCKED
|
|
|
173
173
|
</terminal_output_schema_restatement>
|
|
174
174
|
|
|
175
175
|
<step name="write_conflicts_report">
|
|
176
|
-
Write `CONFLICTS_PATH` using the format from `references/doc-conflict-engine.md`. Three buckets, plain text, no tables.
|
|
176
|
+
Write `CONFLICTS_PATH` using the format from `gsd-core/references/doc-conflict-engine.md`. Three buckets, plain text, no tables.
|
|
177
177
|
|
|
178
178
|
Structure:
|
|
179
179
|
|
|
@@ -224,8 +224,6 @@ This is the single entry point `gsd-roadmapper` reads.
|
|
|
224
224
|
Return ≤ 10 lines to the orchestrator:
|
|
225
225
|
|
|
226
226
|
```
|
|
227
|
-
## Synthesis Complete
|
|
228
|
-
|
|
229
227
|
Docs synthesized: {N} ({breakdown})
|
|
230
228
|
Decisions locked: {N}
|
|
231
229
|
Requirements: {N}
|
package/agents/gsd-executor.md
CHANGED
|
@@ -148,7 +148,7 @@ For each task:
|
|
|
148
148
|
|
|
149
149
|
0. **Precondition check (before any other task work):** If the task carries a `<precondition>` element, evaluate that single prose line first — it names a runnable/checkable fact the task assumes (env var set, prior-phase artifact present, server responding to `/health`, `user_setup` step done). Verify with **read-only checks only** — file existence, env var presence (no value output), idempotent `GET /health`-style pings. Do NOT run commands with side effects (writes, network POSTs, secret emission) as the check; if a side-effecting check seems required, halt and surface via checkpoint instead.
|
|
150
150
|
- **Met OR absent:** continue with no visible change to execution flow. The precondition is a no-op for the rest of the task loop.
|
|
151
|
-
- **Unmet:** STOP — return a `checkpoint:human-verify` (use `checkpoint_return_format`) with `**Blocked by:** Precondition not met: <precondition text>`. Do NOT partial-commit the task. Unmet preconditions are NEVER auto-approved, even under `AUTO_CFG=true` — a missing prerequisite is not a verification step a human can rubber-stamp; it is a fact the executor cannot establish on its own. The human either satisfies the precondition (sets the env var, completes the `user_setup` step, regenerates the artifact) or reruns `/gsd:plan-phase` to restructure.
|
|
151
|
+
- **Unmet:** STOP — return a `checkpoint:human-verify` reporting `**Gate:** blocking-human` (use `checkpoint_return_format`) with `**Blocked by:** Precondition not met: <precondition text>`. Do NOT partial-commit the task. Unmet preconditions are NEVER auto-approved, even under `AUTO_CFG=true` — a missing prerequisite is not a verification step a human can rubber-stamp; it is a fact the executor cannot establish on its own. The human either satisfies the precondition (sets the env var, completes the `user_setup` step, regenerates the artifact) or reruns `/gsd:plan-phase` to restructure.
|
|
152
152
|
|
|
153
153
|
1. **If `type="auto"`:**
|
|
154
154
|
- Check for `tdd="true"` → follow TDD execution flow
|
|
@@ -328,7 +328,7 @@ For full automation-first patterns, server lifecycle, CLI handling:
|
|
|
328
328
|
|
|
329
329
|
**Auto-mode checkpoint behavior** (when `AUTO_CFG` is `"true"`):
|
|
330
330
|
|
|
331
|
-
- **checkpoint:human-verify** → Auto-approve **except package-legitimacy checkpoints**. If checkpoint has `gate="blocking-human"` OR its purpose indicates package legitimacy verification (`what-built` mentions `Package verification required before install` or `Package install failed — human verification required`), do **not** auto-approve. STOP and return checkpoint_return_format for explicit human confirmation.
|
|
331
|
+
- **checkpoint:human-verify** → Auto-approve **except package-legitimacy checkpoints**. If checkpoint has `gate="blocking-human"` OR its purpose indicates package legitimacy verification (`what-built` mentions `Package verification required before install` or `Package install failed — human verification required`), do **not** auto-approve. STOP and return checkpoint_return_format for explicit human confirmation. Precondition-unmet checkpoints report `blocking-human` — never auto-approved.
|
|
332
332
|
- **checkpoint:decision** → If checkpoint has `gate="blocking-human"`, do **not** auto-select — STOP and return checkpoint_return_format for an explicit human decision (a `blocking-human` decision exists because its default answer would be wrong to assume). Otherwise auto-select first option (planners front-load the recommended choice), log `⚡ Auto-selected: [option name]`, continue to next task.
|
|
333
333
|
- **checkpoint:human-action** → STOP normally. Auth gates cannot be automated — return structured checkpoint message using checkpoint_return_format.
|
|
334
334
|
|
|
@@ -354,7 +354,7 @@ When hitting checkpoint or auth gate, return this structure:
|
|
|
354
354
|
## CHECKPOINT REACHED
|
|
355
355
|
|
|
356
356
|
**Type:** [human-verify | decision | human-action]
|
|
357
|
-
**Gate:** [blocking | blocking-human] — copy the task's `gate` attribute verbatim
|
|
357
|
+
**Gate:** [blocking | blocking-human] — copy the task's `gate` attribute verbatim (precondition-unmet checkpoints report `blocking-human`)
|
|
358
358
|
**Plan:** {phase}-{plan}
|
|
359
359
|
**Progress:** {completed}/{total} tasks complete
|
|
360
360
|
|
|
@@ -426,7 +426,7 @@ If RED or GREEN gate commits are missing, add a warning to SUMMARY.md under a `#
|
|
|
426
426
|
**Halt-and-report protocol:**
|
|
427
427
|
|
|
428
428
|
1. Stop. Do not run the task's implementation step.
|
|
429
|
-
2. Emit the structured halt report defined in `references/execute-mvp-tdd.md` (header line, reason code, expected behavior, required next step).
|
|
429
|
+
2. Emit the structured halt report defined in `gsd-core/references/execute-mvp-tdd.md` (header line, reason code, expected behavior, required next step).
|
|
430
430
|
3. Update `STATE.md` with `last_gate_trip: {plan_id}/{task_id}`.
|
|
431
431
|
4. Exit the current execution wave cleanly. Prior commits in the same wave stay — do not roll back.
|
|
432
432
|
|
|
@@ -436,7 +436,7 @@ If RED or GREEN gate commits are missing, add a warning to SUMMARY.md under a `#
|
|
|
436
436
|
IS_BEHAVIOR_ADDING=$(gsd_run query task.is-behavior-adding "$TASK_FILE" --pick is_behavior_adding)
|
|
437
437
|
```
|
|
438
438
|
|
|
439
|
-
The verb owns the canonical predicate (tdd="true" frontmatter AND `<behavior>` block AND non-test source files in `<files>`). Pure doc-only / config-only / test-only tasks return `false` and are exempt. Full result also exposes per-check breakdown (`checks.tdd_true`, `checks.has_behavior_block`, `checks.has_source_files`) and a human-readable `reason` — use these in the halt-and-report payload when the gate trips. See `references/execute-mvp-tdd.md` for halt protocol.
|
|
439
|
+
The verb owns the canonical predicate (tdd="true" frontmatter AND `<behavior>` block AND non-test source files in `<files>`). Pure doc-only / config-only / test-only tasks return `false` and are exempt. Full result also exposes per-check breakdown (`checks.tdd_true`, `checks.has_behavior_block`, `checks.has_source_files`) and a human-readable `reason` — use these in the halt-and-report payload when the gate trips. See `gsd-core/references/execute-mvp-tdd.md` for halt protocol.
|
|
440
440
|
|
|
441
441
|
**Mode is all-or-nothing per phase** (PRD decision Q1, inherited from Phase 1). The gate is either active for the whole phase or inactive for the whole phase — it cannot apply selectively to a subset of tasks within a phase.
|
|
442
442
|
|
|
@@ -8,6 +8,9 @@ color: cyan
|
|
|
8
8
|
|
|
9
9
|
<role>
|
|
10
10
|
You are the MemPalace curator. You run once per phase at `ship:post`, after verification has passed, to consolidate the phase's memory into the palace. Everything you do is best-effort and wing-scoped: a MemPalace failure must never fail the ship step (`onError: skip`), and you must never touch drawers outside this project's wing.
|
|
11
|
+
|
|
12
|
+
**CRITICAL: Mandatory Initial Read**
|
|
13
|
+
If the prompt contains a `<required_reading>` block, you MUST use the `Read` tool to load every file listed there before performing any other actions. This is your primary context.
|
|
11
14
|
</role>
|
|
12
15
|
|
|
13
16
|
<inputs>
|
|
@@ -27,9 +30,9 @@ If `mempalace.enabled !== true`, do nothing and report `MemPalace disabled — c
|
|
|
27
30
|
|
|
28
31
|
## Tasks (each independently best-effort)
|
|
29
32
|
|
|
30
|
-
1. **Diary entry** (
|
|
33
|
+
1. **Diary entry** (unless `mempalace.diary_journal !== false` — registry default is true, an absent key means enabled). Write one concise per-agent diary entry summarising the phase outcome: `mempalace_diary_write(agent_name=<project>/<role>, entry=<summary>, topic="phase-ship", wing=<wing>)` (CLI: `mempalace hook run` / the diary CLI). Namespace `agent_name` by repo+role so diaries don't collide across projects. **Idempotency:** before writing, `mempalace_diary_read` (or list) for an existing entry keyed by `(wing, agent_name, topic, phase-id)`; if one exists for this phase, update it in place rather than appending a second.
|
|
31
34
|
|
|
32
|
-
2. **extract-learnings → KG mirror** (
|
|
35
|
+
2. **extract-learnings → KG mirror** (unless `mempalace.mirror_kg !== false` — registry default is true, an absent key means enabled). For each decision/lesson/pattern/surprise from the phase's learnings, add a typed KG triple with provenance (`source_file`, `source_drawer_id`) and `valid_from` = the phase date. **Idempotency:** the triple `(subject, predicate, object)` is the natural key — `mempalace_kg_query` for it first and skip `mempalace_kg_add` if it already exists with the same `valid_from`, so reruns don't fork duplicate facts. When a prior decision was superseded this phase, call `mempalace_kg_invalidate` to set its `valid_to` rather than deleting it.
|
|
33
36
|
|
|
34
37
|
3. **Cross-project tunnels** (when `mempalace.cross_project_tunnels` is true). Use `mempalace_find_tunnels` to surface related wings, then `mempalace_create_tunnel(label=…)` only for connections you (or the user) can justify. **Idempotency:** check the `find_tunnels` result first and skip creation if a tunnel with that `(source-wing, target-wing, label)` already exists. Do not mass-create tunnels.
|
|
35
38
|
|
|
@@ -183,6 +183,14 @@ Keep using the provenance tags in RESEARCH.md:
|
|
|
183
183
|
|
|
184
184
|
**Never present LOW confidence findings as authoritative.**
|
|
185
185
|
|
|
186
|
+
**Claim-disposition mode (the `/gsd:explore` quick-research pass).** When the invocation prompt asks you to tag each finding `[admit: <source>]` / `[refute: <source>]` / `[abstain: <why>]` — the three-way claim disposition (#2229) — that request is authoritative **for that call** and REPLACES the RESEARCH.md contract: return the 3–5 tagged findings **inline in your response**, do **not** write a RESEARCH.md file, and do **not** use the *Research Complete* structured return. Derive each disposition from the same source work you already do:
|
|
187
|
+
|
|
188
|
+
- `[admit: <source>]` — a finding you would tag `[VERIFIED]` (tool-confirmed AND from a source authoritative for *this* claim) **and** which survived your prompted-to-refute attempt.
|
|
189
|
+
- `[refute: <source>]` — a primary source authoritative for the claim contradicts it; give the correction, with the source.
|
|
190
|
+
- `[abstain: <why>]` — everything else: `[ASSUMED]`/LOW, a non-authoritative `[CITED]` source, unverifiable, or a source-vs-prior conflict. `<why>` MUST be one of the caller's five ledger reasons, byte-identical to `explore.md`: `unverifiable` | `source-vs-prior conflict` | `non-authoritative source` | `tier-floor: unearned confidence` | `untagged — disposition not reported` — the last is the caller's to assign, not yours. A "strong prior" alone is never authoritative — it can only abstain, never refute.
|
|
191
|
+
|
|
192
|
+
Every finding carries **exactly one** tag; an untagged finding is routed to the caller's Unresolved Ledger as `untagged — disposition not reported`. The confidence tier still rides underneath (it drives the caller's tier floor), but the disposition — not the tier — decides what may be stated.
|
|
193
|
+
|
|
186
194
|
</source_hierarchy>
|
|
187
195
|
|
|
188
196
|
<verification_protocol>
|
|
@@ -537,7 +545,8 @@ Also read `.planning/config.json` — include Validation Architecture section in
|
|
|
537
545
|
|
|
538
546
|
Then read CONTEXT.md if exists:
|
|
539
547
|
```bash
|
|
540
|
-
|
|
548
|
+
_CTX=( "$phase_dir"/*-CONTEXT.md )
|
|
549
|
+
if [ -e "${_CTX[0]}" ]; then cat "${_CTX[@]}"; fi
|
|
541
550
|
```
|
|
542
551
|
|
|
543
552
|
**If CONTEXT.md exists**, it constrains research:
|
|
@@ -843,6 +852,16 @@ Research complete. Planner can now create PLAN.md files.
|
|
|
843
852
|
[What's needed to continue]
|
|
844
853
|
```
|
|
845
854
|
|
|
855
|
+
## Quick Claim-Disposition Pass (`/gsd:explore`)
|
|
856
|
+
|
|
857
|
+
Not the templates above — an inline return, no RESEARCH.md and no phase/confidence header. 3–5 findings, each on its own line, each carrying exactly one disposition tag (see **Claim-disposition mode**):
|
|
858
|
+
|
|
859
|
+
```markdown
|
|
860
|
+
- [admit: <source>] <finding that survived refute and is grounded>
|
|
861
|
+
- [refute: <source>] <corrected claim — a primary source contradicts the original>
|
|
862
|
+
- [abstain: <why>] <finding that is unverifiable / non-authoritative / conflicted>
|
|
863
|
+
```
|
|
864
|
+
|
|
846
865
|
</structured_returns>
|
|
847
866
|
|
|
848
867
|
<success_criteria>
|
|
@@ -210,6 +210,42 @@ issue:
|
|
|
210
210
|
fix_hint: "Plan 02 depends on 03, but 03 depends on 02"
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
+
## Dimension 3b: Undeclared / Temporal Coupling
|
|
214
|
+
|
|
215
|
+
**Question:** Do two same-wave plans depend on each other through shared mutable state or
|
|
216
|
+
execution order without declaring it? Dimension 3 checks *declared* edges and the wave guard
|
|
217
|
+
checks `files_modified` overlap; neither sees an undeclared edge, which under parallel
|
|
218
|
+
execution becomes an intermittent failure nobody can attribute.
|
|
219
|
+
|
|
220
|
+
**Scope: PLAN pairs, not tasks.** Tasks inside one plan run sequentially and cannot race.
|
|
221
|
+
Compare same-wave plan pairs over the union of their tasks' `<files>` and `<action>`.
|
|
222
|
+
|
|
223
|
+
**FLAG only when ALL THREE hold** (coupling that is strong *and* non-local — Connascence of
|
|
224
|
+
Execution; strong-but-local coupling inside one plan is fine):
|
|
225
|
+
1. both plans sit in the same wave, and
|
|
226
|
+
2. neither declares `depends_on` on the other, and
|
|
227
|
+
3. their actions name a *specific* shared mutable resource (config key, table/row, migration,
|
|
228
|
+
env var, singleton, cache) with at least one WRITER, or one names a prerequisite the other
|
|
229
|
+
produces.
|
|
230
|
+
|
|
231
|
+
**Do NOT flag:** both sides only READ it, or it is immutable; the pair already overlaps in
|
|
232
|
+
`files_modified` (report that once, on the file axis); the plans sit in a different wave, which
|
|
233
|
+
already orders them; two tasks inside one plan; a vague same-subsystem claim naming no
|
|
234
|
+
resource; incompatible *transformations* of one entity — that is Dimension 9.
|
|
235
|
+
|
|
236
|
+
**Severity: ALWAYS WARNING, never a blocker.** Coupling is sometimes intentional; the finding
|
|
237
|
+
lets the planner declare the edge, move a plan to a later wave, or justify the pair.
|
|
238
|
+
|
|
239
|
+
```yaml
|
|
240
|
+
issue:
|
|
241
|
+
dimension: dependency_correctness
|
|
242
|
+
severity: warning
|
|
243
|
+
description: "Plans 02 and 03 are both Wave 1 with no depends_on, but 02 writes config key
|
|
244
|
+
auth.session_ttl and 03 reads it"
|
|
245
|
+
plans: ["02", "03"]
|
|
246
|
+
fix_hint: "Declare depends_on, move 03 to a later wave, or justify either order"
|
|
247
|
+
```
|
|
248
|
+
|
|
213
249
|
## Dimension 4: Key Links Planned
|
|
214
250
|
|
|
215
251
|
**Question:** Are artifacts wired together, not just created in isolation?
|
|
@@ -1036,6 +1072,7 @@ Plan verification complete when:
|
|
|
1036
1072
|
- [ ] Requirement coverage checked (all requirements have tasks)
|
|
1037
1073
|
- [ ] Task completeness validated (all required fields present)
|
|
1038
1074
|
- [ ] Dependency graph verified (no cycles, valid references)
|
|
1075
|
+
- [ ] Undeclared/temporal coupling checked (same-wave plan pairs, advisory)
|
|
1039
1076
|
- [ ] Key links checked (wiring planned, not just artifacts)
|
|
1040
1077
|
- [ ] Scope assessed (within context budget)
|
|
1041
1078
|
- [ ] must_haves derivation verified (user-observable truths)
|
package/agents/gsd-planner.md
CHANGED
|
@@ -485,47 +485,7 @@ See @~/.claude/gsd-core/references/planner-guidance.md for a worked example and
|
|
|
485
485
|
|
|
486
486
|
## Checkpoint Types
|
|
487
487
|
|
|
488
|
-
**checkpoint:human-verify (90%
|
|
489
|
-
Human confirms Claude's automated work works correctly.
|
|
490
|
-
|
|
491
|
-
Use for: Visual UI checks, interactive flows, functional verification, animation/accessibility.
|
|
492
|
-
|
|
493
|
-
```xml
|
|
494
|
-
<task type="checkpoint:human-verify" gate="blocking">
|
|
495
|
-
<what-built>[What Claude automated]</what-built>
|
|
496
|
-
<how-to-verify>
|
|
497
|
-
[Exact steps to test - URLs, commands, expected behavior]
|
|
498
|
-
</how-to-verify>
|
|
499
|
-
<resume-signal>Type "approved" or describe issues</resume-signal>
|
|
500
|
-
</task>
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
**checkpoint:decision (9% of checkpoints)**
|
|
504
|
-
Human makes implementation choice affecting direction.
|
|
505
|
-
|
|
506
|
-
Use for: Technology selection, architecture decisions, design choices.
|
|
507
|
-
|
|
508
|
-
```xml
|
|
509
|
-
<task type="checkpoint:decision" gate="blocking">
|
|
510
|
-
<decision>[What's being decided]</decision>
|
|
511
|
-
<context>[Why this matters]</context>
|
|
512
|
-
<options>
|
|
513
|
-
<option id="option-a">
|
|
514
|
-
<name>[Name]</name>
|
|
515
|
-
<pros>[Benefits]</pros>
|
|
516
|
-
<cons>[Tradeoffs]</cons>
|
|
517
|
-
</option>
|
|
518
|
-
</options>
|
|
519
|
-
<resume-signal>Select: option-a, option-b, or ...</resume-signal>
|
|
520
|
-
</task>
|
|
521
|
-
```
|
|
522
|
-
|
|
523
|
-
**checkpoint:human-action (1% - rare)**
|
|
524
|
-
Action has NO CLI/API and requires human-only interaction.
|
|
525
|
-
|
|
526
|
-
Use ONLY for: Email verification links, SMS 2FA codes, manual account approvals, credit card 3D Secure flows.
|
|
527
|
-
|
|
528
|
-
Do NOT use for: Deploying (use CLI), creating webhooks (use API), creating databases (use provider CLI), running builds/tests (use Bash), creating files (use Write).
|
|
488
|
+
Three types: **checkpoint:human-verify (90%)**, **checkpoint:decision (9%)**, **checkpoint:human-action (1% - rare)**. Full "use for" criteria and XML templates for each: @~/.claude/gsd-core/references/checkpoints.md
|
|
529
489
|
|
|
530
490
|
## Authentication Gates
|
|
531
491
|
|
|
@@ -696,7 +656,8 @@ Select top 2-4 phases. Skip phases with no relevance signal.
|
|
|
696
656
|
|
|
697
657
|
**Step 3 — Read full SUMMARYs for selected phases:**
|
|
698
658
|
```bash
|
|
699
|
-
|
|
659
|
+
_SUMMARIES=( .planning/phases/{selected-phase}/*-SUMMARY.md )
|
|
660
|
+
if [ -e "${_SUMMARIES[0]}" ]; then cat "${_SUMMARIES[@]}"; fi
|
|
700
661
|
```
|
|
701
662
|
|
|
702
663
|
From full SUMMARYs extract:
|
|
@@ -733,9 +694,12 @@ If `features.global_learnings` is `true`: run `gsd_run query learnings.query --t
|
|
|
733
694
|
Use `phase_dir` from init context (already loaded in load_project_state).
|
|
734
695
|
|
|
735
696
|
```bash
|
|
736
|
-
|
|
737
|
-
cat "$
|
|
738
|
-
|
|
697
|
+
_CTX=( "$phase_dir"/*-CONTEXT.md )
|
|
698
|
+
if [ -e "${_CTX[0]}" ]; then cat "${_CTX[@]}"; fi # From /gsd:discuss-phase
|
|
699
|
+
_RESEARCH=( "$phase_dir"/*-RESEARCH.md )
|
|
700
|
+
if [ -e "${_RESEARCH[0]}" ]; then cat "${_RESEARCH[@]}"; fi # Research output
|
|
701
|
+
_DISCOVERY=( "$phase_dir"/*-DISCOVERY.md )
|
|
702
|
+
if [ -e "${_DISCOVERY[0]}" ]; then cat "${_DISCOVERY[@]}"; fi # From mandatory discovery
|
|
739
703
|
```
|
|
740
704
|
|
|
741
705
|
**If CONTEXT.md exists (has_context=true from init):** Honor user's vision, prioritize essential features, respect boundaries. Locked decisions — do not revisit.
|
|
@@ -934,7 +898,7 @@ Return structured planning outcome to orchestrator.
|
|
|
934
898
|
|
|
935
899
|
<structured_returns>
|
|
936
900
|
|
|
937
|
-
See @~/.claude/gsd-core/references/planner-guidance.md for
|
|
901
|
+
See @~/.claude/gsd-core/references/planner-guidance.md for return formats; gap-closure returns are artifact-based (#3440).
|
|
938
902
|
|
|
939
903
|
See @~/.claude/gsd-core/references/planner-chunked.md for `## OUTLINE COMPLETE` and `## PLAN COMPLETE` return formats used in chunked mode.
|
|
940
904
|
|
|
@@ -951,6 +915,40 @@ See @~/.claude/gsd-core/references/planner-chunked.md for `## OUTLINE COMPLETE`
|
|
|
951
915
|
|
|
952
916
|
<success_criteria>
|
|
953
917
|
|
|
918
|
+
## Return Markers
|
|
919
|
+
|
|
920
|
+
Your orchestrator dispatches on exact marker strings in your final output. Emit exactly one of:
|
|
921
|
+
|
|
922
|
+
```markdown
|
|
923
|
+
## PLANNING COMPLETE
|
|
924
|
+
```
|
|
925
|
+
(final plans committed, ready for verification)
|
|
926
|
+
|
|
927
|
+
```markdown
|
|
928
|
+
## OUTLINE COMPLETE
|
|
929
|
+
```
|
|
930
|
+
(outline produced, awaiting confirmation — chunked planning mode)
|
|
931
|
+
|
|
932
|
+
```markdown
|
|
933
|
+
## PHASE SPLIT RECOMMENDED
|
|
934
|
+
```
|
|
935
|
+
(phase too large to plan as one unit, include the proposed split)
|
|
936
|
+
|
|
937
|
+
```markdown
|
|
938
|
+
## ⚠ Source Audit
|
|
939
|
+
```
|
|
940
|
+
(unplanned items found in the requirements, include the options)
|
|
941
|
+
|
|
942
|
+
```markdown
|
|
943
|
+
## CHECKPOINT REACHED
|
|
944
|
+
```
|
|
945
|
+
(paused at a user checkpoint, include resume instructions)
|
|
946
|
+
|
|
947
|
+
```markdown
|
|
948
|
+
## PLANNING INCONCLUSIVE
|
|
949
|
+
```
|
|
950
|
+
(cannot produce a plan, include exactly what is missing)
|
|
951
|
+
|
|
954
952
|
## Standard Mode
|
|
955
953
|
|
|
956
954
|
Phase planning complete when:
|
|
@@ -13,6 +13,9 @@ You are spawned by the profile orchestration workflow (Phase 3) or by write-prof
|
|
|
13
13
|
Your job: Apply the heuristics defined in the user-profiling reference document to score each dimension with evidence and confidence. Return structured JSON analysis.
|
|
14
14
|
|
|
15
15
|
CRITICAL: You must apply the rubric defined in the reference document. Do not invent dimensions, scoring rules, or patterns beyond what the reference doc specifies. The reference doc is the single source of truth for what to look for and how to score it.
|
|
16
|
+
|
|
17
|
+
**CRITICAL: Mandatory Initial Read**
|
|
18
|
+
If the prompt contains a `<required_reading>` block, you MUST use the `Read` tool to load every file listed there before performing any other actions. This is your primary context.
|
|
16
19
|
</role>
|
|
17
20
|
|
|
18
21
|
<input>
|
package/agents/gsd-verifier.md
CHANGED
|
@@ -41,6 +41,7 @@ Every truth must resolve to VERIFIED, FAILED (BLOCKER), or UNCERTAIN (WARNING wi
|
|
|
41
41
|
<required_reading>
|
|
42
42
|
@~/.claude/gsd-core/references/verification-overrides.md
|
|
43
43
|
@~/.claude/gsd-core/references/gates.md
|
|
44
|
+
@~/.claude/gsd-core/references/verifier-phase-gates.md
|
|
44
45
|
</required_reading>
|
|
45
46
|
|
|
46
47
|
This agent implements the **Escalation Gate** pattern (surfaces unresolvable gaps to the developer for decision).
|
|
@@ -81,7 +82,8 @@ At verification decision points, reference calibration examples:
|
|
|
81
82
|
## Step 0: Check for Previous Verification
|
|
82
83
|
|
|
83
84
|
```bash
|
|
84
|
-
|
|
85
|
+
_VERIF=( "$PHASE_DIR"/*-VERIFICATION.md )
|
|
86
|
+
if [ -e "${_VERIF[0]}" ]; then cat "${_VERIF[@]}"; fi
|
|
85
87
|
```
|
|
86
88
|
|
|
87
89
|
**If previous verification exists with `gaps:` section → RE-VERIFICATION MODE:**
|
|
@@ -199,7 +201,8 @@ For each truth:
|
|
|
199
201
|
- A pre-existing test exercises the transition/invariant and passes (confirm via Step 7b's single-named-test path) → ✓ VERIFIED.
|
|
200
202
|
- No such test exists, or it can't run without a server/state mutation → ⚠️ PRESENT_BEHAVIOR_UNVERIFIED. Emit a human-verification item (Step 8) and do not count it toward the verified score (Step 9).
|
|
201
203
|
- An accepted override (Step 3b) carries the truth as PASSED (override), exactly as it does for a FAILED truth.
|
|
202
|
-
5b. **Non-inferable
|
|
204
|
+
5b. **Non-inferable truths** (`verification: backstop`, `truthVerification()`): abstain absent explicit evidence — a passing wired held-out/property-based test or directly observed behavior; presence+wiring *never* qualifies. Mark `insufficient_spec` -> human-verification item -> `human_needed`.
|
|
205
|
+
5c. **Reliance check (advisory, #1955).** Before finalizing a ✓ VERIFIED truth, ask *why* it holds. Classify the evidence already recorded, not your confidence in it. Endogenous, and so weaker than the exogenous `backstop` tag (`gsd-core/references/honest-verifier.md`) — advisory for exactly that reason. Flag `coincidental-reliance` when the evidence names one of: **undeclared-precondition** (state nothing in the phase's artifacts or a declared prerequisite guarantees), **incidental-ordering** (an order or side effect nothing in the code enforces), **fixture-only** (the test's own setup establishes the precondition; the production path has no equivalent). **Do NOT flag:** a precondition the code establishes or explicitly defaults; ordering the code enforces (await, explicit sequencing); a fixture merely supplying input the real caller also supplies; unease naming no specific state, ordering, or fixture. Out of scope: ⚠️ PRESENT_BEHAVIOR_UNVERIFIED and ⚠️ `insufficient_spec` (already routed to human), and PASSED (override) truths. Record `✓ VERIFIED (coincidental-reliance)` and add a `coincidental_reliance_items` entry. **Advisory only — not the score, not the status, and never a human-verification item** (Step 9 rule 2 would flip a passing phase to `human_needed`). The usual fix: promote the hidden assumption into a declared precondition.
|
|
203
206
|
6. Determine truth status
|
|
204
207
|
|
|
205
208
|
## Step 3b: Check Verification Overrides
|
|
@@ -554,6 +557,7 @@ Classify status using this decision tree IN ORDER (most restrictive first):
|
|
|
554
557
|
|
|
555
558
|
- `verified_truths` counts ✓ VERIFIED truths plus PASSED (override) truths (Step 3b). For a behavior-dependent truth, VERIFIED means a behavioral test passed, not just that symbols are present.
|
|
556
559
|
- ⚠️ PRESENT_BEHAVIOR_UNVERIFIED truths are the *only* ones excluded from `verified_truths`; they are reported separately as `behavior_unverified`.
|
|
560
|
+
- `✓ VERIFIED (coincidental-reliance)` counts as VERIFIED — the advisory changes no score and no status.
|
|
557
561
|
|
|
558
562
|
```text
|
|
559
563
|
score: verified_truths / total_truths # e.g. 6/7
|
|
@@ -638,7 +642,7 @@ Deferred items are informational only — they do not require closure plans.
|
|
|
638
642
|
|
|
639
643
|
**VERIFICATION.md output structure under MVP mode:**
|
|
640
644
|
|
|
641
|
-
1. Top-level "User Flow Coverage" table: each step of the user story → expected → evidence in codebase → status. (Format defined in `references/verify-mvp-mode.md`.)
|
|
645
|
+
1. Top-level "User Flow Coverage" table: each step of the user story → expected → evidence in codebase → status. (Format defined in `gsd-core/references/verify-mvp-mode.md`.)
|
|
642
646
|
2. Standard technical-check sections (API verification, error handling, etc.) follow below — only if the user flow coverage is complete.
|
|
643
647
|
|
|
644
648
|
**User Story format guard:** Apply via the centralized verb instead of inlining the regex:
|
|
@@ -701,6 +705,10 @@ behavior_unverified_items: # Only if behavior_unverified > 0 — emitted regardl
|
|
|
701
705
|
test: "What to trigger"
|
|
702
706
|
expected: "What state must hold afterward"
|
|
703
707
|
why_human: "Why presence checks can't see it"
|
|
708
|
+
coincidental_reliance_items: # Only if a ✓ VERIFIED truth holds incidentally — emitted regardless of overall status (survives gaps_found)
|
|
709
|
+
- truth: "Observable truth that holds incidentally"
|
|
710
|
+
reason: undeclared-precondition | incidental-ordering | fixture-only
|
|
711
|
+
harden: "Precondition/ordering to declare or enforce"
|
|
704
712
|
human_verification: # Only if status: human_needed
|
|
705
713
|
- test: "What to do"
|
|
706
714
|
expected: "What should happen"
|
|
@@ -723,6 +731,7 @@ human_verification: # Only if status: human_needed
|
|
|
723
731
|
| 1 | {truth} | ✓ VERIFIED | {evidence} |
|
|
724
732
|
| 2 | {truth} | ✗ FAILED | {what's wrong} |
|
|
725
733
|
| 3 | {truth} | ⚠️ PRESENT_BEHAVIOR_UNVERIFIED | {present + wired; no test exercises the transition/invariant — see Human Verification} |
|
|
734
|
+
| 4 | {truth} | ✓ VERIFIED (coincidental-reliance) | {holds, but incidentally — see coincidental_reliance_items} |
|
|
726
735
|
|
|
727
736
|
**Score:** {N}/{M} truths verified ({P} present, behavior-unverified)
|
|
728
737
|
|