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,12 +1,13 @@
|
|
|
1
1
|
import { parseTaskPlanMustHaves } from '../files.ts';
|
|
2
|
-
import {
|
|
3
|
-
import assert from 'node:assert/strict';
|
|
2
|
+
import { createTestContext } from './test-helpers.ts';
|
|
4
3
|
|
|
4
|
+
const { assertEq, assertTrue, report } = createTestContext();
|
|
5
5
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
6
6
|
// (a) Standard unchecked format: - [ ] text
|
|
7
7
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
console.log('\n=== parseTaskPlanMustHaves: standard unchecked ===');
|
|
10
|
+
{
|
|
10
11
|
const content = `# T01: Test Task
|
|
11
12
|
|
|
12
13
|
## Must-Haves
|
|
@@ -15,53 +16,56 @@ test('parseTaskPlanMustHaves: standard unchecked', () => {
|
|
|
15
16
|
- [ ] Second must-have item
|
|
16
17
|
`;
|
|
17
18
|
const result = parseTaskPlanMustHaves(content);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
19
|
+
assertEq(result.length, 2, 'should return 2 items');
|
|
20
|
+
assertEq(result[0].text, 'First must-have item', 'first item text');
|
|
21
|
+
assertEq(result[0].checked, false, 'first item unchecked');
|
|
22
|
+
assertEq(result[1].text, 'Second must-have item', 'second item text');
|
|
23
|
+
assertEq(result[1].checked, false, 'second item unchecked');
|
|
24
|
+
}
|
|
24
25
|
|
|
25
26
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
26
27
|
// (b) Checked variants: - [x] and - [X]
|
|
27
28
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
console.log('\n=== parseTaskPlanMustHaves: checked [x] and [X] ===');
|
|
31
|
+
{
|
|
30
32
|
const content = `## Must-Haves
|
|
31
33
|
|
|
32
34
|
- [x] Lowercase checked item
|
|
33
35
|
- [X] Uppercase checked item
|
|
34
36
|
`;
|
|
35
37
|
const result = parseTaskPlanMustHaves(content);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
38
|
+
assertEq(result.length, 2, 'should return 2 items');
|
|
39
|
+
assertEq(result[0].checked, true, 'lowercase x is checked');
|
|
40
|
+
assertEq(result[0].text, 'Lowercase checked item', 'lowercase x text');
|
|
41
|
+
assertEq(result[1].checked, true, 'uppercase X is checked');
|
|
42
|
+
assertEq(result[1].text, 'Uppercase checked item', 'uppercase X text');
|
|
43
|
+
}
|
|
42
44
|
|
|
43
45
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
44
46
|
// (c) No-checkbox bullets: - text
|
|
45
47
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
46
48
|
|
|
47
|
-
|
|
49
|
+
console.log('\n=== parseTaskPlanMustHaves: no-checkbox bullets ===');
|
|
50
|
+
{
|
|
48
51
|
const content = `## Must-Haves
|
|
49
52
|
|
|
50
53
|
- Plain bullet item
|
|
51
54
|
- Another plain item
|
|
52
55
|
`;
|
|
53
56
|
const result = parseTaskPlanMustHaves(content);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
57
|
+
assertEq(result.length, 2, 'should return 2 items');
|
|
58
|
+
assertEq(result[0].text, 'Plain bullet item', 'plain bullet text');
|
|
59
|
+
assertEq(result[0].checked, false, 'plain bullet defaults to unchecked');
|
|
60
|
+
assertEq(result[1].text, 'Another plain item', 'second plain bullet text');
|
|
61
|
+
}
|
|
59
62
|
|
|
60
63
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
61
64
|
// (d) Indented variants
|
|
62
65
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
63
66
|
|
|
64
|
-
|
|
67
|
+
console.log('\n=== parseTaskPlanMustHaves: indented variants ===');
|
|
68
|
+
{
|
|
65
69
|
const content = `## Must-Haves
|
|
66
70
|
|
|
67
71
|
- [ ] Indented unchecked item
|
|
@@ -69,20 +73,21 @@ test('parseTaskPlanMustHaves: indented variants', () => {
|
|
|
69
73
|
- Plain indented item
|
|
70
74
|
`;
|
|
71
75
|
const result = parseTaskPlanMustHaves(content);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
76
|
+
assertEq(result.length, 3, 'should return 3 items');
|
|
77
|
+
assertEq(result[0].text, 'Indented unchecked item', 'indented unchecked text');
|
|
78
|
+
assertEq(result[0].checked, false, 'indented unchecked state');
|
|
79
|
+
assertEq(result[1].text, 'Indented checked item', 'indented checked text');
|
|
80
|
+
assertEq(result[1].checked, true, 'indented checked state');
|
|
81
|
+
assertEq(result[2].text, 'Plain indented item', 'indented plain text');
|
|
82
|
+
assertEq(result[2].checked, false, 'indented plain state');
|
|
83
|
+
}
|
|
80
84
|
|
|
81
85
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
82
86
|
// (e) Mixed checkbox states in one section
|
|
83
87
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
84
88
|
|
|
85
|
-
|
|
89
|
+
console.log('\n=== parseTaskPlanMustHaves: mixed states ===');
|
|
90
|
+
{
|
|
86
91
|
const content = `## Must-Haves
|
|
87
92
|
|
|
88
93
|
- [ ] Unchecked one
|
|
@@ -92,19 +97,20 @@ test('parseTaskPlanMustHaves: mixed states', () => {
|
|
|
92
97
|
- [ ] Another unchecked
|
|
93
98
|
`;
|
|
94
99
|
const result = parseTaskPlanMustHaves(content);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
100
|
+
assertEq(result.length, 5, 'should return 5 items');
|
|
101
|
+
assertEq(result[0].checked, false, 'first is unchecked');
|
|
102
|
+
assertEq(result[1].checked, true, 'second is checked');
|
|
103
|
+
assertEq(result[2].checked, true, 'third is checked (uppercase)');
|
|
104
|
+
assertEq(result[3].checked, false, 'fourth (plain) is unchecked');
|
|
105
|
+
assertEq(result[4].checked, false, 'fifth is unchecked');
|
|
106
|
+
}
|
|
102
107
|
|
|
103
108
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
104
109
|
// (f) Missing Must-Haves section → empty array
|
|
105
110
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
106
111
|
|
|
107
|
-
|
|
112
|
+
console.log('\n=== parseTaskPlanMustHaves: missing section ===');
|
|
113
|
+
{
|
|
108
114
|
const content = `# T01: Some Task
|
|
109
115
|
|
|
110
116
|
## Description
|
|
@@ -116,15 +122,16 @@ Some description here.
|
|
|
116
122
|
- Run tests
|
|
117
123
|
`;
|
|
118
124
|
const result = parseTaskPlanMustHaves(content);
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
125
|
+
assertEq(result.length, 0, 'returns empty array when section missing');
|
|
126
|
+
assertTrue(Array.isArray(result), 'result is an array');
|
|
127
|
+
}
|
|
122
128
|
|
|
123
129
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
124
130
|
// (g) Empty Must-Haves section → empty array
|
|
125
131
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
126
132
|
|
|
127
|
-
|
|
133
|
+
console.log('\n=== parseTaskPlanMustHaves: empty section ===');
|
|
134
|
+
{
|
|
128
135
|
const content = `## Must-Haves
|
|
129
136
|
|
|
130
137
|
## Verification
|
|
@@ -132,14 +139,15 @@ test('parseTaskPlanMustHaves: empty section', () => {
|
|
|
132
139
|
- Run tests
|
|
133
140
|
`;
|
|
134
141
|
const result = parseTaskPlanMustHaves(content);
|
|
135
|
-
|
|
136
|
-
}
|
|
142
|
+
assertEq(result.length, 0, 'returns empty array when section is empty');
|
|
143
|
+
}
|
|
137
144
|
|
|
138
145
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
139
146
|
// (h) Content with YAML frontmatter
|
|
140
147
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
141
148
|
|
|
142
|
-
|
|
149
|
+
console.log('\n=== parseTaskPlanMustHaves: YAML frontmatter ===');
|
|
150
|
+
{
|
|
143
151
|
const content = `---
|
|
144
152
|
estimated_steps: 5
|
|
145
153
|
estimated_files: 3
|
|
@@ -153,16 +161,16 @@ estimated_files: 3
|
|
|
153
161
|
- [x] Checked must-have after frontmatter
|
|
154
162
|
`;
|
|
155
163
|
const result = parseTaskPlanMustHaves(content);
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
164
|
+
assertEq(result.length, 2, 'frontmatter does not pollute results');
|
|
165
|
+
assertEq(result[0].text, 'Real must-have after frontmatter', 'first item text correct');
|
|
166
|
+
assertEq(result[0].checked, false, 'first item unchecked');
|
|
167
|
+
assertEq(result[1].text, 'Checked must-have after frontmatter', 'second item text correct');
|
|
168
|
+
assertEq(result[1].checked, true, 'second item checked');
|
|
169
|
+
}
|
|
162
170
|
|
|
163
171
|
// Verify frontmatter content is not misinterpreted as must-haves
|
|
164
|
-
|
|
165
|
-
|
|
172
|
+
console.log('\n=== parseTaskPlanMustHaves: frontmatter-only content ===');
|
|
173
|
+
{
|
|
166
174
|
const content = `---
|
|
167
175
|
estimated_steps: 5
|
|
168
176
|
estimated_files: 3
|
|
@@ -175,14 +183,15 @@ estimated_files: 3
|
|
|
175
183
|
No must-haves section here.
|
|
176
184
|
`;
|
|
177
185
|
const result = parseTaskPlanMustHaves(content);
|
|
178
|
-
|
|
179
|
-
}
|
|
186
|
+
assertEq(result.length, 0, 'frontmatter-only content returns empty array');
|
|
187
|
+
}
|
|
180
188
|
|
|
181
189
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
182
190
|
// (i) Real task plan format (based on S01/T01-PLAN.md structure)
|
|
183
191
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
184
192
|
|
|
185
|
-
|
|
193
|
+
console.log('\n=== parseTaskPlanMustHaves: real task plan format ===');
|
|
194
|
+
{
|
|
186
195
|
const content = `---
|
|
187
196
|
estimated_steps: 5
|
|
188
197
|
estimated_files: 3
|
|
@@ -230,37 +239,40 @@ Add the \`completing-milestone\` phase to the GSD state machine.
|
|
|
230
239
|
- \`agent/extensions/gsd/types.ts\` — Phase union includes \`'completing-milestone'\`
|
|
231
240
|
`;
|
|
232
241
|
const result = parseTaskPlanMustHaves(content);
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
242
|
+
assertEq(result.length, 5, 'real plan has 5 must-haves');
|
|
243
|
+
assertTrue(result[0].text.includes('`Phase` type includes'), 'first must-have text matches');
|
|
244
|
+
assertTrue(result[1].text.includes('`deriveState` returns'), 'second must-have text matches');
|
|
245
|
+
assertEq(result[0].checked, false, 'all real must-haves are unchecked');
|
|
246
|
+
assertEq(result[4].checked, false, 'last real must-have is unchecked');
|
|
247
|
+
assertTrue(result[4].text.includes('multi-milestone'), 'last must-have references multi-milestone');
|
|
248
|
+
}
|
|
240
249
|
|
|
241
250
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
242
251
|
// Edge cases
|
|
243
252
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
244
253
|
|
|
245
|
-
|
|
254
|
+
console.log('\n=== parseTaskPlanMustHaves: empty string ===');
|
|
255
|
+
{
|
|
246
256
|
const result = parseTaskPlanMustHaves('');
|
|
247
|
-
|
|
248
|
-
}
|
|
257
|
+
assertEq(result.length, 0, 'empty string returns empty array');
|
|
258
|
+
}
|
|
249
259
|
|
|
250
|
-
|
|
260
|
+
console.log('\n=== parseTaskPlanMustHaves: must-haves with inline code and backticks ===');
|
|
261
|
+
{
|
|
251
262
|
const content = `## Must-Haves
|
|
252
263
|
|
|
253
264
|
- [ ] \`functionName\` is exported from \`module.ts\`
|
|
254
265
|
- [x] Returns \`Array<{ text: string }>\` with correct extraction
|
|
255
266
|
`;
|
|
256
267
|
const result = parseTaskPlanMustHaves(content);
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
|
|
268
|
+
assertEq(result.length, 2, 'handles backtick content');
|
|
269
|
+
assertTrue(result[0].text.includes('`functionName`'), 'preserves backticks in text');
|
|
270
|
+
assertEq(result[0].checked, false, 'backtick item unchecked');
|
|
271
|
+
assertEq(result[1].checked, true, 'backtick item checked');
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
console.log('\n=== parseTaskPlanMustHaves: asterisk bullets ===');
|
|
275
|
+
{
|
|
264
276
|
const content = `## Must-Haves
|
|
265
277
|
|
|
266
278
|
* [ ] Asterisk unchecked
|
|
@@ -268,11 +280,12 @@ test('parseTaskPlanMustHaves: asterisk bullets', () => {
|
|
|
268
280
|
* Plain asterisk
|
|
269
281
|
`;
|
|
270
282
|
const result = parseTaskPlanMustHaves(content);
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
283
|
+
assertEq(result.length, 3, 'handles asterisk bullets');
|
|
284
|
+
assertEq(result[0].checked, false, 'asterisk unchecked');
|
|
285
|
+
assertEq(result[1].checked, true, 'asterisk checked');
|
|
286
|
+
assertEq(result[2].checked, false, 'plain asterisk unchecked');
|
|
287
|
+
}
|
|
276
288
|
|
|
277
289
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
278
290
|
|
|
291
|
+
report();
|
|
@@ -19,8 +19,9 @@ import { shouldUseWorktreeIsolation } from "../auto.ts";
|
|
|
19
19
|
import { getIsolationMode } from "../preferences.ts";
|
|
20
20
|
import { getActiveAutoWorktreeContext } from "../auto-worktree.ts";
|
|
21
21
|
import { invalidateAllCaches } from "../cache.ts";
|
|
22
|
-
import {
|
|
23
|
-
|
|
22
|
+
import { createTestContext } from "./test-helpers.ts";
|
|
23
|
+
|
|
24
|
+
const { assertEq, assertTrue, report } = createTestContext();
|
|
24
25
|
|
|
25
26
|
// --- Preferences helpers (same pattern as doctor-git.test.ts K001) ---
|
|
26
27
|
|
|
@@ -37,77 +38,77 @@ function removeRunnerPreferences(): void {
|
|
|
37
38
|
|
|
38
39
|
// --- Tests ---
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
// Test 1: shouldUseWorktreeIsolation returns false for none
|
|
42
|
+
console.log("Test 1: shouldUseWorktreeIsolation returns false for none");
|
|
41
43
|
try {
|
|
42
44
|
writeRunnerPreferences("none");
|
|
43
45
|
invalidateAllCaches();
|
|
44
|
-
|
|
46
|
+
assertEq(shouldUseWorktreeIsolation(), false, "shouldUseWorktreeIsolation() with none prefs");
|
|
45
47
|
} finally {
|
|
46
48
|
removeRunnerPreferences();
|
|
47
49
|
invalidateAllCaches();
|
|
48
50
|
}
|
|
49
|
-
});
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
// Test 2: shouldUseWorktreeIsolation returns false for branch
|
|
53
|
+
console.log("Test 2: shouldUseWorktreeIsolation returns false for branch");
|
|
52
54
|
try {
|
|
53
55
|
writeRunnerPreferences("branch");
|
|
54
56
|
invalidateAllCaches();
|
|
55
|
-
|
|
57
|
+
assertEq(shouldUseWorktreeIsolation(), false, "shouldUseWorktreeIsolation() with branch prefs");
|
|
56
58
|
} finally {
|
|
57
59
|
removeRunnerPreferences();
|
|
58
60
|
invalidateAllCaches();
|
|
59
61
|
}
|
|
60
|
-
});
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
// Test 3: shouldUseWorktreeIsolation returns true for worktree
|
|
64
|
+
console.log("Test 3: shouldUseWorktreeIsolation returns true for worktree");
|
|
63
65
|
try {
|
|
64
66
|
writeRunnerPreferences("worktree");
|
|
65
67
|
invalidateAllCaches();
|
|
66
|
-
|
|
68
|
+
assertEq(shouldUseWorktreeIsolation(), true, "shouldUseWorktreeIsolation() with worktree prefs");
|
|
67
69
|
} finally {
|
|
68
70
|
removeRunnerPreferences();
|
|
69
71
|
invalidateAllCaches();
|
|
70
72
|
}
|
|
71
|
-
});
|
|
72
73
|
|
|
73
74
|
// Test 4: shouldUseWorktreeIsolation returns true for no prefs (default)
|
|
74
75
|
// Skip if global prefs exist — they override the default and this test
|
|
75
76
|
// cannot control ~/.gsd/preferences.md.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
invalidateAllCaches();
|
|
87
|
-
}
|
|
88
|
-
} else {
|
|
77
|
+
const globalPrefsExist = existsSync(join(homedir(), ".gsd", "preferences.md"))
|
|
78
|
+
|| existsSync(join(homedir(), ".gsd", "PREFERENCES.md"));
|
|
79
|
+
if (!globalPrefsExist) {
|
|
80
|
+
console.log("Test 4: shouldUseWorktreeIsolation returns true for no prefs (default)");
|
|
81
|
+
try {
|
|
82
|
+
removeRunnerPreferences(); // ensure no prefs file
|
|
83
|
+
invalidateAllCaches();
|
|
84
|
+
assertEq(shouldUseWorktreeIsolation(), true, "shouldUseWorktreeIsolation() with no prefs (default worktree)");
|
|
85
|
+
} finally {
|
|
86
|
+
invalidateAllCaches();
|
|
89
87
|
}
|
|
90
|
-
}
|
|
88
|
+
} else {
|
|
89
|
+
console.log("Test 4: SKIPPED — global prefs file exists, cannot test bare default");
|
|
90
|
+
}
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
// Test 5: getIsolationMode returns "none" with none prefs
|
|
93
|
+
console.log("Test 5: getIsolationMode returns 'none' with none prefs");
|
|
93
94
|
try {
|
|
94
95
|
writeRunnerPreferences("none");
|
|
95
96
|
invalidateAllCaches();
|
|
96
|
-
|
|
97
|
+
assertEq(getIsolationMode(), "none", "getIsolationMode() with none prefs");
|
|
97
98
|
} finally {
|
|
98
99
|
removeRunnerPreferences();
|
|
99
100
|
invalidateAllCaches();
|
|
100
101
|
}
|
|
101
|
-
});
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
// Test 6: getActiveAutoWorktreeContext returns null at baseline
|
|
104
|
+
console.log("Test 6: getActiveAutoWorktreeContext returns null at baseline");
|
|
105
|
+
assertEq(getActiveAutoWorktreeContext(), null, "getActiveAutoWorktreeContext() returns null without enterAutoWorktree()");
|
|
106
106
|
|
|
107
107
|
// Test 7: System prompt worktree block absent without active worktree
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
console.log("Test 7: System prompt worktree block absent without active worktree");
|
|
109
|
+
{
|
|
110
110
|
const ctx = getActiveAutoWorktreeContext();
|
|
111
|
-
|
|
112
|
-
}
|
|
111
|
+
assertTrue(ctx === null, "getActiveAutoWorktreeContext() null confirms system prompt worktree block will not be injected");
|
|
112
|
+
}
|
|
113
113
|
|
|
114
|
+
report();
|