gsd-pi 2.45.0-dev.fdcf73c → 2.46.0-dev.cc9d310
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/resources/extensions/gsd/auto/phases.js +14 -35
- package/dist/resources/extensions/gsd/auto/session.js +0 -11
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +112 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +25 -96
- package/dist/resources/extensions/gsd/auto-start.js +2 -3
- package/dist/resources/extensions/gsd/auto.js +8 -52
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -0
- package/dist/resources/extensions/gsd/commands/context.js +0 -4
- package/dist/resources/extensions/gsd/commands/handlers/parallel.js +1 -1
- package/dist/resources/extensions/gsd/crash-recovery.js +2 -4
- package/dist/resources/extensions/gsd/dashboard-overlay.js +0 -44
- package/dist/resources/extensions/gsd/doctor-checks.js +166 -1
- package/dist/resources/extensions/gsd/doctor.js +3 -1
- package/dist/resources/extensions/gsd/gsd-db.js +11 -2
- package/dist/resources/extensions/gsd/guided-flow.js +1 -2
- package/dist/resources/extensions/gsd/parallel-merge.js +1 -1
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +5 -18
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +10 -23
- package/dist/resources/extensions/gsd/prompts/discuss.md +2 -2
- package/dist/resources/extensions/gsd/prompts/execute-task.md +5 -15
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-research-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -2
- package/dist/resources/extensions/gsd/prompts/queue.md +2 -2
- package/dist/resources/extensions/gsd/prompts/quick-task.md +2 -0
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
- package/dist/resources/extensions/gsd/prompts/research-slice.md +3 -3
- package/dist/resources/extensions/gsd/prompts/rethink.md +7 -2
- package/dist/resources/extensions/gsd/prompts/system.md +1 -1
- package/dist/resources/extensions/gsd/session-lock.js +1 -3
- package/dist/resources/extensions/gsd/state.js +7 -0
- package/dist/resources/extensions/gsd/sync-lock.js +89 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +58 -12
- package/dist/resources/extensions/gsd/tools/complete-slice.js +56 -11
- package/dist/resources/extensions/gsd/tools/complete-task.js +50 -2
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -1
- package/dist/resources/extensions/gsd/tools/plan-slice.js +30 -1
- package/dist/resources/extensions/gsd/tools/plan-task.js +27 -1
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +32 -2
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +86 -0
- package/dist/resources/extensions/gsd/tools/reopen-task.js +90 -0
- package/dist/resources/extensions/gsd/tools/replan-slice.js +32 -2
- package/dist/resources/extensions/gsd/unit-ownership.js +85 -0
- package/dist/resources/extensions/gsd/workflow-events.js +102 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +56 -1
- package/dist/resources/extensions/gsd/workflow-manifest.js +244 -0
- package/dist/resources/extensions/gsd/workflow-migration.js +280 -0
- package/dist/resources/extensions/gsd/workflow-projections.js +373 -0
- package/dist/resources/extensions/gsd/workflow-reconcile.js +411 -0
- package/dist/resources/extensions/gsd/write-intercept.js +84 -0
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- 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.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
- 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/package.json +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -19
- package/src/resources/extensions/gsd/auto/phases.ts +11 -35
- package/src/resources/extensions/gsd/auto/session.ts +0 -18
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +131 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +0 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +25 -106
- package/src/resources/extensions/gsd/auto-start.ts +1 -3
- package/src/resources/extensions/gsd/auto.ts +4 -80
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
- package/src/resources/extensions/gsd/commands/context.ts +0 -5
- package/src/resources/extensions/gsd/commands/handlers/parallel.ts +1 -1
- package/src/resources/extensions/gsd/crash-recovery.ts +1 -5
- package/src/resources/extensions/gsd/dashboard-overlay.ts +0 -50
- package/src/resources/extensions/gsd/doctor-checks.ts +179 -1
- package/src/resources/extensions/gsd/doctor-types.ts +7 -1
- package/src/resources/extensions/gsd/doctor.ts +4 -1
- package/src/resources/extensions/gsd/gsd-db.ts +11 -2
- package/src/resources/extensions/gsd/guided-flow.ts +1 -2
- package/src/resources/extensions/gsd/parallel-merge.ts +1 -1
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +5 -21
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +10 -23
- package/src/resources/extensions/gsd/prompts/discuss.md +2 -2
- package/src/resources/extensions/gsd/prompts/execute-task.md +5 -15
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-research-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -2
- package/src/resources/extensions/gsd/prompts/queue.md +2 -2
- package/src/resources/extensions/gsd/prompts/quick-task.md +2 -0
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
- package/src/resources/extensions/gsd/prompts/research-slice.md +3 -3
- package/src/resources/extensions/gsd/prompts/rethink.md +7 -2
- package/src/resources/extensions/gsd/prompts/system.md +1 -1
- package/src/resources/extensions/gsd/session-lock.ts +0 -4
- package/src/resources/extensions/gsd/state.ts +8 -0
- package/src/resources/extensions/gsd/sync-lock.ts +94 -0
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +5 -13
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +6 -10
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +264 -228
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +317 -250
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +2 -8
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration-proof.test.ts +15 -24
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -3
- 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/milestone-transition-state-rebuild.test.ts +8 -9
- package/src/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -7
- package/src/resources/extensions/gsd/tests/parallel-merge.test.ts +7 -8
- package/src/resources/extensions/gsd/tests/parallel-orchestration.test.ts +20 -24
- package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -2
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +9 -6
- package/src/resources/extensions/gsd/tests/post-mutation-hook.test.ts +171 -0
- package/src/resources/extensions/gsd/tests/projection-regression.test.ts +174 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +15 -14
- package/src/resources/extensions/gsd/tests/reopen-slice.test.ts +155 -0
- package/src/resources/extensions/gsd/tests/reopen-task.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +1 -4
- package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +2 -3
- package/src/resources/extensions/gsd/tests/sync-lock.test.ts +122 -0
- package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +175 -0
- package/src/resources/extensions/gsd/tests/workflow-events.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +171 -0
- package/src/resources/extensions/gsd/tests/write-intercept.test.ts +76 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +70 -13
- package/src/resources/extensions/gsd/tools/complete-slice.ts +68 -11
- package/src/resources/extensions/gsd/tools/complete-task.ts +63 -1
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +45 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +38 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +35 -1
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +39 -1
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +125 -0
- package/src/resources/extensions/gsd/tools/reopen-task.ts +129 -0
- package/src/resources/extensions/gsd/tools/replan-slice.ts +38 -1
- package/src/resources/extensions/gsd/types.ts +8 -0
- package/src/resources/extensions/gsd/unit-ownership.ts +104 -0
- package/src/resources/extensions/gsd/workflow-events.ts +154 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +51 -1
- package/src/resources/extensions/gsd/workflow-manifest.ts +334 -0
- package/src/resources/extensions/gsd/workflow-migration.ts +345 -0
- package/src/resources/extensions/gsd/workflow-projections.ts +425 -0
- package/src/resources/extensions/gsd/workflow-reconcile.ts +503 -0
- package/src/resources/extensions/gsd/write-intercept.ts +90 -0
- /package/dist/web/standalone/.next/static/{zWYDSwB-terOjfhmWzqk1 → ZIDqryyYDroh_8AnaAOSG}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{zWYDSwB-terOjfhmWzqk1 → ZIDqryyYDroh_8AnaAOSG}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--ZIDqryyYDroh_8AnaAOSG--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="preload" href="/_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/de70bee13400563f.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/dd4ae3f58ac9b600.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-0a4cd455ec4197d2.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-fdab67f7802d7832.js" async=""></script><script src="/_next/static/chunks/4986-c2fc8845ce785303.js" async=""></script><script src="/_next/static/chunks/app/layout-a16c7a7ecdf0c2cf.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>GSD</title><meta name="description" content="The evolution of Get Shit Done — now a real coding agent. One command. Walk away. Come back to a built project."/><meta name="application-name" content="GSD"/><link rel="icon" href="/icon-light-32x32.png" media="(prefers-color-scheme: light)"/><link rel="icon" href="/icon-dark-32x32.png" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/icon.svg" type="image/svg+xml"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_188709 __variable_9a8899 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/webpack-0a4cd455ec4197d2.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[21942,[\"4986\",\"static/chunks/4986-c2fc8845ce785303.js\",\"7177\",\"static/chunks/app/layout-a16c7a7ecdf0c2cf.js\"],\"ThemeProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[61549,[\"4986\",\"static/chunks/4986-c2fc8845ce785303.js\",\"7177\",\"static/chunks/app/layout-a16c7a7ecdf0c2cf.js\"],\"Toaster\"]\n6:I[90484,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[90484,[],\"ViewportBoundary\"]\nb:I[90484,[],\"MetadataBoundary\"]\nd:I[27123,[],\"\"]\n:HL[\"/_next/static/media/4cf2300e9c8272f7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/93f479601ee12b01-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/de70bee13400563f.css\",\"style\"]\n:HL[\"/_next/static/css/dd4ae3f58ac9b600.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"ZIDqryyYDroh_8AnaAOSG\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/de70bee13400563f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/dd4ae3f58ac9b600.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_188709 __variable_9a8899 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"children\":[[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L5\",null,{\"position\":\"bottom-right\"}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[86869,[],\"IconMark\"]\n8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"GSD\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"The evolution of Get Shit Done — now a real coding agent. One command. Walk away. Come back to a built project.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"GSD\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon-light-32x32.png\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/icon-dark-32x32.png\",\"media\":\"(prefers-color-scheme: dark)\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/icon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$Le\",\"6\",{}]]\n"])</script></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-0a4cd455ec4197d2.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
1
|
+
<!DOCTYPE html><!--ZIDqryyYDroh_8AnaAOSG--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-0a4cd455ec4197d2.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-fdab67f7802d7832.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-0a4cd455ec4197d2.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"ZIDqryyYDroh_8AnaAOSG\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"c3ViPSF6Rf1ST80SNuYZl3Lg/7O6Jd3a9lPVu9BAxP0="}
|
package/package.json
CHANGED
package/pkg/package.json
CHANGED
|
@@ -80,7 +80,6 @@ export interface LoopDeps {
|
|
|
80
80
|
basePath: string,
|
|
81
81
|
unitType: string,
|
|
82
82
|
unitId: string,
|
|
83
|
-
completedUnits: number,
|
|
84
83
|
sessionFile?: string,
|
|
85
84
|
) => void;
|
|
86
85
|
handleLostSessionLock: (
|
|
@@ -179,29 +178,11 @@ export interface LoopDeps {
|
|
|
179
178
|
startedAt: number,
|
|
180
179
|
opts?: CloseoutOptions & Record<string, unknown>,
|
|
181
180
|
) => Promise<void>;
|
|
182
|
-
verifyExpectedArtifact: (
|
|
183
|
-
unitType: string,
|
|
184
|
-
unitId: string,
|
|
185
|
-
basePath: string,
|
|
186
|
-
) => boolean;
|
|
187
|
-
clearUnitRuntimeRecord: (
|
|
188
|
-
basePath: string,
|
|
189
|
-
unitType: string,
|
|
190
|
-
unitId: string,
|
|
191
|
-
) => void;
|
|
192
|
-
writeUnitRuntimeRecord: (
|
|
193
|
-
basePath: string,
|
|
194
|
-
unitType: string,
|
|
195
|
-
unitId: string,
|
|
196
|
-
startedAt: number,
|
|
197
|
-
record: Record<string, unknown>,
|
|
198
|
-
) => void;
|
|
199
181
|
recordOutcome: (unitType: string, tier: string, success: boolean) => void;
|
|
200
182
|
writeLock: (
|
|
201
183
|
lockBase: string,
|
|
202
184
|
unitType: string,
|
|
203
185
|
unitId: string,
|
|
204
|
-
completedCount: number,
|
|
205
186
|
sessionFile?: string,
|
|
206
187
|
) => void;
|
|
207
188
|
captureAvailableSkills: () => void;
|
|
@@ -24,13 +24,15 @@ import {
|
|
|
24
24
|
import { detectStuck } from "./detect-stuck.js";
|
|
25
25
|
import { runUnit } from "./run-unit.js";
|
|
26
26
|
import { debugLog } from "../debug-logger.js";
|
|
27
|
-
import { gsdRoot } from "../paths.js";
|
|
28
|
-
import { atomicWriteSync } from "../atomic-write.js";
|
|
29
27
|
import { PROJECT_FILES } from "../detection.js";
|
|
30
28
|
import { MergeConflictError } from "../git-service.js";
|
|
31
29
|
import { join } from "node:path";
|
|
32
30
|
import { existsSync, cpSync } from "node:fs";
|
|
33
31
|
import { logWarning, logError } from "../workflow-logger.js";
|
|
32
|
+
import { gsdRoot } from "../paths.js";
|
|
33
|
+
import { atomicWriteSync } from "../atomic-write.js";
|
|
34
|
+
import { verifyExpectedArtifact } from "../auto-recovery.js";
|
|
35
|
+
import { writeUnitRuntimeRecord } from "../unit-runtime.js";
|
|
34
36
|
|
|
35
37
|
// ─── generateMilestoneReport ──────────────────────────────────────────────────
|
|
36
38
|
|
|
@@ -277,11 +279,7 @@ export async function runPreDispatch(
|
|
|
277
279
|
.map((m: { id: string }) => m.id);
|
|
278
280
|
deps.pruneQueueOrder(s.basePath, pendingIds);
|
|
279
281
|
|
|
280
|
-
// Reset completed-units tracking for the new milestone — stale entries
|
|
281
|
-
// from the previous milestone cause the dispatch loop to skip units
|
|
282
|
-
// that haven't actually been completed in the new milestone's context.
|
|
283
282
|
// Archive the old completed-units.json instead of wiping it (#2313).
|
|
284
|
-
s.completedUnits = [];
|
|
285
283
|
try {
|
|
286
284
|
const completedKeysPath = join(gsdRoot(s.basePath), "completed-units.json");
|
|
287
285
|
if (existsSync(completedKeysPath) && s.currentMilestoneId) {
|
|
@@ -540,7 +538,7 @@ export async function runDispatch(
|
|
|
540
538
|
if (loopState.stuckRecoveryAttempts === 0) {
|
|
541
539
|
// Level 1: try verifying the artifact, then cache invalidation + retry
|
|
542
540
|
loopState.stuckRecoveryAttempts++;
|
|
543
|
-
const artifactExists =
|
|
541
|
+
const artifactExists = verifyExpectedArtifact(
|
|
544
542
|
unitType,
|
|
545
543
|
unitId,
|
|
546
544
|
s.basePath,
|
|
@@ -849,7 +847,7 @@ export async function runUnitPhase(
|
|
|
849
847
|
const unitStartSeq = ic.nextSeq();
|
|
850
848
|
deps.emitJournalEvent({ ts: new Date().toISOString(), flowId: ic.flowId, seq: unitStartSeq, eventType: "unit-start", data: { unitType, unitId } });
|
|
851
849
|
deps.captureAvailableSkills();
|
|
852
|
-
|
|
850
|
+
writeUnitRuntimeRecord(
|
|
853
851
|
s.basePath,
|
|
854
852
|
unitType,
|
|
855
853
|
unitId,
|
|
@@ -1001,7 +999,6 @@ export async function runUnitPhase(
|
|
|
1001
999
|
deps.lockBase(),
|
|
1002
1000
|
unitType,
|
|
1003
1001
|
unitId,
|
|
1004
|
-
s.completedUnits.length,
|
|
1005
1002
|
);
|
|
1006
1003
|
|
|
1007
1004
|
debugLog("autoLoop", {
|
|
@@ -1032,14 +1029,12 @@ export async function runUnitPhase(
|
|
|
1032
1029
|
deps.lockBase(),
|
|
1033
1030
|
unitType,
|
|
1034
1031
|
unitId,
|
|
1035
|
-
s.completedUnits.length,
|
|
1036
1032
|
sessionFile,
|
|
1037
1033
|
);
|
|
1038
1034
|
deps.writeLock(
|
|
1039
1035
|
deps.lockBase(),
|
|
1040
1036
|
unitType,
|
|
1041
1037
|
unitId,
|
|
1042
|
-
s.completedUnits.length,
|
|
1043
1038
|
sessionFile,
|
|
1044
1039
|
);
|
|
1045
1040
|
|
|
@@ -1103,8 +1098,8 @@ export async function runUnitPhase(
|
|
|
1103
1098
|
`${unitType} ${unitId} completed with 0 tool calls — hallucinated summary, will retry`,
|
|
1104
1099
|
"warning",
|
|
1105
1100
|
);
|
|
1106
|
-
//
|
|
1107
|
-
//
|
|
1101
|
+
// Fall through to next iteration where dispatch will re-derive
|
|
1102
|
+
// and re-dispatch this task.
|
|
1108
1103
|
return { action: "next", data: { unitStartedAt: s.currentUnit.startedAt } };
|
|
1109
1104
|
}
|
|
1110
1105
|
}
|
|
@@ -1121,27 +1116,8 @@ export async function runUnitPhase(
|
|
|
1121
1116
|
const skipArtifactVerification = unitType.startsWith("hook/") || unitType === "custom-step";
|
|
1122
1117
|
const artifactVerified =
|
|
1123
1118
|
skipArtifactVerification ||
|
|
1124
|
-
|
|
1119
|
+
verifyExpectedArtifact(unitType, unitId, s.basePath);
|
|
1125
1120
|
if (artifactVerified) {
|
|
1126
|
-
s.completedUnits.push({
|
|
1127
|
-
type: unitType,
|
|
1128
|
-
id: unitId,
|
|
1129
|
-
startedAt: s.currentUnit.startedAt,
|
|
1130
|
-
finishedAt: Date.now(),
|
|
1131
|
-
});
|
|
1132
|
-
if (s.completedUnits.length > 200) {
|
|
1133
|
-
s.completedUnits = s.completedUnits.slice(-200);
|
|
1134
|
-
}
|
|
1135
|
-
// Flush completed-units to disk so the record survives crashes
|
|
1136
|
-
try {
|
|
1137
|
-
const completedKeysPath = join(gsdRoot(s.basePath), "completed-units.json");
|
|
1138
|
-
const keys = s.completedUnits.map((u) => `${u.type}/${u.id}`);
|
|
1139
|
-
atomicWriteSync(completedKeysPath, JSON.stringify(keys, null, 2));
|
|
1140
|
-
} catch (e) {
|
|
1141
|
-
logWarning("engine", "Failed to flush completed-units to disk", { error: String(e) });
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
deps.clearUnitRuntimeRecord(s.basePath, unitType, unitId);
|
|
1145
1121
|
s.unitDispatchCount.delete(`${unitType}/${unitId}`);
|
|
1146
1122
|
s.unitRecoveryCount.delete(`${unitType}/${unitId}`);
|
|
1147
1123
|
}
|
|
@@ -1186,8 +1162,8 @@ export async function runFinalize(
|
|
|
1186
1162
|
// Sidecar items use lightweight pre-verification opts
|
|
1187
1163
|
const preVerificationOpts: PreVerificationOpts | undefined = sidecarItem
|
|
1188
1164
|
? sidecarItem.kind === "hook"
|
|
1189
|
-
? { skipSettleDelay: true,
|
|
1190
|
-
: { skipSettleDelay: true
|
|
1165
|
+
? { skipSettleDelay: true, skipWorktreeSync: true }
|
|
1166
|
+
: { skipSettleDelay: true }
|
|
1191
1167
|
: undefined;
|
|
1192
1168
|
const preResult = await deps.postUnitPreVerification(postUnitCtx, preVerificationOpts);
|
|
1193
1169
|
if (preResult === "dispatched") {
|
|
@@ -23,13 +23,6 @@ import type { BudgetAlertLevel } from "../auto-budget.js";
|
|
|
23
23
|
|
|
24
24
|
// ─── Exported Types ──────────────────────────────────────────────────────────
|
|
25
25
|
|
|
26
|
-
export interface CompletedUnit {
|
|
27
|
-
type: string;
|
|
28
|
-
id: string;
|
|
29
|
-
startedAt: number;
|
|
30
|
-
finishedAt: number;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
26
|
export interface CurrentUnit {
|
|
34
27
|
type: string;
|
|
35
28
|
id: string;
|
|
@@ -106,7 +99,6 @@ export class AutoSession {
|
|
|
106
99
|
// ── Current unit ─────────────────────────────────────────────────────────
|
|
107
100
|
currentUnit: CurrentUnit | null = null;
|
|
108
101
|
currentUnitRouting: UnitRouting | null = null;
|
|
109
|
-
completedUnits: CompletedUnit[] = [];
|
|
110
102
|
currentMilestoneId: string | null = null;
|
|
111
103
|
|
|
112
104
|
// ── Model state ──────────────────────────────────────────────────────────
|
|
@@ -160,14 +152,6 @@ export class AutoSession {
|
|
|
160
152
|
return this.originalBasePath || this.basePath;
|
|
161
153
|
}
|
|
162
154
|
|
|
163
|
-
completeCurrentUnit(): CompletedUnit | null {
|
|
164
|
-
if (!this.currentUnit) return null;
|
|
165
|
-
const done: CompletedUnit = { ...this.currentUnit, finishedAt: Date.now() };
|
|
166
|
-
this.completedUnits.push(done);
|
|
167
|
-
this.currentUnit = null;
|
|
168
|
-
return done;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
155
|
reset(): void {
|
|
172
156
|
this.clearTimers();
|
|
173
157
|
|
|
@@ -193,7 +177,6 @@ export class AutoSession {
|
|
|
193
177
|
// Unit
|
|
194
178
|
this.currentUnit = null;
|
|
195
179
|
this.currentUnitRouting = null;
|
|
196
|
-
this.completedUnits = [];
|
|
197
180
|
this.currentMilestoneId = null;
|
|
198
181
|
|
|
199
182
|
// Model
|
|
@@ -234,7 +217,6 @@ export class AutoSession {
|
|
|
234
217
|
activeRunDir: this.activeRunDir,
|
|
235
218
|
currentMilestoneId: this.currentMilestoneId,
|
|
236
219
|
currentUnit: this.currentUnit,
|
|
237
|
-
completedUnits: this.completedUnits.length,
|
|
238
220
|
unitDispatchCount: Object.fromEntries(this.unitDispatchCount),
|
|
239
221
|
};
|
|
240
222
|
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// GSD Auto-mode — Artifact Path Resolution
|
|
2
|
+
//
|
|
3
|
+
// resolveExpectedArtifactPath and diagnoseExpectedArtifact moved here from
|
|
4
|
+
// auto-recovery.ts (Phase 5 dead-code cleanup). The artifact verification
|
|
5
|
+
// function was removed entirely — callers now query WorkflowEngine directly.
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
resolveMilestonePath,
|
|
9
|
+
resolveSlicePath,
|
|
10
|
+
relMilestoneFile,
|
|
11
|
+
relSliceFile,
|
|
12
|
+
buildMilestoneFileName,
|
|
13
|
+
buildSliceFileName,
|
|
14
|
+
buildTaskFileName,
|
|
15
|
+
} from "./paths.js";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Resolve the expected artifact for a unit to an absolute path.
|
|
20
|
+
*/
|
|
21
|
+
export function resolveExpectedArtifactPath(
|
|
22
|
+
unitType: string,
|
|
23
|
+
unitId: string,
|
|
24
|
+
base: string,
|
|
25
|
+
): string | null {
|
|
26
|
+
const parts = unitId.split("/");
|
|
27
|
+
const mid = parts[0]!;
|
|
28
|
+
const sid = parts[1];
|
|
29
|
+
switch (unitType) {
|
|
30
|
+
case "discuss-milestone": {
|
|
31
|
+
const dir = resolveMilestonePath(base, mid);
|
|
32
|
+
return dir ? join(dir, buildMilestoneFileName(mid, "CONTEXT")) : null;
|
|
33
|
+
}
|
|
34
|
+
case "research-milestone": {
|
|
35
|
+
const dir = resolveMilestonePath(base, mid);
|
|
36
|
+
return dir ? join(dir, buildMilestoneFileName(mid, "RESEARCH")) : null;
|
|
37
|
+
}
|
|
38
|
+
case "plan-milestone": {
|
|
39
|
+
const dir = resolveMilestonePath(base, mid);
|
|
40
|
+
return dir ? join(dir, buildMilestoneFileName(mid, "ROADMAP")) : null;
|
|
41
|
+
}
|
|
42
|
+
case "research-slice": {
|
|
43
|
+
const dir = resolveSlicePath(base, mid, sid!);
|
|
44
|
+
return dir ? join(dir, buildSliceFileName(sid!, "RESEARCH")) : null;
|
|
45
|
+
}
|
|
46
|
+
case "plan-slice": {
|
|
47
|
+
const dir = resolveSlicePath(base, mid, sid!);
|
|
48
|
+
return dir ? join(dir, buildSliceFileName(sid!, "PLAN")) : null;
|
|
49
|
+
}
|
|
50
|
+
case "reassess-roadmap": {
|
|
51
|
+
const dir = resolveSlicePath(base, mid, sid!);
|
|
52
|
+
return dir ? join(dir, buildSliceFileName(sid!, "ASSESSMENT")) : null;
|
|
53
|
+
}
|
|
54
|
+
case "run-uat": {
|
|
55
|
+
const dir = resolveSlicePath(base, mid, sid!);
|
|
56
|
+
return dir ? join(dir, buildSliceFileName(sid!, "UAT-RESULT")) : null;
|
|
57
|
+
}
|
|
58
|
+
case "execute-task": {
|
|
59
|
+
const tid = parts[2];
|
|
60
|
+
const dir = resolveSlicePath(base, mid, sid!);
|
|
61
|
+
return dir && tid
|
|
62
|
+
? join(dir, "tasks", buildTaskFileName(tid, "SUMMARY"))
|
|
63
|
+
: null;
|
|
64
|
+
}
|
|
65
|
+
case "complete-slice": {
|
|
66
|
+
const dir = resolveSlicePath(base, mid, sid!);
|
|
67
|
+
return dir ? join(dir, buildSliceFileName(sid!, "SUMMARY")) : null;
|
|
68
|
+
}
|
|
69
|
+
case "validate-milestone": {
|
|
70
|
+
const dir = resolveMilestonePath(base, mid);
|
|
71
|
+
return dir ? join(dir, buildMilestoneFileName(mid, "VALIDATION")) : null;
|
|
72
|
+
}
|
|
73
|
+
case "complete-milestone": {
|
|
74
|
+
const dir = resolveMilestonePath(base, mid);
|
|
75
|
+
return dir ? join(dir, buildMilestoneFileName(mid, "SUMMARY")) : null;
|
|
76
|
+
}
|
|
77
|
+
case "replan-slice": {
|
|
78
|
+
const dir = resolveSlicePath(base, mid, sid!);
|
|
79
|
+
return dir ? join(dir, buildSliceFileName(sid!, "REPLAN")) : null;
|
|
80
|
+
}
|
|
81
|
+
case "rewrite-docs":
|
|
82
|
+
return null;
|
|
83
|
+
case "reactive-execute":
|
|
84
|
+
// Reactive execute produces multiple task summaries — verified separately
|
|
85
|
+
return null;
|
|
86
|
+
default:
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function diagnoseExpectedArtifact(
|
|
92
|
+
unitType: string,
|
|
93
|
+
unitId: string,
|
|
94
|
+
base: string,
|
|
95
|
+
): string | null {
|
|
96
|
+
const parts = unitId.split("/");
|
|
97
|
+
const mid = parts[0];
|
|
98
|
+
const sid = parts[1];
|
|
99
|
+
switch (unitType) {
|
|
100
|
+
case "discuss-milestone":
|
|
101
|
+
return `${relMilestoneFile(base, mid!, "CONTEXT")} (milestone context from discussion)`;
|
|
102
|
+
case "research-milestone":
|
|
103
|
+
return `${relMilestoneFile(base, mid!, "RESEARCH")} (milestone research)`;
|
|
104
|
+
case "plan-milestone":
|
|
105
|
+
return `${relMilestoneFile(base, mid!, "ROADMAP")} (milestone roadmap)`;
|
|
106
|
+
case "research-slice":
|
|
107
|
+
return `${relSliceFile(base, mid!, sid!, "RESEARCH")} (slice research)`;
|
|
108
|
+
case "plan-slice":
|
|
109
|
+
return `${relSliceFile(base, mid!, sid!, "PLAN")} (slice plan)`;
|
|
110
|
+
case "execute-task": {
|
|
111
|
+
const tid = parts[2];
|
|
112
|
+
return `Task ${tid} marked [x] in ${relSliceFile(base, mid!, sid!, "PLAN")} + summary written`;
|
|
113
|
+
}
|
|
114
|
+
case "complete-slice":
|
|
115
|
+
return `Slice ${sid} marked [x] in ${relMilestoneFile(base, mid!, "ROADMAP")} + summary + UAT written`;
|
|
116
|
+
case "replan-slice":
|
|
117
|
+
return `${relSliceFile(base, mid!, sid!, "REPLAN")} + updated ${relSliceFile(base, mid!, sid!, "PLAN")}`;
|
|
118
|
+
case "rewrite-docs":
|
|
119
|
+
return "Active overrides resolved in .gsd/OVERRIDES.md + plan documents updated";
|
|
120
|
+
case "reassess-roadmap":
|
|
121
|
+
return `${relSliceFile(base, mid!, sid!, "ASSESSMENT")} (roadmap reassessment)`;
|
|
122
|
+
case "run-uat":
|
|
123
|
+
return `${relSliceFile(base, mid!, sid!, "UAT-RESULT")} (UAT result)`;
|
|
124
|
+
case "validate-milestone":
|
|
125
|
+
return `${relMilestoneFile(base, mid!, "VALIDATION")} (milestone validation report)`;
|
|
126
|
+
case "complete-milestone":
|
|
127
|
+
return `${relMilestoneFile(base, mid!, "SUMMARY")} (milestone summary)`;
|
|
128
|
+
default:
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -48,7 +48,6 @@ export interface AutoDashboardData {
|
|
|
48
48
|
startTime: number;
|
|
49
49
|
elapsed: number;
|
|
50
50
|
currentUnit: { type: string; id: string; startedAt: number } | null;
|
|
51
|
-
completedUnits: { type: string; id: string; startedAt: number; finishedAt: number }[];
|
|
52
51
|
basePath: string;
|
|
53
52
|
/** Running cost and token totals from metrics ledger */
|
|
54
53
|
totalCost: number;
|