gsd-pi 2.44.0-dev.848dd4c → 2.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -30
- package/dist/resources/extensions/gsd/auto-start.js +0 -10
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +0 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
- 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/required-server-files.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- 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/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +5 -5
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +14 -14
- package/dist/web/standalone/.next/server/chunks/229.js +1 -1
- package/dist/web/standalone/.next/server/chunks/471.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-7e9530a7122506c5.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +8 -6
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +26 -24
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/fs-utils.test.js +48 -29
- package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +44 -34
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +34 -30
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +12 -10
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js +47 -43
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js.map +1 -1
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +7 -7
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +26 -26
- package/packages/pi-coding-agent/src/core/fs-utils.test.ts +43 -31
- package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +45 -40
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +33 -33
- package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +17 -17
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.test.ts +74 -74
- package/src/resources/extensions/gsd/auto-start.ts +0 -14
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +0 -8
- package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +99 -99
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +16 -14
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +57 -43
- package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +13 -11
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +523 -465
- package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +75 -73
- package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +56 -34
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +656 -533
- package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +143 -165
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +52 -29
- package/src/resources/extensions/gsd/tests/captures.test.ts +176 -148
- package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +33 -32
- package/src/resources/extensions/gsd/tests/collect-from-manifest.test.ts +143 -141
- package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +25 -25
- package/src/resources/extensions/gsd/tests/commands-logs.test.ts +81 -81
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +59 -38
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +263 -228
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +302 -250
- package/src/resources/extensions/gsd/tests/context-store.test.ts +367 -354
- package/src/resources/extensions/gsd/tests/continue-here.test.ts +72 -68
- package/src/resources/extensions/gsd/tests/cost-projection.test.ts +106 -92
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +35 -27
- package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +237 -220
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +420 -390
- package/src/resources/extensions/gsd/tests/definition-loader.test.ts +92 -76
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +83 -68
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +183 -152
- package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +101 -78
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +227 -192
- package/src/resources/extensions/gsd/tests/detection.test.ts +278 -232
- package/src/resources/extensions/gsd/tests/dev-engine-wrapper.test.ts +34 -30
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +180 -164
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +49 -43
- package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +32 -28
- package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +29 -27
- package/src/resources/extensions/gsd/tests/doctor-delimiter-fix.test.ts +38 -34
- package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +75 -54
- package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +32 -21
- package/src/resources/extensions/gsd/tests/doctor-environment.test.ts +97 -72
- package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +44 -38
- package/src/resources/extensions/gsd/tests/doctor-git.test.ts +145 -104
- package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +106 -84
- package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +60 -54
- package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +93 -72
- package/src/resources/extensions/gsd/tests/doctor.test.ts +134 -104
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +131 -123
- package/src/resources/extensions/gsd/tests/exit-command.test.ts +24 -20
- package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +57 -48
- package/src/resources/extensions/gsd/tests/files-loadfile-eisdir.test.ts +7 -5
- package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +42 -30
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +206 -198
- package/src/resources/extensions/gsd/tests/git-locale.test.ts +27 -13
- package/src/resources/extensions/gsd/tests/git-service.test.ts +388 -285
- package/src/resources/extensions/gsd/tests/gitignore-tracked-gsd.test.ts +39 -31
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +69 -63
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +264 -255
- package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +119 -108
- package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +103 -81
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +262 -229
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +13 -13
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +37 -29
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +102 -81
- package/src/resources/extensions/gsd/tests/init-wizard.test.ts +18 -16
- package/src/resources/extensions/gsd/tests/integration-edge.test.ts +46 -41
- package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +53 -42
- package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +91 -75
- package/src/resources/extensions/gsd/tests/integration-proof.test.ts +18 -18
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +194 -150
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +125 -101
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +54 -45
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +93 -80
- package/src/resources/extensions/gsd/tests/migrate-command.test.ts +66 -57
- package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +93 -83
- package/src/resources/extensions/gsd/tests/migrate-parser.test.ts +170 -161
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +141 -125
- package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +131 -107
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +96 -87
- package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +164 -125
- package/src/resources/extensions/gsd/tests/must-have-parser.test.ts +94 -81
- package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +36 -35
- package/src/resources/extensions/gsd/tests/overrides.test.ts +106 -99
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +47 -40
- package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +28 -25
- package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +83 -66
- package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +77 -54
- package/src/resources/extensions/gsd/tests/park-milestone.test.ts +115 -68
- package/src/resources/extensions/gsd/tests/parsers.test.ts +611 -546
- package/src/resources/extensions/gsd/tests/paths.test.ts +87 -72
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +117 -77
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +56 -56
- package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +119 -93
- package/src/resources/extensions/gsd/tests/queue-order.test.ts +82 -70
- package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +55 -42
- package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +73 -45
- package/src/resources/extensions/gsd/tests/reassess-prompt.test.ts +38 -28
- package/src/resources/extensions/gsd/tests/replan-slice.test.ts +80 -73
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +74 -71
- package/src/resources/extensions/gsd/tests/requirements.test.ts +75 -70
- package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +66 -44
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +181 -114
- package/src/resources/extensions/gsd/tests/rule-registry.test.ts +65 -63
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +128 -66
- package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +25 -18
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +44 -37
- package/src/resources/extensions/gsd/tests/shared-wal.test.ts +26 -19
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +8 -6
- package/src/resources/extensions/gsd/tests/symlink-numbered-variants.test.ts +28 -22
- package/src/resources/extensions/gsd/tests/token-savings.test.ts +56 -54
- package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +25 -23
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +11 -9
- package/src/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +82 -66
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +47 -46
- package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +22 -20
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +86 -84
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +43 -41
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +96 -94
- package/src/resources/extensions/gsd/tests/windows-path-normalization.test.ts +13 -11
- package/src/resources/extensions/gsd/tests/worker-registry.test.ts +29 -27
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +52 -50
- package/src/resources/extensions/gsd/tests/worktree-bugfix.test.ts +13 -10
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +18 -14
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +39 -38
- package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +21 -17
- package/src/resources/extensions/gsd/tests/worktree-health.test.ts +30 -25
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +37 -30
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +22 -15
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +66 -59
- package/src/resources/extensions/gsd/tests/worktree.test.ts +50 -44
- package/dist/web/standalone/.next/static/chunks/app/page-b9367c5ae13b99c6.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +0 -100
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +0 -63
- /package/dist/web/standalone/.next/static/{-zps1Q9mQmioAKLcQiCr8 → mgkxN0mGP6gSUmGPEzbk_}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{-zps1Q9mQmioAKLcQiCr8 → mgkxN0mGP6gSUmGPEzbk_}/_ssgManifest.js +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { describe, test, after } from 'node:test';
|
|
2
|
-
import assert from 'node:assert/strict';
|
|
3
1
|
import { parseRequirementCounts } from "../files.ts";
|
|
4
2
|
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
5
3
|
import { join } from "node:path";
|
|
6
4
|
import { tmpdir } from "node:os";
|
|
7
5
|
import { deriveState } from "../state.ts";
|
|
8
6
|
import { runGSDDoctor } from "../doctor.ts";
|
|
7
|
+
import { createTestContext } from './test-helpers.ts';
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const { assertEq, assertTrue, report } = createTestContext();
|
|
10
|
+
console.log("\n=== requirement counts parser ===");
|
|
11
|
+
{
|
|
12
|
+
const counts = parseRequirementCounts(`# Requirements
|
|
13
13
|
|
|
14
14
|
## Active
|
|
15
15
|
|
|
@@ -34,68 +34,73 @@ describe('requirements', () => {
|
|
|
34
34
|
### R030 — No
|
|
35
35
|
- Status: out-of-scope
|
|
36
36
|
`);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
37
|
+
assertEq(counts.active, 2, "counts active requirements by section");
|
|
38
|
+
assertEq(counts.validated, 1, "counts validated requirements");
|
|
39
|
+
assertEq(counts.deferred, 1, "counts deferred requirements");
|
|
40
|
+
assertEq(counts.outOfScope, 1, "counts out of scope requirements");
|
|
41
|
+
assertEq(counts.blocked, 1, "counts blocked statuses");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const base = mkdtempSync(join(tmpdir(), "gsd-requirements-test-"));
|
|
45
|
+
const gsd = join(base, ".gsd");
|
|
46
|
+
const mDir = join(gsd, "milestones", "M001");
|
|
47
|
+
const sDir = join(mDir, "slices", "S01");
|
|
48
|
+
const tDir = join(sDir, "tasks");
|
|
49
|
+
mkdirSync(tDir, { recursive: true });
|
|
50
|
+
writeFileSync(join(gsd, "REQUIREMENTS.md"), `# Requirements
|
|
51
|
+
|
|
52
|
+
## Active
|
|
53
|
+
|
|
54
|
+
### R001 — Missing owner
|
|
55
|
+
- Class: core-capability
|
|
56
|
+
- Status: active
|
|
57
|
+
- Description: thing
|
|
58
|
+
- Why it matters: thing
|
|
59
|
+
- Source: user
|
|
60
|
+
- Primary owning slice: none yet
|
|
61
|
+
- Supporting slices: none
|
|
62
|
+
- Validation: unmapped
|
|
63
|
+
- Notes: none
|
|
64
|
+
|
|
65
|
+
## Validated
|
|
66
|
+
|
|
67
|
+
## Deferred
|
|
68
|
+
|
|
69
|
+
## Out of Scope
|
|
70
|
+
|
|
71
|
+
## Traceability
|
|
72
|
+
`, "utf-8");
|
|
73
|
+
writeFileSync(join(mDir, "M001-ROADMAP.md"), `# M001: Demo
|
|
74
|
+
|
|
75
|
+
## Slices
|
|
76
|
+
- [ ] **S01: Demo Slice** \`risk:low\` \`depends:[]\`
|
|
77
|
+
> After this: demo works
|
|
78
|
+
`, "utf-8");
|
|
79
|
+
writeFileSync(join(sDir, "S01-PLAN.md"), `# S01: Demo Slice
|
|
80
|
+
|
|
81
|
+
**Goal:** Demo
|
|
82
|
+
**Demo:** Demo
|
|
83
|
+
|
|
84
|
+
## Must-Haves
|
|
85
|
+
- done
|
|
86
|
+
|
|
87
|
+
## Tasks
|
|
88
|
+
- [ ] **T01: Implement thing** \`est:10m\`
|
|
89
|
+
Task is in progress.
|
|
90
|
+
`, "utf-8");
|
|
91
|
+
|
|
92
|
+
console.log("\n=== deriveState includes requirements counts ===");
|
|
93
|
+
{
|
|
94
|
+
const state = await deriveState(base);
|
|
95
|
+
assertTrue(state.requirements !== undefined, "state includes requirements summary");
|
|
96
|
+
assertEq(state.requirements?.active, 1, "state reports active requirement count");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
console.log("\n=== doctor flags orphaned active requirement ===");
|
|
100
|
+
{
|
|
101
|
+
const report = await runGSDDoctor(base);
|
|
102
|
+
assertTrue(report.issues.some(issue => issue.code === "active_requirement_missing_owner"), "doctor flags missing owner");
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
rmSync(base, { recursive: true, force: true });
|
|
106
|
+
report();
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
// consuming code properly resets all completion state so deriveState
|
|
5
5
|
// re-derives the task on the next loop iteration.
|
|
6
6
|
|
|
7
|
-
import { describe, test } from 'node:test';
|
|
8
|
-
import assert from 'node:assert/strict';
|
|
9
7
|
import { mkdtempSync, mkdirSync, rmSync, writeFileSync, existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
10
8
|
import { join } from "node:path";
|
|
11
9
|
import { tmpdir } from "node:os";
|
|
10
|
+
import { createTestContext } from "./test-helpers.ts";
|
|
12
11
|
import {
|
|
13
12
|
resetHookState,
|
|
14
13
|
consumeRetryTrigger,
|
|
@@ -17,6 +16,8 @@ import {
|
|
|
17
16
|
} from "../post-unit-hooks.ts";
|
|
18
17
|
import { uncheckTaskInPlan } from "../undo.ts";
|
|
19
18
|
|
|
19
|
+
const { assertEq, assertTrue, report } = createTestContext();
|
|
20
|
+
|
|
20
21
|
// ─── Fixture Helpers ───────────────────────────────────────────────────────
|
|
21
22
|
|
|
22
23
|
function createRetryFixture(): { base: string; cleanup: () => void } {
|
|
@@ -64,65 +65,74 @@ function createRetryFixture(): { base: string; cleanup: () => void } {
|
|
|
64
65
|
// Test: consumeRetryTrigger returns retryArtifact field
|
|
65
66
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
66
67
|
|
|
68
|
+
console.log("\n=== consumeRetryTrigger: returns null when no retry pending ===");
|
|
67
69
|
|
|
68
|
-
|
|
69
|
-
test('consumeRetryTrigger: returns null when no retry pending', () => {
|
|
70
|
+
{
|
|
70
71
|
resetHookState();
|
|
71
72
|
const trigger = consumeRetryTrigger();
|
|
72
|
-
|
|
73
|
-
}
|
|
73
|
+
assertEq(trigger, null, "returns null when no retry pending");
|
|
74
|
+
}
|
|
74
75
|
|
|
75
76
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
76
77
|
// Test: uncheckTaskInPlan reverses doctor's [x] mark
|
|
77
78
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
78
|
-
|
|
79
|
+
|
|
80
|
+
console.log("\n=== Retry reset step 1: uncheck [x] → [ ] in PLAN.md ===");
|
|
81
|
+
|
|
82
|
+
{
|
|
79
83
|
const { base, cleanup } = createRetryFixture();
|
|
80
84
|
try {
|
|
81
85
|
const planFile = join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-PLAN.md");
|
|
82
86
|
|
|
83
87
|
// Precondition: T01 is checked
|
|
84
88
|
const before = readFileSync(planFile, "utf-8");
|
|
85
|
-
|
|
89
|
+
assertTrue(before.includes("- [x] **T01:"), "precondition: T01 is checked [x]");
|
|
86
90
|
|
|
87
91
|
// Step 1: Uncheck T01
|
|
88
92
|
const result = uncheckTaskInPlan(base, "M001", "S01", "T01");
|
|
89
|
-
|
|
93
|
+
assertTrue(result, "uncheckTaskInPlan returns true");
|
|
90
94
|
|
|
91
95
|
// Verify T01 is now unchecked
|
|
92
96
|
const after = readFileSync(planFile, "utf-8");
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
assertTrue(after.includes("- [ ] **T01:"), "T01 is now unchecked [ ]");
|
|
98
|
+
assertTrue(!after.includes("- [x] **T01:"), "T01 no longer has [x]");
|
|
95
99
|
|
|
96
100
|
// T02 is unaffected
|
|
97
|
-
|
|
101
|
+
assertTrue(after.includes("- [ ] **T02:"), "T02 remains unchanged");
|
|
98
102
|
} finally {
|
|
99
103
|
cleanup();
|
|
100
104
|
}
|
|
101
|
-
}
|
|
105
|
+
}
|
|
102
106
|
|
|
103
107
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
104
108
|
// Test: Delete SUMMARY.md for the task
|
|
105
109
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
106
|
-
|
|
110
|
+
|
|
111
|
+
console.log("\n=== Retry reset step 2: delete SUMMARY.md ===");
|
|
112
|
+
|
|
113
|
+
{
|
|
107
114
|
const { base, cleanup } = createRetryFixture();
|
|
108
115
|
try {
|
|
109
116
|
const summaryFile = join(base, ".gsd", "milestones", "M001", "slices", "S01", "tasks", "T01-SUMMARY.md");
|
|
110
117
|
|
|
111
118
|
// Precondition: SUMMARY exists
|
|
112
|
-
|
|
119
|
+
assertTrue(existsSync(summaryFile), "precondition: SUMMARY.md exists");
|
|
113
120
|
|
|
114
121
|
// Step 2: Delete SUMMARY.md
|
|
115
122
|
unlinkSync(summaryFile);
|
|
116
|
-
|
|
123
|
+
assertTrue(!existsSync(summaryFile), "SUMMARY.md deleted");
|
|
117
124
|
} finally {
|
|
118
125
|
cleanup();
|
|
119
126
|
}
|
|
120
|
-
}
|
|
127
|
+
}
|
|
121
128
|
|
|
122
129
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
123
130
|
// Test: Remove from completedUnits array and flush
|
|
124
131
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
125
|
-
|
|
132
|
+
|
|
133
|
+
console.log("\n=== Retry reset step 3: remove from completedUnits ===");
|
|
134
|
+
|
|
135
|
+
{
|
|
126
136
|
const { base, cleanup } = createRetryFixture();
|
|
127
137
|
try {
|
|
128
138
|
// Simulate the completedUnits array (as AutoSession would have it)
|
|
@@ -136,8 +146,8 @@ test('Retry reset step 3: remove from completedUnits', () => {
|
|
|
136
146
|
u => !(u.type === "execute-task" && u.id === "M001/S01/T01"),
|
|
137
147
|
);
|
|
138
148
|
|
|
139
|
-
|
|
140
|
-
|
|
149
|
+
assertEq(filtered.length, 1, "one unit removed from completedUnits");
|
|
150
|
+
assertEq(filtered[0].id, "M001/S01/T02", "T02 still in completedUnits");
|
|
141
151
|
|
|
142
152
|
// Flush to completed-units.json
|
|
143
153
|
const completedKeysPath = join(base, ".gsd", "completed-units.json");
|
|
@@ -145,36 +155,42 @@ test('Retry reset step 3: remove from completedUnits', () => {
|
|
|
145
155
|
writeFileSync(completedKeysPath, JSON.stringify(keys, null, 2), "utf-8");
|
|
146
156
|
|
|
147
157
|
const onDisk = JSON.parse(readFileSync(completedKeysPath, "utf-8"));
|
|
148
|
-
|
|
149
|
-
|
|
158
|
+
assertEq(onDisk.length, 1, "completed-units.json has one entry");
|
|
159
|
+
assertEq(onDisk[0], "execute-task/M001/S01/T02", "only T02 remains in completed-units.json");
|
|
150
160
|
} finally {
|
|
151
161
|
cleanup();
|
|
152
162
|
}
|
|
153
|
-
}
|
|
163
|
+
}
|
|
154
164
|
|
|
155
165
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
156
166
|
// Test: Delete the retry_on artifact
|
|
157
167
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
158
|
-
|
|
168
|
+
|
|
169
|
+
console.log("\n=== Retry reset step 4: delete retry_on artifact ===");
|
|
170
|
+
|
|
171
|
+
{
|
|
159
172
|
const { base, cleanup } = createRetryFixture();
|
|
160
173
|
try {
|
|
161
174
|
const retryArtifactPath = resolveHookArtifactPath(base, "M001/S01/T01", "NEEDS-REWORK.md");
|
|
162
175
|
|
|
163
176
|
// Precondition: artifact exists
|
|
164
|
-
|
|
177
|
+
assertTrue(existsSync(retryArtifactPath), "precondition: retry artifact exists");
|
|
165
178
|
|
|
166
179
|
// Step 4: Delete retry artifact
|
|
167
180
|
unlinkSync(retryArtifactPath);
|
|
168
|
-
|
|
181
|
+
assertTrue(!existsSync(retryArtifactPath), "retry artifact deleted");
|
|
169
182
|
} finally {
|
|
170
183
|
cleanup();
|
|
171
184
|
}
|
|
172
|
-
}
|
|
185
|
+
}
|
|
173
186
|
|
|
174
187
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
175
188
|
// Test: Full retry reset sequence (all steps together)
|
|
176
189
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
177
|
-
|
|
190
|
+
|
|
191
|
+
console.log("\n=== Full retry reset: all steps combined ===");
|
|
192
|
+
|
|
193
|
+
{
|
|
178
194
|
const { base, cleanup } = createRetryFixture();
|
|
179
195
|
try {
|
|
180
196
|
const trigger = {
|
|
@@ -226,27 +242,30 @@ test('Full retry reset: all steps combined', () => {
|
|
|
226
242
|
// PLAN.md: T01 unchecked
|
|
227
243
|
const planFile = join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-PLAN.md");
|
|
228
244
|
const planContent = readFileSync(planFile, "utf-8");
|
|
229
|
-
|
|
230
|
-
|
|
245
|
+
assertTrue(planContent.includes("- [ ] **T01:"), "after reset: T01 unchecked in PLAN");
|
|
246
|
+
assertTrue(!planContent.includes("- [x] **T01:"), "after reset: T01 not checked in PLAN");
|
|
231
247
|
|
|
232
248
|
// SUMMARY.md: deleted
|
|
233
|
-
|
|
249
|
+
assertTrue(!existsSync(summaryFile), "after reset: SUMMARY.md deleted");
|
|
234
250
|
|
|
235
251
|
// completed-units.json: empty
|
|
236
252
|
const onDisk = JSON.parse(readFileSync(completedKeysPath, "utf-8"));
|
|
237
|
-
|
|
253
|
+
assertEq(onDisk.length, 0, "after reset: completed-units.json is empty");
|
|
238
254
|
|
|
239
255
|
// Retry artifact: deleted
|
|
240
|
-
|
|
256
|
+
assertTrue(!existsSync(retryArtifactPath), "after reset: retry artifact deleted");
|
|
241
257
|
} finally {
|
|
242
258
|
cleanup();
|
|
243
259
|
}
|
|
244
|
-
}
|
|
260
|
+
}
|
|
245
261
|
|
|
246
262
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
247
263
|
// Test: Reset is idempotent — no crash when artifacts are already missing
|
|
248
264
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
249
|
-
|
|
265
|
+
|
|
266
|
+
console.log("\n=== Retry reset: idempotent when artifacts already missing ===");
|
|
267
|
+
|
|
268
|
+
{
|
|
250
269
|
const base = mkdtempSync(join(tmpdir(), "gsd-retry-idempotent-"));
|
|
251
270
|
try {
|
|
252
271
|
// Create minimal structure — NO summary, NO retry artifact, NO plan
|
|
@@ -269,38 +288,41 @@ test('Retry reset: idempotent when artifacts already missing', () => {
|
|
|
269
288
|
|
|
270
289
|
// Uncheck — returns false because no PLAN file
|
|
271
290
|
const uncheckResult = uncheckTaskInPlan(base, mid, sid, tid);
|
|
272
|
-
|
|
291
|
+
assertTrue(!uncheckResult, "uncheck returns false when no PLAN exists");
|
|
273
292
|
|
|
274
293
|
// Summary does not exist — no crash
|
|
275
294
|
const summaryFile = join(base, ".gsd", "milestones", "M001", "slices", "S01", "tasks", `${tid}-SUMMARY.md`);
|
|
276
|
-
|
|
295
|
+
assertTrue(!existsSync(summaryFile), "no summary to delete — safe");
|
|
277
296
|
|
|
278
297
|
// Retry artifact does not exist — no crash
|
|
279
298
|
const retryPath = resolveHookArtifactPath(base, trigger.unitId, trigger.retryArtifact);
|
|
280
|
-
|
|
299
|
+
assertTrue(!existsSync(retryPath), "no retry artifact to delete — safe");
|
|
281
300
|
|
|
282
301
|
// completed-units.json filter on empty array — safe
|
|
283
302
|
const completedUnits: Array<{ type: string; id: string }> = [];
|
|
284
303
|
const filtered = completedUnits.filter(
|
|
285
304
|
u => !(u.type === trigger.unitType && u.id === trigger.unitId),
|
|
286
305
|
);
|
|
287
|
-
|
|
306
|
+
assertEq(filtered.length, 0, "filter on empty array is safe");
|
|
288
307
|
} finally {
|
|
289
308
|
rmSync(base, { recursive: true, force: true });
|
|
290
309
|
}
|
|
291
|
-
}
|
|
310
|
+
}
|
|
292
311
|
|
|
293
312
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
294
313
|
// Test: resolveHookArtifactPath produces correct path for retry artifacts
|
|
295
314
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
296
|
-
|
|
315
|
+
|
|
316
|
+
console.log("\n=== resolveHookArtifactPath: correct path for retry artifacts ===");
|
|
317
|
+
|
|
318
|
+
{
|
|
297
319
|
const base = "/project";
|
|
298
320
|
const path = resolveHookArtifactPath(base, "M001/S01/T01", "NEEDS-REWORK.md");
|
|
299
|
-
|
|
321
|
+
assertEq(
|
|
300
322
|
path,
|
|
301
323
|
join(base, ".gsd", "milestones", "M001", "slices", "S01", "tasks", "T01-NEEDS-REWORK.md"),
|
|
302
324
|
"retry artifact path resolves to task directory with task prefix",
|
|
303
325
|
);
|
|
304
|
-
}
|
|
326
|
+
}
|
|
305
327
|
|
|
306
|
-
|
|
328
|
+
report();
|