@opengsd/gsd-pi 1.1.1-dev.b2556262 → 1.2.0-dev.0b870afa
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/dist/cli-style.d.ts +17 -0
- package/dist/cli-style.js +28 -0
- package/dist/cli-web-branch.d.ts +2 -0
- package/dist/cli-web-branch.js +9 -2
- package/dist/cli.js +1 -1
- package/dist/headless-events.d.ts +4 -2
- package/dist/headless-events.js +14 -34
- package/dist/help-text.js +5 -0
- package/dist/mcp-server.js +2 -1
- package/dist/models-resolver.d.ts +3 -13
- package/dist/models-resolver.js +3 -22
- package/dist/project-sessions.js +4 -2
- package/dist/resource-loader.js +2 -14
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +5 -4
- package/dist/resources/extensions/ask-user-questions.js +78 -23
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
- package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
- package/dist/resources/extensions/async-jobs/index.js +65 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
- package/dist/resources/extensions/bg-shell/overlay.js +9 -6
- package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
- package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
- package/dist/resources/extensions/bg-shell/utilities.js +5 -2
- package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
- package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
- package/dist/resources/extensions/browser-tools/index.js +69 -12
- package/dist/resources/extensions/claude-code-cli/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +139 -243
- package/dist/resources/extensions/claude-code-cli/turn-assembler.js +224 -0
- package/dist/resources/extensions/github-sync/templates.js +3 -3
- package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
- package/dist/resources/extensions/gsd/auto/contracts.js +8 -1
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +105 -0
- package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
- package/dist/resources/extensions/gsd/auto/loop.js +77 -56
- package/dist/resources/extensions/gsd/auto/orchestrator.js +860 -96
- package/dist/resources/extensions/gsd/auto/phases.js +81 -8
- package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
- package/dist/resources/extensions/gsd/auto/session.js +6 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +11 -34
- package/dist/resources/extensions/gsd/auto-dispatch.js +56 -63
- package/dist/resources/extensions/gsd/auto-model-selection.js +44 -13
- package/dist/resources/extensions/gsd/auto-post-unit.js +47 -17
- package/dist/resources/extensions/gsd/auto-prompts.js +271 -27
- package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
- package/dist/resources/extensions/gsd/auto-runtime-state.js +17 -0
- package/dist/resources/extensions/gsd/auto-start.js +36 -49
- package/dist/resources/extensions/gsd/auto-timers.js +16 -2
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +55 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +33 -37
- package/dist/resources/extensions/gsd/auto-verification.js +30 -37
- package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +67 -375
- package/dist/resources/extensions/gsd/auto.js +112 -486
- package/dist/resources/extensions/gsd/blocked-models.js +28 -0
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +29 -8
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +43 -49
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +319 -161
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +365 -58
- package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
- package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
- package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
- package/dist/resources/extensions/gsd/captures.js +5 -15
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +21 -4
- package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
- package/dist/resources/extensions/gsd/closeout-wizard.js +92 -0
- package/dist/resources/extensions/gsd/codebase-generator.js +8 -4
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -62
- package/dist/resources/extensions/gsd/commands/context.js +16 -2
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +66 -3
- package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
- package/dist/resources/extensions/gsd/commands-maintenance.js +61 -41
- package/dist/resources/extensions/gsd/commands-ship.js +2 -2
- package/dist/resources/extensions/gsd/commands-verdict.js +12 -2
- package/dist/resources/extensions/gsd/consent-question.js +353 -0
- package/dist/resources/extensions/gsd/consent-verdict.js +63 -0
- package/dist/resources/extensions/gsd/constants.js +0 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
- package/dist/resources/extensions/gsd/db/engine.js +755 -0
- package/dist/resources/extensions/gsd/db/queries.js +398 -0
- package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
- package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
- package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
- package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +458 -0
- package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
- package/dist/resources/extensions/gsd/db-workspace.js +103 -0
- package/dist/resources/extensions/gsd/debug-logger.js +10 -0
- package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
- package/dist/resources/extensions/gsd/discussion-handoff.js +218 -0
- package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
- package/dist/resources/extensions/gsd/doctor-environment.js +5 -11
- package/dist/resources/extensions/gsd/doctor-format.js +9 -6
- package/dist/resources/extensions/gsd/doctor-git-checks.js +6 -21
- package/dist/resources/extensions/gsd/doctor-proactive.js +7 -2
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -16
- package/dist/resources/extensions/gsd/doctor.js +16 -9
- package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
- package/dist/resources/extensions/gsd/error-classifier.js +10 -1
- package/dist/resources/extensions/gsd/exec-sandbox.js +30 -10
- package/dist/resources/extensions/gsd/files.js +33 -19
- package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
- package/dist/resources/extensions/gsd/git-service.js +1 -0
- package/dist/resources/extensions/gsd/gitignore.js +3 -0
- package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
- package/dist/resources/extensions/gsd/gsd-db.js +184 -2048
- package/dist/resources/extensions/gsd/guidance.js +158 -0
- package/dist/resources/extensions/gsd/guided-flow.js +91 -476
- package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +43 -33
- package/dist/resources/extensions/gsd/mcp-filter.js +10 -20
- package/dist/resources/extensions/gsd/mcp-tool-name.js +18 -0
- package/dist/resources/extensions/gsd/md-importer.js +4 -3
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
- package/dist/resources/extensions/gsd/migrate/safety.js +22 -11
- package/dist/resources/extensions/gsd/migration-auto-check.js +27 -5
- package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
- package/dist/resources/extensions/gsd/milestone-closeout.js +97 -28
- package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +156 -0
- package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
- package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
- package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
- package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
- package/dist/resources/extensions/gsd/milestone-validation-verdict.js +57 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
- package/dist/resources/extensions/gsd/model-router.js +3 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +45 -0
- package/dist/resources/extensions/gsd/notification-store.js +11 -4
- package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
- package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +11 -7
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
- package/dist/resources/extensions/gsd/parsers-legacy.js +16 -4
- package/dist/resources/extensions/gsd/paths.js +37 -24
- package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
- package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
- package/dist/resources/extensions/gsd/preferences-models.js +14 -48
- package/dist/resources/extensions/gsd/preferences.js +161 -29
- package/dist/resources/extensions/gsd/projection-flush.js +7 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -3
- package/dist/resources/extensions/gsd/prompts/discuss.md +6 -7
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +6 -6
- package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -3
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +3 -2
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/research-milestone.md +3 -3
- package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +7 -5
- package/dist/resources/extensions/gsd/prompts/system.md +6 -3
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +6 -4
- package/dist/resources/extensions/gsd/provider-error-guidance.js +1 -5
- package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
- package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
- package/dist/resources/extensions/gsd/publication.js +87 -0
- package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
- package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
- package/dist/resources/extensions/gsd/question-transport.js +86 -0
- package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
- package/dist/resources/extensions/gsd/recovery-classification.js +41 -87
- package/dist/resources/extensions/gsd/roadmap-slices.js +33 -5
- package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +7 -2
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
- package/dist/resources/extensions/gsd/schemas/parsers.js +6 -1
- package/dist/resources/extensions/gsd/session-lock.js +1 -1
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +21 -1
- package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
- package/dist/resources/extensions/gsd/state.js +19 -25
- package/dist/resources/extensions/gsd/status-guards.js +56 -8
- package/dist/resources/extensions/gsd/stop-notice.js +57 -0
- package/dist/resources/extensions/gsd/templates/plan.md +7 -0
- package/dist/resources/extensions/gsd/templates/project.md +1 -0
- package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
- package/dist/resources/extensions/gsd/templates/uat.md +5 -1
- package/dist/resources/extensions/gsd/tool-contract.js +66 -11
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +17 -36
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +56 -0
- package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +3 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +46 -55
- package/dist/resources/extensions/gsd/tools/complete-task.js +3 -2
- package/dist/resources/extensions/gsd/tools/exec-tool.js +10 -8
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
- package/dist/resources/extensions/gsd/tools/plan-slice.js +14 -8
- package/dist/resources/extensions/gsd/tools/plan-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +41 -2
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +13 -31
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +16 -35
- package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +236 -22
- package/dist/resources/extensions/gsd/uat-policy.js +57 -25
- package/dist/resources/extensions/gsd/uat-run.js +9 -14
- package/dist/resources/extensions/gsd/undo.js +8 -7
- package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
- package/dist/resources/extensions/gsd/unit-context-composer.js +114 -21
- package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
- package/dist/resources/extensions/gsd/unit-registry.js +337 -0
- package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -181
- package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
- package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
- package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
- package/dist/resources/extensions/gsd/web-app-uat.js +117 -0
- package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
- package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
- package/dist/resources/extensions/gsd/workflow-events.js +6 -18
- package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
- package/dist/resources/extensions/gsd/workflow-reconcile.js +25 -59
- package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
- package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
- package/dist/resources/extensions/gsd/worktree-git-recovery.js +293 -0
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +12 -3
- package/dist/resources/extensions/gsd/worktree-manager.js +45 -28
- package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
- package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
- package/dist/resources/extensions/gsd/worktree-root.js +28 -6
- package/dist/resources/extensions/gsd/worktree-safety.js +8 -5
- package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
- package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
- package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
- package/dist/resources/extensions/search-the-web/native-search.js +5 -3
- package/dist/resources/extensions/shared/browser-contract.js +59 -0
- package/dist/resources/extensions/shared/gsd-browser-cli.js +116 -6
- package/dist/resources/extensions/shared/interview-ui.js +2 -2
- package/dist/resources/shared/claude-runtime-floor.js +182 -0
- package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
- package/dist/resources/shared/package-manager-detection.js +1 -1
- package/dist/resources/shared/package.json +3 -0
- package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
- package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
- package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
- package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
- package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
- package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
- package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
- package/dist/resources/skills/gsd-browser/SKILL.md +1 -1
- package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/tsconfig.extensions.tsbuildinfo +1 -0
- package/dist/update-check.d.ts +2 -0
- package/dist/update-check.js +24 -1
- package/dist/update-cmd.js +40 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +5 -5
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +8 -8
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +5 -5
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -0
- package/dist/web/standalone/.next/server/chunks/5942.js +2 -0
- package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2659.b7b129ee6a769448.js +1 -0
- package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/4283.e4873b058df143a1.js +2 -0
- package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
- package/dist/web/standalone/.next/static/chunks/796.e0bdc932325d7e03.js +10 -0
- package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-f0285ce91d4ec9ef.js} +1 -1
- package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/container.js +26 -18
- package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
- package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
- package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
- package/dist/web/standalone/node_modules/postcss/lib/input.js +54 -29
- package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
- package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
- package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
- package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
- package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
- package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
- package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
- package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
- package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
- package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
- package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +69 -28
- package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
- package/dist/web/standalone/node_modules/postcss/package.json +48 -48
- package/dist/web/standalone/package.json +1 -1
- package/dist/web-mode.d.ts +2 -0
- package/dist/web-mode.js +20 -8
- package/dist/worktree-cli.js +3 -6
- package/dist/worktree-status-banner.js +7 -11
- package/package.json +17 -11
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/dist/rpc.d.ts +1 -0
- package/packages/contracts/dist/rpc.d.ts.map +1 -1
- package/packages/contracts/dist/rpc.js.map +1 -1
- package/packages/contracts/dist/workflow.d.ts +4 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js.map +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +8 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +113 -40
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +8 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +11 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +6 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/cli.js +9 -1
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts +10 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +12 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +49 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +147 -60
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +5 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
- package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +3 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/README.md +1 -0
- package/packages/pi-ai/dist/index.d.ts +2 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +2 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +183 -110
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +205 -158
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +12 -7
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +12 -3
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/packages/pi-ai/package.json +3 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +29 -15
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
- package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
- package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
- package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/components/input.js +1 -1
- package/packages/pi-tui/dist/components/input.js.map +1 -1
- package/packages/pi-tui/dist/keys.d.ts.map +1 -1
- package/packages/pi-tui/dist/keys.js +39 -30
- package/packages/pi-tui/dist/keys.js.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.js +22 -0
- package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +9 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/scripts/install/deps.js +10 -0
- package/scripts/link-workspace-packages.cjs +7 -40
- package/src/resources/GSD-WORKFLOW.md +5 -4
- package/src/resources/extensions/ask-user-questions.ts +87 -24
- package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
- package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
- package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
- package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
- package/src/resources/extensions/async-jobs/index.ts +79 -0
- package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
- package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
- package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
- package/src/resources/extensions/bg-shell/overlay.ts +9 -5
- package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
- package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
- package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
- package/src/resources/extensions/bg-shell/utilities.ts +5 -2
- package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
- package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
- package/src/resources/extensions/browser-tools/index.ts +71 -13
- package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +40 -1
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +166 -293
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +270 -2
- package/src/resources/extensions/claude-code-cli/turn-assembler.ts +287 -0
- package/src/resources/extensions/github-sync/templates.ts +3 -3
- package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
- package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
- package/src/resources/extensions/gsd/auto/contracts.ts +40 -121
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +152 -0
- package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
- package/src/resources/extensions/gsd/auto/loop.ts +86 -61
- package/src/resources/extensions/gsd/auto/orchestrator.ts +1023 -98
- package/src/resources/extensions/gsd/auto/phases.ts +108 -28
- package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
- package/src/resources/extensions/gsd/auto/session.ts +7 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +18 -48
- package/src/resources/extensions/gsd/auto-dispatch.ts +68 -68
- package/src/resources/extensions/gsd/auto-model-selection.ts +49 -12
- package/src/resources/extensions/gsd/auto-post-unit.ts +56 -16
- package/src/resources/extensions/gsd/auto-prompts.ts +338 -44
- package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
- package/src/resources/extensions/gsd/auto-runtime-state.ts +30 -0
- package/src/resources/extensions/gsd/auto-start.ts +41 -49
- package/src/resources/extensions/gsd/auto-timers.ts +16 -2
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +59 -0
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +43 -38
- package/src/resources/extensions/gsd/auto-verification.ts +33 -36
- package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +83 -391
- package/src/resources/extensions/gsd/auto.ts +151 -524
- package/src/resources/extensions/gsd/blocked-models.ts +49 -0
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +37 -10
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +43 -49
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +24 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +379 -177
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +452 -58
- package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
- package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
- package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
- package/src/resources/extensions/gsd/captures.ts +5 -16
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +27 -5
- package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
- package/src/resources/extensions/gsd/closeout-wizard.ts +102 -0
- package/src/resources/extensions/gsd/codebase-generator.ts +9 -5
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -68
- package/src/resources/extensions/gsd/commands/context.ts +16 -2
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +64 -3
- package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
- package/src/resources/extensions/gsd/commands-maintenance.ts +74 -40
- package/src/resources/extensions/gsd/commands-ship.ts +2 -2
- package/src/resources/extensions/gsd/commands-verdict.ts +19 -2
- package/src/resources/extensions/gsd/consent-question.ts +431 -0
- package/src/resources/extensions/gsd/consent-verdict.ts +86 -0
- package/src/resources/extensions/gsd/constants.ts +0 -3
- package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
- package/src/resources/extensions/gsd/db/engine.ts +809 -0
- package/src/resources/extensions/gsd/db/queries.ts +490 -0
- package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
- package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
- package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
- package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +500 -0
- package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
- package/src/resources/extensions/gsd/db-workspace.ts +170 -0
- package/src/resources/extensions/gsd/debug-logger.ts +11 -0
- package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
- package/src/resources/extensions/gsd/discussion-handoff.ts +276 -0
- package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
- package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
- package/src/resources/extensions/gsd/doctor-environment.ts +5 -13
- package/src/resources/extensions/gsd/doctor-format.ts +12 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -22
- package/src/resources/extensions/gsd/doctor-proactive.ts +8 -2
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -17
- package/src/resources/extensions/gsd/doctor.ts +15 -5
- package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
- package/src/resources/extensions/gsd/error-classifier.ts +12 -1
- package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
- package/src/resources/extensions/gsd/files.ts +33 -12
- package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
- package/src/resources/extensions/gsd/git-service.ts +1 -0
- package/src/resources/extensions/gsd/gitignore.ts +3 -0
- package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
- package/src/resources/extensions/gsd/gsd-db.ts +188 -2375
- package/src/resources/extensions/gsd/guidance.ts +217 -0
- package/src/resources/extensions/gsd/guided-flow.ts +118 -589
- package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +51 -20
- package/src/resources/extensions/gsd/mcp-filter.ts +11 -24
- package/src/resources/extensions/gsd/mcp-tool-name.ts +30 -0
- package/src/resources/extensions/gsd/md-importer.ts +3 -3
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
- package/src/resources/extensions/gsd/migrate/safety.ts +20 -9
- package/src/resources/extensions/gsd/migration-auto-check.ts +30 -5
- package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
- package/src/resources/extensions/gsd/milestone-closeout.ts +121 -28
- package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +224 -0
- package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
- package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
- package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
- package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
- package/src/resources/extensions/gsd/milestone-validation-verdict.ts +80 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
- package/src/resources/extensions/gsd/model-router.ts +3 -0
- package/src/resources/extensions/gsd/native-git-bridge.ts +48 -0
- package/src/resources/extensions/gsd/notification-store.ts +26 -3
- package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
- package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +10 -7
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
- package/src/resources/extensions/gsd/parsers-legacy.ts +16 -4
- package/src/resources/extensions/gsd/paths.ts +42 -22
- package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
- package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
- package/src/resources/extensions/gsd/preferences-models.ts +12 -47
- package/src/resources/extensions/gsd/preferences-types.ts +16 -0
- package/src/resources/extensions/gsd/preferences.ts +191 -28
- package/src/resources/extensions/gsd/projection-flush.ts +20 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -3
- package/src/resources/extensions/gsd/prompts/discuss.md +6 -7
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +6 -6
- package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -3
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +3 -2
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/research-milestone.md +3 -3
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +7 -5
- package/src/resources/extensions/gsd/prompts/system.md +6 -3
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +6 -4
- package/src/resources/extensions/gsd/provider-error-guidance.ts +4 -9
- package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
- package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
- package/src/resources/extensions/gsd/publication.ts +122 -0
- package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
- package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
- package/src/resources/extensions/gsd/question-transport.ts +138 -0
- package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
- package/src/resources/extensions/gsd/recovery-classification.ts +47 -88
- package/src/resources/extensions/gsd/roadmap-slices.ts +36 -5
- package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +7 -2
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
- package/src/resources/extensions/gsd/schemas/parsers.ts +6 -1
- package/src/resources/extensions/gsd/session-lock.ts +1 -1
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +31 -10
- package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
- package/src/resources/extensions/gsd/state.ts +24 -26
- package/src/resources/extensions/gsd/status-guards.ts +59 -8
- package/src/resources/extensions/gsd/stop-notice.ts +75 -0
- package/src/resources/extensions/gsd/templates/plan.md +7 -0
- package/src/resources/extensions/gsd/templates/project.md +1 -0
- package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
- package/src/resources/extensions/gsd/templates/uat.md +5 -1
- package/src/resources/extensions/gsd/tests/artifact-db-drift-memo.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/auto-dispatch-baseline-harness.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +444 -5
- package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +894 -858
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +41 -11
- package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
- package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +46 -8
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +10 -10
- package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +273 -0
- package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/exec-tool.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +64 -1
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +35 -1
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
- package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/guidance.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +2 -6
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +58 -15
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +74 -59
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
- package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +143 -1
- package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +120 -4
- package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/native-merge-regular.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/parse-project-milestone-bridge.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
- package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +183 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +75 -2
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/recovery-classification-illegal-transition.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +342 -1
- package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +80 -0
- package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +144 -7
- package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +21 -6
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +155 -0
- package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -6
- package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +114 -2
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
- package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +128 -11
- package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +275 -40
- package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +43 -1
- package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +27 -1
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +15 -3
- package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +188 -1
- package/src/resources/extensions/gsd/tool-contract.ts +124 -11
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +18 -35
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +76 -0
- package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
- package/src/resources/extensions/gsd/tools/complete-slice.ts +45 -70
- package/src/resources/extensions/gsd/tools/complete-task.ts +3 -2
- package/src/resources/extensions/gsd/tools/exec-tool.ts +9 -8
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
- package/src/resources/extensions/gsd/tools/plan-slice.ts +14 -8
- package/src/resources/extensions/gsd/tools/plan-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +45 -2
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +13 -40
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +16 -44
- package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +264 -23
- package/src/resources/extensions/gsd/uat-policy.ts +80 -25
- package/src/resources/extensions/gsd/uat-run.ts +10 -14
- package/src/resources/extensions/gsd/undo.ts +9 -8
- package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
- package/src/resources/extensions/gsd/unit-context-composer.ts +196 -21
- package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
- package/src/resources/extensions/gsd/unit-registry.ts +412 -0
- package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -191
- package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
- package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
- package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
- package/src/resources/extensions/gsd/web-app-uat.ts +144 -0
- package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
- package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
- package/src/resources/extensions/gsd/workflow-events.ts +12 -20
- package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
- package/src/resources/extensions/gsd/workflow-reconcile.ts +32 -65
- package/src/resources/extensions/gsd/workflow-tool-surface.ts +76 -0
- package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
- package/src/resources/extensions/gsd/worktree-git-recovery.ts +314 -0
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +20 -25
- package/src/resources/extensions/gsd/worktree-manager.ts +47 -28
- package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
- package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
- package/src/resources/extensions/gsd/worktree-root.ts +29 -6
- package/src/resources/extensions/gsd/worktree-safety.ts +8 -5
- package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
- package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
- package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
- package/src/resources/extensions/search-the-web/native-search.ts +5 -3
- package/src/resources/extensions/shared/browser-contract.ts +66 -0
- package/src/resources/extensions/shared/gsd-browser-cli.ts +141 -6
- package/src/resources/extensions/shared/interview-ui.ts +15 -2
- package/src/resources/shared/claude-runtime-floor.ts +248 -0
- package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
- package/src/resources/shared/package-manager-detection.ts +1 -1
- package/src/resources/shared/package.json +3 -0
- package/src/resources/skills/create-skill/references/executable-code.md +1 -1
- package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
- package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
- package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
- package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
- package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
- package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
- package/src/resources/skills/gsd-browser/SKILL.md +1 -1
- package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/resources/extensions/gsd/user-input-boundary.js +0 -157
- package/dist/web/standalone/.next/server/chunks/678.js +0 -2
- package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
- package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
- package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
- package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
- package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +0 -21
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +0 -213
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts +0 -28
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js +0 -249
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts +0 -19
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts.map +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js +0 -797
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js.map +0 -1
- package/scripts/ensure-workspace-builds.cjs +0 -129
- package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -26
- package/src/resources/extensions/gsd/user-input-boundary.ts +0 -166
- /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → T-LTxEw5wir5Lm5T3qEVd}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → T-LTxEw5wir5Lm5T3qEVd}/_ssgManifest.js +0 -0
|
@@ -21,7 +21,9 @@ import { getPendingGatesForTurn } from "./gsd-db.js";
|
|
|
21
21
|
import { assertGateCoverage, getGatesForTurn, } from "./gate-registry.js";
|
|
22
22
|
import { formatDecisionsCompact, formatRequirementsCompact } from "./structured-data-formatter.js";
|
|
23
23
|
import { readPhaseAnchor, formatAnchorForPrompt } from "./phase-anchor.js";
|
|
24
|
-
import { composeContextModeInstructions, composeInlinedContext, composeUnitContext } from "./unit-context-composer.js";
|
|
24
|
+
import { composeContextModeInstructions, composeContractedUnitContext, composeInlinedContext, composeToolSurfaceInstructions, composeUnitContext, } from "./unit-context-composer.js";
|
|
25
|
+
import { resolveManifest } from "./unit-context-manifest.js";
|
|
26
|
+
import { compileUnitContextContract } from "./tool-contract.js";
|
|
25
27
|
import { readCompactionSnapshot } from "./compaction-snapshot.js";
|
|
26
28
|
import { logWarning } from "./workflow-logger.js";
|
|
27
29
|
import { inlineGraphSubgraph } from "./graph-context.js";
|
|
@@ -31,7 +33,8 @@ import { debugLog } from "./debug-logger.js";
|
|
|
31
33
|
import { buildSkillActivationBlock, buildSkillDiscoveryVars } from "./skill-activation.js";
|
|
32
34
|
import { findMilestoneIds } from "./milestone-ids.js";
|
|
33
35
|
import { buildRunUatPresentationForType, RUN_UAT_TOOL_PRESENTATION_PLAN_ID } from "./tool-presentation-plan.js";
|
|
34
|
-
import {
|
|
36
|
+
import { classifyUatContentForRun, shouldDispatchUatForContent, } from "./uat-policy.js";
|
|
37
|
+
import { buildWebAppUatGuidanceBlock } from "./web-app-uat.js";
|
|
35
38
|
export { buildSkillActivationBlock, buildSkillDiscoveryVars };
|
|
36
39
|
// ─── Preamble Cap ─────────────────────────────────────────────────────────────
|
|
37
40
|
/**
|
|
@@ -221,12 +224,37 @@ function renderContextModeBlockForPrompt(unitType, base, renderMode = "standalon
|
|
|
221
224
|
return `${contextMode}\n\n## Context Snapshot\nSource: \`.gsd/last-snapshot.md\`\n\n${snapshot.trimEnd()}`;
|
|
222
225
|
}
|
|
223
226
|
function prependContextModeToBlock(unitType, base, block, renderMode = "standalone") {
|
|
227
|
+
const toolSurface = composeToolSurfaceInstructions(unitType, { renderMode });
|
|
224
228
|
const contextMode = renderContextModeBlockForPrompt(unitType, base, renderMode);
|
|
225
|
-
|
|
229
|
+
const guidance = [toolSurface, contextMode].filter(Boolean).join("\n\n");
|
|
230
|
+
if (!guidance)
|
|
226
231
|
return block;
|
|
227
232
|
if (!block.trim())
|
|
228
|
-
return
|
|
229
|
-
return `${
|
|
233
|
+
return guidance;
|
|
234
|
+
return `${guidance}\n\n${block}`;
|
|
235
|
+
}
|
|
236
|
+
function requireUnitPromptContextContract(unitType) {
|
|
237
|
+
const result = compileUnitContextContract(unitType);
|
|
238
|
+
if (result.ok)
|
|
239
|
+
return result.contract;
|
|
240
|
+
throw new Error(result.detail);
|
|
241
|
+
}
|
|
242
|
+
function requireComposedArtifactBlock(blocks, unitType, key) {
|
|
243
|
+
const block = blocks.find((item) => item.key === key);
|
|
244
|
+
if (!block) {
|
|
245
|
+
throw new Error(`Unit Context Contract for ${unitType} did not compose required artifact ${key}`);
|
|
246
|
+
}
|
|
247
|
+
return block.body;
|
|
248
|
+
}
|
|
249
|
+
function renderExecuteTaskOnDemandContext(base, mid, sid, artifacts) {
|
|
250
|
+
if (!artifacts.includes("slice-research"))
|
|
251
|
+
return "";
|
|
252
|
+
const researchPath = relSliceFile(base, mid, sid, "RESEARCH");
|
|
253
|
+
return [
|
|
254
|
+
"## On-demand Context",
|
|
255
|
+
"",
|
|
256
|
+
`Slice research is available at \`${researchPath}\`. Read it only if the inlined task plan, slice plan excerpt, and carry-forward context do not explain a required implementation detail.`,
|
|
257
|
+
].join("\n");
|
|
230
258
|
}
|
|
231
259
|
// ─── Executor Constraints ─────────────────────────────────────────────────────
|
|
232
260
|
/**
|
|
@@ -815,7 +843,7 @@ export async function inlineDecisionsFromDb(base, milestoneId, scope, level) {
|
|
|
815
843
|
}
|
|
816
844
|
/**
|
|
817
845
|
* Inline requirements with optional milestone and slice scoping from the DB.
|
|
818
|
-
* Falls back to filesystem via inlineGsdRootFile when DB unavailable
|
|
846
|
+
* Falls back to filesystem via inlineGsdRootFile only when DB is unavailable.
|
|
819
847
|
*/
|
|
820
848
|
export async function inlineRequirementsFromDb(base, milestoneId, sliceId, level) {
|
|
821
849
|
const inlineLevel = level ?? resolveInlineLevel();
|
|
@@ -823,14 +851,28 @@ export async function inlineRequirementsFromDb(base, milestoneId, sliceId, level
|
|
|
823
851
|
const { isDbAvailable } = await import("./gsd-db.js");
|
|
824
852
|
if (isDbAvailable()) {
|
|
825
853
|
const { queryRequirements, formatRequirementsForPrompt } = await import("./context-store.js");
|
|
826
|
-
|
|
854
|
+
let requirements = queryRequirements({ milestoneId, sliceId });
|
|
855
|
+
let broadenedScope = false;
|
|
856
|
+
if (requirements.length === 0 && sliceId) {
|
|
857
|
+
requirements = queryRequirements({ milestoneId });
|
|
858
|
+
broadenedScope = true;
|
|
859
|
+
}
|
|
860
|
+
if (requirements.length === 0 && milestoneId) {
|
|
861
|
+
requirements = queryRequirements({ status: "active" });
|
|
862
|
+
broadenedScope = true;
|
|
863
|
+
}
|
|
827
864
|
if (requirements.length > 0) {
|
|
828
|
-
// Use compact format for non-full levels
|
|
829
|
-
|
|
865
|
+
// Use compact format for non-full levels, milestone-scoped calls, and
|
|
866
|
+
// any cascade stage that broadened past the originally requested scope —
|
|
867
|
+
// a slice-scoped "full" call that fell through to the project-wide
|
|
868
|
+
// active fallback must not format those rows as full requirements.
|
|
869
|
+
const useCompact = inlineLevel !== "full" || !sliceId || broadenedScope;
|
|
870
|
+
const formatted = useCompact
|
|
830
871
|
? formatRequirementsCompact(requirements)
|
|
831
872
|
: formatRequirementsForPrompt(requirements);
|
|
832
873
|
return `### Requirements\nSource: \`.gsd/REQUIREMENTS.md\`\n\n${formatted}`;
|
|
833
874
|
}
|
|
875
|
+
return null;
|
|
834
876
|
}
|
|
835
877
|
}
|
|
836
878
|
catch (err) {
|
|
@@ -1239,6 +1281,32 @@ export async function checkNeedsReassessment(base, mid, state) {
|
|
|
1239
1281
|
* - No UAT file exists for the slice
|
|
1240
1282
|
* - UAT result file already exists (idempotent — already ran)
|
|
1241
1283
|
*/
|
|
1284
|
+
/**
|
|
1285
|
+
* Resolve the effective UAT mode for the dispatch gate the same way
|
|
1286
|
+
* `buildRunUatPrompt` does: classify the UAT body with the slice's SUMMARY as
|
|
1287
|
+
* supplemental context, so a `browser-executable` UAT whose slice references a
|
|
1288
|
+
* self-contained harness (`npm run test:uat`, `search-uat.mjs`, `npx
|
|
1289
|
+
* playwright test`) is promoted to `runtime-executable` for the gate too.
|
|
1290
|
+
*
|
|
1291
|
+
* Without this, `checkNeedsRunUat` returns `browser-executable` while the
|
|
1292
|
+
* prompt instructs runtime-only execution, causing the dispatch gate to
|
|
1293
|
+
* require browser tools / warm up the browser daemon (or stop dispatch when
|
|
1294
|
+
* browser MCP is unavailable) for UAT runs that never touch the browser. See
|
|
1295
|
+
* cursor[bot] review on PR #696 for the M007/S01 regression.
|
|
1296
|
+
*/
|
|
1297
|
+
async function resolveRunUatEffectiveType(base, mid, sliceId, uatContent) {
|
|
1298
|
+
let summaryContent = "";
|
|
1299
|
+
try {
|
|
1300
|
+
const summaryPath = resolveSliceFile(base, mid, sliceId, "SUMMARY");
|
|
1301
|
+
if (summaryPath) {
|
|
1302
|
+
summaryContent = (await loadFile(summaryPath)) ?? "";
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
catch (err) {
|
|
1306
|
+
logWarning("prompt", `resolveRunUatEffectiveType SUMMARY load failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1307
|
+
}
|
|
1308
|
+
return classifyUatContentForRun(uatContent, summaryContent).effectiveType;
|
|
1309
|
+
}
|
|
1242
1310
|
export async function checkNeedsRunUat(base, mid, state, prefs) {
|
|
1243
1311
|
// DB primary path — fall through to file-based when DB has no data for this milestone
|
|
1244
1312
|
try {
|
|
@@ -1271,7 +1339,8 @@ export async function checkNeedsRunUat(base, mid, state, prefs) {
|
|
|
1271
1339
|
}
|
|
1272
1340
|
if (!shouldDispatchUatForContent(uatContent, prefs))
|
|
1273
1341
|
continue;
|
|
1274
|
-
|
|
1342
|
+
const uatType = await resolveRunUatEffectiveType(base, mid, sid, uatContent);
|
|
1343
|
+
return { sliceId: sid, uatType };
|
|
1275
1344
|
}
|
|
1276
1345
|
return null;
|
|
1277
1346
|
}
|
|
@@ -1312,7 +1381,8 @@ export async function checkNeedsRunUat(base, mid, state, prefs) {
|
|
|
1312
1381
|
}
|
|
1313
1382
|
if (!shouldDispatchUatForContent(uatContentFb, prefs))
|
|
1314
1383
|
continue;
|
|
1315
|
-
|
|
1384
|
+
const uatType = await resolveRunUatEffectiveType(base, mid, uatSid, uatContentFb);
|
|
1385
|
+
return { sliceId: uatSid, uatType };
|
|
1316
1386
|
}
|
|
1317
1387
|
return null;
|
|
1318
1388
|
}
|
|
@@ -1451,6 +1521,75 @@ export async function buildDiscussRequirementsPrompt(base, structuredQuestionsAv
|
|
|
1451
1521
|
commitInstruction: "Do not commit planning artifacts — .gsd/ is managed externally.",
|
|
1452
1522
|
}));
|
|
1453
1523
|
}
|
|
1524
|
+
/**
|
|
1525
|
+
* Bounded codebase snapshot for research-milestone grounding (ADR-029).
|
|
1526
|
+
*
|
|
1527
|
+
* Reuses the in-process, ~millisecond `analyzeCodebase` / `formatCodebaseBrief`
|
|
1528
|
+
* machinery that powers the guided-discuss Preparation Snapshot, so research
|
|
1529
|
+
* grounds on current code reality instead of running an open-ended `rg`/`find`/
|
|
1530
|
+
* `scout` survey on every dispatch (the auto-mode counterpart to ADR-028).
|
|
1531
|
+
*
|
|
1532
|
+
* Gated on the manifest's `codebaseMap` flag (previously a dead policy flag)
|
|
1533
|
+
* and the `discuss_preparation` opt-out. Failures degrade silently — research
|
|
1534
|
+
* still runs, it just falls back to on-demand reads.
|
|
1535
|
+
*/
|
|
1536
|
+
async function buildResearchCodebaseSnapshot(base) {
|
|
1537
|
+
const manifest = resolveManifest("research-milestone");
|
|
1538
|
+
if (!manifest?.codebaseMap)
|
|
1539
|
+
return null;
|
|
1540
|
+
const prefs = loadEffectiveGSDPreferences(base)?.preferences;
|
|
1541
|
+
if (prefs?.discuss_preparation === false)
|
|
1542
|
+
return null;
|
|
1543
|
+
try {
|
|
1544
|
+
const { analyzeCodebase, formatCodebaseBrief } = await import("./preparation.js");
|
|
1545
|
+
const brief = await analyzeCodebase(base);
|
|
1546
|
+
const formatted = formatCodebaseBrief(brief).trim();
|
|
1547
|
+
if (!formatted)
|
|
1548
|
+
return null;
|
|
1549
|
+
return [
|
|
1550
|
+
"### Codebase Snapshot (current code reality)",
|
|
1551
|
+
"Source: in-process bounded scan of the working tree.",
|
|
1552
|
+
"",
|
|
1553
|
+
"This snapshot describes what already exists. Treat it as authoritative for current code reality and do NOT re-survey the tree to rediscover it. Read a specific file only when a research question hinges on its exact contents.",
|
|
1554
|
+
"",
|
|
1555
|
+
formatted,
|
|
1556
|
+
].join("\n");
|
|
1557
|
+
}
|
|
1558
|
+
catch (err) {
|
|
1559
|
+
logWarning("prompt", `buildResearchCodebaseSnapshot failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1560
|
+
return null;
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
/**
|
|
1564
|
+
* Lightweight research resume block (ADR-029).
|
|
1565
|
+
*
|
|
1566
|
+
* When a prior attempt for this milestone left durable output — a partial
|
|
1567
|
+
* RESEARCH artifact and/or a research phase anchor — inline it under a
|
|
1568
|
+
* "continue, do not redo" banner so a re-dispatched research unit extends
|
|
1569
|
+
* prior work instead of re-running every command from scratch (the
|
|
1570
|
+
* restart-from-scratch pattern observed in the 789 run trace). No new state
|
|
1571
|
+
* machine: the partial RESEARCH file and the existing phase anchor are the
|
|
1572
|
+
* durable signals. Returns null when there is nothing to resume.
|
|
1573
|
+
*/
|
|
1574
|
+
async function buildResearchResumeBlock(base, mid) {
|
|
1575
|
+
const researchPath = resolveMilestoneFile(base, mid, "RESEARCH");
|
|
1576
|
+
const researchRel = relMilestoneFile(base, mid, "RESEARCH");
|
|
1577
|
+
const partial = await inlineFileOptional(researchPath, researchRel, "Prior Partial Research");
|
|
1578
|
+
const anchor = readPhaseAnchor(base, mid, "research-milestone");
|
|
1579
|
+
if (!partial && !anchor)
|
|
1580
|
+
return null;
|
|
1581
|
+
const lines = [
|
|
1582
|
+
"### Resume — Prior Partial Research (continue, do not redo)",
|
|
1583
|
+
"",
|
|
1584
|
+
"A previous research attempt for this milestone left the durable output below. **Build on it — do not restart from scratch.** Re-run a command only when its prior result is missing or stale, and persist progress incrementally with `gsd_summary_save` so any interruption keeps your findings.",
|
|
1585
|
+
"",
|
|
1586
|
+
];
|
|
1587
|
+
if (anchor)
|
|
1588
|
+
lines.push(formatAnchorForPrompt(anchor), "");
|
|
1589
|
+
if (partial)
|
|
1590
|
+
lines.push(partial);
|
|
1591
|
+
return lines.join("\n").trimEnd();
|
|
1592
|
+
}
|
|
1454
1593
|
export async function buildResearchMilestonePrompt(mid, midTitle, base) {
|
|
1455
1594
|
const contextTelemetry = [];
|
|
1456
1595
|
// Keep research milestone prompts focused on the milestone brief and
|
|
@@ -1490,6 +1629,32 @@ export async function buildResearchMilestonePrompt(mid, midTitle, base) {
|
|
|
1490
1629
|
const parts = [];
|
|
1491
1630
|
if (composed.prepend)
|
|
1492
1631
|
parts.push(composed.prepend);
|
|
1632
|
+
// Resume grounding (ADR-029): if a prior attempt left partial research or a
|
|
1633
|
+
// phase anchor, inline it prominently so a re-dispatched unit continues
|
|
1634
|
+
// rather than re-running every command from scratch.
|
|
1635
|
+
const resumeBlock = await buildResearchResumeBlock(base, mid);
|
|
1636
|
+
if (resumeBlock) {
|
|
1637
|
+
parts.push(resumeBlock);
|
|
1638
|
+
trackPromptContext(contextTelemetry, "research-resume", "inline", resumeBlock);
|
|
1639
|
+
}
|
|
1640
|
+
else {
|
|
1641
|
+
trackPromptContext(contextTelemetry, "research-resume", "skipped", null, "no prior partial research");
|
|
1642
|
+
}
|
|
1643
|
+
// Project-size signal (ADR-029): same classification plan-milestone gets, so
|
|
1644
|
+
// research right-sizes effort on tiny projects instead of over-researching.
|
|
1645
|
+
const classificationBlock = formatProjectClassificationForPlanning(classifyProject(base));
|
|
1646
|
+
parts.push(classificationBlock);
|
|
1647
|
+
trackPromptContext(contextTelemetry, "project-classification", "inline", classificationBlock);
|
|
1648
|
+
// Codebase snapshot (ADR-029): bounded, in-process code-reality grounding so
|
|
1649
|
+
// research does not open-endedly survey the tree (auto-mode ADR-028).
|
|
1650
|
+
const codebaseSnapshot = await buildResearchCodebaseSnapshot(base);
|
|
1651
|
+
if (codebaseSnapshot) {
|
|
1652
|
+
parts.push(codebaseSnapshot);
|
|
1653
|
+
trackPromptContext(contextTelemetry, "codebase-snapshot", "inline", codebaseSnapshot);
|
|
1654
|
+
}
|
|
1655
|
+
else {
|
|
1656
|
+
trackPromptContext(contextTelemetry, "codebase-snapshot", "skipped", null, "disabled, empty, or scan failed");
|
|
1657
|
+
}
|
|
1493
1658
|
if (knowledgeInlineRM && composed.inline) {
|
|
1494
1659
|
const idx = composed.inline.lastIndexOf("### Output Template:");
|
|
1495
1660
|
if (idx > 0) {
|
|
@@ -1649,6 +1814,13 @@ export async function buildPlanMilestonePrompt(mid, midTitle, base, level) {
|
|
|
1649
1814
|
else {
|
|
1650
1815
|
trackPromptContext(contextTelemetry, "knowledge", "skipped", null, "missing");
|
|
1651
1816
|
}
|
|
1817
|
+
const webAppUatGuidance = buildWebAppUatGuidanceBlock(base);
|
|
1818
|
+
if (webAppUatGuidance) {
|
|
1819
|
+
pushTracked("web-app-uat", webAppUatGuidance);
|
|
1820
|
+
}
|
|
1821
|
+
else {
|
|
1822
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "skipped", null, "not a web app");
|
|
1823
|
+
}
|
|
1652
1824
|
pushTracked("templates", inlineTemplate("roadmap", "Roadmap"));
|
|
1653
1825
|
if (inlineLevel === "full") {
|
|
1654
1826
|
pushTracked("templates", inlineTemplate("decisions", "Decisions"));
|
|
@@ -1936,6 +2108,14 @@ async function renderSlicePrompt(options) {
|
|
|
1936
2108
|
else {
|
|
1937
2109
|
trackPromptContext(contextTelemetry, "graph-subgraph", "skipped", null, "missing");
|
|
1938
2110
|
}
|
|
2111
|
+
const webAppUatGuidance = buildWebAppUatGuidanceBlock(base);
|
|
2112
|
+
if (webAppUatGuidance) {
|
|
2113
|
+
inlined.push(webAppUatGuidance);
|
|
2114
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "inline", webAppUatGuidance);
|
|
2115
|
+
}
|
|
2116
|
+
else {
|
|
2117
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "skipped", null, "not a web app");
|
|
2118
|
+
}
|
|
1939
2119
|
const planTemplateInline = level === "minimal" ? inlineCompactTemplate("plan", "Slice Plan") : inlineTemplate("plan", "Slice Plan");
|
|
1940
2120
|
inlined.push(planTemplateInline);
|
|
1941
2121
|
trackPromptContext(contextTelemetry, "templates", "inline", planTemplateInline);
|
|
@@ -2010,6 +2190,9 @@ export async function buildPlanSlicePrompt(mid, _midTitle, sid, sTitle, base, le
|
|
|
2010
2190
|
`Either (a) add an earlier task that creates X on disk before the task that needs it, ` +
|
|
2011
2191
|
`or (b) if this task IS the one that creates X, move X from inputs to expected_output. ` +
|
|
2012
2192
|
`Do NOT put X in a task's expected_output if that task only reads or verifies X — only tasks that actually write X to disk should list it in expected_output.\n` +
|
|
2193
|
+
`- **"[file] X: ... GSD planning artifacts are projections preloaded as context / written by workflow tools"**: ` +
|
|
2194
|
+
`Remove X from the task's inputs, files, and expectedOutput entirely. Planning artifacts (anything under .gsd/, .planning/, or .audits/, or names like M001-CONTEXT.md / S01-PLAN.md) are preloaded as context and written by workflow tools — ` +
|
|
2195
|
+
`do NOT add a task that creates X and do NOT move X to expectedOutput.\n` +
|
|
2013
2196
|
`- **"[file] X: Task T_early reads X but it's created by task T_late (sequence violation)"**: ` +
|
|
2014
2197
|
`Either (a) reorder tasks so T_late (the creator) runs before T_early (the reader), ` +
|
|
2015
2198
|
`or (b) if T_late doesn't actually create X (it only reads/tests it), remove X from T_late's expected_output entirely.\n` +
|
|
@@ -2077,7 +2260,7 @@ export async function buildExecuteTaskPrompt(mid, sid, sTitle, tid, tTitle, base
|
|
|
2077
2260
|
const taskPlanPath = resolveTaskFile(base, mid, sid, tid, "PLAN");
|
|
2078
2261
|
const taskPlanContent = taskPlanPath ? await loadFile(taskPlanPath) : null;
|
|
2079
2262
|
const taskPlanRelPath = relSlicePath(base, mid, sid) + `/tasks/${tid}-PLAN.md`;
|
|
2080
|
-
const
|
|
2263
|
+
const taskPlanContext = taskPlanContent
|
|
2081
2264
|
? [
|
|
2082
2265
|
"## Inlined Task Plan (authoritative local execution contract)",
|
|
2083
2266
|
`Source: \`${taskPlanRelPath}\``,
|
|
@@ -2088,11 +2271,11 @@ export async function buildExecuteTaskPrompt(mid, sid, sTitle, tid, tTitle, base
|
|
|
2088
2271
|
"## Inlined Task Plan (authoritative local execution contract)",
|
|
2089
2272
|
`Task plan not found at dispatch time. Read \`${taskPlanRelPath}\` before executing.`,
|
|
2090
2273
|
].join("\n");
|
|
2091
|
-
trackPromptContext(contextTelemetry, "task-plan", taskPlanContent ? "inline" : "on-demand",
|
|
2274
|
+
trackPromptContext(contextTelemetry, "task-plan", taskPlanContent ? "inline" : "on-demand", taskPlanContext, taskPlanContent ? undefined : "missing at dispatch");
|
|
2092
2275
|
const slicePlanPath = resolveSliceFile(base, mid, sid, "PLAN");
|
|
2093
2276
|
const slicePlanContent = slicePlanPath ? await loadFile(slicePlanPath) : null;
|
|
2094
|
-
const
|
|
2095
|
-
trackPromptContext(contextTelemetry, "slice-plan",
|
|
2277
|
+
const slicePlanContext = extractSliceExecutionExcerpt(slicePlanContent, relSliceFile(base, mid, sid, "PLAN"));
|
|
2278
|
+
trackPromptContext(contextTelemetry, "slice-plan", slicePlanContext ? "excerpt" : "skipped", slicePlanContext, slicePlanContext ? undefined : "missing");
|
|
2096
2279
|
// Check for continue file (new naming or legacy)
|
|
2097
2280
|
const continueFile = resolveSliceFile(base, mid, sid, "CONTINUE");
|
|
2098
2281
|
const legacyContinueDir = resolveSlicePath(base, mid, sid);
|
|
@@ -2191,6 +2374,30 @@ export async function buildExecuteTaskPrompt(mid, sid, sTitle, tid, tTitle, base
|
|
|
2191
2374
|
trackPromptContext(contextTelemetry, "decisions-template", "on-demand", decisionsOnDemandET);
|
|
2192
2375
|
}
|
|
2193
2376
|
trackPromptContext(contextTelemetry, "templates", "inline", inlinedTemplates, inlineLevel);
|
|
2377
|
+
const contextContract = requireUnitPromptContextContract("execute-task");
|
|
2378
|
+
const contractedContext = await composeContractedUnitContext(contextContract, {
|
|
2379
|
+
base: { unitType: "execute-task", basePath: base, milestoneId: mid, sliceId: sid, taskId: tid },
|
|
2380
|
+
resolveArtifact: async (key) => {
|
|
2381
|
+
switch (key) {
|
|
2382
|
+
case "task-plan":
|
|
2383
|
+
return taskPlanContext;
|
|
2384
|
+
case "slice-plan":
|
|
2385
|
+
return slicePlanContext;
|
|
2386
|
+
case "prior-task-summaries":
|
|
2387
|
+
return finalCarryForward;
|
|
2388
|
+
case "templates":
|
|
2389
|
+
return inlinedTemplates;
|
|
2390
|
+
default:
|
|
2391
|
+
return null;
|
|
2392
|
+
}
|
|
2393
|
+
},
|
|
2394
|
+
});
|
|
2395
|
+
const taskPlanInline = requireComposedArtifactBlock(contractedContext.blocks, "execute-task", "task-plan");
|
|
2396
|
+
const slicePlanExcerpt = requireComposedArtifactBlock(contractedContext.blocks, "execute-task", "slice-plan");
|
|
2397
|
+
const contractedCarryForward = requireComposedArtifactBlock(contractedContext.blocks, "execute-task", "prior-task-summaries");
|
|
2398
|
+
const contractedTemplates = requireComposedArtifactBlock(contractedContext.blocks, "execute-task", "templates");
|
|
2399
|
+
const onDemandContext = renderExecuteTaskOnDemandContext(base, mid, sid, contractedContext.onDemand);
|
|
2400
|
+
trackPromptContext(contextTelemetry, "slice-research", onDemandContext ? "on-demand" : "skipped", onDemandContext, onDemandContext ? undefined : "not declared by contract");
|
|
2194
2401
|
const prompt = loadPrompt("execute-task", {
|
|
2195
2402
|
overridesSection,
|
|
2196
2403
|
runtimeContext,
|
|
@@ -2202,11 +2409,12 @@ export async function buildExecuteTaskPrompt(mid, sid, sTitle, tid, tTitle, base
|
|
|
2202
2409
|
taskPlanPath: taskPlanRelPath,
|
|
2203
2410
|
taskPlanInline,
|
|
2204
2411
|
slicePlanExcerpt,
|
|
2205
|
-
carryForwardSection:
|
|
2412
|
+
carryForwardSection: contractedCarryForward,
|
|
2206
2413
|
resumeSection,
|
|
2207
2414
|
priorTaskLines: priorLines,
|
|
2415
|
+
onDemandContext,
|
|
2208
2416
|
taskSummaryPath,
|
|
2209
|
-
inlinedTemplates,
|
|
2417
|
+
inlinedTemplates: contractedTemplates,
|
|
2210
2418
|
verificationBudget,
|
|
2211
2419
|
gatesToClose,
|
|
2212
2420
|
skillActivation: buildSkillActivationBlock({
|
|
@@ -2217,7 +2425,7 @@ export async function buildExecuteTaskPrompt(mid, sid, sTitle, tid, tTitle, base
|
|
|
2217
2425
|
taskId: tid,
|
|
2218
2426
|
taskTitle: tTitle,
|
|
2219
2427
|
taskPlanContent,
|
|
2220
|
-
extraContext: [taskPlanInline, slicePlanExcerpt,
|
|
2428
|
+
extraContext: [taskPlanInline, slicePlanExcerpt, contractedCarryForward, resumeSection],
|
|
2221
2429
|
unitType: "execute-task",
|
|
2222
2430
|
}),
|
|
2223
2431
|
});
|
|
@@ -2328,6 +2536,14 @@ export async function buildCompleteSlicePrompt(mid, midTitle, sid, sTitle, base,
|
|
|
2328
2536
|
body = `${body}\n\n---\n\n${knowledgeInlineCS}`;
|
|
2329
2537
|
}
|
|
2330
2538
|
}
|
|
2539
|
+
const webAppUatGuidance = buildWebAppUatGuidanceBlock(base);
|
|
2540
|
+
if (webAppUatGuidance && body) {
|
|
2541
|
+
body = `${webAppUatGuidance}\n\n---\n\n${body}`;
|
|
2542
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "inline", webAppUatGuidance);
|
|
2543
|
+
}
|
|
2544
|
+
else {
|
|
2545
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "skipped", null, webAppUatGuidance ? "missing composed body" : "not a web app");
|
|
2546
|
+
}
|
|
2331
2547
|
// Overrides section prepends to the top of the inlined context —
|
|
2332
2548
|
// standard pattern for slice-level builders (until composer v2 lands
|
|
2333
2549
|
// the prepend contract).
|
|
@@ -2925,10 +3141,25 @@ export async function buildRunUatPrompt(mid, sliceId, uatPath, uatContent, base)
|
|
|
2925
3141
|
const rawInlinedContext = `## Inlined Context (preloaded — do not re-read these files)\n\n${composedBody}`;
|
|
2926
3142
|
const cappedInlinedContext = capPreamble(rawInlinedContext);
|
|
2927
3143
|
trackPromptContext(contextTelemetry, "cap", cappedInlinedContext.length < rawInlinedContext.length ? "skipped" : "inline", null, cappedInlinedContext.length < rawInlinedContext.length ? `dropped ${rawInlinedContext.length - cappedInlinedContext.length} chars` : "within budget");
|
|
2928
|
-
const
|
|
3144
|
+
const uatPolicy = classifyUatContentForRun(uatContent, cappedInlinedContext);
|
|
3145
|
+
const uatType = uatPolicy.effectiveType;
|
|
3146
|
+
const runtimeHarnessOverride = uatPolicy.declaredType === "browser-executable" && uatType === "runtime-executable"
|
|
3147
|
+
? [
|
|
3148
|
+
"## Runtime harness override",
|
|
3149
|
+
"",
|
|
3150
|
+
"This UAT declares `browser-executable` but the slice references a self-contained verification command (`npm run test:uat`, `search-uat.mjs`, or similar).",
|
|
3151
|
+
"Run **only** that command via `gsd_uat_exec` with `uat-runtime-check` intent.",
|
|
3152
|
+
"Do **not** call `uat-service-start`, do **not** run `npm run start`, `npm run test:server`, or any separate server command.",
|
|
3153
|
+
"Do **not** use `browser_navigate` or other `browser_*` tools — the harness already exercises the browser.",
|
|
3154
|
+
"When the harness exits 0, save **PASS** with `uatType: \"runtime-executable\"` (the effective mode above, not the UAT file header) and **runtime** check modes only.",
|
|
3155
|
+
"",
|
|
3156
|
+
].join("\n")
|
|
3157
|
+
: "";
|
|
3158
|
+
const inlinedContext = prependContextModeToBlock("run-uat", base, runtimeHarnessOverride
|
|
3159
|
+
? `${runtimeHarnessOverride}\n${cappedInlinedContext}`
|
|
3160
|
+
: cappedInlinedContext);
|
|
2929
3161
|
emitPromptContextTelemetry("run-uat", contextTelemetry, inlinedContext);
|
|
2930
3162
|
const uatResultPath = join(base, relSliceFile(base, mid, sliceId, "ASSESSMENT"));
|
|
2931
|
-
const uatType = resolveEffectiveUatType(uatContent);
|
|
2932
3163
|
const canonicalPresentation = JSON.stringify(buildRunUatPresentationForType(uatType), null, 2);
|
|
2933
3164
|
return loadPrompt("run-uat", {
|
|
2934
3165
|
workingDirectory: base,
|
|
@@ -3169,18 +3400,18 @@ opts) {
|
|
|
3169
3400
|
}
|
|
3170
3401
|
const inlinedTemplates = inlineTemplate("task-summary", "Task Summary");
|
|
3171
3402
|
trackPromptContext(contextTelemetry, "templates", "inline", inlinedTemplates);
|
|
3172
|
-
const prompt = loadPrompt("reactive-execute", {
|
|
3403
|
+
const prompt = prependContextModeToBlock("reactive-execute", base, loadPrompt("reactive-execute", {
|
|
3173
3404
|
workingDirectory: base,
|
|
3174
3405
|
milestoneId: mid,
|
|
3175
3406
|
milestoneTitle: midTitle,
|
|
3176
3407
|
sliceId: sid,
|
|
3177
3408
|
sliceTitle: sTitle,
|
|
3178
|
-
graphContext
|
|
3409
|
+
graphContext,
|
|
3179
3410
|
readyTaskCount: String(readyTaskIds.length),
|
|
3180
3411
|
readyTaskList: readyTaskListLines.join("\n"),
|
|
3181
3412
|
subagentPrompts: subagentSections.join("\n\n---\n\n"),
|
|
3182
3413
|
inlinedTemplates,
|
|
3183
|
-
});
|
|
3414
|
+
}));
|
|
3184
3415
|
emitPromptContextTelemetry("reactive-execute", contextTelemetry, prompt);
|
|
3185
3416
|
return prompt;
|
|
3186
3417
|
}
|
|
@@ -3190,6 +3421,17 @@ opts) {
|
|
|
3190
3421
|
// gate-registry.ts so that prompt builders, dispatch rules, state
|
|
3191
3422
|
// derivation, and tool handlers all consult the same source of truth.
|
|
3192
3423
|
// See gate-registry.ts for the full ownership map.
|
|
3424
|
+
/**
|
|
3425
|
+
* Adapt gate-registry guidance for section-close phases.
|
|
3426
|
+
*
|
|
3427
|
+
* Gate-registry text is shared with the gate-evaluate subagent, where
|
|
3428
|
+
* "Return verdict ..." is literal. Section-close units write artifact sections
|
|
3429
|
+
* instead, so translate that wording at render time without mutating the
|
|
3430
|
+
* canonical guidance.
|
|
3431
|
+
*/
|
|
3432
|
+
function sectionModeGuidance(guidance) {
|
|
3433
|
+
return guidance.replace(/Return verdict '([^']+)'/g, (_match, verdict) => verdict === "omitted" ? "Leave the section empty" : `Record a \`${verdict}\``);
|
|
3434
|
+
}
|
|
3193
3435
|
/**
|
|
3194
3436
|
* Render a "Gates to Close" block for turns like `complete-slice` and
|
|
3195
3437
|
* `validate-milestone` that own gates which are closed as a side-effect
|
|
@@ -3208,12 +3450,14 @@ function renderGatesToCloseBlock(gates, opts) {
|
|
|
3208
3450
|
lines.push("");
|
|
3209
3451
|
lines.push("These quality gates are still pending for this unit. You MUST address every one before calling the closing tool — the handler closes the DB row based on whether the corresponding artifact section is present.");
|
|
3210
3452
|
lines.push("");
|
|
3453
|
+
lines.push("**Do NOT call `gsd_save_gate_result` (or any gate-result tool) for these gates** — that tool belongs to a different phase and the call will be blocked. You close each gate purely by writing its named section: a populated section records `pass`, an empty section records `omitted`, and the completion handler persists the verdict for you. Treat any \"return verdict\" wording in the guidance below as describing that section outcome, not as an instruction to call a tool.");
|
|
3454
|
+
lines.push("");
|
|
3211
3455
|
for (const def of applicable) {
|
|
3212
3456
|
lines.push(`### ${def.id} — ${def.promptSection}`);
|
|
3213
3457
|
lines.push("");
|
|
3214
3458
|
lines.push(`**Question:** ${def.question}`);
|
|
3215
3459
|
lines.push("");
|
|
3216
|
-
lines.push(def.guidance);
|
|
3460
|
+
lines.push(sectionModeGuidance(def.guidance));
|
|
3217
3461
|
if (opts.allowOmit) {
|
|
3218
3462
|
lines.push("");
|
|
3219
3463
|
lines.push(`If this gate genuinely does not apply to this unit, leave the **${def.promptSection}** section empty and the handler will record it as \`omitted\`. Otherwise, fill the section with concrete evidence.`);
|
|
@@ -3307,17 +3551,17 @@ export async function buildGateEvaluatePrompt(mid, midTitle, sid, sTitle, base,
|
|
|
3307
3551
|
"```",
|
|
3308
3552
|
].join("\n"));
|
|
3309
3553
|
}
|
|
3310
|
-
return loadPrompt("gate-evaluate", {
|
|
3554
|
+
return prependContextModeToBlock("gate-evaluate", base, loadPrompt("gate-evaluate", {
|
|
3311
3555
|
workingDirectory: base,
|
|
3312
3556
|
milestoneId: mid,
|
|
3313
3557
|
milestoneTitle: midTitle,
|
|
3314
3558
|
sliceId: sid,
|
|
3315
3559
|
sliceTitle: sTitle,
|
|
3316
|
-
slicePlanContent:
|
|
3560
|
+
slicePlanContent: planContent,
|
|
3317
3561
|
gateCount: String(pending.length),
|
|
3318
3562
|
gateList: gateListLines.join("\n"),
|
|
3319
3563
|
subagentPrompts: subagentSections.join("\n\n---\n\n"),
|
|
3320
|
-
});
|
|
3564
|
+
}));
|
|
3321
3565
|
}
|
|
3322
3566
|
export async function buildRewriteDocsPrompt(mid, midTitle, activeSlice, base, overrides) {
|
|
3323
3567
|
const sid = activeSlice?.id;
|
|
@@ -14,7 +14,8 @@ import { appendEvent } from "./workflow-events.js";
|
|
|
14
14
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
15
15
|
import { clearParseCache } from "./files.js";
|
|
16
16
|
import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
|
|
17
|
-
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGatesForTurn, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone,
|
|
17
|
+
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGatesForTurn, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone, updateMilestoneStatus, transaction, } from "./gsd-db.js";
|
|
18
|
+
import { refreshWorkflowDatabaseFromDisk } from "./db-workspace.js";
|
|
18
19
|
import { isValidationTerminal } from "./state.js";
|
|
19
20
|
import { getErrorMessage } from "./error-utils.js";
|
|
20
21
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
@@ -32,7 +33,7 @@ import { isGsdWorktreePath } from "./worktree-root.js";
|
|
|
32
33
|
import { resolveCanonicalMilestoneRoot } from "./worktree-manager.js";
|
|
33
34
|
import { hasImplementationArtifacts } from "./milestone-implementation-evidence.js";
|
|
34
35
|
import { loadAllCaptures, loadPendingCaptures } from "./captures.js";
|
|
35
|
-
import {
|
|
36
|
+
import { proveMilestoneCloseout, } from "./milestone-closeout-proof.js";
|
|
36
37
|
// Re-export so existing consumers of auto-recovery.ts keep working.
|
|
37
38
|
export { resolveExpectedArtifactPath, diagnoseExpectedArtifact };
|
|
38
39
|
export { classifyMilestoneSummaryContent, } from "./milestone-summary-classifier.js";
|
|
@@ -66,12 +67,24 @@ function resolveArtifactVerificationBase(unitId, base) {
|
|
|
66
67
|
return base;
|
|
67
68
|
return resolveCanonicalMilestoneRoot(base, milestone);
|
|
68
69
|
}
|
|
70
|
+
function closeoutProofRecoveryReason(reason) {
|
|
71
|
+
switch (reason) {
|
|
72
|
+
case "slice-missing":
|
|
73
|
+
return "complete-milestone-slices-missing";
|
|
74
|
+
case "summary-artifact-missing":
|
|
75
|
+
return "complete-milestone-summary-missing";
|
|
76
|
+
case "summary-artifact-failed":
|
|
77
|
+
return "complete-milestone-summary-failed";
|
|
78
|
+
default:
|
|
79
|
+
return `complete-milestone-${reason}`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
69
82
|
export function refreshRecoveryDbForArtifact(unitType, unitId, basePath) {
|
|
70
83
|
if (unitType !== "plan-slice" && unitType !== "execute-task" && unitType !== "complete-milestone")
|
|
71
84
|
return { ok: true };
|
|
72
85
|
if (!isDbAvailable())
|
|
73
86
|
return { ok: true };
|
|
74
|
-
if (!
|
|
87
|
+
if (!refreshWorkflowDatabaseFromDisk()) {
|
|
75
88
|
return {
|
|
76
89
|
ok: false,
|
|
77
90
|
fatal: unitType === "execute-task" || unitType === "complete-milestone",
|
|
@@ -100,50 +113,29 @@ export function refreshRecoveryDbForArtifact(unitType, unitId, basePath) {
|
|
|
100
113
|
}
|
|
101
114
|
if (isClosedStatus(milestone.status))
|
|
102
115
|
return { ok: true };
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return {
|
|
115
|
-
ok: false,
|
|
116
|
-
fatal: true,
|
|
117
|
-
reason: "complete-milestone-slices-missing",
|
|
118
|
-
message: `Stuck recovery found complete-milestone ${unitId} artifacts, but no slices exist in the DB.`,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
const openSlice = slices.find((slice) => !isClosedStatus(slice.status));
|
|
122
|
-
if (openSlice) {
|
|
123
|
-
return {
|
|
124
|
-
ok: false,
|
|
125
|
-
fatal: true,
|
|
126
|
-
reason: "complete-milestone-slice-open",
|
|
127
|
-
message: `Stuck recovery found complete-milestone ${unitId} artifacts, but slice ${openSlice.id} is still "${openSlice.status}" in the DB.`,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
for (const slice of slices) {
|
|
131
|
-
const openTask = getSliceTasks(mid, slice.id).find((task) => !isClosedStatus(task.status));
|
|
132
|
-
if (openTask) {
|
|
116
|
+
const artifactBasePath = resolveArtifactVerificationBase(unitId, basePath);
|
|
117
|
+
const closeoutProof = proveMilestoneCloseout(mid, {
|
|
118
|
+
allowOpenMilestone: true,
|
|
119
|
+
summaryArtifactBasePath: artifactBasePath,
|
|
120
|
+
implementationEvidence: {
|
|
121
|
+
basePath,
|
|
122
|
+
requirement: "present",
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
if (!closeoutProof.ok) {
|
|
126
|
+
if (closeoutProof.reason === "implementation-evidence-missing") {
|
|
133
127
|
return {
|
|
134
128
|
ok: false,
|
|
135
129
|
fatal: true,
|
|
136
|
-
reason: "complete-milestone-
|
|
137
|
-
message: `Stuck recovery found complete-milestone ${unitId} artifacts, but
|
|
130
|
+
reason: "complete-milestone-implementation-missing",
|
|
131
|
+
message: `Stuck recovery found complete-milestone ${unitId} artifacts, but implementation evidence is not present.`,
|
|
138
132
|
};
|
|
139
133
|
}
|
|
140
|
-
}
|
|
141
|
-
if (hasImplementationArtifacts(basePath, mid) !== "present") {
|
|
142
134
|
return {
|
|
143
135
|
ok: false,
|
|
144
136
|
fatal: true,
|
|
145
|
-
reason:
|
|
146
|
-
message: `Stuck recovery found complete-milestone ${unitId} artifacts, but
|
|
137
|
+
reason: closeoutProofRecoveryReason(closeoutProof.reason),
|
|
138
|
+
message: `Stuck recovery found complete-milestone ${unitId} artifacts, but ${closeoutProof.message}`,
|
|
147
139
|
};
|
|
148
140
|
}
|
|
149
141
|
updateMilestoneStatus(mid, "complete", new Date().toISOString());
|
|
@@ -457,7 +449,7 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
457
449
|
try {
|
|
458
450
|
let taskIds = null;
|
|
459
451
|
if (isDbAvailable()) {
|
|
460
|
-
const refreshed =
|
|
452
|
+
const refreshed = refreshWorkflowDatabaseFromDisk();
|
|
461
453
|
if (refreshed) {
|
|
462
454
|
const tasks = getSliceTasks(mid, sid);
|
|
463
455
|
if (tasks.length > 0)
|
|
@@ -569,17 +561,24 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
569
561
|
// A milestone with only .gsd/ plan files and zero implementation code is
|
|
570
562
|
// not genuinely complete — the LLM wrote plan files but skipped actual work.
|
|
571
563
|
if (unitType === "complete-milestone") {
|
|
572
|
-
const summaryOutcome = classifyMilestoneSummaryContent(readFileSync(absPath, "utf-8"));
|
|
573
|
-
if (summaryOutcome === "failure")
|
|
574
|
-
return false;
|
|
575
564
|
const { milestone: mid } = parseUnitId(unitId);
|
|
576
|
-
if (mid
|
|
577
|
-
const closeoutGate = checkCloseoutConsistencyGate(mid, { refreshFromDisk: true });
|
|
578
|
-
if (!closeoutGate.ok)
|
|
579
|
-
return false;
|
|
580
|
-
}
|
|
581
|
-
if (hasImplementationArtifacts(base, mid) === "absent")
|
|
565
|
+
if (!mid)
|
|
582
566
|
return false;
|
|
567
|
+
const closeoutProof = proveMilestoneCloseout(mid, {
|
|
568
|
+
refreshFromDisk: true,
|
|
569
|
+
summaryArtifactBasePath: artifactBase,
|
|
570
|
+
implementationEvidence: {
|
|
571
|
+
basePath: base,
|
|
572
|
+
requirement: "not-absent",
|
|
573
|
+
},
|
|
574
|
+
});
|
|
575
|
+
if (!closeoutProof.ok) {
|
|
576
|
+
if (!isDbAvailable() && closeoutProof.reason === "db-unavailable") {
|
|
577
|
+
const summaryOutcome = classifyMilestoneSummaryContent(readFileSync(absPath, "utf-8"));
|
|
578
|
+
return summaryOutcome !== "failure" && hasImplementationArtifacts(base, mid) !== "absent";
|
|
579
|
+
}
|
|
580
|
+
return false;
|
|
581
|
+
}
|
|
583
582
|
}
|
|
584
583
|
return true;
|
|
585
584
|
}
|