@infinitedusky/indusk-mcp 1.34.0 → 1.35.1
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/admin/.next/BUILD_ID +1 -1
- package/admin/.next/build-manifest.json +3 -3
- package/admin/.next/fallback-build-manifest.json +3 -3
- package/admin/.next/prerender-manifest.json +3 -3
- package/admin/.next/server/app/_global-error.html +1 -1
- package/admin/.next/server/app/_global-error.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_03_q0_m._.js +1 -1
- package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_03_q0_m._.js.map +1 -1
- package/admin/.next/server/middleware-build-manifest.js +3 -3
- package/admin/.next/server/pages/500.html +1 -1
- package/admin/.next/server/server-reference-manifest.js +1 -1
- package/admin/.next/server/server-reference-manifest.json +1 -1
- package/admin/.next/trace +1 -1
- package/admin/.next/trace-build +1 -1
- package/package.json +1 -1
- package/skills/work.md +35 -0
- /package/admin/.next/static/{JPSixThkx4zGFdVcRN0BV → chwqn4zbU29xc3s0HiFdC}/_buildManifest.js +0 -0
- /package/admin/.next/static/{JPSixThkx4zGFdVcRN0BV → chwqn4zbU29xc3s0HiFdC}/_clientMiddlewareManifest.js +0 -0
- /package/admin/.next/static/{JPSixThkx4zGFdVcRN0BV → chwqn4zbU29xc3s0HiFdC}/_ssgManifest.js +0 -0
package/admin/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
chwqn4zbU29xc3s0HiFdC
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/chwqn4zbU29xc3s0HiFdC/_buildManifest.js",
|
|
11
|
+
"static/chwqn4zbU29xc3s0HiFdC/_ssgManifest.js",
|
|
12
|
+
"static/chwqn4zbU29xc3s0HiFdC/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/15r3deq0oc~d..js",
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"polyfillFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
10
|
-
"static/
|
|
8
|
+
"static/chwqn4zbU29xc3s0HiFdC/_buildManifest.js",
|
|
9
|
+
"static/chwqn4zbU29xc3s0HiFdC/_ssgManifest.js",
|
|
10
|
+
"static/chwqn4zbU29xc3s0HiFdC/_clientMiddlewareManifest.js"
|
|
11
11
|
],
|
|
12
12
|
"rootMainFiles": []
|
|
13
13
|
}
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"dynamicRoutes": {},
|
|
59
59
|
"notFoundRoutes": [],
|
|
60
60
|
"preview": {
|
|
61
|
-
"previewModeId": "
|
|
62
|
-
"previewModeSigningKey": "
|
|
63
|
-
"previewModeEncryptionKey": "
|
|
61
|
+
"previewModeId": "c72e5ac616e41dc5b6c85b470cb878f9",
|
|
62
|
+
"previewModeSigningKey": "6780c905c2c047d3be87f830b745d16526ef51e1fc139ae5294ff56de4c7a053",
|
|
63
|
+
"previewModeEncryptionKey": "d84d2ec04a96a7fbca554f71de9c23b532de933b3bee4e4c4c24337b3e946322"
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><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/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.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;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/15r3deq0oc~d..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[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"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\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><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/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.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;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/15r3deq0oc~d..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[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"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\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"chwqn4zbU29xc3s0HiFdC\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"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":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"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":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"chwqn4zbU29xc3s0HiFdC"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"OutletBoundary"]
|
|
3
3
|
3:"$Sreact.suspense"
|
|
4
|
-
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
4
|
+
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"chwqn4zbU29xc3s0HiFdC"}
|
|
5
5
|
4:null
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"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":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"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":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"chwqn4zbU29xc3s0HiFdC"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
3:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[61299,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"IconMark"]
|
|
6
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"chwqn4zbU29xc3s0HiFdC"}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[85530,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default"]
|
|
3
3
|
3:I[50571,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default"]
|
|
4
4
|
4:[]
|
|
5
|
-
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"chwqn4zbU29xc3s0HiFdC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0:{"tree":{"name":"","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"
|
|
1
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"chwqn4zbU29xc3s0HiFdC"}
|
|
@@ -6,6 +6,6 @@ ${d}`,e&&`### Fix items
|
|
|
6
6
|
|
|
7
7
|
${e}`].filter(Boolean).join("\n\n"))}function u({plan:a}){return(0,b.jsxs)("article",{className:"flex flex-col gap-6","data-testid":"plan-detail","data-plan-name":a.name,children:[(0,b.jsx)(w,{plan:a}),a.malformed&&(0,b.jsx)(x,{}),a.malformed&&a.rawDocuments&&(0,b.jsx)(A,{rawDocuments:a.rawDocuments}),a.research&&(0,b.jsx)(f.CollapsibleSection,{title:"Research",defaultOpen:!a.brief,persistKey:`plan:${a.name}:section:research`,copyMarkdown:o("Research",a.research.content),children:(0,b.jsx)(d.Markdown,{children:a.research.content})}),a.brief&&(0,b.jsx)(y,{planName:a.name,content:a.brief.content}),a.testPlan&&(0,b.jsx)(f.CollapsibleSection,{title:"Test Plan",defaultOpen:!1,persistKey:`plan:${a.name}:section:test-plan`,copyMarkdown:o("Test Plan",a.testPlan.content),children:(0,b.jsx)(d.Markdown,{children:a.testPlan.content})}),a.adr&&(0,b.jsx)(f.CollapsibleSection,{title:"ADR — Goal + Decision",defaultOpen:!1,persistKey:`plan:${a.name}:section:adr`,copyMarkdown:o("ADR — Goal + Decision",a.adr.content),children:(0,b.jsx)(d.Markdown,{children:a.adr.content})}),a.impl&&(0,b.jsx)(v,{plan:a}),!a.impl&&(0,b.jsx)(B,{plan:a,phase:null})]})}function v({plan:a}){if(!a.impl)return null;let c=l(j(a.impl.content,a.impl.trajectory));return(0,b.jsxs)(b.Fragment,{children:[c.pre.length>0&&(0,b.jsx)(z,{phases:c.pre,heading:"Phases",testId:"phases-section",planName:a.name}),(0,b.jsx)(B,{plan:a,phase:c.falsification}),c.post.length>0&&(0,b.jsx)(z,{phases:c.post,heading:"Follow-up Phases",testId:"followup-phases-section",planName:a.name})]})}function w({plan:a}){let c;return(0,b.jsxs)("header",{className:"flex items-center justify-between border-b border-gray-200 pb-3","data-testid":"plan-header",children:[(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("h1",{className:"text-xl font-semibold text-gray-900",children:a.name}),(0,b.jsx)("span",{className:"text-xs text-gray-500",children:a.archived?"archived":"active"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(e.Badge,{variant:(c=a.status.toLowerCase()).includes("completed")||c.includes("passing")?"passing":c.includes("blocked")?"blocked":c.includes("in-progress")||c.includes("accepted")?"writable":c.includes("draft")||c.includes("planned")?"planned":"neutral",children:a.status}),(0,b.jsx)(g.CopyButton,{text:function(a){let b=[`# ${a.name}
|
|
8
8
|
|
|
9
|
-
Status: ${a.status}`];if(a.research&&b.push(o("Research",a.research.content)),a.brief&&b.push(o("Brief",a.brief.content)),a.testPlan&&b.push(o("Test Plan",a.testPlan.content)),a.adr&&b.push(o("ADR — Goal + Decision",a.adr.content)),a.impl){let c=l(j(a.impl.content,a.impl.trajectory));for(let a of c.pre)b.push(q(a));for(let d of(b.push(c.falsification?t(c.falsification):s(a.falsification)),c.post))b.push(q(d))}else b.push(s(a.falsification));return b.join("\n\n---\n\n")}(a),label:"Copy whole plan as markdown","data-testid":"copy-plan-button"})]})]})}function x(){return(0,b.jsx)("div",{className:"rounded border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700","data-testid":"malformed-banner",children:"⚠ This plan has malformed YAML frontmatter. Some sections may be missing or rendered with default values."})}function y({planName:a,content:c}){return(0,b.jsx)("section",{className:"flex flex-col gap-2","data-testid":"brief-section",children:(0,b.jsx)(f.CollapsibleSection,{title:"Brief",defaultOpen:!0,persistKey:`plan:${a}:section:brief`,copyMarkdown:o("Brief",c),children:(0,b.jsx)(d.Markdown,{children:c})})})}function z({phases:a,heading:c,testId:g,planName:i}){return 0===a.length?null:(0,b.jsxs)("section",{className:"flex flex-col gap-2","data-testid":g,children:[(0,b.jsx)("h2",{className:"text-base font-semibold text-gray-900",children:c}),(0,b.jsx)("div",{className:"flex flex-col gap-2",children:a.map(a=>(0,b.jsx)(f.CollapsibleSection,{title:`Phase ${a.number}${a.title?`: ${a.title}`:""}`,defaultOpen:!1,persistKey:`plan:${i}:phase:${a.number}`,copyMarkdown:q(a),children:(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[a.trajectoryRows.length>0&&(0,b.jsx)("div",{"data-testid":`phase-${a.number}-trajectory`,children:(0,b.jsxs)(h.Table,{children:[(0,b.jsx)(h.TableHeader,{children:(0,b.jsxs)(h.TableRow,{children:[(0,b.jsx)(h.TableHead,{children:"ID"}),(0,b.jsx)(h.TableHead,{children:"Asserts"}),(0,b.jsx)(h.TableHead,{children:"Writable at"}),(0,b.jsx)(h.TableHead,{children:"Passes at"}),(0,b.jsx)(h.TableHead,{children:"State"})]})}),(0,b.jsx)(h.TableBody,{children:a.trajectoryRows.map(a=>(0,b.jsxs)(h.TableRow,{children:[(0,b.jsx)(h.TableCell,{children:(0,b.jsx)("span",{className:"font-mono text-xs",children:a.id})}),(0,b.jsx)(h.TableCell,{children:a.asserts}),(0,b.jsxs)(h.TableCell,{children:["Phase ",a.writableAt]}),(0,b.jsxs)(h.TableCell,{children:["Phase ",a.passesAt]}),(0,b.jsx)(h.TableCell,{children:(0,b.jsx)(e.Badge,{variant:G(a.state),children:a.state})})]},a.id))})]})}),(0,b.jsx)(d.Markdown,{children:a.content})]})},a.number))})]})}function A({rawDocuments:a}){let c=Object.entries(a);return 0===c.length?null:(0,b.jsxs)("section",{className:"flex flex-col gap-2","data-testid":"raw-documents-section",children:[(0,b.jsx)("h2",{className:"text-base font-semibold text-gray-900",children:"Raw documents (malformed frontmatter)"}),(0,b.jsx)("p",{className:"text-xs text-gray-500",children:"These files couldn't be parsed. Showing the raw markdown so you can diagnose. Fix the YAML frontmatter and refresh."}),(0,b.jsx)("div",{className:"flex flex-col gap-2",children:c.map(([a,c])=>(0,b.jsx)(f.CollapsibleSection,{title:a,defaultOpen:!1,children:(0,b.jsx)("pre",{className:"overflow-x-auto rounded bg-gray-50 p-3 text-xs font-mono text-gray-800 whitespace-pre-wrap","data-testid":`raw-${a}`,children:c})},a))})]})}function B({plan:a,phase:c}){if(c)return(0,b.jsx)(C,{phase:c});if(!a.falsification)return(0,b.
|
|
9
|
+
Status: ${a.status}`];if(a.research&&b.push(o("Research",a.research.content)),a.brief&&b.push(o("Brief",a.brief.content)),a.testPlan&&b.push(o("Test Plan",a.testPlan.content)),a.adr&&b.push(o("ADR — Goal + Decision",a.adr.content)),a.impl){let c=l(j(a.impl.content,a.impl.trajectory));for(let a of c.pre)b.push(q(a));for(let d of(b.push(c.falsification?t(c.falsification):s(a.falsification)),c.post))b.push(q(d))}else b.push(s(a.falsification));return b.join("\n\n---\n\n")}(a),label:"Copy whole plan as markdown","data-testid":"copy-plan-button"})]})]})}function x(){return(0,b.jsx)("div",{className:"rounded border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700","data-testid":"malformed-banner",children:"⚠ This plan has malformed YAML frontmatter. Some sections may be missing or rendered with default values."})}function y({planName:a,content:c}){return(0,b.jsx)("section",{className:"flex flex-col gap-2","data-testid":"brief-section",children:(0,b.jsx)(f.CollapsibleSection,{title:"Brief",defaultOpen:!0,persistKey:`plan:${a}:section:brief`,copyMarkdown:o("Brief",c),children:(0,b.jsx)(d.Markdown,{children:c})})})}function z({phases:a,heading:c,testId:g,planName:i}){return 0===a.length?null:(0,b.jsxs)("section",{className:"flex flex-col gap-2","data-testid":g,children:[(0,b.jsx)("h2",{className:"text-base font-semibold text-gray-900",children:c}),(0,b.jsx)("div",{className:"flex flex-col gap-2",children:a.map(a=>(0,b.jsx)(f.CollapsibleSection,{title:`Phase ${a.number}${a.title?`: ${a.title}`:""}`,defaultOpen:!1,persistKey:`plan:${i}:phase:${a.number}`,copyMarkdown:q(a),children:(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[a.trajectoryRows.length>0&&(0,b.jsx)("div",{"data-testid":`phase-${a.number}-trajectory`,children:(0,b.jsxs)(h.Table,{children:[(0,b.jsx)(h.TableHeader,{children:(0,b.jsxs)(h.TableRow,{children:[(0,b.jsx)(h.TableHead,{children:"ID"}),(0,b.jsx)(h.TableHead,{children:"Asserts"}),(0,b.jsx)(h.TableHead,{children:"Writable at"}),(0,b.jsx)(h.TableHead,{children:"Passes at"}),(0,b.jsx)(h.TableHead,{children:"State"})]})}),(0,b.jsx)(h.TableBody,{children:a.trajectoryRows.map(a=>(0,b.jsxs)(h.TableRow,{children:[(0,b.jsx)(h.TableCell,{children:(0,b.jsx)("span",{className:"font-mono text-xs",children:a.id})}),(0,b.jsx)(h.TableCell,{children:a.asserts}),(0,b.jsxs)(h.TableCell,{children:["Phase ",a.writableAt]}),(0,b.jsxs)(h.TableCell,{children:["Phase ",a.passesAt]}),(0,b.jsx)(h.TableCell,{children:(0,b.jsx)(e.Badge,{variant:G(a.state),children:a.state})})]},a.id))})]})}),(0,b.jsx)(d.Markdown,{children:a.content})]})},a.number))})]})}function A({rawDocuments:a}){let c=Object.entries(a);return 0===c.length?null:(0,b.jsxs)("section",{className:"flex flex-col gap-2","data-testid":"raw-documents-section",children:[(0,b.jsx)("h2",{className:"text-base font-semibold text-gray-900",children:"Raw documents (malformed frontmatter)"}),(0,b.jsx)("p",{className:"text-xs text-gray-500",children:"These files couldn't be parsed. Showing the raw markdown so you can diagnose. Fix the YAML frontmatter and refresh."}),(0,b.jsx)("div",{className:"flex flex-col gap-2",children:c.map(([a,c])=>(0,b.jsx)(f.CollapsibleSection,{title:a,defaultOpen:!1,children:(0,b.jsx)("pre",{className:"overflow-x-auto rounded bg-gray-50 p-3 text-xs font-mono text-gray-800 whitespace-pre-wrap","data-testid":`raw-${a}`,children:c})},a))})]})}function B({plan:a,phase:c}){if(c)return(0,b.jsx)(C,{planName:a.name,phase:c});if(!a.falsification)return(0,b.jsx)("section",{className:"flex flex-col gap-2","data-testid":"falsification-section",children:(0,b.jsx)(f.CollapsibleSection,{title:"Falsification",defaultOpen:!0,persistKey:`plan:${a.name}:section:falsification`,copyMarkdown:s(void 0),children:(0,b.jsx)("p",{className:"text-sm text-gray-500","data-testid":"falsification-empty",children:"No falsification ritual run for this plan."})})});let d=a.falsification.entries.filter(E),g=a.falsification.entries.find(F);return(0,b.jsx)("section",{className:"flex flex-col gap-2","data-testid":"falsification-section",children:(0,b.jsx)(f.CollapsibleSection,{title:"Falsification",defaultOpen:!0,persistKey:`plan:${a.name}:section:falsification`,headerRight:(0,b.jsx)(e.Badge,{variant:a.falsification.complete?"passing":"writable",children:a.falsification.complete?"complete":"in-progress"}),copyMarkdown:s(a.falsification),children:(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[0===d.length&&(0,b.jsx)("p",{className:"text-sm text-gray-500",children:"No hypotheses logged yet."}),d.length>0&&(0,b.jsx)("ul",{className:"flex flex-col gap-3","data-testid":"falsification-hypotheses",children:d.map(a=>(0,b.jsx)(D,{entry:a},`${a.timestamp}-${a.hypothesis.slice(0,32)}`))}),g&&(0,b.jsxs)("div",{className:"rounded border border-gray-200 bg-gray-50 px-3 py-2 text-sm text-gray-700","data-testid":"falsification-terminator",children:[(0,b.jsx)("span",{className:"font-semibold",children:"Terminated:"})," ",g.reason]})]})})})}function C({planName:a,phase:c}){let d=n(c.content),g=c.trajectoryRows.every(a=>"passing"===a.state||"skipped"===a.state),i=d.every(a=>a.checked),j=g&&i;return(0,b.jsx)("section",{className:"flex flex-col gap-2","data-testid":"falsification-section",children:(0,b.jsx)(f.CollapsibleSection,{title:(0,b.jsxs)(b.Fragment,{children:["Falsification",c.title?(0,b.jsxs)("span",{className:"ml-2 text-xs font-normal text-gray-500",children:["(Phase ",c.number,": ",c.title,")"]}):null]}),defaultOpen:!0,persistKey:`plan:${a}:section:falsification`,headerRight:(0,b.jsx)(e.Badge,{variant:j?"passing":"writable",children:j?"complete":"in-progress"}),copyMarkdown:t(c),children:(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[c.trajectoryRows.length>0&&(0,b.jsxs)("div",{"data-testid":"falsification-hypotheses",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-gray-800 mt-1",children:"Hypotheses"}),(0,b.jsxs)(h.Table,{children:[(0,b.jsx)(h.TableHeader,{children:(0,b.jsxs)(h.TableRow,{children:[(0,b.jsx)(h.TableHead,{children:"ID"}),(0,b.jsx)(h.TableHead,{children:"Asserts"}),(0,b.jsx)(h.TableHead,{children:"State"})]})}),(0,b.jsx)(h.TableBody,{children:c.trajectoryRows.map(a=>(0,b.jsxs)(h.TableRow,{children:[(0,b.jsx)(h.TableCell,{children:(0,b.jsx)("span",{className:"font-mono text-xs",children:a.id})}),(0,b.jsx)(h.TableCell,{children:a.asserts}),(0,b.jsx)(h.TableCell,{children:(0,b.jsx)(e.Badge,{variant:G(a.state),children:a.state})})]},a.id))})]})]}),d.length>0&&(0,b.jsxs)("div",{"data-testid":"falsification-fix-items",className:"mt-2",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-gray-800",children:"Fix items"}),(0,b.jsx)("ul",{className:"flex flex-col gap-1",children:d.map(a=>(0,b.jsxs)("li",{className:"flex items-start gap-2 text-sm text-gray-700",children:[(0,b.jsxs)("span",{className:"font-mono text-xs text-gray-500",children:["[",a.checked?"x":" ","]"]}),(0,b.jsx)("span",{className:a.checked?"text-gray-500 line-through":"",children:a.text})]},`${a.checked?"x":"o"}-${a.text}`))})]})]})})})}function D({entry:a}){var c;return(0,b.jsxs)("li",{className:"flex flex-col gap-1 rounded border border-gray-200 px-3 py-2","data-testid":`hypothesis-${a.outcome}`,children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsx)("span",{className:"text-sm font-semibold text-gray-900",children:"Hypothesis"}),(0,b.jsx)(e.Badge,{variant:"fix-in-scope"===(c=a.outcome)?"passing":"spawn-plan"===c?"writable":"neutral",children:a.outcome})]}),(0,b.jsx)("p",{className:"text-sm text-gray-700",children:a.hypothesis}),a.testPath&&(0,b.jsx)("p",{className:"text-xs text-gray-500 font-mono",children:a.testPath}),a.note&&(0,b.jsx)("p",{className:"text-xs text-gray-500",children:a.note})]})}function E(a){return"hypothesis"===a.kind}function F(a){return"terminator"===a.kind}function G(a){let b=a.toLowerCase();return["passing","blocked","skipped","planned","writable","written"].includes(b)?b:"neutral"}var H=a.i(42717),I=a.i(765);async function J({params:a}){let{project:d,name:e}=await a,f=(0,I.getProjectPath)(d);if(!f||!(0,I.projectPathExists)(f))return null;let[g,h]=await Promise.all([(0,H.readActivePlans)(f),(0,H.readArchivedPlans)(f)]),i=g.find(a=>a.name===e)??h.find(a=>a.name===e);return i||(0,c.notFound)(),(0,b.jsx)(u,{plan:i})}a.s(["default",0,J],71550)},82388,a=>{a.n(a.i(71550))}];
|
|
10
10
|
|
|
11
11
|
//# sourceMappingURL=apps_indusk-admin_src_03_q0_m._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../apps/indusk-admin/src/components/ui/CopyButton.tsx/__nextjs-internal-proxy.mjs","../../../../../../apps/indusk-admin/src/app/p/%5Bproject%5D/plan/%5Bname%5D/page.tsx","../../../../../../apps/indusk-admin/src/components/PlanDetail.tsx","../../../../../../apps/indusk-admin/src/lib/phases.ts","../../../../../../apps/indusk-admin/src/lib/markdown-export.ts"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const CopyButton = registerClientReference(\n function() { throw new Error(\"Attempted to call CopyButton() from the server but CopyButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/apps/indusk-admin/src/components/ui/CopyButton.tsx\",\n \"CopyButton\",\n);\n","import { notFound } from \"next/navigation\";\nimport { PlanDetail } from \"@/components/PlanDetail\";\nimport { readActivePlans, readArchivedPlans } from \"@/lib/planning-reader\";\nimport { getProjectPath, projectPathExists } from \"@/lib/registry-client\";\n\ninterface PlanPageProps {\n params: Promise<{ project: string; name: string }>;\n}\n\n/**\n * Server component for `/p/{project}/plan/{name}`. Resolves the project's\n * path via the registry, reads every active + archived plan for that\n * project, finds the requested plan by folder name, and renders PlanDetail.\n *\n * The stale-project branch (path null OR deleted on disk) is handled by\n * the layout (`app/p/[project]/layout.tsx`) — it replaces its own output\n * with `<StaleProjectFailurePage>` in that case, so this page's rendered\n * element is never placed in the DOM. We early-return `null` when path is\n * stale so the page's own code doesn't trip on `readActivePlans` against\n * a deleted dir. `notFound()` is reserved for the genuinely plan-not-found\n * case (path OK, plan name wrong).\n */\nexport default async function PlanPage({ params }: PlanPageProps) {\n const { project, name } = await params;\n const projectPath = getProjectPath(project);\n if (!projectPath || !projectPathExists(projectPath)) return null;\n\n const [active, archived] = await Promise.all([\n readActivePlans(projectPath),\n readArchivedPlans(projectPath),\n ]);\n const plan =\n active.find((p) => p.name === name) ??\n archived.find((p) => p.name === name);\n if (!plan) {\n notFound();\n }\n return <PlanDetail plan={plan} />;\n}\n","import type {\n HypothesisEntry,\n HypothesisOutcome,\n LogEntry,\n TerminatorEntry,\n} from \"@infinitedusky/indusk-mcp/falsification/log\";\nimport { Markdown } from \"@/components/Markdown\";\nimport { Badge, type BadgeVariant } from \"@/components/ui/Badge\";\nimport { CollapsibleSection } from \"@/components/ui/CollapsibleSection\";\nimport { CopyButton } from \"@/components/ui/CopyButton\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/Table\";\nimport {\n falsificationLogMarkdown,\n falsificationPhaseMarkdown,\n phaseMarkdown,\n planMarkdown,\n sectionMarkdown,\n} from \"@/lib/markdown-export\";\nimport {\n extractChecklistItems,\n extractPhases,\n type Phase,\n splitPhasesAroundFalsification,\n} from \"@/lib/phases\";\nimport type { Plan } from \"@/lib/planning-reader\";\n\ninterface PlanDetailProps {\n plan: Plan;\n}\n\n/**\n * Main pane for a selected plan. Renders sections conditional on which\n * documents are present:\n * - Always: header (name + status badge)\n * - Brief.md: Markdown render of the brief content (Problem + Proposed Direction visible)\n * - test-plan.md: collapsible Markdown render\n * - ADR.md: collapsible Markdown render (Goal + Y-statement come through verbatim)\n * - Impl.md: PhasesSection — one CollapsibleSection per phase containing trajectory rows\n *\n * Missing documents simply don't render their section (T14). Malformed plans\n * surface a banner indicating malformed YAML; the components-that-can-render\n * still render with whatever data they have.\n */\nexport function PlanDetail({ plan }: PlanDetailProps) {\n return (\n <article\n className=\"flex flex-col gap-6\"\n data-testid=\"plan-detail\"\n data-plan-name={plan.name}\n >\n <PlanHeader plan={plan} />\n\n {plan.malformed && <MalformedBanner />}\n\n {plan.malformed && plan.rawDocuments && (\n <RawDocumentsSection rawDocuments={plan.rawDocuments} />\n )}\n\n {plan.research && (\n <CollapsibleSection\n title=\"Research\"\n defaultOpen={!plan.brief}\n persistKey={`plan:${plan.name}:section:research`}\n copyMarkdown={sectionMarkdown(\"Research\", plan.research.content)}\n >\n <Markdown>{plan.research.content}</Markdown>\n </CollapsibleSection>\n )}\n\n {plan.brief && (\n <BriefSection planName={plan.name} content={plan.brief.content} />\n )}\n\n {plan.testPlan && (\n <CollapsibleSection\n title=\"Test Plan\"\n defaultOpen={false}\n persistKey={`plan:${plan.name}:section:test-plan`}\n copyMarkdown={sectionMarkdown(\"Test Plan\", plan.testPlan.content)}\n >\n <Markdown>{plan.testPlan.content}</Markdown>\n </CollapsibleSection>\n )}\n\n {plan.adr && (\n <CollapsibleSection\n title=\"ADR — Goal + Decision\"\n defaultOpen={false}\n persistKey={`plan:${plan.name}:section:adr`}\n copyMarkdown={sectionMarkdown(\n \"ADR — Goal + Decision\",\n plan.adr.content,\n )}\n >\n <Markdown>{plan.adr.content}</Markdown>\n </CollapsibleSection>\n )}\n\n {plan.impl && <ImplSections plan={plan} />}\n {!plan.impl && <FalsificationSection plan={plan} phase={null} />}\n </article>\n );\n}\n\n/**\n * When an impl.md exists, split its phases into pre-falsification / falsification\n * / post-falsification groups and render each in its own section. The\n * falsification phase (if any) is rendered by `FalsificationSection` instead of\n * mixed into the main Phases section. Post-falsification phases render below as\n * \"Follow-up Phases\" — the fix-in-scope derivatives of the ritual.\n *\n * When no impl is present, the PlanDetail top-level still shows a\n * FalsificationSection directly (legacy-log-only path).\n */\nfunction ImplSections({ plan }: { plan: Plan }) {\n if (!plan.impl) return null;\n const phases = extractPhases(plan.impl.content, plan.impl.trajectory);\n const split = splitPhasesAroundFalsification(phases);\n return (\n <>\n {split.pre.length > 0 && (\n <PhasesSection\n phases={split.pre}\n heading=\"Phases\"\n testId=\"phases-section\"\n planName={plan.name}\n />\n )}\n <FalsificationSection plan={plan} phase={split.falsification} />\n {split.post.length > 0 && (\n <PhasesSection\n phases={split.post}\n heading=\"Follow-up Phases\"\n testId=\"followup-phases-section\"\n planName={plan.name}\n />\n )}\n </>\n );\n}\n\nfunction PlanHeader({ plan }: { plan: Plan }) {\n return (\n <header\n className=\"flex items-center justify-between border-b border-gray-200 pb-3\"\n data-testid=\"plan-header\"\n >\n <div className=\"flex flex-col\">\n <h1 className=\"text-xl font-semibold text-gray-900\">{plan.name}</h1>\n <span className=\"text-xs text-gray-500\">\n {plan.archived ? \"archived\" : \"active\"}\n </span>\n </div>\n <div className=\"flex items-center gap-3\">\n <Badge variant={statusToBadge(plan.status)}>{plan.status}</Badge>\n <CopyButton\n text={planMarkdown(plan)}\n label=\"Copy whole plan as markdown\"\n data-testid=\"copy-plan-button\"\n />\n </div>\n </header>\n );\n}\n\nfunction MalformedBanner() {\n return (\n <div\n className=\"rounded border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700\"\n data-testid=\"malformed-banner\"\n >\n ⚠ This plan has malformed YAML frontmatter. Some sections may be missing\n or rendered with default values.\n </div>\n );\n}\n\nfunction BriefSection({\n planName,\n content,\n}: {\n planName: string;\n content: string;\n}) {\n return (\n <section className=\"flex flex-col gap-2\" data-testid=\"brief-section\">\n <CollapsibleSection\n title=\"Brief\"\n defaultOpen={true}\n persistKey={`plan:${planName}:section:brief`}\n copyMarkdown={sectionMarkdown(\"Brief\", content)}\n >\n <Markdown>{content}</Markdown>\n </CollapsibleSection>\n </section>\n );\n}\n\nfunction PhasesSection({\n phases,\n heading,\n testId,\n planName,\n}: {\n phases: Phase[];\n heading: string;\n testId: string;\n planName: string;\n}) {\n if (phases.length === 0) return null;\n\n return (\n <section className=\"flex flex-col gap-2\" data-testid={testId}>\n <h2 className=\"text-base font-semibold text-gray-900\">{heading}</h2>\n <div className=\"flex flex-col gap-2\">\n {phases.map((phase) => (\n <CollapsibleSection\n key={phase.number}\n title={`Phase ${phase.number}${phase.title ? `: ${phase.title}` : \"\"}`}\n defaultOpen={false}\n persistKey={`plan:${planName}:phase:${phase.number}`}\n copyMarkdown={phaseMarkdown(phase)}\n >\n <div className=\"flex flex-col gap-3\">\n {phase.trajectoryRows.length > 0 && (\n <div data-testid={`phase-${phase.number}-trajectory`}>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>ID</TableHead>\n <TableHead>Asserts</TableHead>\n <TableHead>Writable at</TableHead>\n <TableHead>Passes at</TableHead>\n <TableHead>State</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {phase.trajectoryRows.map((row) => (\n <TableRow key={row.id}>\n <TableCell>\n <span className=\"font-mono text-xs\">{row.id}</span>\n </TableCell>\n <TableCell>{row.asserts}</TableCell>\n <TableCell>Phase {row.writableAt}</TableCell>\n <TableCell>Phase {row.passesAt}</TableCell>\n <TableCell>\n <Badge variant={stateToBadge(row.state)}>\n {row.state}\n </Badge>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n <Markdown>{phase.content}</Markdown>\n </div>\n </CollapsibleSection>\n ))}\n </div>\n </section>\n );\n}\n\nfunction RawDocumentsSection({\n rawDocuments,\n}: {\n rawDocuments: Record<string, string>;\n}) {\n const entries = Object.entries(rawDocuments);\n if (entries.length === 0) return null;\n return (\n <section\n className=\"flex flex-col gap-2\"\n data-testid=\"raw-documents-section\"\n >\n <h2 className=\"text-base font-semibold text-gray-900\">\n Raw documents (malformed frontmatter)\n </h2>\n <p className=\"text-xs text-gray-500\">\n These files couldn't be parsed. Showing the raw markdown so you can\n diagnose. Fix the YAML frontmatter and refresh.\n </p>\n <div className=\"flex flex-col gap-2\">\n {entries.map(([filename, raw]) => (\n <CollapsibleSection\n key={filename}\n title={filename}\n defaultOpen={false}\n >\n <pre\n className=\"overflow-x-auto rounded bg-gray-50 p-3 text-xs font-mono text-gray-800 whitespace-pre-wrap\"\n data-testid={`raw-${filename}`}\n >\n {raw}\n </pre>\n </CollapsibleSection>\n ))}\n </div>\n </section>\n );\n}\n\nfunction FalsificationSection({\n plan,\n phase,\n}: {\n plan: Plan;\n phase: Phase | null;\n}) {\n // Priority: phase-authoring flow (new, 1.27.4+) > legacy log file > empty state.\n if (phase) {\n return <FalsificationPhaseSection phase={phase} />;\n }\n if (!plan.falsification) {\n return (\n <section\n className=\"flex flex-col gap-2\"\n data-testid=\"falsification-section\"\n >\n <header className=\"flex items-center justify-between\">\n <h2 className=\"text-base font-semibold text-gray-900\">\n Falsification\n </h2>\n <CopyButton text={falsificationLogMarkdown(undefined)} />\n </header>\n <p className=\"text-sm text-gray-500\" data-testid=\"falsification-empty\">\n No falsification ritual run for this plan.\n </p>\n </section>\n );\n }\n\n const hypotheses = plan.falsification.entries.filter(isHypothesis);\n const terminator = plan.falsification.entries.find(isTerminator);\n\n return (\n <section\n className=\"flex flex-col gap-2\"\n data-testid=\"falsification-section\"\n >\n <header className=\"flex items-center justify-between gap-2\">\n <h2 className=\"text-base font-semibold text-gray-900\">Falsification</h2>\n <span className=\"flex items-center gap-2\">\n <Badge variant={plan.falsification.complete ? \"passing\" : \"writable\"}>\n {plan.falsification.complete ? \"complete\" : \"in-progress\"}\n </Badge>\n <CopyButton text={falsificationLogMarkdown(plan.falsification)} />\n </span>\n </header>\n {hypotheses.length === 0 && (\n <p className=\"text-sm text-gray-500\">No hypotheses logged yet.</p>\n )}\n {hypotheses.length > 0 && (\n <ul\n className=\"flex flex-col gap-3\"\n data-testid=\"falsification-hypotheses\"\n >\n {hypotheses.map((entry) => (\n <HypothesisItem\n key={`${entry.timestamp}-${entry.hypothesis.slice(0, 32)}`}\n entry={entry}\n />\n ))}\n </ul>\n )}\n {terminator && (\n <div\n className=\"rounded border border-gray-200 bg-gray-50 px-3 py-2 text-sm text-gray-700\"\n data-testid=\"falsification-terminator\"\n >\n <span className=\"font-semibold\">Terminated:</span> {terminator.reason}\n </div>\n )}\n </section>\n );\n}\n\n/**\n * Render a falsification phase (new phase-authoring flow, 1.27.4+). Hypotheses\n * come from the phase's trajectory rows (each row == one hypothesis); fix items\n * come from the phase's checklist. Status badge derives from the combined state\n * of trajectory rows + unchecked checklist items.\n */\nfunction FalsificationPhaseSection({ phase }: { phase: Phase }) {\n const checklistItems = extractChecklistItems(phase.content);\n const allTrajectoryTerminal = phase.trajectoryRows.every(\n (r) => r.state === \"passing\" || r.state === \"skipped\",\n );\n const allItemsChecked = checklistItems.every((i) => i.checked);\n const complete = allTrajectoryTerminal && allItemsChecked;\n\n return (\n <section\n className=\"flex flex-col gap-2\"\n data-testid=\"falsification-section\"\n >\n <header className=\"flex items-center justify-between gap-2\">\n <h2 className=\"text-base font-semibold text-gray-900\">\n Falsification\n {phase.title ? (\n <span className=\"ml-2 text-sm font-normal text-gray-500\">\n (Phase {phase.number}: {phase.title})\n </span>\n ) : null}\n </h2>\n <span className=\"flex items-center gap-2\">\n <Badge variant={complete ? \"passing\" : \"writable\"}>\n {complete ? \"complete\" : \"in-progress\"}\n </Badge>\n <CopyButton text={falsificationPhaseMarkdown(phase)} />\n </span>\n </header>\n\n {phase.trajectoryRows.length > 0 && (\n <div data-testid=\"falsification-hypotheses\">\n <h3 className=\"text-sm font-semibold text-gray-800 mt-1\">\n Hypotheses\n </h3>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>ID</TableHead>\n <TableHead>Asserts</TableHead>\n <TableHead>State</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {phase.trajectoryRows.map((row) => (\n <TableRow key={row.id}>\n <TableCell>\n <span className=\"font-mono text-xs\">{row.id}</span>\n </TableCell>\n <TableCell>{row.asserts}</TableCell>\n <TableCell>\n <Badge variant={stateToBadge(row.state)}>{row.state}</Badge>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n\n {checklistItems.length > 0 && (\n <div data-testid=\"falsification-fix-items\" className=\"mt-2\">\n <h3 className=\"text-sm font-semibold text-gray-800\">Fix items</h3>\n <ul className=\"flex flex-col gap-1\">\n {checklistItems.map((item) => (\n <li\n key={`${item.checked ? \"x\" : \"o\"}-${item.text}`}\n className=\"flex items-start gap-2 text-sm text-gray-700\"\n >\n <span className=\"font-mono text-xs text-gray-500\">\n [{item.checked ? \"x\" : \" \"}]\n </span>\n <span\n className={item.checked ? \"text-gray-500 line-through\" : \"\"}\n >\n {item.text}\n </span>\n </li>\n ))}\n </ul>\n </div>\n )}\n </section>\n );\n}\n\nfunction HypothesisItem({ entry }: { entry: HypothesisEntry }) {\n return (\n <li\n className=\"flex flex-col gap-1 rounded border border-gray-200 px-3 py-2\"\n data-testid={`hypothesis-${entry.outcome}`}\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-semibold text-gray-900\">Hypothesis</span>\n <Badge variant={outcomeToBadge(entry.outcome)}>{entry.outcome}</Badge>\n </div>\n <p className=\"text-sm text-gray-700\">{entry.hypothesis}</p>\n {entry.testPath && (\n <p className=\"text-xs text-gray-500 font-mono\">{entry.testPath}</p>\n )}\n {entry.note && <p className=\"text-xs text-gray-500\">{entry.note}</p>}\n </li>\n );\n}\n\nfunction isHypothesis(entry: LogEntry): entry is HypothesisEntry {\n return entry.kind === \"hypothesis\";\n}\n\nfunction isTerminator(entry: LogEntry): entry is TerminatorEntry {\n return entry.kind === \"terminator\";\n}\n\nfunction outcomeToBadge(outcome: HypothesisOutcome): BadgeVariant {\n if (outcome === \"fix-in-scope\") return \"passing\";\n if (outcome === \"spawn-plan\") return \"writable\";\n return \"neutral\"; // accept-finding\n}\n\nfunction statusToBadge(status: string): BadgeVariant {\n const normalized = status.toLowerCase();\n if (normalized.includes(\"completed\") || normalized.includes(\"passing\"))\n return \"passing\";\n if (normalized.includes(\"blocked\")) return \"blocked\";\n if (normalized.includes(\"in-progress\") || normalized.includes(\"accepted\"))\n return \"writable\";\n if (normalized.includes(\"draft\") || normalized.includes(\"planned\"))\n return \"planned\";\n return \"neutral\";\n}\n\nfunction stateToBadge(state: string): BadgeVariant {\n const normalized = state.toLowerCase();\n if (\n [\n \"passing\",\n \"blocked\",\n \"skipped\",\n \"planned\",\n \"writable\",\n \"written\",\n ].includes(normalized)\n ) {\n return normalized as BadgeVariant;\n }\n return \"neutral\";\n}\n","import type {\n Trajectory,\n TrajectoryRow,\n} from \"@infinitedusky/indusk-mcp/trajectory/parser\";\n\n/**\n * Parsed phase from an impl.md `## Checklist` section.\n *\n * The phase parser walks the markdown body, splits on `### Phase N: Title`\n * headings (level-3 H3), and groups every line up to the next `### Phase`\n * heading (or end of document) as that phase's content. It does NOT separate\n * verification / context / document gates — those are still raw markdown\n * inside `content`. The PhasesSection component renders the content as\n * markdown wrapped in a CollapsibleSection.\n *\n * Trajectory rows belonging to a phase are matched via the trajectory's\n * `Passes at` column (rows that pass at this phase number). This pairing\n * makes T8 satisfiable — every phase shows the rows that should flip in it.\n */\nexport interface Phase {\n number: number;\n title: string;\n /** Raw markdown content (everything between this phase's heading and the next). */\n content: string;\n /** Trajectory rows whose `Passes at` is this phase's number. */\n trajectoryRows: TrajectoryRow[];\n}\n\nconst PHASE_HEADING_RE = /^###\\s+Phase\\s+(\\d+)(?::\\s*(.*))?$/m;\n\n/**\n * Extract phases from an impl.md body. Returns phases in the order they appear\n * in the markdown. Returns `[]` if no `### Phase N` headings are present.\n *\n * Stops scanning at any level-2 heading after the first phase (so the trailing\n * `## Files Affected`, `## Dependencies`, `## Notes` sections don't bleed into\n * the last phase).\n */\nexport function extractPhases(\n implContent: string,\n trajectory?: Trajectory,\n): Phase[] {\n const lines = implContent.split(\"\\n\");\n const phases: Phase[] = [];\n let current: { number: number; title: string; lines: string[] } | null = null;\n let stoppedAtL2 = false;\n\n for (const line of lines) {\n if (stoppedAtL2) break;\n\n const phaseMatch = line.match(PHASE_HEADING_RE);\n if (phaseMatch) {\n if (current) {\n phases.push(buildPhase(current, trajectory));\n }\n current = {\n number: Number.parseInt(phaseMatch[1], 10),\n title: (phaseMatch[2] ?? \"\").trim(),\n lines: [],\n };\n continue;\n }\n\n // Stop on any level-2 heading we encounter AFTER the first phase\n if (current && /^##\\s+\\S/.test(line) && !/^###/.test(line)) {\n stoppedAtL2 = true;\n break;\n }\n\n if (current) current.lines.push(line);\n }\n\n if (current) phases.push(buildPhase(current, trajectory));\n return phases;\n}\n\nfunction buildPhase(\n raw: { number: number; title: string; lines: string[] },\n trajectory: Trajectory | undefined,\n): Phase {\n const trajectoryRows = trajectory\n ? trajectory.rows.filter((r) => r.passesAt === raw.number)\n : [];\n return {\n number: raw.number,\n title: raw.title,\n content: raw.lines.join(\"\\n\").trim(),\n trajectoryRows,\n };\n}\n\n/**\n * Split a phase list into three groups around the falsification phase:\n * - `pre`: phases BEFORE the falsification phase\n * - `falsification`: the phase whose title contains \"Falsification\" (case-insensitive);\n * `null` when no such phase exists\n * - `post`: phases AFTER the falsification phase (fix-in-scope follow-ups\n * derived from the ritual)\n *\n * If multiple phases have \"Falsification\" in the title, the FIRST match wins —\n * later ones fall into `post`. In practice plans author exactly one falsification\n * phase; the first-match rule is a defensive choice for the edge case.\n *\n * Matching is a case-insensitive substring, not a regex — the /falsify skill's\n * recommended convention is `### Phase N: Falsification — {summary}` but the\n * title field is free-form, so we match the word loosely.\n */\nexport interface PhaseSplit {\n pre: Phase[];\n falsification: Phase | null;\n post: Phase[];\n}\n\nexport function splitPhasesAroundFalsification(phases: Phase[]): PhaseSplit {\n const idx = phases.findIndex((p) =>\n p.title.toLowerCase().includes(\"falsification\"),\n );\n if (idx === -1) {\n return { pre: phases, falsification: null, post: [] };\n }\n return {\n pre: phases.slice(0, idx),\n falsification: phases[idx],\n post: phases.slice(idx + 1),\n };\n}\n\n/**\n * Extract `- [ ]` / `- [x]` checklist items from markdown content. Used by\n * the falsification-phase rendering to surface fix items as a discrete list.\n *\n * Intentionally narrow — not a general markdown AST parser. Matches only the\n * standard GFM task-list shape at line start with mandatory space between\n * brackets. Uppercase `X` is rejected (contract is lowercase `x`) so we don't\n * silently accept non-standard syntax.\n */\nexport interface ChecklistItem {\n text: string;\n checked: boolean;\n}\n\nconst CHECKLIST_ITEM_RE = /^- \\[( |x)\\] (.+)$/;\n\nexport function extractChecklistItems(markdown: string): ChecklistItem[] {\n const items: ChecklistItem[] = [];\n for (const line of markdown.split(\"\\n\")) {\n const match = line.match(CHECKLIST_ITEM_RE);\n if (match) {\n items.push({\n checked: match[1] === \"x\",\n text: match[2].trim(),\n });\n }\n }\n return items;\n}\n","import type {\n HypothesisEntry,\n TerminatorEntry,\n} from \"@infinitedusky/indusk-mcp/falsification/log\";\nimport type { TrajectoryRow } from \"@infinitedusky/indusk-mcp/trajectory/parser\";\nimport {\n type ChecklistItem,\n extractChecklistItems,\n extractPhases,\n type Phase,\n splitPhasesAroundFalsification,\n} from \"@/lib/phases\";\nimport type { Plan } from \"@/lib/planning-reader\";\n\n/**\n * Plain-markdown serialization of PlanDetail's rendered sections — used by\n * the copy-to-clipboard affordances. Mirrors `PlanDetail.tsx`'s rendering\n * decisions (falsification phase priority, phase splitting) but is kept\n * separate from the component tree since its job is text assembly, not JSX.\n *\n * Every function returns markdown starting with a `##` heading so pasting a\n * single section elsewhere (e.g. Notion) keeps the section's own title.\n */\n\nexport function sectionMarkdown(heading: string, body: string): string {\n const trimmed = body.trim();\n return trimmed ? `## ${heading}\\n\\n${trimmed}` : `## ${heading}`;\n}\n\nexport function trajectoryTableMarkdown(rows: TrajectoryRow[]): string {\n if (rows.length === 0) return \"\";\n const header = \"| ID | Asserts | Writable at | Passes at | State |\";\n const divider = \"| --- | --- | --- | --- | --- |\";\n const body = rows.map(\n (row) =>\n `| ${row.id} | ${row.asserts} | Phase ${row.writableAt} | Phase ${row.passesAt} | ${row.state} |`,\n );\n return [header, divider, ...body].join(\"\\n\");\n}\n\nexport function checklistMarkdown(items: ChecklistItem[]): string {\n return items\n .map((item) => `- [${item.checked ? \"x\" : \" \"}] ${item.text}`)\n .join(\"\\n\");\n}\n\nexport function phaseMarkdown(phase: Phase): string {\n const heading = `Phase ${phase.number}${phase.title ? `: ${phase.title}` : \"\"}`;\n const table = trajectoryTableMarkdown(phase.trajectoryRows);\n const body = [table, phase.content].filter(Boolean).join(\"\\n\\n\");\n return sectionMarkdown(heading, body);\n}\n\nfunction hypothesisMarkdown(entry: HypothesisEntry): string {\n const lines = [`**Hypothesis (${entry.outcome})**`, entry.hypothesis];\n if (entry.testPath) lines.push(`\\`${entry.testPath}\\``);\n if (entry.note) lines.push(entry.note);\n return lines.join(\"\\n\\n\");\n}\n\n/** Falsification rendering for the legacy `falsification.md`-log path. */\nexport function falsificationLogMarkdown(\n falsification: Plan[\"falsification\"],\n): string {\n if (!falsification) {\n return sectionMarkdown(\n \"Falsification\",\n \"No falsification ritual run for this plan.\",\n );\n }\n const hypotheses = falsification.entries.filter(\n (e): e is HypothesisEntry => e.kind === \"hypothesis\",\n );\n const terminator = falsification.entries.find(\n (e): e is TerminatorEntry => e.kind === \"terminator\",\n );\n const parts = hypotheses.map(hypothesisMarkdown);\n if (terminator) parts.push(`**Terminated:** ${terminator.reason}`);\n return sectionMarkdown(\n \"Falsification\",\n parts.length > 0 ? parts.join(\"\\n\\n\") : \"No hypotheses logged yet.\",\n );\n}\n\n/** Falsification rendering for the phase-authoring flow (1.27.4+). */\nexport function falsificationPhaseMarkdown(phase: Phase): string {\n const heading = `Falsification${phase.title ? ` (Phase ${phase.number}: ${phase.title})` : \"\"}`;\n const checklistItems = extractChecklistItems(phase.content);\n const table = trajectoryTableMarkdown(phase.trajectoryRows);\n const checklist = checklistMarkdown(checklistItems);\n const parts = [\n table && `### Hypotheses\\n\\n${table}`,\n checklist && `### Fix items\\n\\n${checklist}`,\n ].filter(Boolean);\n return sectionMarkdown(heading, parts.join(\"\\n\\n\"));\n}\n\n/**\n * Full-plan markdown for the \"copy whole plan\" affordance — every present\n * section concatenated in the same order `PlanDetail` renders them, each\n * separated by a horizontal rule so pasting into Notion keeps sections\n * visually distinct.\n */\nexport function planMarkdown(plan: Plan): string {\n const sections: string[] = [`# ${plan.name}\\n\\nStatus: ${plan.status}`];\n\n if (plan.research)\n sections.push(sectionMarkdown(\"Research\", plan.research.content));\n if (plan.brief) sections.push(sectionMarkdown(\"Brief\", plan.brief.content));\n if (plan.testPlan)\n sections.push(sectionMarkdown(\"Test Plan\", plan.testPlan.content));\n if (plan.adr)\n sections.push(sectionMarkdown(\"ADR — Goal + Decision\", plan.adr.content));\n\n if (plan.impl) {\n const phases = extractPhases(plan.impl.content, plan.impl.trajectory);\n const split = splitPhasesAroundFalsification(phases);\n for (const phase of split.pre) sections.push(phaseMarkdown(phase));\n sections.push(\n split.falsification\n ? falsificationPhaseMarkdown(split.falsification)\n : falsificationLogMarkdown(plan.falsification),\n );\n for (const phase of split.post) sections.push(phaseMarkdown(phase));\n } else {\n sections.push(falsificationLogMarkdown(plan.falsification));\n }\n\n return sections.join(\"\\n\\n---\\n\\n\");\n}\n"],"names":["CopyButton","Error","PHASE_HEADING_RE","extractPhases","implContent","trajectory","lines","split","phases","current","stoppedAtL2","line","phaseMatch","match","push","buildPhase","number","Number","parseInt","title","trim","test","raw","trajectoryRows","rows","filter","r","passesAt","content","join","splitPhasesAroundFalsification","idx","findIndex","p","toLowerCase","includes","pre","falsification","post","slice","CHECKLIST_ITEM_RE","extractChecklistItems","markdown","items","checked","text"],"mappings":"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","ignoreList":[0]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../apps/indusk-admin/src/components/ui/CopyButton.tsx/__nextjs-internal-proxy.mjs","../../../../../../apps/indusk-admin/src/app/p/%5Bproject%5D/plan/%5Bname%5D/page.tsx","../../../../../../apps/indusk-admin/src/components/PlanDetail.tsx","../../../../../../apps/indusk-admin/src/lib/phases.ts","../../../../../../apps/indusk-admin/src/lib/markdown-export.ts"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const CopyButton = registerClientReference(\n function() { throw new Error(\"Attempted to call CopyButton() from the server but CopyButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/apps/indusk-admin/src/components/ui/CopyButton.tsx\",\n \"CopyButton\",\n);\n","import { notFound } from \"next/navigation\";\nimport { PlanDetail } from \"@/components/PlanDetail\";\nimport { readActivePlans, readArchivedPlans } from \"@/lib/planning-reader\";\nimport { getProjectPath, projectPathExists } from \"@/lib/registry-client\";\n\ninterface PlanPageProps {\n params: Promise<{ project: string; name: string }>;\n}\n\n/**\n * Server component for `/p/{project}/plan/{name}`. Resolves the project's\n * path via the registry, reads every active + archived plan for that\n * project, finds the requested plan by folder name, and renders PlanDetail.\n *\n * The stale-project branch (path null OR deleted on disk) is handled by\n * the layout (`app/p/[project]/layout.tsx`) — it replaces its own output\n * with `<StaleProjectFailurePage>` in that case, so this page's rendered\n * element is never placed in the DOM. We early-return `null` when path is\n * stale so the page's own code doesn't trip on `readActivePlans` against\n * a deleted dir. `notFound()` is reserved for the genuinely plan-not-found\n * case (path OK, plan name wrong).\n */\nexport default async function PlanPage({ params }: PlanPageProps) {\n const { project, name } = await params;\n const projectPath = getProjectPath(project);\n if (!projectPath || !projectPathExists(projectPath)) return null;\n\n const [active, archived] = await Promise.all([\n readActivePlans(projectPath),\n readArchivedPlans(projectPath),\n ]);\n const plan =\n active.find((p) => p.name === name) ??\n archived.find((p) => p.name === name);\n if (!plan) {\n notFound();\n }\n return <PlanDetail plan={plan} />;\n}\n","import type {\n HypothesisEntry,\n HypothesisOutcome,\n LogEntry,\n TerminatorEntry,\n} from \"@infinitedusky/indusk-mcp/falsification/log\";\nimport { Markdown } from \"@/components/Markdown\";\nimport { Badge, type BadgeVariant } from \"@/components/ui/Badge\";\nimport { CollapsibleSection } from \"@/components/ui/CollapsibleSection\";\nimport { CopyButton } from \"@/components/ui/CopyButton\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/Table\";\nimport {\n falsificationLogMarkdown,\n falsificationPhaseMarkdown,\n phaseMarkdown,\n planMarkdown,\n sectionMarkdown,\n} from \"@/lib/markdown-export\";\nimport {\n extractChecklistItems,\n extractPhases,\n type Phase,\n splitPhasesAroundFalsification,\n} from \"@/lib/phases\";\nimport type { Plan } from \"@/lib/planning-reader\";\n\ninterface PlanDetailProps {\n plan: Plan;\n}\n\n/**\n * Main pane for a selected plan. Renders sections conditional on which\n * documents are present:\n * - Always: header (name + status badge)\n * - Brief.md: Markdown render of the brief content (Problem + Proposed Direction visible)\n * - test-plan.md: collapsible Markdown render\n * - ADR.md: collapsible Markdown render (Goal + Y-statement come through verbatim)\n * - Impl.md: PhasesSection — one CollapsibleSection per phase containing trajectory rows\n *\n * Missing documents simply don't render their section (T14). Malformed plans\n * surface a banner indicating malformed YAML; the components-that-can-render\n * still render with whatever data they have.\n */\nexport function PlanDetail({ plan }: PlanDetailProps) {\n return (\n <article\n className=\"flex flex-col gap-6\"\n data-testid=\"plan-detail\"\n data-plan-name={plan.name}\n >\n <PlanHeader plan={plan} />\n\n {plan.malformed && <MalformedBanner />}\n\n {plan.malformed && plan.rawDocuments && (\n <RawDocumentsSection rawDocuments={plan.rawDocuments} />\n )}\n\n {plan.research && (\n <CollapsibleSection\n title=\"Research\"\n defaultOpen={!plan.brief}\n persistKey={`plan:${plan.name}:section:research`}\n copyMarkdown={sectionMarkdown(\"Research\", plan.research.content)}\n >\n <Markdown>{plan.research.content}</Markdown>\n </CollapsibleSection>\n )}\n\n {plan.brief && (\n <BriefSection planName={plan.name} content={plan.brief.content} />\n )}\n\n {plan.testPlan && (\n <CollapsibleSection\n title=\"Test Plan\"\n defaultOpen={false}\n persistKey={`plan:${plan.name}:section:test-plan`}\n copyMarkdown={sectionMarkdown(\"Test Plan\", plan.testPlan.content)}\n >\n <Markdown>{plan.testPlan.content}</Markdown>\n </CollapsibleSection>\n )}\n\n {plan.adr && (\n <CollapsibleSection\n title=\"ADR — Goal + Decision\"\n defaultOpen={false}\n persistKey={`plan:${plan.name}:section:adr`}\n copyMarkdown={sectionMarkdown(\n \"ADR — Goal + Decision\",\n plan.adr.content,\n )}\n >\n <Markdown>{plan.adr.content}</Markdown>\n </CollapsibleSection>\n )}\n\n {plan.impl && <ImplSections plan={plan} />}\n {!plan.impl && <FalsificationSection plan={plan} phase={null} />}\n </article>\n );\n}\n\n/**\n * When an impl.md exists, split its phases into pre-falsification / falsification\n * / post-falsification groups and render each in its own section. The\n * falsification phase (if any) is rendered by `FalsificationSection` instead of\n * mixed into the main Phases section. Post-falsification phases render below as\n * \"Follow-up Phases\" — the fix-in-scope derivatives of the ritual.\n *\n * When no impl is present, the PlanDetail top-level still shows a\n * FalsificationSection directly (legacy-log-only path).\n */\nfunction ImplSections({ plan }: { plan: Plan }) {\n if (!plan.impl) return null;\n const phases = extractPhases(plan.impl.content, plan.impl.trajectory);\n const split = splitPhasesAroundFalsification(phases);\n return (\n <>\n {split.pre.length > 0 && (\n <PhasesSection\n phases={split.pre}\n heading=\"Phases\"\n testId=\"phases-section\"\n planName={plan.name}\n />\n )}\n <FalsificationSection plan={plan} phase={split.falsification} />\n {split.post.length > 0 && (\n <PhasesSection\n phases={split.post}\n heading=\"Follow-up Phases\"\n testId=\"followup-phases-section\"\n planName={plan.name}\n />\n )}\n </>\n );\n}\n\nfunction PlanHeader({ plan }: { plan: Plan }) {\n return (\n <header\n className=\"flex items-center justify-between border-b border-gray-200 pb-3\"\n data-testid=\"plan-header\"\n >\n <div className=\"flex flex-col\">\n <h1 className=\"text-xl font-semibold text-gray-900\">{plan.name}</h1>\n <span className=\"text-xs text-gray-500\">\n {plan.archived ? \"archived\" : \"active\"}\n </span>\n </div>\n <div className=\"flex items-center gap-3\">\n <Badge variant={statusToBadge(plan.status)}>{plan.status}</Badge>\n <CopyButton\n text={planMarkdown(plan)}\n label=\"Copy whole plan as markdown\"\n data-testid=\"copy-plan-button\"\n />\n </div>\n </header>\n );\n}\n\nfunction MalformedBanner() {\n return (\n <div\n className=\"rounded border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700\"\n data-testid=\"malformed-banner\"\n >\n ⚠ This plan has malformed YAML frontmatter. Some sections may be missing\n or rendered with default values.\n </div>\n );\n}\n\nfunction BriefSection({\n planName,\n content,\n}: {\n planName: string;\n content: string;\n}) {\n return (\n <section className=\"flex flex-col gap-2\" data-testid=\"brief-section\">\n <CollapsibleSection\n title=\"Brief\"\n defaultOpen={true}\n persistKey={`plan:${planName}:section:brief`}\n copyMarkdown={sectionMarkdown(\"Brief\", content)}\n >\n <Markdown>{content}</Markdown>\n </CollapsibleSection>\n </section>\n );\n}\n\nfunction PhasesSection({\n phases,\n heading,\n testId,\n planName,\n}: {\n phases: Phase[];\n heading: string;\n testId: string;\n planName: string;\n}) {\n if (phases.length === 0) return null;\n\n return (\n <section className=\"flex flex-col gap-2\" data-testid={testId}>\n <h2 className=\"text-base font-semibold text-gray-900\">{heading}</h2>\n <div className=\"flex flex-col gap-2\">\n {phases.map((phase) => (\n <CollapsibleSection\n key={phase.number}\n title={`Phase ${phase.number}${phase.title ? `: ${phase.title}` : \"\"}`}\n defaultOpen={false}\n persistKey={`plan:${planName}:phase:${phase.number}`}\n copyMarkdown={phaseMarkdown(phase)}\n >\n <div className=\"flex flex-col gap-3\">\n {phase.trajectoryRows.length > 0 && (\n <div data-testid={`phase-${phase.number}-trajectory`}>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>ID</TableHead>\n <TableHead>Asserts</TableHead>\n <TableHead>Writable at</TableHead>\n <TableHead>Passes at</TableHead>\n <TableHead>State</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {phase.trajectoryRows.map((row) => (\n <TableRow key={row.id}>\n <TableCell>\n <span className=\"font-mono text-xs\">{row.id}</span>\n </TableCell>\n <TableCell>{row.asserts}</TableCell>\n <TableCell>Phase {row.writableAt}</TableCell>\n <TableCell>Phase {row.passesAt}</TableCell>\n <TableCell>\n <Badge variant={stateToBadge(row.state)}>\n {row.state}\n </Badge>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n <Markdown>{phase.content}</Markdown>\n </div>\n </CollapsibleSection>\n ))}\n </div>\n </section>\n );\n}\n\nfunction RawDocumentsSection({\n rawDocuments,\n}: {\n rawDocuments: Record<string, string>;\n}) {\n const entries = Object.entries(rawDocuments);\n if (entries.length === 0) return null;\n return (\n <section\n className=\"flex flex-col gap-2\"\n data-testid=\"raw-documents-section\"\n >\n <h2 className=\"text-base font-semibold text-gray-900\">\n Raw documents (malformed frontmatter)\n </h2>\n <p className=\"text-xs text-gray-500\">\n These files couldn't be parsed. Showing the raw markdown so you can\n diagnose. Fix the YAML frontmatter and refresh.\n </p>\n <div className=\"flex flex-col gap-2\">\n {entries.map(([filename, raw]) => (\n <CollapsibleSection\n key={filename}\n title={filename}\n defaultOpen={false}\n >\n <pre\n className=\"overflow-x-auto rounded bg-gray-50 p-3 text-xs font-mono text-gray-800 whitespace-pre-wrap\"\n data-testid={`raw-${filename}`}\n >\n {raw}\n </pre>\n </CollapsibleSection>\n ))}\n </div>\n </section>\n );\n}\n\nfunction FalsificationSection({\n plan,\n phase,\n}: {\n plan: Plan;\n phase: Phase | null;\n}) {\n // Priority: phase-authoring flow (new, 1.27.4+) > legacy log file > empty state.\n if (phase) {\n return <FalsificationPhaseSection planName={plan.name} phase={phase} />;\n }\n if (!plan.falsification) {\n return (\n <section\n className=\"flex flex-col gap-2\"\n data-testid=\"falsification-section\"\n >\n <CollapsibleSection\n title=\"Falsification\"\n defaultOpen={true}\n persistKey={`plan:${plan.name}:section:falsification`}\n copyMarkdown={falsificationLogMarkdown(undefined)}\n >\n <p\n className=\"text-sm text-gray-500\"\n data-testid=\"falsification-empty\"\n >\n No falsification ritual run for this plan.\n </p>\n </CollapsibleSection>\n </section>\n );\n }\n\n const hypotheses = plan.falsification.entries.filter(isHypothesis);\n const terminator = plan.falsification.entries.find(isTerminator);\n\n return (\n <section\n className=\"flex flex-col gap-2\"\n data-testid=\"falsification-section\"\n >\n <CollapsibleSection\n title=\"Falsification\"\n defaultOpen={true}\n persistKey={`plan:${plan.name}:section:falsification`}\n headerRight={\n <Badge variant={plan.falsification.complete ? \"passing\" : \"writable\"}>\n {plan.falsification.complete ? \"complete\" : \"in-progress\"}\n </Badge>\n }\n copyMarkdown={falsificationLogMarkdown(plan.falsification)}\n >\n <div className=\"flex flex-col gap-2\">\n {hypotheses.length === 0 && (\n <p className=\"text-sm text-gray-500\">No hypotheses logged yet.</p>\n )}\n {hypotheses.length > 0 && (\n <ul\n className=\"flex flex-col gap-3\"\n data-testid=\"falsification-hypotheses\"\n >\n {hypotheses.map((entry) => (\n <HypothesisItem\n key={`${entry.timestamp}-${entry.hypothesis.slice(0, 32)}`}\n entry={entry}\n />\n ))}\n </ul>\n )}\n {terminator && (\n <div\n className=\"rounded border border-gray-200 bg-gray-50 px-3 py-2 text-sm text-gray-700\"\n data-testid=\"falsification-terminator\"\n >\n <span className=\"font-semibold\">Terminated:</span>{\" \"}\n {terminator.reason}\n </div>\n )}\n </div>\n </CollapsibleSection>\n </section>\n );\n}\n\n/**\n * Render a falsification phase (new phase-authoring flow, 1.27.4+). Hypotheses\n * come from the phase's trajectory rows (each row == one hypothesis); fix items\n * come from the phase's checklist. Status badge derives from the combined state\n * of trajectory rows + unchecked checklist items.\n */\nfunction FalsificationPhaseSection({\n planName,\n phase,\n}: {\n planName: string;\n phase: Phase;\n}) {\n const checklistItems = extractChecklistItems(phase.content);\n const allTrajectoryTerminal = phase.trajectoryRows.every(\n (r) => r.state === \"passing\" || r.state === \"skipped\",\n );\n const allItemsChecked = checklistItems.every((i) => i.checked);\n const complete = allTrajectoryTerminal && allItemsChecked;\n\n return (\n <section\n className=\"flex flex-col gap-2\"\n data-testid=\"falsification-section\"\n >\n <CollapsibleSection\n title={\n <>\n Falsification\n {phase.title ? (\n <span className=\"ml-2 text-xs font-normal text-gray-500\">\n (Phase {phase.number}: {phase.title})\n </span>\n ) : null}\n </>\n }\n defaultOpen={true}\n persistKey={`plan:${planName}:section:falsification`}\n headerRight={\n <Badge variant={complete ? \"passing\" : \"writable\"}>\n {complete ? \"complete\" : \"in-progress\"}\n </Badge>\n }\n copyMarkdown={falsificationPhaseMarkdown(phase)}\n >\n <div className=\"flex flex-col gap-2\">\n {phase.trajectoryRows.length > 0 && (\n <div data-testid=\"falsification-hypotheses\">\n <h3 className=\"text-sm font-semibold text-gray-800 mt-1\">\n Hypotheses\n </h3>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>ID</TableHead>\n <TableHead>Asserts</TableHead>\n <TableHead>State</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {phase.trajectoryRows.map((row) => (\n <TableRow key={row.id}>\n <TableCell>\n <span className=\"font-mono text-xs\">{row.id}</span>\n </TableCell>\n <TableCell>{row.asserts}</TableCell>\n <TableCell>\n <Badge variant={stateToBadge(row.state)}>\n {row.state}\n </Badge>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n\n {checklistItems.length > 0 && (\n <div data-testid=\"falsification-fix-items\" className=\"mt-2\">\n <h3 className=\"text-sm font-semibold text-gray-800\">Fix items</h3>\n <ul className=\"flex flex-col gap-1\">\n {checklistItems.map((item) => (\n <li\n key={`${item.checked ? \"x\" : \"o\"}-${item.text}`}\n className=\"flex items-start gap-2 text-sm text-gray-700\"\n >\n <span className=\"font-mono text-xs text-gray-500\">\n [{item.checked ? \"x\" : \" \"}]\n </span>\n <span\n className={\n item.checked ? \"text-gray-500 line-through\" : \"\"\n }\n >\n {item.text}\n </span>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n </CollapsibleSection>\n </section>\n );\n}\n\nfunction HypothesisItem({ entry }: { entry: HypothesisEntry }) {\n return (\n <li\n className=\"flex flex-col gap-1 rounded border border-gray-200 px-3 py-2\"\n data-testid={`hypothesis-${entry.outcome}`}\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-semibold text-gray-900\">Hypothesis</span>\n <Badge variant={outcomeToBadge(entry.outcome)}>{entry.outcome}</Badge>\n </div>\n <p className=\"text-sm text-gray-700\">{entry.hypothesis}</p>\n {entry.testPath && (\n <p className=\"text-xs text-gray-500 font-mono\">{entry.testPath}</p>\n )}\n {entry.note && <p className=\"text-xs text-gray-500\">{entry.note}</p>}\n </li>\n );\n}\n\nfunction isHypothesis(entry: LogEntry): entry is HypothesisEntry {\n return entry.kind === \"hypothesis\";\n}\n\nfunction isTerminator(entry: LogEntry): entry is TerminatorEntry {\n return entry.kind === \"terminator\";\n}\n\nfunction outcomeToBadge(outcome: HypothesisOutcome): BadgeVariant {\n if (outcome === \"fix-in-scope\") return \"passing\";\n if (outcome === \"spawn-plan\") return \"writable\";\n return \"neutral\"; // accept-finding\n}\n\nfunction statusToBadge(status: string): BadgeVariant {\n const normalized = status.toLowerCase();\n if (normalized.includes(\"completed\") || normalized.includes(\"passing\"))\n return \"passing\";\n if (normalized.includes(\"blocked\")) return \"blocked\";\n if (normalized.includes(\"in-progress\") || normalized.includes(\"accepted\"))\n return \"writable\";\n if (normalized.includes(\"draft\") || normalized.includes(\"planned\"))\n return \"planned\";\n return \"neutral\";\n}\n\nfunction stateToBadge(state: string): BadgeVariant {\n const normalized = state.toLowerCase();\n if (\n [\n \"passing\",\n \"blocked\",\n \"skipped\",\n \"planned\",\n \"writable\",\n \"written\",\n ].includes(normalized)\n ) {\n return normalized as BadgeVariant;\n }\n return \"neutral\";\n}\n","import type {\n Trajectory,\n TrajectoryRow,\n} from \"@infinitedusky/indusk-mcp/trajectory/parser\";\n\n/**\n * Parsed phase from an impl.md `## Checklist` section.\n *\n * The phase parser walks the markdown body, splits on `### Phase N: Title`\n * headings (level-3 H3), and groups every line up to the next `### Phase`\n * heading (or end of document) as that phase's content. It does NOT separate\n * verification / context / document gates — those are still raw markdown\n * inside `content`. The PhasesSection component renders the content as\n * markdown wrapped in a CollapsibleSection.\n *\n * Trajectory rows belonging to a phase are matched via the trajectory's\n * `Passes at` column (rows that pass at this phase number). This pairing\n * makes T8 satisfiable — every phase shows the rows that should flip in it.\n */\nexport interface Phase {\n number: number;\n title: string;\n /** Raw markdown content (everything between this phase's heading and the next). */\n content: string;\n /** Trajectory rows whose `Passes at` is this phase's number. */\n trajectoryRows: TrajectoryRow[];\n}\n\nconst PHASE_HEADING_RE = /^###\\s+Phase\\s+(\\d+)(?::\\s*(.*))?$/m;\n\n/**\n * Extract phases from an impl.md body. Returns phases in the order they appear\n * in the markdown. Returns `[]` if no `### Phase N` headings are present.\n *\n * Stops scanning at any level-2 heading after the first phase (so the trailing\n * `## Files Affected`, `## Dependencies`, `## Notes` sections don't bleed into\n * the last phase).\n */\nexport function extractPhases(\n implContent: string,\n trajectory?: Trajectory,\n): Phase[] {\n const lines = implContent.split(\"\\n\");\n const phases: Phase[] = [];\n let current: { number: number; title: string; lines: string[] } | null = null;\n let stoppedAtL2 = false;\n\n for (const line of lines) {\n if (stoppedAtL2) break;\n\n const phaseMatch = line.match(PHASE_HEADING_RE);\n if (phaseMatch) {\n if (current) {\n phases.push(buildPhase(current, trajectory));\n }\n current = {\n number: Number.parseInt(phaseMatch[1], 10),\n title: (phaseMatch[2] ?? \"\").trim(),\n lines: [],\n };\n continue;\n }\n\n // Stop on any level-2 heading we encounter AFTER the first phase\n if (current && /^##\\s+\\S/.test(line) && !/^###/.test(line)) {\n stoppedAtL2 = true;\n break;\n }\n\n if (current) current.lines.push(line);\n }\n\n if (current) phases.push(buildPhase(current, trajectory));\n return phases;\n}\n\nfunction buildPhase(\n raw: { number: number; title: string; lines: string[] },\n trajectory: Trajectory | undefined,\n): Phase {\n const trajectoryRows = trajectory\n ? trajectory.rows.filter((r) => r.passesAt === raw.number)\n : [];\n return {\n number: raw.number,\n title: raw.title,\n content: raw.lines.join(\"\\n\").trim(),\n trajectoryRows,\n };\n}\n\n/**\n * Split a phase list into three groups around the falsification phase:\n * - `pre`: phases BEFORE the falsification phase\n * - `falsification`: the phase whose title contains \"Falsification\" (case-insensitive);\n * `null` when no such phase exists\n * - `post`: phases AFTER the falsification phase (fix-in-scope follow-ups\n * derived from the ritual)\n *\n * If multiple phases have \"Falsification\" in the title, the FIRST match wins —\n * later ones fall into `post`. In practice plans author exactly one falsification\n * phase; the first-match rule is a defensive choice for the edge case.\n *\n * Matching is a case-insensitive substring, not a regex — the /falsify skill's\n * recommended convention is `### Phase N: Falsification — {summary}` but the\n * title field is free-form, so we match the word loosely.\n */\nexport interface PhaseSplit {\n pre: Phase[];\n falsification: Phase | null;\n post: Phase[];\n}\n\nexport function splitPhasesAroundFalsification(phases: Phase[]): PhaseSplit {\n const idx = phases.findIndex((p) =>\n p.title.toLowerCase().includes(\"falsification\"),\n );\n if (idx === -1) {\n return { pre: phases, falsification: null, post: [] };\n }\n return {\n pre: phases.slice(0, idx),\n falsification: phases[idx],\n post: phases.slice(idx + 1),\n };\n}\n\n/**\n * Extract `- [ ]` / `- [x]` checklist items from markdown content. Used by\n * the falsification-phase rendering to surface fix items as a discrete list.\n *\n * Intentionally narrow — not a general markdown AST parser. Matches only the\n * standard GFM task-list shape at line start with mandatory space between\n * brackets. Uppercase `X` is rejected (contract is lowercase `x`) so we don't\n * silently accept non-standard syntax.\n */\nexport interface ChecklistItem {\n text: string;\n checked: boolean;\n}\n\nconst CHECKLIST_ITEM_RE = /^- \\[( |x)\\] (.+)$/;\n\nexport function extractChecklistItems(markdown: string): ChecklistItem[] {\n const items: ChecklistItem[] = [];\n for (const line of markdown.split(\"\\n\")) {\n const match = line.match(CHECKLIST_ITEM_RE);\n if (match) {\n items.push({\n checked: match[1] === \"x\",\n text: match[2].trim(),\n });\n }\n }\n return items;\n}\n","import type {\n HypothesisEntry,\n TerminatorEntry,\n} from \"@infinitedusky/indusk-mcp/falsification/log\";\nimport type { TrajectoryRow } from \"@infinitedusky/indusk-mcp/trajectory/parser\";\nimport {\n type ChecklistItem,\n extractChecklistItems,\n extractPhases,\n type Phase,\n splitPhasesAroundFalsification,\n} from \"@/lib/phases\";\nimport type { Plan } from \"@/lib/planning-reader\";\n\n/**\n * Plain-markdown serialization of PlanDetail's rendered sections — used by\n * the copy-to-clipboard affordances. Mirrors `PlanDetail.tsx`'s rendering\n * decisions (falsification phase priority, phase splitting) but is kept\n * separate from the component tree since its job is text assembly, not JSX.\n *\n * Every function returns markdown starting with a `##` heading so pasting a\n * single section elsewhere (e.g. Notion) keeps the section's own title.\n */\n\nexport function sectionMarkdown(heading: string, body: string): string {\n const trimmed = body.trim();\n return trimmed ? `## ${heading}\\n\\n${trimmed}` : `## ${heading}`;\n}\n\nexport function trajectoryTableMarkdown(rows: TrajectoryRow[]): string {\n if (rows.length === 0) return \"\";\n const header = \"| ID | Asserts | Writable at | Passes at | State |\";\n const divider = \"| --- | --- | --- | --- | --- |\";\n const body = rows.map(\n (row) =>\n `| ${row.id} | ${row.asserts} | Phase ${row.writableAt} | Phase ${row.passesAt} | ${row.state} |`,\n );\n return [header, divider, ...body].join(\"\\n\");\n}\n\nexport function checklistMarkdown(items: ChecklistItem[]): string {\n return items\n .map((item) => `- [${item.checked ? \"x\" : \" \"}] ${item.text}`)\n .join(\"\\n\");\n}\n\nexport function phaseMarkdown(phase: Phase): string {\n const heading = `Phase ${phase.number}${phase.title ? `: ${phase.title}` : \"\"}`;\n const table = trajectoryTableMarkdown(phase.trajectoryRows);\n const body = [table, phase.content].filter(Boolean).join(\"\\n\\n\");\n return sectionMarkdown(heading, body);\n}\n\nfunction hypothesisMarkdown(entry: HypothesisEntry): string {\n const lines = [`**Hypothesis (${entry.outcome})**`, entry.hypothesis];\n if (entry.testPath) lines.push(`\\`${entry.testPath}\\``);\n if (entry.note) lines.push(entry.note);\n return lines.join(\"\\n\\n\");\n}\n\n/** Falsification rendering for the legacy `falsification.md`-log path. */\nexport function falsificationLogMarkdown(\n falsification: Plan[\"falsification\"],\n): string {\n if (!falsification) {\n return sectionMarkdown(\n \"Falsification\",\n \"No falsification ritual run for this plan.\",\n );\n }\n const hypotheses = falsification.entries.filter(\n (e): e is HypothesisEntry => e.kind === \"hypothesis\",\n );\n const terminator = falsification.entries.find(\n (e): e is TerminatorEntry => e.kind === \"terminator\",\n );\n const parts = hypotheses.map(hypothesisMarkdown);\n if (terminator) parts.push(`**Terminated:** ${terminator.reason}`);\n return sectionMarkdown(\n \"Falsification\",\n parts.length > 0 ? parts.join(\"\\n\\n\") : \"No hypotheses logged yet.\",\n );\n}\n\n/** Falsification rendering for the phase-authoring flow (1.27.4+). */\nexport function falsificationPhaseMarkdown(phase: Phase): string {\n const heading = `Falsification${phase.title ? ` (Phase ${phase.number}: ${phase.title})` : \"\"}`;\n const checklistItems = extractChecklistItems(phase.content);\n const table = trajectoryTableMarkdown(phase.trajectoryRows);\n const checklist = checklistMarkdown(checklistItems);\n const parts = [\n table && `### Hypotheses\\n\\n${table}`,\n checklist && `### Fix items\\n\\n${checklist}`,\n ].filter(Boolean);\n return sectionMarkdown(heading, parts.join(\"\\n\\n\"));\n}\n\n/**\n * Full-plan markdown for the \"copy whole plan\" affordance — every present\n * section concatenated in the same order `PlanDetail` renders them, each\n * separated by a horizontal rule so pasting into Notion keeps sections\n * visually distinct.\n */\nexport function planMarkdown(plan: Plan): string {\n const sections: string[] = [`# ${plan.name}\\n\\nStatus: ${plan.status}`];\n\n if (plan.research)\n sections.push(sectionMarkdown(\"Research\", plan.research.content));\n if (plan.brief) sections.push(sectionMarkdown(\"Brief\", plan.brief.content));\n if (plan.testPlan)\n sections.push(sectionMarkdown(\"Test Plan\", plan.testPlan.content));\n if (plan.adr)\n sections.push(sectionMarkdown(\"ADR — Goal + Decision\", plan.adr.content));\n\n if (plan.impl) {\n const phases = extractPhases(plan.impl.content, plan.impl.trajectory);\n const split = splitPhasesAroundFalsification(phases);\n for (const phase of split.pre) sections.push(phaseMarkdown(phase));\n sections.push(\n split.falsification\n ? falsificationPhaseMarkdown(split.falsification)\n : falsificationLogMarkdown(plan.falsification),\n );\n for (const phase of split.post) sections.push(phaseMarkdown(phase));\n } else {\n sections.push(falsificationLogMarkdown(plan.falsification));\n }\n\n return sections.join(\"\\n\\n---\\n\\n\");\n}\n"],"names":["CopyButton","Error","PHASE_HEADING_RE","extractPhases","implContent","trajectory","lines","split","phases","current","stoppedAtL2","line","phaseMatch","match","push","buildPhase","number","Number","parseInt","title","trim","test","raw","trajectoryRows","rows","filter","r","passesAt","content","join","splitPhasesAroundFalsification","idx","findIndex","p","toLowerCase","includes","pre","falsification","post","slice","CHECKLIST_ITEM_RE","extractChecklistItems","markdown","items","checked","text"],"mappings":"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","ignoreList":[0]}
|
|
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/chwqn4zbU29xc3s0HiFdC/_buildManifest.js",
|
|
11
|
+
"static/chwqn4zbU29xc3s0HiFdC/_ssgManifest.js",
|
|
12
|
+
"static/chwqn4zbU29xc3s0HiFdC/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/15r3deq0oc~d..js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><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/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.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;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/15r3deq0oc~d..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[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"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\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><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/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.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;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/15r3deq0oc~d..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[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"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\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"chwqn4zbU29xc3s0HiFdC\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"yDHopK6wXqiUo4cylhzQRnD7lWGZzhMZo+zOkhsGHjE=\"\n}"
|
package/admin/.next/trace
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":92,"timestamp":640335585207,"id":4,"parentId":1,"tags":{},"startTime":1785444116241,"traceId":"ad5f0a270b7270f0"},{"name":"load-custom-routes","duration":190,"timestamp":640335585347,"id":5,"parentId":1,"tags":{},"startTime":1785444116241,"traceId":"ad5f0a270b7270f0"},{"name":"create-dist-dir","duration":101,"timestamp":640335585549,"id":6,"parentId":1,"tags":{},"startTime":1785444116241,"traceId":"ad5f0a270b7270f0"},{"name":"clean","duration":25156,"timestamp":640335586142,"id":7,"parentId":1,"tags":{},"startTime":1785444116242,"traceId":"ad5f0a270b7270f0"},{"name":"discover-routes","duration":3166,"timestamp":640335616416,"id":8,"parentId":1,"tags":{},"startTime":1785444116272,"traceId":"ad5f0a270b7270f0"},{"name":"create-root-mapping","duration":32,"timestamp":640335619610,"id":9,"parentId":1,"tags":{},"startTime":1785444116275,"traceId":"ad5f0a270b7270f0"},{"name":"generate-route-types","duration":10026,"timestamp":640335620234,"id":10,"parentId":1,"tags":{},"startTime":1785444116276,"traceId":"ad5f0a270b7270f0"},{"name":"public-dir-conflict-check","duration":51,"timestamp":640335630306,"id":11,"parentId":1,"tags":{},"startTime":1785444116286,"traceId":"ad5f0a270b7270f0"},{"name":"generate-routes-manifest","duration":1178,"timestamp":640335630402,"id":12,"parentId":1,"tags":{},"startTime":1785444116286,"traceId":"ad5f0a270b7270f0"},{"name":"run-turbopack","duration":5202285,"timestamp":640335635469,"id":14,"parentId":1,"tags":{},"startTime":1785444116291,"traceId":"ad5f0a270b7270f0"},{"name":"turbopack-build-events","duration":39,"timestamp":640335769967,"id":15,"parentId":1,"tags":{},"startTime":1785444116426,"traceId":"ad5f0a270b7270f0"},{"name":"run-typescript","duration":2171455,"timestamp":640340881224,"id":16,"parentId":1,"tags":{},"startTime":1785444121537,"traceId":"ad5f0a270b7270f0"},{"name":"generate-required-server-files","duration":1087,"timestamp":640343054201,"id":18,"parentId":1,"tags":{},"startTime":1785444123710,"traceId":"ad5f0a270b7270f0"},{"name":"check-static-error-page","duration":3458,"timestamp":640343071438,"id":20,"parentId":19,"tags":{},"startTime":1785444123727,"traceId":"ad5f0a270b7270f0"},{"name":"is-page-static","duration":158167,"timestamp":640343078276,"id":30,"parentId":22,"tags":{},"startTime":1785444123734,"traceId":"ad5f0a270b7270f0"},{"name":"check-page","duration":162550,"timestamp":640343074013,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1785444123730,"traceId":"ad5f0a270b7270f0"},{"name":"is-page-static","duration":199667,"timestamp":640343078097,"id":29,"parentId":21,"tags":{},"startTime":1785444123734,"traceId":"ad5f0a270b7270f0"},{"name":"check-page","duration":204843,"timestamp":640343072951,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1785444123729,"traceId":"ad5f0a270b7270f0"},{"name":"is-page-static","duration":203509,"timestamp":640343078307,"id":31,"parentId":23,"tags":{},"startTime":1785444123734,"traceId":"ad5f0a270b7270f0"},{"name":"check-page","duration":207450,"timestamp":640343074388,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1785444123730,"traceId":"ad5f0a270b7270f0"},{"name":"is-page-static","duration":210488,"timestamp":640343082744,"id":33,"parentId":24,"tags":{},"startTime":1785444123738,"traceId":"ad5f0a270b7270f0"},{"name":"check-page","duration":218602,"timestamp":640343074662,"id":24,"parentId":19,"tags":{"page":"/p/[project]"},"startTime":1785444123730,"traceId":"ad5f0a270b7270f0"},{"name":"is-page-static","duration":211123,"timestamp":640343082659,"id":32,"parentId":28,"tags":{},"startTime":1785444123738,"traceId":"ad5f0a270b7270f0"},{"name":"check-page","duration":218964,"timestamp":640343074854,"id":28,"parentId":19,"tags":{"page":"/"},"startTime":1785444123730,"traceId":"ad5f0a270b7270f0"},{"name":"is-page-static","duration":215133,"timestamp":640343082842,"id":36,"parentId":27,"tags":{},"startTime":1785444123738,"traceId":"ad5f0a270b7270f0"},{"name":"check-page","duration":223235,"timestamp":640343074810,"id":27,"parentId":19,"tags":{"page":"/p/[project]/scorecards"},"startTime":1785444123730,"traceId":"ad5f0a270b7270f0"},{"name":"is-page-static","duration":215333,"timestamp":640343082809,"id":35,"parentId":26,"tags":{},"startTime":1785444123738,"traceId":"ad5f0a270b7270f0"},{"name":"check-page","duration":223406,"timestamp":640343074766,"id":26,"parentId":19,"tags":{"page":"/p/[project]/research/[slug]"},"startTime":1785444123730,"traceId":"ad5f0a270b7270f0"},{"name":"is-page-static","duration":215932,"timestamp":640343082781,"id":34,"parentId":25,"tags":{},"startTime":1785444123738,"traceId":"ad5f0a270b7270f0"},{"name":"check-page","duration":224019,"timestamp":640343074720,"id":25,"parentId":19,"tags":{"page":"/p/[project]/plan/[name]"},"startTime":1785444123730,"traceId":"ad5f0a270b7270f0"},{"name":"static-check","duration":231509,"timestamp":640343067246,"id":19,"parentId":1,"tags":{},"startTime":1785444123723,"traceId":"ad5f0a270b7270f0"},{"name":"write-routes-manifest","duration":2771,"timestamp":640343303059,"id":38,"parentId":1,"tags":{},"startTime":1785444123959,"traceId":"ad5f0a270b7270f0"},{"name":"load-dotenv","duration":25,"timestamp":640343312058,"id":41,"parentId":40,"tags":{},"startTime":1785444123968,"traceId":"ad5f0a270b7270f0"},{"name":"run-export-path-map","duration":185,"timestamp":640343313148,"id":42,"parentId":40,"tags":{},"startTime":1785444123969,"traceId":"ad5f0a270b7270f0"},{"name":"next-export","duration":188098,"timestamp":640343311553,"id":40,"parentId":1,"tags":{},"startTime":1785444123967,"traceId":"ad5f0a270b7270f0"},{"name":"move-exported-app-global-error-","duration":437,"timestamp":640343500339,"id":43,"parentId":39,"tags":{},"startTime":1785444124156,"traceId":"ad5f0a270b7270f0"},{"name":"static-generation","duration":193591,"timestamp":640343307908,"id":39,"parentId":1,"tags":{},"startTime":1785444123963,"traceId":"ad5f0a270b7270f0"},{"name":"write-routes-manifest","duration":158,"timestamp":640343501594,"id":44,"parentId":1,"tags":{},"startTime":1785444124157,"traceId":"ad5f0a270b7270f0"},{"name":"print-tree-view","duration":1891,"timestamp":640343506797,"id":45,"parentId":1,"tags":{},"startTime":1785444124162,"traceId":"ad5f0a270b7270f0"},{"name":"write-route-bundle-stats","duration":5287,"timestamp":640343508702,"id":46,"parentId":1,"tags":{},"startTime":1785444124164,"traceId":"ad5f0a270b7270f0"},{"name":"telemetry-flush","duration":489155,"timestamp":640343514002,"id":47,"parentId":1,"tags":{},"startTime":1785444124170,"traceId":"ad5f0a270b7270f0"},{"name":"next-build","duration":8507223,"timestamp":640335495991,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1785444116152,"traceId":"ad5f0a270b7270f0"}]
|
package/admin/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":5202285,"timestamp":640335635469,"id":14,"parentId":1,"tags":{},"startTime":1785444116291,"traceId":"ad5f0a270b7270f0"},{"name":"turbopack-build-events","duration":39,"timestamp":640335769967,"id":15,"parentId":1,"tags":{},"startTime":1785444116426,"traceId":"ad5f0a270b7270f0"},{"name":"run-typescript","duration":2171455,"timestamp":640340881224,"id":16,"parentId":1,"tags":{},"startTime":1785444121537,"traceId":"ad5f0a270b7270f0"},{"name":"static-check","duration":231509,"timestamp":640343067246,"id":19,"parentId":1,"tags":{},"startTime":1785444123723,"traceId":"ad5f0a270b7270f0"},{"name":"static-generation","duration":193591,"timestamp":640343307908,"id":39,"parentId":1,"tags":{},"startTime":1785444123963,"traceId":"ad5f0a270b7270f0"},{"name":"telemetry-flush","duration":489155,"timestamp":640343514002,"id":47,"parentId":1,"tags":{},"startTime":1785444124170,"traceId":"ad5f0a270b7270f0"},{"name":"next-build","duration":8507223,"timestamp":640335495991,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1785444116152,"traceId":"ad5f0a270b7270f0"}]
|
package/package.json
CHANGED
package/skills/work.md
CHANGED
|
@@ -252,6 +252,41 @@ See the document skill's "Two Documentation Layers" section for details. The lea
|
|
|
252
252
|
- Always give both layers: the **what** (the feature/code) and the **why** (the InDusk system's reasoning)
|
|
253
253
|
- Normal `/work` (without teach) remains unchanged — fast execution, no pauses
|
|
254
254
|
|
|
255
|
+
## Autopilot Mode
|
|
256
|
+
|
|
257
|
+
When invoked as `/work --autopilot {plan}`, execute the plan's remaining phases **hands-off, each phase in a fresh subagent context**, advancing only when a phase's gates pass, and pausing at human-judgment gates. This is interactive `/work` looped through fresh contexts — same gate rigor, no per-phase manual handoff.
|
|
258
|
+
|
|
259
|
+
**Why fresh-context-per-phase, and why it's safe.** Each phase executes best in a clean context window (accumulated context degrades careful/fund-critical work), and a subagent spawn gives that for free — its heavy working context is discarded; only a compact result returns. The safety is not "trust the subagent" — it's structural: **subagent tool calls fire this project's PreToolUse gate hooks, and a gate hook's block (exit 2) denies the subagent's edit exactly as it denies the main session's** (verified empirically — the `work-autopilot` spike). So an autopilot subagent physically cannot check off a phase whose trajectory `Passes at` rows aren't green, cannot skip test-first-RED, cannot advance a red gate. Autopilot inherits the rails; it does not re-implement them.
|
|
260
|
+
|
|
261
|
+
### The loop
|
|
262
|
+
|
|
263
|
+
**Before launching:** confirm the plan has an `approved`/`in-progress` impl with remaining phases and a worktree (create it if the frontmatter doesn't say `worktree: none`). **State the cost and get a go** — N fresh subagents each do a catchup + a full phase; this spends real tokens. Autopilot is opt-in per run.
|
|
264
|
+
|
|
265
|
+
**For each remaining phase, in order:**
|
|
266
|
+
|
|
267
|
+
1. **Is this phase a human gate? Derive it — don't require a new marker.** A phase is a pause point when its Verification references a **Deferred Verification** row, or a manual/smoke/visual-judgment item ("manual smoke", "browser smoke", "does it look right", a `U`-prefixed deferred row). Those are the plan's already-declared "cannot be structurally verified — a human must look" points. If the phase is a human gate: **PAUSE**, tell the user exactly what to check and why, and resume only on their approval. Do not spawn a subagent to self-approve visual/UX/fund-boundary judgment.
|
|
268
|
+
2. **Otherwise, spawn a fresh subagent** (Task/Agent tool) with a tight contract:
|
|
269
|
+
> "Execute **only Phase N** of `{plan}` in worktree `{path}`. Catch up from the plan docs + `.indusk/current.md` cursor, then work the Phase N checklist under the gate hooks: test-first (author the writable-at-phase tests RED), implement, verify, commit per item. **You MUST NOT edit the `## Test Trajectory` table or any test's assertion text — you may only check off items and write implementation code.** When done, report a COMPACT result: what shipped, which tests are green (by name), and any blocker. Do not touch other phases."
|
|
270
|
+
3. **Keep only the compact result** — not the phase's working context. That is the fresh-context-per-phase property, and it's what lets the orchestrator run a long plan without exhausting its own window.
|
|
271
|
+
4. **Confirm green independently before advancing** (defense in depth on top of the subagent's inherited hooks): run `check-gates` for the phase (the same hook, invoked deliberately) and confirm every `Passes at: Phase N` trajectory row is terminal. Trust the structure, not the subagent's self-report.
|
|
272
|
+
5. **Goalpost guard (R4).** Before the phase, snapshot the Test Trajectory table (each row's `Asserts` text + `Passes at`). After the phase, verify **no `Asserts` text changed and no `Passes at` moved to a later phase** — a subagent that couldn't reach green must not have weakened a test or deferred a row to fake completion. If the trajectory drifted, **STOP LOUD** and surface it; that's a gamed gate, not a passed one.
|
|
273
|
+
6. **Red or blocker → STOP LOUD.** A failing verification, a blocked edit the subagent couldn't resolve, or a drifted trajectory halts the loop and surfaces the blocker to the human. Never advance on red. Do **not** auto-retry-and-mutate — one honest attempt per phase; a phase that can't reach green is a human decision, not a machine loop. (Per-phase iteration inside the subagent is fine; cross-phase barreling-on is not.)
|
|
274
|
+
7. **Per-phase commit + eval.** Each phase's subagent commits per item, so a bad phase is an isolated, revertable unit and the eval trigger fires at its natural granularity.
|
|
275
|
+
|
|
276
|
+
**Hard stop at impl-complete.** When the last phase closes, **stop and hand back to the human for `/falsify`.** Autopilot loops *impl phases only* — it never auto-runs the close-out rituals (`/falsify`, `/cleanup`, `/retrospective`). Those are human-gated by design: falsification is adversarial self-examination the author is worst-placed to automate, and cleanup + retrospective need judgment. Autopilot gets the plan to "impl complete, all phases green"; the human drives it home.
|
|
277
|
+
|
|
278
|
+
### What autopilot does NOT do
|
|
279
|
+
|
|
280
|
+
- It does not replace interactive `/work` — `/work` stays the default; autopilot is additive.
|
|
281
|
+
- It does not run phases in parallel (they're a dependency chain).
|
|
282
|
+
- It does not auto-fix a red gate beyond the subagent's own in-phase attempt — it STOPS.
|
|
283
|
+
- It does not edit trajectories or test assertions (the goalpost guard forbids it).
|
|
284
|
+
- It does not run the close-out rituals.
|
|
285
|
+
|
|
286
|
+
### Deterministic engine (optional)
|
|
287
|
+
|
|
288
|
+
Where the harness `Workflow` tool is available, the loop can run as a Workflow (sequential, one phase per stage, budget-bounded) instead of a hand-driven subagent loop — this adds a hard token budget and deterministic control flow. The contract above is identical either way; Workflow is the more rigorous executor, the sequential Agent-tool loop is the always-available fallback.
|
|
289
|
+
|
|
255
290
|
## Corrections and Context Learning
|
|
256
291
|
|
|
257
292
|
When you are corrected mid-work — the user says "no, not that way" or "don't do X, do Y" — suggest capturing it with `context learn`:
|
/package/admin/.next/static/{JPSixThkx4zGFdVcRN0BV → chwqn4zbU29xc3s0HiFdC}/_buildManifest.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|