gsd-pi 2.43.0 → 2.44.0-dev.62b5d6c
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.js +13 -1
- package/dist/help-text.js +24 -0
- package/dist/resources/extensions/bg-shell/overlay.js +3 -0
- package/dist/resources/extensions/github-sync/sync.js +2 -1
- package/dist/resources/extensions/gsd/auto/loop.js +0 -2
- package/dist/resources/extensions/gsd/auto/phases.js +7 -12
- package/dist/resources/extensions/gsd/auto-dashboard.js +19 -18
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +34 -19
- package/dist/resources/extensions/gsd/auto-dispatch.js +36 -21
- package/dist/resources/extensions/gsd/auto-post-unit.js +128 -14
- package/dist/resources/extensions/gsd/auto-prompts.js +202 -92
- package/dist/resources/extensions/gsd/auto-recovery.js +83 -135
- package/dist/resources/extensions/gsd/auto-supervisor.js +14 -0
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +4 -7
- package/dist/resources/extensions/gsd/auto-verification.js +5 -10
- package/dist/resources/extensions/gsd/auto-worktree.js +123 -30
- package/dist/resources/extensions/gsd/auto.js +1 -4
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +611 -0
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +28 -3
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +3 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +15 -1
- package/dist/resources/extensions/gsd/commands-handlers.js +1 -1
- package/dist/resources/extensions/gsd/commands-maintenance.js +78 -3
- package/dist/resources/extensions/gsd/dashboard-overlay.js +32 -31
- package/dist/resources/extensions/gsd/db-writer.js +95 -4
- package/dist/resources/extensions/gsd/dispatch-guard.js +35 -30
- package/dist/resources/extensions/gsd/doctor-checks.js +28 -11
- package/dist/resources/extensions/gsd/doctor-environment.js +28 -0
- package/dist/resources/extensions/gsd/doctor-types.js +0 -15
- package/dist/resources/extensions/gsd/doctor.js +46 -282
- package/dist/resources/extensions/gsd/file-watcher.js +5 -1
- package/dist/resources/extensions/gsd/files.js +14 -198
- package/dist/resources/extensions/gsd/git-service.js +4 -0
- package/dist/resources/extensions/gsd/gitignore.js +4 -0
- package/dist/resources/extensions/gsd/gsd-db.js +819 -197
- package/dist/resources/extensions/gsd/guided-flow.js +18 -8
- package/dist/resources/extensions/gsd/markdown-renderer.js +862 -0
- package/dist/resources/extensions/gsd/md-importer.js +182 -4
- package/dist/resources/extensions/gsd/native-git-bridge.js +10 -1
- package/dist/resources/extensions/gsd/parallel-eligibility.js +14 -19
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +38 -0
- package/dist/resources/extensions/gsd/parsers-legacy.js +239 -0
- package/dist/resources/extensions/gsd/preferences-types.js +1 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +9 -0
- package/dist/resources/extensions/gsd/preferences.js +1 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +22 -9
- package/dist/resources/extensions/gsd/prompts/discuss.md +2 -2
- package/dist/resources/extensions/gsd/prompts/execute-task.md +15 -5
- package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +6 -10
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -7
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +3 -3
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -7
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +6 -6
- package/dist/resources/extensions/gsd/reactive-graph.js +33 -3
- package/dist/resources/extensions/gsd/skill-health.js +3 -1
- package/dist/resources/extensions/gsd/state.js +484 -30
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +128 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +244 -0
- package/dist/resources/extensions/gsd/tools/complete-task.js +204 -0
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +205 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +155 -0
- package/dist/resources/extensions/gsd/tools/plan-task.js +94 -0
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +152 -0
- package/dist/resources/extensions/gsd/tools/replan-slice.js +146 -0
- package/dist/resources/extensions/gsd/triage-resolution.js +17 -1
- package/dist/resources/extensions/gsd/undo.js +197 -3
- package/dist/resources/extensions/gsd/visualizer-data.js +53 -16
- package/dist/resources/extensions/gsd/workspace-index.js +63 -39
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -16
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/required-server-files.json +4 -4
- package/dist/web/standalone/.next/routes-manifest.json +6 -0
- 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 +4 -4
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- 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 +4 -4
- 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 +2 -2
- 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 -0
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -0
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -0
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- 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 +5 -5
- 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 +5 -5
- 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 +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- 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 +17 -16
- package/dist/web/standalone/.next/server/chunks/229.js +3 -3
- package/dist/web/standalone/.next/server/chunks/471.js +3 -3
- package/dist/web/standalone/.next/server/functions-config-manifest.json +1 -0
- 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/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/{4024.c195dc1fdd2adbea.js → 4024.0de81b543b28b9fe.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/app/_global-error/{page-d07a2c023f1aef1e.js → page-d83ba70a25a85472.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-f2a7482d42a5614b.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/boot/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/files/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/git/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/history/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/update/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/layout-a16c7a7ecdf0c2cf.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/page-b9367c5ae13b99c6.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{main-app-2f2ee7b85712c2bd.js → main-app-fdab67f7802d7832.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-fa307370fcf9fb2c.js → webpack-9014b5adb127a98a.js} +1 -1
- package/dist/web/standalone/.next/static/css/8a727f372cf53002.css +1 -0
- package/dist/web/standalone/.next/static/fOnWQBjWXMKUs4bqTg530/_buildManifest.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 +4 -4
- package/packages/pi-ai/dist/models.custom.d.ts +173 -0
- package/packages/pi-ai/dist/models.custom.d.ts.map +1 -0
- package/packages/pi-ai/dist/models.custom.js +170 -0
- package/packages/pi-ai/dist/models.custom.js.map +1 -0
- package/packages/pi-ai/dist/models.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.js +16 -1
- package/packages/pi-ai/dist/models.js.map +1 -1
- package/packages/pi-ai/dist/models.test.d.ts +2 -0
- package/packages/pi-ai/dist/models.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/models.test.js +67 -0
- package/packages/pi-ai/dist/models.test.js.map +1 -0
- package/packages/pi-ai/src/models.custom.ts +172 -0
- package/packages/pi-ai/src/models.test.ts +85 -0
- package/packages/pi-ai/src/models.ts +17 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +10 -3
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +21 -34
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +4 -4
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +80 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.test.js +63 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +37 -0
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/fallback-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/fallback-resolver.js +2 -3
- package/packages/pi-coding-agent/dist/core/fallback-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js +12 -2
- package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts +38 -0
- package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js +192 -0
- package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.js +69 -21
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +255 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +40 -3
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-commands.d.ts +25 -0
- package/packages/pi-coding-agent/dist/core/package-commands.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/package-commands.js +253 -0
- package/packages/pi-coding-agent/dist/core/package-commands.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/package-commands.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/package-commands.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/package-commands.test.js +225 -0
- package/packages/pi-coding-agent/dist/core/package-commands.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +4 -0
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +3 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -0
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/main.js +11 -199
- package/packages/pi-coding-agent/dist/main.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +6 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +21 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +8 -15
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.js +45 -34
- package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +7 -2
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +26 -37
- package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +2 -2
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +3 -3
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +4 -4
- package/packages/pi-coding-agent/src/core/extensions/index.ts +5 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.test.ts +96 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +89 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +44 -0
- package/packages/pi-coding-agent/src/core/fallback-resolver.test.ts +15 -2
- package/packages/pi-coding-agent/src/core/fallback-resolver.ts +2 -3
- package/packages/pi-coding-agent/src/core/lifecycle-hooks.ts +274 -0
- package/packages/pi-coding-agent/src/core/lsp/client.ts +83 -21
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +288 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +39 -3
- package/packages/pi-coding-agent/src/core/package-commands.test.ts +240 -0
- package/packages/pi-coding-agent/src/core/package-commands.ts +310 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +4 -0
- package/packages/pi-coding-agent/src/index.ts +7 -0
- package/packages/pi-coding-agent/src/main.ts +11 -232
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +20 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +9 -16
- package/packages/pi-coding-agent/src/modes/print-mode.ts +42 -32
- package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +8 -2
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +8 -15
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/bg-shell/overlay.ts +4 -0
- package/src/resources/extensions/github-sync/sync.ts +2 -1
- package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -8
- package/src/resources/extensions/gsd/auto/loop.ts +0 -2
- package/src/resources/extensions/gsd/auto/phases.ts +7 -20
- package/src/resources/extensions/gsd/auto/types.ts +0 -1
- package/src/resources/extensions/gsd/auto-dashboard.ts +20 -16
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +34 -19
- package/src/resources/extensions/gsd/auto-dispatch.ts +38 -21
- package/src/resources/extensions/gsd/auto-post-unit.ts +150 -15
- package/src/resources/extensions/gsd/auto-prompts.ts +186 -103
- package/src/resources/extensions/gsd/auto-recovery.ts +77 -142
- package/src/resources/extensions/gsd/auto-supervisor.ts +14 -0
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +6 -7
- package/src/resources/extensions/gsd/auto-verification.ts +4 -9
- package/src/resources/extensions/gsd/auto-worktree.ts +126 -30
- package/src/resources/extensions/gsd/auto.ts +0 -9
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +675 -4
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +31 -3
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +7 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +3 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +15 -1
- package/src/resources/extensions/gsd/commands-handlers.ts +1 -1
- package/src/resources/extensions/gsd/commands-maintenance.ts +86 -3
- package/src/resources/extensions/gsd/dashboard-overlay.ts +17 -13
- package/src/resources/extensions/gsd/db-writer.ts +105 -4
- package/src/resources/extensions/gsd/dispatch-guard.ts +32 -30
- package/src/resources/extensions/gsd/doctor-checks.ts +25 -11
- package/src/resources/extensions/gsd/doctor-environment.ts +31 -0
- package/src/resources/extensions/gsd/doctor-types.ts +0 -23
- package/src/resources/extensions/gsd/doctor.ts +45 -295
- package/src/resources/extensions/gsd/file-watcher.ts +4 -1
- package/src/resources/extensions/gsd/files.ts +16 -220
- package/src/resources/extensions/gsd/git-service.ts +4 -0
- package/src/resources/extensions/gsd/gitignore.ts +4 -0
- package/src/resources/extensions/gsd/gsd-db.ts +1157 -370
- package/src/resources/extensions/gsd/guided-flow.ts +20 -8
- package/src/resources/extensions/gsd/markdown-renderer.ts +1098 -0
- package/src/resources/extensions/gsd/md-importer.ts +211 -2
- package/src/resources/extensions/gsd/native-git-bridge.ts +12 -1
- package/src/resources/extensions/gsd/parallel-eligibility.ts +14 -18
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +43 -0
- package/src/resources/extensions/gsd/parsers-legacy.ts +271 -0
- package/src/resources/extensions/gsd/preferences-types.ts +3 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +9 -0
- package/src/resources/extensions/gsd/preferences.ts +1 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +22 -9
- package/src/resources/extensions/gsd/prompts/discuss.md +2 -2
- package/src/resources/extensions/gsd/prompts/execute-task.md +15 -5
- package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +6 -10
- package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -7
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +3 -3
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -7
- package/src/resources/extensions/gsd/prompts/replan-slice.md +6 -6
- package/src/resources/extensions/gsd/reactive-graph.ts +33 -3
- package/src/resources/extensions/gsd/skill-health.ts +2 -1
- package/src/resources/extensions/gsd/state.ts +547 -29
- package/src/resources/extensions/gsd/tests/atomic-task-closeout.test.ts +8 -120
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +20 -11
- package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +150 -5
- package/src/resources/extensions/gsd/tests/auto-stash-merge.test.ts +121 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +15 -20
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +410 -0
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +439 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +0 -2
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +527 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +593 -2
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +104 -57
- package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +22 -80
- package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +5 -7
- package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +175 -0
- package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +38 -130
- package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +38 -76
- package/src/resources/extensions/gsd/tests/doctor.test.ts +9 -19
- package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +290 -0
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +240 -0
- package/src/resources/extensions/gsd/tests/git-service.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +462 -0
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +4 -172
- package/src/resources/extensions/gsd/tests/integration-proof.test.ts +643 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1205 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +439 -0
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/parsers.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +176 -113
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +305 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +325 -0
- package/src/resources/extensions/gsd/tests/replan-handler.test.ts +410 -0
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/rogue-file-detection.test.ts +296 -0
- package/src/resources/extensions/gsd/tests/schema-v9-sequence.test.ts +176 -0
- package/src/resources/extensions/gsd/tests/shared-wal.test.ts +216 -0
- package/src/resources/extensions/gsd/tests/token-cost-display.test.ts +118 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +11 -3
- package/src/resources/extensions/gsd/tests/undo.test.ts +321 -1
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -142
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +12 -5
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +176 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +300 -0
- package/src/resources/extensions/gsd/tools/complete-task.ts +245 -0
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +249 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +194 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +116 -0
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +203 -0
- package/src/resources/extensions/gsd/tools/replan-slice.ts +192 -0
- package/src/resources/extensions/gsd/triage-resolution.ts +20 -1
- package/src/resources/extensions/gsd/types.ts +50 -0
- package/src/resources/extensions/gsd/undo.ts +247 -3
- package/src/resources/extensions/gsd/visualizer-data.ts +54 -17
- package/src/resources/extensions/gsd/workspace-index.ts +64 -46
- package/dist/resources/extensions/gsd/auto-observability.js +0 -56
- package/dist/resources/extensions/gsd/observability-validator.js +0 -422
- package/dist/resources/extensions/gsd/roadmap-mutations.js +0 -110
- package/dist/web/standalone/.next/static/VvclDCW6TAWjEyLU-EYL1/_buildManifest.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-e07acdb7dd069836.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/files/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/git/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/history/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/update/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/layout-745c6ed5fea5fb06.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-801b53eff6e83579.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-e6255954dccfcf0a.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/css/123c0bb039697968.css +0 -1
- package/src/resources/extensions/gsd/auto-observability.ts +0 -74
- package/src/resources/extensions/gsd/observability-validator.ts +0 -456
- package/src/resources/extensions/gsd/roadmap-mutations.ts +0 -134
- package/src/resources/extensions/gsd/tests/doctor-task-done-missing-summary-slice-loop.test.ts +0 -174
- package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -474
- /package/dist/web/standalone/.next/static/{VvclDCW6TAWjEyLU-EYL1 → fOnWQBjWXMKUs4bqTg530}/_ssgManifest.js +0 -0
package/src/resources/extensions/gsd/tests/doctor-task-done-missing-summary-slice-loop.test.ts
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Regression test for #1850: doctor task_done_missing_summary fix leaves
|
|
3
|
-
* slice [x] done in roadmap, causing an infinite doctor loop.
|
|
4
|
-
*
|
|
5
|
-
* Scenario: A slice is [x] done in the roadmap, has S01-SUMMARY.md (so
|
|
6
|
-
* slice_checked_missing_summary never fires), but tasks are [x] done with
|
|
7
|
-
* no T##-SUMMARY.md files. Doctor unchecks the tasks but must also uncheck
|
|
8
|
-
* the slice so the state machine re-enters the executing phase.
|
|
9
|
-
*/
|
|
10
|
-
import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
11
|
-
import { join } from "node:path";
|
|
12
|
-
import { tmpdir } from "node:os";
|
|
13
|
-
|
|
14
|
-
import { runGSDDoctor } from "../doctor.js";
|
|
15
|
-
import { createTestContext } from "./test-helpers.ts";
|
|
16
|
-
|
|
17
|
-
const { assertEq, assertTrue, report } = createTestContext();
|
|
18
|
-
|
|
19
|
-
async function main(): Promise<void> {
|
|
20
|
-
// ─── Setup: slice [x] done with S01-SUMMARY.md, tasks [x] but NO task summaries ───
|
|
21
|
-
console.log("\n=== #1850: task_done_missing_summary fix must also uncheck slice ===");
|
|
22
|
-
{
|
|
23
|
-
const base = mkdtempSync(join(tmpdir(), "gsd-doctor-1850-"));
|
|
24
|
-
const gsd = join(base, ".gsd");
|
|
25
|
-
const mDir = join(gsd, "milestones", "M001");
|
|
26
|
-
const sDir = join(mDir, "slices", "S01");
|
|
27
|
-
const tDir = join(sDir, "tasks");
|
|
28
|
-
mkdirSync(tDir, { recursive: true });
|
|
29
|
-
|
|
30
|
-
// Roadmap: slice is [x] done
|
|
31
|
-
writeFileSync(join(mDir, "M001-ROADMAP.md"), `# M001: Test Milestone
|
|
32
|
-
|
|
33
|
-
## Slices
|
|
34
|
-
- [x] **S01: Guided Slice** \`risk:low\` \`depends:[]\`
|
|
35
|
-
> After this: guided flow works
|
|
36
|
-
`);
|
|
37
|
-
|
|
38
|
-
// Plan: tasks are [x] done
|
|
39
|
-
writeFileSync(join(sDir, "S01-PLAN.md"), `# S01: Guided Slice
|
|
40
|
-
|
|
41
|
-
**Goal:** Test guided flow
|
|
42
|
-
**Demo:** Works
|
|
43
|
-
|
|
44
|
-
## Tasks
|
|
45
|
-
- [x] **T01: First task** \`est:10m\`
|
|
46
|
-
Do the first thing.
|
|
47
|
-
- [x] **T02: Second task** \`est:10m\`
|
|
48
|
-
Do the second thing.
|
|
49
|
-
- [x] **T03: Third task** \`est:10m\`
|
|
50
|
-
Do the third thing.
|
|
51
|
-
`);
|
|
52
|
-
|
|
53
|
-
// Slice summary EXISTS (so slice_checked_missing_summary guard does NOT fire)
|
|
54
|
-
writeFileSync(join(sDir, "S01-SUMMARY.md"), `---
|
|
55
|
-
id: S01
|
|
56
|
-
parent: M001
|
|
57
|
-
---
|
|
58
|
-
# S01: Guided Slice
|
|
59
|
-
Done via guided flow.
|
|
60
|
-
`);
|
|
61
|
-
|
|
62
|
-
// Slice UAT exists
|
|
63
|
-
writeFileSync(join(sDir, "S01-UAT.md"), `# S01 UAT
|
|
64
|
-
Verified.
|
|
65
|
-
`);
|
|
66
|
-
|
|
67
|
-
// NO task summaries on disk — this is the trigger condition
|
|
68
|
-
|
|
69
|
-
// ── First pass: diagnose ──
|
|
70
|
-
const diagReport = await runGSDDoctor(base, { fix: false });
|
|
71
|
-
const taskDoneMissing = diagReport.issues.filter(i => i.code === "task_done_missing_summary");
|
|
72
|
-
assertEq(taskDoneMissing.length, 3, "detects 3 tasks with task_done_missing_summary");
|
|
73
|
-
|
|
74
|
-
// ── Second pass: fix ──
|
|
75
|
-
const fixReport = await runGSDDoctor(base, { fix: true });
|
|
76
|
-
|
|
77
|
-
// Tasks should be unchecked in plan
|
|
78
|
-
const plan = readFileSync(join(sDir, "S01-PLAN.md"), "utf-8");
|
|
79
|
-
assertTrue(plan.includes("- [ ] **T01:"), "T01 is unchecked in plan after fix");
|
|
80
|
-
assertTrue(plan.includes("- [ ] **T02:"), "T02 is unchecked in plan after fix");
|
|
81
|
-
assertTrue(plan.includes("- [ ] **T03:"), "T03 is unchecked in plan after fix");
|
|
82
|
-
|
|
83
|
-
// CRITICAL: Slice must also be unchecked in roadmap to prevent infinite loop
|
|
84
|
-
const roadmap = readFileSync(join(mDir, "M001-ROADMAP.md"), "utf-8");
|
|
85
|
-
assertTrue(
|
|
86
|
-
roadmap.includes("- [ ] **S01:"),
|
|
87
|
-
"slice is unchecked in roadmap after task_done_missing_summary fix (prevents infinite loop)"
|
|
88
|
-
);
|
|
89
|
-
assertTrue(
|
|
90
|
-
!roadmap.includes("- [x] **S01:"),
|
|
91
|
-
"slice is NOT still [x] done in roadmap"
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
// ── Third pass: re-run doctor should NOT re-detect task_done_missing_summary ──
|
|
95
|
-
const rerunReport = await runGSDDoctor(base, { fix: false });
|
|
96
|
-
const rerunTaskDone = rerunReport.issues.filter(i => i.code === "task_done_missing_summary");
|
|
97
|
-
assertEq(rerunTaskDone.length, 0, "no task_done_missing_summary on re-run (no infinite loop)");
|
|
98
|
-
|
|
99
|
-
rmSync(base, { recursive: true, force: true });
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// ─── Partial fix: only some tasks missing summaries ───
|
|
103
|
-
console.log("\n=== #1850: partial — some tasks have summaries, some do not ===");
|
|
104
|
-
{
|
|
105
|
-
const base = mkdtempSync(join(tmpdir(), "gsd-doctor-1850-partial-"));
|
|
106
|
-
const gsd = join(base, ".gsd");
|
|
107
|
-
const mDir = join(gsd, "milestones", "M001");
|
|
108
|
-
const sDir = join(mDir, "slices", "S01");
|
|
109
|
-
const tDir = join(sDir, "tasks");
|
|
110
|
-
mkdirSync(tDir, { recursive: true });
|
|
111
|
-
|
|
112
|
-
writeFileSync(join(mDir, "M001-ROADMAP.md"), `# M001: Test Milestone
|
|
113
|
-
|
|
114
|
-
## Slices
|
|
115
|
-
- [x] **S01: Partial Slice** \`risk:low\` \`depends:[]\`
|
|
116
|
-
> After this: partial
|
|
117
|
-
`);
|
|
118
|
-
|
|
119
|
-
writeFileSync(join(sDir, "S01-PLAN.md"), `# S01: Partial Slice
|
|
120
|
-
|
|
121
|
-
**Goal:** Test partial
|
|
122
|
-
**Demo:** Works
|
|
123
|
-
|
|
124
|
-
## Tasks
|
|
125
|
-
- [x] **T01: Has summary** \`est:10m\`
|
|
126
|
-
This task has a summary.
|
|
127
|
-
- [x] **T02: Missing summary** \`est:10m\`
|
|
128
|
-
This task does not.
|
|
129
|
-
`);
|
|
130
|
-
|
|
131
|
-
// T01 has a summary, T02 does not
|
|
132
|
-
writeFileSync(join(tDir, "T01-SUMMARY.md"), `---
|
|
133
|
-
id: T01
|
|
134
|
-
parent: S01
|
|
135
|
-
milestone: M001
|
|
136
|
-
---
|
|
137
|
-
# T01: Has summary
|
|
138
|
-
**Done**
|
|
139
|
-
## What Happened
|
|
140
|
-
Done.
|
|
141
|
-
`);
|
|
142
|
-
|
|
143
|
-
writeFileSync(join(sDir, "S01-SUMMARY.md"), `---
|
|
144
|
-
id: S01
|
|
145
|
-
parent: M001
|
|
146
|
-
---
|
|
147
|
-
# S01: Partial
|
|
148
|
-
`);
|
|
149
|
-
|
|
150
|
-
writeFileSync(join(sDir, "S01-UAT.md"), `# S01 UAT
|
|
151
|
-
Done.
|
|
152
|
-
`);
|
|
153
|
-
|
|
154
|
-
const fixReport = await runGSDDoctor(base, { fix: true });
|
|
155
|
-
|
|
156
|
-
// T02 should be unchecked, T01 should stay checked
|
|
157
|
-
const plan = readFileSync(join(sDir, "S01-PLAN.md"), "utf-8");
|
|
158
|
-
assertTrue(plan.includes("- [x] **T01:"), "T01 stays checked (has summary)");
|
|
159
|
-
assertTrue(plan.includes("- [ ] **T02:"), "T02 is unchecked (missing summary)");
|
|
160
|
-
|
|
161
|
-
// Slice must be unchecked because not all tasks are done anymore
|
|
162
|
-
const roadmap = readFileSync(join(mDir, "M001-ROADMAP.md"), "utf-8");
|
|
163
|
-
assertTrue(
|
|
164
|
-
roadmap.includes("- [ ] **S01:"),
|
|
165
|
-
"slice is unchecked when any task is unchecked by task_done_missing_summary"
|
|
166
|
-
);
|
|
167
|
-
|
|
168
|
-
rmSync(base, { recursive: true, force: true });
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
report();
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
main();
|
|
@@ -1,474 +0,0 @@
|
|
|
1
|
-
import { validateTaskPlanContent, validateSlicePlanContent } from '../observability-validator.ts';
|
|
2
|
-
import { createTestContext } from './test-helpers.ts';
|
|
3
|
-
|
|
4
|
-
const { assertEq, assertTrue, report } = createTestContext();
|
|
5
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
6
|
-
// validateTaskPlanContent — empty/missing Steps section
|
|
7
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
8
|
-
|
|
9
|
-
console.log('\n=== validateTaskPlanContent: empty Steps section ===');
|
|
10
|
-
{
|
|
11
|
-
const content = `# T01: Some Task
|
|
12
|
-
|
|
13
|
-
## Description
|
|
14
|
-
|
|
15
|
-
Do something useful.
|
|
16
|
-
|
|
17
|
-
## Steps
|
|
18
|
-
|
|
19
|
-
## Verification
|
|
20
|
-
|
|
21
|
-
- Run the tests and confirm output.
|
|
22
|
-
`;
|
|
23
|
-
|
|
24
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
25
|
-
const stepsIssues = issues.filter(i => i.ruleId === 'empty_steps_section');
|
|
26
|
-
assertTrue(stepsIssues.length >= 1, 'empty Steps section produces empty_steps_section issue');
|
|
27
|
-
if (stepsIssues.length > 0) {
|
|
28
|
-
assertEq(stepsIssues[0].severity, 'warning', 'empty_steps_section severity is warning');
|
|
29
|
-
assertEq(stepsIssues[0].scope, 'task-plan', 'empty_steps_section scope is task-plan');
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
console.log('\n=== validateTaskPlanContent: missing Steps section entirely ===');
|
|
34
|
-
{
|
|
35
|
-
const content = `# T01: Some Task
|
|
36
|
-
|
|
37
|
-
## Description
|
|
38
|
-
|
|
39
|
-
Do something useful.
|
|
40
|
-
|
|
41
|
-
## Verification
|
|
42
|
-
|
|
43
|
-
- Run the tests.
|
|
44
|
-
`;
|
|
45
|
-
|
|
46
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
47
|
-
const stepsIssues = issues.filter(i => i.ruleId === 'empty_steps_section');
|
|
48
|
-
assertTrue(stepsIssues.length >= 1, 'missing Steps section produces empty_steps_section issue');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
52
|
-
// validateTaskPlanContent — placeholder-only Verification
|
|
53
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
54
|
-
|
|
55
|
-
console.log('\n=== validateTaskPlanContent: placeholder-only Verification ===');
|
|
56
|
-
{
|
|
57
|
-
const content = `# T01: Some Task
|
|
58
|
-
|
|
59
|
-
## Steps
|
|
60
|
-
|
|
61
|
-
1. Do the thing.
|
|
62
|
-
2. Do the other thing.
|
|
63
|
-
|
|
64
|
-
## Verification
|
|
65
|
-
|
|
66
|
-
- {{placeholder verification step}}
|
|
67
|
-
- {{another placeholder}}
|
|
68
|
-
`;
|
|
69
|
-
|
|
70
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
71
|
-
const verifyIssues = issues.filter(i => i.ruleId === 'placeholder_verification');
|
|
72
|
-
assertTrue(verifyIssues.length >= 1, 'placeholder-only Verification produces placeholder_verification issue');
|
|
73
|
-
if (verifyIssues.length > 0) {
|
|
74
|
-
assertEq(verifyIssues[0].severity, 'warning', 'placeholder_verification severity is warning');
|
|
75
|
-
assertEq(verifyIssues[0].scope, 'task-plan', 'placeholder_verification scope is task-plan');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
console.log('\n=== validateTaskPlanContent: Verification with only template text ===');
|
|
80
|
-
{
|
|
81
|
-
const content = `# T01: Some Task
|
|
82
|
-
|
|
83
|
-
## Steps
|
|
84
|
-
|
|
85
|
-
1. Do the thing.
|
|
86
|
-
|
|
87
|
-
## Verification
|
|
88
|
-
|
|
89
|
-
{{whatWasVerifiedAndHow — commands run, tests passed, behavior confirmed}}
|
|
90
|
-
`;
|
|
91
|
-
|
|
92
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
93
|
-
const verifyIssues = issues.filter(i => i.ruleId === 'placeholder_verification');
|
|
94
|
-
assertTrue(verifyIssues.length >= 1, 'template-text-only Verification produces placeholder_verification issue');
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
98
|
-
// validateSlicePlanContent — empty inline task entries
|
|
99
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
100
|
-
|
|
101
|
-
console.log('\n=== validateSlicePlanContent: empty inline task entries ===');
|
|
102
|
-
{
|
|
103
|
-
const content = `# S01: Some Slice
|
|
104
|
-
|
|
105
|
-
**Goal:** Build the thing.
|
|
106
|
-
**Demo:** It works.
|
|
107
|
-
|
|
108
|
-
## Tasks
|
|
109
|
-
|
|
110
|
-
- [ ] **T01: First Task** \`est:20m\`
|
|
111
|
-
|
|
112
|
-
- [ ] **T02: Second Task** \`est:15m\`
|
|
113
|
-
|
|
114
|
-
## Verification
|
|
115
|
-
|
|
116
|
-
- Run the tests.
|
|
117
|
-
`;
|
|
118
|
-
|
|
119
|
-
const issues = validateSlicePlanContent('S01-PLAN.md', content);
|
|
120
|
-
const emptyTaskIssues = issues.filter(i => i.ruleId === 'empty_task_entry');
|
|
121
|
-
assertTrue(emptyTaskIssues.length >= 1, 'task entries with no description produce empty_task_entry issue');
|
|
122
|
-
if (emptyTaskIssues.length > 0) {
|
|
123
|
-
assertEq(emptyTaskIssues[0].severity, 'warning', 'empty_task_entry severity is warning');
|
|
124
|
-
assertEq(emptyTaskIssues[0].scope, 'slice-plan', 'empty_task_entry scope is slice-plan');
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
console.log('\n=== validateSlicePlanContent: task entries with content are fine ===');
|
|
129
|
-
{
|
|
130
|
-
const content = `# S01: Some Slice
|
|
131
|
-
|
|
132
|
-
**Goal:** Build the thing.
|
|
133
|
-
**Demo:** It works.
|
|
134
|
-
|
|
135
|
-
## Tasks
|
|
136
|
-
|
|
137
|
-
- [ ] **T01: First Task** \`est:20m\`
|
|
138
|
-
- Why: Because it matters.
|
|
139
|
-
- Files: \`src/index.ts\`
|
|
140
|
-
- Do: Implement the feature.
|
|
141
|
-
|
|
142
|
-
- [ ] **T02: Second Task** \`est:15m\`
|
|
143
|
-
- Why: Also important.
|
|
144
|
-
- Do: Add tests.
|
|
145
|
-
|
|
146
|
-
## Verification
|
|
147
|
-
|
|
148
|
-
- Run the tests.
|
|
149
|
-
`;
|
|
150
|
-
|
|
151
|
-
const issues = validateSlicePlanContent('S01-PLAN.md', content);
|
|
152
|
-
const emptyTaskIssues = issues.filter(i => i.ruleId === 'empty_task_entry');
|
|
153
|
-
assertEq(emptyTaskIssues.length, 0, 'task entries with description content produce no empty_task_entry issues');
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
157
|
-
// validateTaskPlanContent — scope_estimate over threshold
|
|
158
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
159
|
-
|
|
160
|
-
console.log('\n=== validateTaskPlanContent: scope_estimate over threshold ===');
|
|
161
|
-
{
|
|
162
|
-
const content = `---
|
|
163
|
-
estimated_steps: 12
|
|
164
|
-
estimated_files: 15
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
# T01: Big Task
|
|
168
|
-
|
|
169
|
-
## Steps
|
|
170
|
-
|
|
171
|
-
1. Step one.
|
|
172
|
-
2. Step two.
|
|
173
|
-
3. Step three.
|
|
174
|
-
|
|
175
|
-
## Verification
|
|
176
|
-
|
|
177
|
-
- Check it works.
|
|
178
|
-
`;
|
|
179
|
-
|
|
180
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
181
|
-
const stepsOverIssues = issues.filter(i => i.ruleId === 'scope_estimate_steps_high');
|
|
182
|
-
const filesOverIssues = issues.filter(i => i.ruleId === 'scope_estimate_files_high');
|
|
183
|
-
assertTrue(stepsOverIssues.length >= 1, 'estimated_steps=12 (>=10) produces scope_estimate_steps_high issue');
|
|
184
|
-
assertTrue(filesOverIssues.length >= 1, 'estimated_files=15 (>=12) produces scope_estimate_files_high issue');
|
|
185
|
-
if (stepsOverIssues.length > 0) {
|
|
186
|
-
assertEq(stepsOverIssues[0].severity, 'warning', 'scope_estimate_steps_high severity is warning');
|
|
187
|
-
assertEq(stepsOverIssues[0].scope, 'task-plan', 'scope_estimate_steps_high scope is task-plan');
|
|
188
|
-
}
|
|
189
|
-
if (filesOverIssues.length > 0) {
|
|
190
|
-
assertEq(filesOverIssues[0].severity, 'warning', 'scope_estimate_files_high severity is warning');
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
195
|
-
// validateTaskPlanContent — scope_estimate within limits
|
|
196
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
197
|
-
|
|
198
|
-
console.log('\n=== validateTaskPlanContent: scope_estimate within limits ===');
|
|
199
|
-
{
|
|
200
|
-
const content = `---
|
|
201
|
-
estimated_steps: 4
|
|
202
|
-
estimated_files: 6
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
# T01: Small Task
|
|
206
|
-
|
|
207
|
-
## Steps
|
|
208
|
-
|
|
209
|
-
1. Do the thing.
|
|
210
|
-
|
|
211
|
-
## Verification
|
|
212
|
-
|
|
213
|
-
- Verify it works.
|
|
214
|
-
`;
|
|
215
|
-
|
|
216
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
217
|
-
const scopeIssues = issues.filter(i =>
|
|
218
|
-
i.ruleId === 'scope_estimate_steps_high' || i.ruleId === 'scope_estimate_files_high'
|
|
219
|
-
);
|
|
220
|
-
assertEq(scopeIssues.length, 0, 'scope_estimate within limits produces no scope issues');
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
224
|
-
// validateTaskPlanContent — missing scope_estimate (no warning)
|
|
225
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
226
|
-
|
|
227
|
-
console.log('\n=== validateTaskPlanContent: missing scope_estimate ===');
|
|
228
|
-
{
|
|
229
|
-
const content = `# T01: No Frontmatter Task
|
|
230
|
-
|
|
231
|
-
## Steps
|
|
232
|
-
|
|
233
|
-
1. Do the thing.
|
|
234
|
-
|
|
235
|
-
## Verification
|
|
236
|
-
|
|
237
|
-
- Verify it works.
|
|
238
|
-
`;
|
|
239
|
-
|
|
240
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
241
|
-
const scopeIssues = issues.filter(i =>
|
|
242
|
-
i.ruleId === 'scope_estimate_steps_high' || i.ruleId === 'scope_estimate_files_high'
|
|
243
|
-
);
|
|
244
|
-
assertEq(scopeIssues.length, 0, 'missing scope_estimate produces no scope issues');
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
console.log('\n=== validateTaskPlanContent: frontmatter without scope keys ===');
|
|
248
|
-
{
|
|
249
|
-
const content = `---
|
|
250
|
-
id: T01
|
|
251
|
-
parent: S01
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
# T01: Task With Other Frontmatter
|
|
255
|
-
|
|
256
|
-
## Steps
|
|
257
|
-
|
|
258
|
-
1. Do the thing.
|
|
259
|
-
|
|
260
|
-
## Verification
|
|
261
|
-
|
|
262
|
-
- Verify it works.
|
|
263
|
-
`;
|
|
264
|
-
|
|
265
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
266
|
-
const scopeIssues = issues.filter(i =>
|
|
267
|
-
i.ruleId === 'scope_estimate_steps_high' || i.ruleId === 'scope_estimate_files_high'
|
|
268
|
-
);
|
|
269
|
-
assertEq(scopeIssues.length, 0, 'frontmatter without scope keys produces no scope issues');
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
273
|
-
// Clean plans — no false positives
|
|
274
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
275
|
-
|
|
276
|
-
console.log('\n=== Clean task plan: no plan-quality issues ===');
|
|
277
|
-
{
|
|
278
|
-
const content = `---
|
|
279
|
-
estimated_steps: 5
|
|
280
|
-
estimated_files: 3
|
|
281
|
-
---
|
|
282
|
-
|
|
283
|
-
# T01: Well-Formed Task
|
|
284
|
-
|
|
285
|
-
## Description
|
|
286
|
-
|
|
287
|
-
A real task with real content.
|
|
288
|
-
|
|
289
|
-
## Steps
|
|
290
|
-
|
|
291
|
-
1. Read the input files.
|
|
292
|
-
2. Parse the configuration.
|
|
293
|
-
3. Transform the data.
|
|
294
|
-
4. Write the output.
|
|
295
|
-
5. Verify the results.
|
|
296
|
-
|
|
297
|
-
## Must-Haves
|
|
298
|
-
|
|
299
|
-
- [ ] Output file is valid JSON
|
|
300
|
-
- [ ] All input records are processed
|
|
301
|
-
|
|
302
|
-
## Verification
|
|
303
|
-
|
|
304
|
-
- Run \`node --test tests/transform.test.ts\` — all assertions pass
|
|
305
|
-
- Manually inspect output.json for correct structure
|
|
306
|
-
|
|
307
|
-
## Observability Impact
|
|
308
|
-
|
|
309
|
-
- Signals added/changed: structured error log on parse failure
|
|
310
|
-
- How a future agent inspects this: check stderr for JSON parse errors
|
|
311
|
-
- Failure state exposed: exit code 1 + error message on invalid input
|
|
312
|
-
`;
|
|
313
|
-
|
|
314
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
315
|
-
const planQualityIssues = issues.filter(i =>
|
|
316
|
-
i.ruleId === 'empty_steps_section' ||
|
|
317
|
-
i.ruleId === 'placeholder_verification' ||
|
|
318
|
-
i.ruleId === 'scope_estimate_steps_high' ||
|
|
319
|
-
i.ruleId === 'scope_estimate_files_high'
|
|
320
|
-
);
|
|
321
|
-
assertEq(planQualityIssues.length, 0, 'clean task plan produces no plan-quality issues');
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
console.log('\n=== Clean slice plan: no plan-quality issues ===');
|
|
325
|
-
{
|
|
326
|
-
const content = `# S01: Well-Formed Slice
|
|
327
|
-
|
|
328
|
-
**Goal:** Build a complete feature.
|
|
329
|
-
**Demo:** Run the test suite and see all green.
|
|
330
|
-
|
|
331
|
-
## Tasks
|
|
332
|
-
|
|
333
|
-
- [ ] **T01: Create tests** \`est:20m\`
|
|
334
|
-
- Why: Tests define the contract before implementation.
|
|
335
|
-
- Files: \`tests/feature.test.ts\`
|
|
336
|
-
- Do: Write comprehensive test assertions.
|
|
337
|
-
- Verify: Test file runs without syntax errors.
|
|
338
|
-
|
|
339
|
-
- [ ] **T02: Implement feature** \`est:30m\`
|
|
340
|
-
- Why: Core implementation.
|
|
341
|
-
- Files: \`src/feature.ts\`
|
|
342
|
-
- Do: Build the feature to make tests pass.
|
|
343
|
-
- Verify: All tests pass.
|
|
344
|
-
|
|
345
|
-
## Verification
|
|
346
|
-
|
|
347
|
-
- \`node --test tests/feature.test.ts\` — all assertions pass
|
|
348
|
-
- Check error output for diagnostic messages
|
|
349
|
-
|
|
350
|
-
## Observability / Diagnostics
|
|
351
|
-
|
|
352
|
-
- Runtime signals: structured error objects with error codes
|
|
353
|
-
- Inspection surfaces: test output shows pass/fail counts
|
|
354
|
-
- Failure visibility: exit code 1 on failure with descriptive message
|
|
355
|
-
- Redaction constraints: none
|
|
356
|
-
`;
|
|
357
|
-
|
|
358
|
-
const issues = validateSlicePlanContent('S01-PLAN.md', content);
|
|
359
|
-
const planQualityIssues = issues.filter(i => i.ruleId === 'empty_task_entry');
|
|
360
|
-
assertEq(planQualityIssues.length, 0, 'clean slice plan produces no empty_task_entry issues');
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
364
|
-
// validateTaskPlanContent — missing output file paths
|
|
365
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
366
|
-
|
|
367
|
-
console.log('\n=== validateTaskPlanContent: missing output file paths ===');
|
|
368
|
-
{
|
|
369
|
-
const content = `# T01: Some Task
|
|
370
|
-
|
|
371
|
-
## Description
|
|
372
|
-
|
|
373
|
-
Do something.
|
|
374
|
-
|
|
375
|
-
## Steps
|
|
376
|
-
|
|
377
|
-
1. Do the thing
|
|
378
|
-
|
|
379
|
-
## Verification
|
|
380
|
-
|
|
381
|
-
- Check it works
|
|
382
|
-
|
|
383
|
-
## Expected Output
|
|
384
|
-
|
|
385
|
-
This task produces the main output.
|
|
386
|
-
`;
|
|
387
|
-
|
|
388
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
389
|
-
const outputIssues = issues.filter(i => i.ruleId === 'missing_output_file_paths');
|
|
390
|
-
assertTrue(outputIssues.length >= 1, 'Expected Output without file paths triggers missing_output_file_paths');
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
console.log('\n=== validateTaskPlanContent: valid output file paths ===');
|
|
394
|
-
{
|
|
395
|
-
const content = `# T01: Some Task
|
|
396
|
-
|
|
397
|
-
## Description
|
|
398
|
-
|
|
399
|
-
Do something.
|
|
400
|
-
|
|
401
|
-
## Steps
|
|
402
|
-
|
|
403
|
-
1. Do the thing
|
|
404
|
-
|
|
405
|
-
## Verification
|
|
406
|
-
|
|
407
|
-
- Check it works
|
|
408
|
-
|
|
409
|
-
## Expected Output
|
|
410
|
-
|
|
411
|
-
- \`src/types.ts\` — New type definitions
|
|
412
|
-
`;
|
|
413
|
-
|
|
414
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
415
|
-
const outputIssues = issues.filter(i => i.ruleId === 'missing_output_file_paths');
|
|
416
|
-
assertEq(outputIssues.length, 0, 'Expected Output with file paths does not trigger warning');
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
console.log('\n=== validateTaskPlanContent: missing input file paths (info severity) ===');
|
|
420
|
-
{
|
|
421
|
-
const content = `# T01: Some Task
|
|
422
|
-
|
|
423
|
-
## Description
|
|
424
|
-
|
|
425
|
-
Do something.
|
|
426
|
-
|
|
427
|
-
## Steps
|
|
428
|
-
|
|
429
|
-
1. Do the thing
|
|
430
|
-
|
|
431
|
-
## Verification
|
|
432
|
-
|
|
433
|
-
- Check it works
|
|
434
|
-
|
|
435
|
-
## Inputs
|
|
436
|
-
|
|
437
|
-
Prior task summary insights about the architecture.
|
|
438
|
-
|
|
439
|
-
## Expected Output
|
|
440
|
-
|
|
441
|
-
- \`src/output.ts\` — Output file
|
|
442
|
-
`;
|
|
443
|
-
|
|
444
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
445
|
-
const inputIssues = issues.filter(i => i.ruleId === 'missing_input_file_paths');
|
|
446
|
-
assertTrue(inputIssues.length >= 1, 'Inputs without file paths triggers missing_input_file_paths');
|
|
447
|
-
if (inputIssues.length > 0) {
|
|
448
|
-
assertEq(inputIssues[0].severity, 'info', 'missing_input_file_paths is info severity (not warning)');
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
console.log('\n=== validateTaskPlanContent: no Expected Output section at all ===');
|
|
453
|
-
{
|
|
454
|
-
const content = `# T01: Some Task
|
|
455
|
-
|
|
456
|
-
## Description
|
|
457
|
-
|
|
458
|
-
Do something.
|
|
459
|
-
|
|
460
|
-
## Steps
|
|
461
|
-
|
|
462
|
-
1. Do the thing
|
|
463
|
-
|
|
464
|
-
## Verification
|
|
465
|
-
|
|
466
|
-
- Check it works
|
|
467
|
-
`;
|
|
468
|
-
|
|
469
|
-
const issues = validateTaskPlanContent('T01-PLAN.md', content);
|
|
470
|
-
const outputIssues = issues.filter(i => i.ruleId === 'missing_output_file_paths');
|
|
471
|
-
assertTrue(outputIssues.length >= 1, 'Missing Expected Output section triggers missing_output_file_paths');
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
report();
|
|
File without changes
|