@infinitedusky/indusk-mcp 1.28.25 → 1.28.27
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/[root-of-the-server]__0.bf6jg._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/[root-of-the-server]__0c4y76n._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/[root-of-the-server]__0c7eqks._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/[root-of-the-server]__0f9b~qs._.js +1 -1
- package/admin/.next/server/chunks/ssr/[root-of-the-server]__0f9b~qs._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/[root-of-the-server]__0l06j2e._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/[root-of-the-server]__0mpw.6q._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/[root-of-the-server]__0m~wlp1._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/[root-of-the-server]__0r2yc5s._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/_0_a1b1k._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_0c75c2h._.js.map +1 -1
- package/admin/.next/server/chunks/ssr/apps_indusk-admin_src_components_ui_CollapsibleSection_tsx_0b-flwz._.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/dist/bin/cli.js +58 -0
- package/dist/bin/commands/doppler.d.ts +10 -0
- package/dist/bin/commands/doppler.js +179 -0
- package/dist/bin/commands/extensions.js +1 -3
- package/dist/bin/commands/init.d.ts +12 -0
- package/dist/bin/commands/init.js +65 -5
- package/dist/bin/commands/ui.js +1 -5
- package/dist/bin/commands/update.d.ts +7 -0
- package/dist/bin/commands/update.js +21 -0
- package/dist/bin/commands/worktree.d.ts +18 -0
- package/dist/bin/commands/worktree.js +262 -0
- package/dist/lib/eval/evaluator-runner.js +10 -2
- package/dist/lib/eval/persistent-evaluator.js +2 -6
- package/dist/lib/scm/index.js +3 -1
- package/dist/lib/telemetry/daemon.js +2 -2
- package/dist/lib/worktree/validate-config.d.ts +17 -0
- package/dist/lib/worktree/validate-config.js +94 -0
- package/dist/tools/system-tools.js +3 -3
- package/extensions/README.md +7 -0
- package/extensions/doppler/.env.example +31 -0
- package/extensions/doppler/manifest.json +25 -0
- package/extensions/doppler/skill.md +100 -0
- package/extensions/worktree/config.schema.json +99 -0
- package/extensions/worktree/hooks/on_enable.sh +86 -0
- package/extensions/worktree/manifest.json +12 -0
- package/extensions/worktree/scripts/lib/workbench-helpers.sh +95 -0
- package/extensions/worktree/scripts/preflight.sh +279 -0
- package/extensions/worktree/scripts/refresh-worktree.sh +198 -0
- package/extensions/worktree/scripts/setup-worktree.sh +182 -0
- package/extensions/worktree/scripts/wt-pm2.sh +170 -0
- package/extensions/worktree/scripts/wt.sh +137 -0
- package/extensions/worktree/skill.md +202 -0
- package/extensions/worktree/templates/worktree-config.template.json +19 -0
- package/hooks/validate-impl-structure.js +5 -1
- package/package.json +6 -1
- /package/admin/.next/static/{kHbuqpVid2MuNidIG0eZT → yUJyByMf3DK4Az8t9gKZ5}/_buildManifest.js +0 -0
- /package/admin/.next/static/{kHbuqpVid2MuNidIG0eZT → yUJyByMf3DK4Az8t9gKZ5}/_clientMiddlewareManifest.js +0 -0
- /package/admin/.next/static/{kHbuqpVid2MuNidIG0eZT → yUJyByMf3DK4Az8t9gKZ5}/_ssgManifest.js +0 -0
package/admin/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
yUJyByMf3DK4Az8t9gKZ5
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_buildManifest.js",
|
|
11
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_ssgManifest.js",
|
|
12
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0_yzfo7pu205m.js",
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"polyfillFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
10
|
-
"static/
|
|
8
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_buildManifest.js",
|
|
9
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_ssgManifest.js",
|
|
10
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_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": "dca72118822f038b5ae4a3040706a75a",
|
|
62
|
+
"previewModeSigningKey": "57d39af4ee02752d7502e56f8556f8e1242215b44097db374cc366f3905b10dd",
|
|
63
|
+
"previewModeEncryptionKey": "c229867589c6482e5355547ae27232778329faca93cfeae89bca2616f2346904"
|
|
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/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.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/0_yzfo7pu205m.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/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.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/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.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/0_yzfo7pu205m.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/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.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\":\"yUJyByMf3DK4Az8t9gKZ5\"}\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/0z9652tpun_.d.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/0z9652tpun_.d.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.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":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
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/0z9652tpun_.d.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":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
5
5
|
4:null
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.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":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
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/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[61299,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.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":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[85530,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default"]
|
|
3
3
|
3:I[50571,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.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":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
@@ -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":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../node_modules/.pnpm/next%4016.2.4_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/invariant-error.ts","../../../../../../apps/indusk-admin/src/app/favicon.ico.mjs%20%28structured%20image%20object%29","../../../../../../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"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","import src from \"IMAGE\";\nexport default { src, width: 256, height: 256 }\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\tparams: 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\tconst { project, name } = await params;\n\tconst projectPath = getProjectPath(project);\n\tif (!projectPath || !projectPathExists(projectPath)) return null;\n\n\tconst [active, archived] = await Promise.all([\n\t\treadActivePlans(projectPath),\n\t\treadArchivedPlans(projectPath),\n\t]);\n\tconst plan =\n\t\tactive.find((p) => p.name === name) ??\n\t\tarchived.find((p) => p.name === name);\n\tif (!plan) {\n\t\tnotFound();\n\t}\n\treturn <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 {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/Table\";\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 >\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 >\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 >\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 <Badge variant={statusToBadge(plan.status)}>{plan.status}</Badge>\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 >\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 >\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)}>{row.state}</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 <h2 className=\"text-base font-semibold text-gray-900\">Falsification</h2>\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\">\n <h2 className=\"text-base font-semibold text-gray-900\">Falsification</h2>\n <Badge variant={plan.falsification.complete ? \"passing\" : \"writable\"}>\n {plan.falsification.complete ? \"complete\" : \"in-progress\"}\n </Badge>\n </header>\n {hypotheses.length === 0 && (\n <p className=\"text-sm text-gray-500\">\n No hypotheses logged yet.\n </p>\n )}\n {hypotheses.length > 0 && (\n <ul className=\"flex flex-col gap-3\" data-testid=\"falsification-hypotheses\">\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\">\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 <Badge variant={complete ? \"passing\" : \"writable\"}>\n {complete ? \"complete\" : \"in-progress\"}\n </Badge>\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 className={item.checked ? \"text-gray-500 line-through\" : \"\"}>\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 && (\n <p className=\"text-xs text-gray-500\">{entry.note}</p>\n )}\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\")) return \"passing\";\n if (normalized.includes(\"blocked\")) return \"blocked\";\n if (normalized.includes(\"in-progress\") || normalized.includes(\"accepted\")) return \"writable\";\n if (normalized.includes(\"draft\") || normalized.includes(\"planned\")) return \"planned\";\n return \"neutral\";\n}\n\nfunction stateToBadge(state: string): BadgeVariant {\n const normalized = state.toLowerCase();\n if ([\"passing\", \"blocked\", \"skipped\", \"planned\", \"writable\", \"written\"].includes(normalized)) {\n return normalized as BadgeVariant;\n }\n return \"neutral\";\n}\n","import type { Trajectory, TrajectoryRow } 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(implContent: string, trajectory?: Trajectory): 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"],"names":["InvariantError","Error","constructor","message","options","endsWith","name","src","width","height","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":["../../../../../../node_modules/.pnpm/next%4016.2.4_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/invariant-error.ts","../../../../../../apps/indusk-admin/src/app/favicon.ico.mjs%20%28structured%20image%20object%29","../../../../../../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"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","import src from \"IMAGE\";\nexport default { src, width: 256, height: 256 }\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 {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/Table\";\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 >\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 >\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 >\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 <Badge variant={statusToBadge(plan.status)}>{plan.status}</Badge>\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 >\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 >\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 <h2 className=\"text-base font-semibold text-gray-900\">Falsification</h2>\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\">\n <h2 className=\"text-base font-semibold text-gray-900\">Falsification</h2>\n <Badge variant={plan.falsification.complete ? \"passing\" : \"writable\"}>\n {plan.falsification.complete ? \"complete\" : \"in-progress\"}\n </Badge>\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\">\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 <Badge variant={complete ? \"passing\" : \"writable\"}>\n {complete ? \"complete\" : \"in-progress\"}\n </Badge>\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"],"names":["InvariantError","Error","constructor","message","options","endsWith","name","src","width","height","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]}
|