@infinitedusky/indusk-mcp 1.40.0 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/admin/.next/BUILD_ID +1 -1
  2. package/admin/.next/build-manifest.json +3 -3
  3. package/admin/.next/fallback-build-manifest.json +3 -3
  4. package/admin/.next/server/app/_global-error.html +1 -1
  5. package/admin/.next/server/app/_global-error.rsc +1 -1
  6. package/admin/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/admin/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/admin/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/admin/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/admin/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/admin/.next/server/middleware-build-manifest.js +3 -3
  12. package/admin/.next/server/pages/500.html +1 -1
  13. package/admin/.next/trace +1 -1
  14. package/admin/.next/trace-build +1 -1
  15. package/dist/bin/commands/context.d.ts +5 -3
  16. package/dist/bin/commands/context.js +20 -7
  17. package/dist/bin/commands/extensions.js +33 -10
  18. package/dist/bin/commands/init.js +42 -9
  19. package/dist/bin/commands/update.js +26 -2
  20. package/dist/lib/context-pointers.d.ts +20 -0
  21. package/dist/lib/context-pointers.js +37 -1
  22. package/dist/lib/extension-loader.d.ts +19 -0
  23. package/dist/lib/extension-loader.js +48 -6
  24. package/dist/lib/skill-migration.d.ts +50 -0
  25. package/dist/lib/skill-migration.js +64 -0
  26. package/extensions/otel/manifest.json +5 -1
  27. package/package.json +2 -2
  28. package/skills/catchup.md +1 -1
  29. package/skills/{context.md → claude-md.md} +10 -8
  30. package/skills/highlight.md +1 -1
  31. package/skills/planner.md +1 -1
  32. package/skills/work.md +4 -4
  33. /package/admin/.next/static/{QAedypfHmLPDecvVl6Kxf → WxUGu7NCQs8pb0nSvDzv6}/_buildManifest.js +0 -0
  34. /package/admin/.next/static/{QAedypfHmLPDecvVl6Kxf → WxUGu7NCQs8pb0nSvDzv6}/_clientMiddlewareManifest.js +0 -0
  35. /package/admin/.next/static/{QAedypfHmLPDecvVl6Kxf → WxUGu7NCQs8pb0nSvDzv6}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- QAedypfHmLPDecvVl6Kxf
1
+ WxUGu7NCQs8pb0nSvDzv6
@@ -7,9 +7,9 @@
7
7
  "static/chunks/03~yq9q893hmn.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/QAedypfHmLPDecvVl6Kxf/_buildManifest.js",
11
- "static/QAedypfHmLPDecvVl6Kxf/_ssgManifest.js",
12
- "static/QAedypfHmLPDecvVl6Kxf/_clientMiddlewareManifest.js"
10
+ "static/WxUGu7NCQs8pb0nSvDzv6/_buildManifest.js",
11
+ "static/WxUGu7NCQs8pb0nSvDzv6/_ssgManifest.js",
12
+ "static/WxUGu7NCQs8pb0nSvDzv6/_clientMiddlewareManifest.js"
13
13
  ],
14
14
  "rootMainFiles": [
15
15
  "static/chunks/15r3deq0oc~d..js",
@@ -5,9 +5,9 @@
5
5
  "devFiles": [],
6
6
  "polyfillFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/QAedypfHmLPDecvVl6Kxf/_buildManifest.js",
9
- "static/QAedypfHmLPDecvVl6Kxf/_ssgManifest.js",
10
- "static/QAedypfHmLPDecvVl6Kxf/_clientMiddlewareManifest.js"
8
+ "static/WxUGu7NCQs8pb0nSvDzv6/_buildManifest.js",
9
+ "static/WxUGu7NCQs8pb0nSvDzv6/_ssgManifest.js",
10
+ "static/WxUGu7NCQs8pb0nSvDzv6/_clientMiddlewareManifest.js"
11
11
  ],
12
12
  "rootMainFiles": []
13
13
  }
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/15r3deq0oc~d..js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"QAedypfHmLPDecvVl6Kxf\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/15r3deq0oc~d..js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"WxUGu7NCQs8pb0nSvDzv6\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
@@ -6,7 +6,7 @@
6
6
  8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"ViewportBoundary"]
7
7
  a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"MetadataBoundary"]
8
8
  c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default",1]
9
- 0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"QAedypfHmLPDecvVl6Kxf"}
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":"WxUGu7NCQs8pb0nSvDzv6"}
10
10
  d:[]
11
11
  7:"$Wd"
12
12
  9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -1,5 +1,5 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"OutletBoundary"]
3
3
  3:"$Sreact.suspense"
4
- 0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"QAedypfHmLPDecvVl6Kxf"}
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":"WxUGu7NCQs8pb0nSvDzv6"}
5
5
  4:null
@@ -6,7 +6,7 @@
6
6
  8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"ViewportBoundary"]
7
7
  a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"MetadataBoundary"]
8
8
  c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default",1]
9
- 0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"QAedypfHmLPDecvVl6Kxf"}
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":"WxUGu7NCQs8pb0nSvDzv6"}
10
10
  d:[]
11
11
  7:"$Wd"
12
12
  9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -3,4 +3,4 @@
3
3
  3:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
5
  5:I[61299,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"IconMark"]
6
- 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"QAedypfHmLPDecvVl6Kxf"}
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":"WxUGu7NCQs8pb0nSvDzv6"}
@@ -2,4 +2,4 @@
2
2
  2:I[85530,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default"]
3
3
  3:I[50571,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default"]
4
4
  4:[]
5
- 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"QAedypfHmLPDecvVl6Kxf"}
5
+ 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"WxUGu7NCQs8pb0nSvDzv6"}
@@ -1 +1 @@
1
- 0:{"tree":{"name":"","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"QAedypfHmLPDecvVl6Kxf"}
1
+ 0:{"tree":{"name":"","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"WxUGu7NCQs8pb0nSvDzv6"}
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
7
7
  "static/chunks/03~yq9q893hmn.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/QAedypfHmLPDecvVl6Kxf/_buildManifest.js",
11
- "static/QAedypfHmLPDecvVl6Kxf/_ssgManifest.js",
12
- "static/QAedypfHmLPDecvVl6Kxf/_clientMiddlewareManifest.js"
10
+ "static/WxUGu7NCQs8pb0nSvDzv6/_buildManifest.js",
11
+ "static/WxUGu7NCQs8pb0nSvDzv6/_ssgManifest.js",
12
+ "static/WxUGu7NCQs8pb0nSvDzv6/_clientMiddlewareManifest.js"
13
13
  ],
14
14
  "rootMainFiles": [
15
15
  "static/chunks/15r3deq0oc~d..js",
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/15r3deq0oc~d..js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"QAedypfHmLPDecvVl6Kxf\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/15r3deq0oc~d..js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"WxUGu7NCQs8pb0nSvDzv6\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
package/admin/.next/trace CHANGED
@@ -1 +1 @@
1
- [{"name":"generate-buildid","duration":109,"timestamp":109568720368,"id":4,"parentId":1,"tags":{},"startTime":1787956298780,"traceId":"62d7f7b5a343608f"},{"name":"load-custom-routes","duration":200,"timestamp":109568720529,"id":5,"parentId":1,"tags":{},"startTime":1787956298780,"traceId":"62d7f7b5a343608f"},{"name":"create-dist-dir","duration":72,"timestamp":109568720742,"id":6,"parentId":1,"tags":{},"startTime":1787956298780,"traceId":"62d7f7b5a343608f"},{"name":"clean","duration":42895,"timestamp":109568721335,"id":7,"parentId":1,"tags":{},"startTime":1787956298781,"traceId":"62d7f7b5a343608f"},{"name":"discover-routes","duration":3934,"timestamp":109568769229,"id":8,"parentId":1,"tags":{},"startTime":1787956298829,"traceId":"62d7f7b5a343608f"},{"name":"create-root-mapping","duration":41,"timestamp":109568773205,"id":9,"parentId":1,"tags":{},"startTime":1787956298833,"traceId":"62d7f7b5a343608f"},{"name":"generate-route-types","duration":10034,"timestamp":109568773869,"id":10,"parentId":1,"tags":{},"startTime":1787956298833,"traceId":"62d7f7b5a343608f"},{"name":"public-dir-conflict-check","duration":46,"timestamp":109568783952,"id":11,"parentId":1,"tags":{},"startTime":1787956298843,"traceId":"62d7f7b5a343608f"},{"name":"generate-routes-manifest","duration":1121,"timestamp":109568784040,"id":12,"parentId":1,"tags":{},"startTime":1787956298843,"traceId":"62d7f7b5a343608f"},{"name":"run-turbopack","duration":5173950,"timestamp":109568789293,"id":14,"parentId":1,"tags":{},"startTime":1787956298849,"traceId":"62d7f7b5a343608f"},{"name":"turbopack-build-events","duration":41,"timestamp":109568930565,"id":15,"parentId":1,"tags":{},"startTime":1787956298990,"traceId":"62d7f7b5a343608f"},{"name":"run-typescript","duration":2663370,"timestamp":109573994819,"id":16,"parentId":1,"tags":{},"startTime":1787956304054,"traceId":"62d7f7b5a343608f"},{"name":"generate-required-server-files","duration":639,"timestamp":109576659340,"id":18,"parentId":1,"tags":{},"startTime":1787956306719,"traceId":"62d7f7b5a343608f"},{"name":"check-static-error-page","duration":2099,"timestamp":109576683896,"id":20,"parentId":19,"tags":{},"startTime":1787956306743,"traceId":"62d7f7b5a343608f"},{"name":"is-page-static","duration":175004,"timestamp":109576690706,"id":30,"parentId":22,"tags":{},"startTime":1787956306750,"traceId":"62d7f7b5a343608f"},{"name":"check-page","duration":180535,"timestamp":109576685249,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1787956306745,"traceId":"62d7f7b5a343608f"},{"name":"is-page-static","duration":199006,"timestamp":109576690732,"id":31,"parentId":23,"tags":{},"startTime":1787956306750,"traceId":"62d7f7b5a343608f"},{"name":"check-page","duration":204249,"timestamp":109576685524,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1787956306745,"traceId":"62d7f7b5a343608f"},{"name":"is-page-static","duration":204597,"timestamp":109576690564,"id":29,"parentId":21,"tags":{},"startTime":1787956306750,"traceId":"62d7f7b5a343608f"},{"name":"check-page","duration":210818,"timestamp":109576684374,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1787956306744,"traceId":"62d7f7b5a343608f"},{"name":"is-page-static","duration":217238,"timestamp":109576693726,"id":33,"parentId":24,"tags":{},"startTime":1787956306753,"traceId":"62d7f7b5a343608f"},{"name":"check-page","duration":225244,"timestamp":109576685750,"id":24,"parentId":19,"tags":{"page":"/p/[project]"},"startTime":1787956306745,"traceId":"62d7f7b5a343608f"},{"name":"is-page-static","duration":219204,"timestamp":109576693823,"id":36,"parentId":27,"tags":{},"startTime":1787956306753,"traceId":"62d7f7b5a343608f"},{"name":"check-page","duration":227216,"timestamp":109576685908,"id":27,"parentId":19,"tags":{"page":"/p/[project]/scorecards"},"startTime":1787956306745,"traceId":"62d7f7b5a343608f"},{"name":"is-page-static","duration":220429,"timestamp":109576693648,"id":32,"parentId":28,"tags":{},"startTime":1787956306753,"traceId":"62d7f7b5a343608f"},{"name":"check-page","duration":228162,"timestamp":109576685950,"id":28,"parentId":19,"tags":{"page":"/"},"startTime":1787956306745,"traceId":"62d7f7b5a343608f"},{"name":"is-page-static","duration":227360,"timestamp":109576693792,"id":35,"parentId":26,"tags":{},"startTime":1787956306753,"traceId":"62d7f7b5a343608f"},{"name":"check-page","duration":235325,"timestamp":109576685861,"id":26,"parentId":19,"tags":{"page":"/p/[project]/research/[slug]"},"startTime":1787956306745,"traceId":"62d7f7b5a343608f"},{"name":"is-page-static","duration":237303,"timestamp":109576693765,"id":34,"parentId":25,"tags":{},"startTime":1787956306753,"traceId":"62d7f7b5a343608f"},{"name":"check-page","duration":245279,"timestamp":109576685815,"id":25,"parentId":19,"tags":{"page":"/p/[project]/plan/[name]"},"startTime":1787956306745,"traceId":"62d7f7b5a343608f"},{"name":"static-check","duration":247553,"timestamp":109576683554,"id":19,"parentId":1,"tags":{},"startTime":1787956306743,"traceId":"62d7f7b5a343608f"},{"name":"write-routes-manifest","duration":379,"timestamp":109576931879,"id":38,"parentId":1,"tags":{},"startTime":1787956306991,"traceId":"62d7f7b5a343608f"},{"name":"load-dotenv","duration":32,"timestamp":109576938044,"id":41,"parentId":40,"tags":{},"startTime":1787956306997,"traceId":"62d7f7b5a343608f"},{"name":"run-export-path-map","duration":192,"timestamp":109576939360,"id":42,"parentId":40,"tags":{},"startTime":1787956306999,"traceId":"62d7f7b5a343608f"},{"name":"next-export","duration":210508,"timestamp":109576937381,"id":40,"parentId":1,"tags":{},"startTime":1787956306997,"traceId":"62d7f7b5a343608f"},{"name":"move-exported-app-global-error-","duration":390,"timestamp":109577148506,"id":43,"parentId":39,"tags":{},"startTime":1787956307208,"traceId":"62d7f7b5a343608f"},{"name":"static-generation","duration":216452,"timestamp":109576933457,"id":39,"parentId":1,"tags":{},"startTime":1787956306993,"traceId":"62d7f7b5a343608f"},{"name":"write-routes-manifest","duration":299,"timestamp":109577150033,"id":44,"parentId":1,"tags":{},"startTime":1787956307209,"traceId":"62d7f7b5a343608f"},{"name":"print-tree-view","duration":1355,"timestamp":109577155602,"id":45,"parentId":1,"tags":{},"startTime":1787956307215,"traceId":"62d7f7b5a343608f"},{"name":"write-route-bundle-stats","duration":5135,"timestamp":109577156966,"id":46,"parentId":1,"tags":{},"startTime":1787956307216,"traceId":"62d7f7b5a343608f"},{"name":"telemetry-flush","duration":490994,"timestamp":109577162114,"id":47,"parentId":1,"tags":{},"startTime":1787956307222,"traceId":"62d7f7b5a343608f"},{"name":"next-build","duration":9023606,"timestamp":109568629525,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1787956298689,"traceId":"62d7f7b5a343608f"}]
1
+ [{"name":"generate-buildid","duration":167,"timestamp":282937867241,"id":4,"parentId":1,"tags":{},"startTime":1788129667865,"traceId":"9de790abe2b84af0"},{"name":"load-custom-routes","duration":281,"timestamp":282937867478,"id":5,"parentId":1,"tags":{},"startTime":1788129667865,"traceId":"9de790abe2b84af0"},{"name":"create-dist-dir","duration":105,"timestamp":282937867778,"id":6,"parentId":1,"tags":{},"startTime":1788129667866,"traceId":"9de790abe2b84af0"},{"name":"clean","duration":42907,"timestamp":282937868591,"id":7,"parentId":1,"tags":{},"startTime":1788129667867,"traceId":"9de790abe2b84af0"},{"name":"discover-routes","duration":4402,"timestamp":282937919796,"id":8,"parentId":1,"tags":{},"startTime":1788129667918,"traceId":"9de790abe2b84af0"},{"name":"create-root-mapping","duration":40,"timestamp":282937924242,"id":9,"parentId":1,"tags":{},"startTime":1788129667922,"traceId":"9de790abe2b84af0"},{"name":"generate-route-types","duration":10481,"timestamp":282937924949,"id":10,"parentId":1,"tags":{},"startTime":1788129667923,"traceId":"9de790abe2b84af0"},{"name":"public-dir-conflict-check","duration":55,"timestamp":282937935480,"id":11,"parentId":1,"tags":{},"startTime":1788129667933,"traceId":"9de790abe2b84af0"},{"name":"generate-routes-manifest","duration":1324,"timestamp":282937935587,"id":12,"parentId":1,"tags":{},"startTime":1788129667934,"traceId":"9de790abe2b84af0"},{"name":"run-turbopack","duration":7604954,"timestamp":282937939176,"id":14,"parentId":1,"tags":{},"startTime":1788129667937,"traceId":"9de790abe2b84af0"},{"name":"turbopack-build-events","duration":45,"timestamp":282938119106,"id":15,"parentId":1,"tags":{},"startTime":1788129668117,"traceId":"9de790abe2b84af0"},{"name":"run-typescript","duration":2676858,"timestamp":282945629856,"id":16,"parentId":1,"tags":{},"startTime":1788129675628,"traceId":"9de790abe2b84af0"},{"name":"generate-required-server-files","duration":1890,"timestamp":282948308099,"id":18,"parentId":1,"tags":{},"startTime":1788129678306,"traceId":"9de790abe2b84af0"},{"name":"check-static-error-page","duration":2474,"timestamp":282948323040,"id":20,"parentId":19,"tags":{},"startTime":1788129678321,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":269305,"timestamp":282948337483,"id":30,"parentId":22,"tags":{},"startTime":1788129678335,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":282448,"timestamp":282948324421,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1788129678322,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":308187,"timestamp":282948337571,"id":31,"parentId":23,"tags":{},"startTime":1788129678335,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":321078,"timestamp":282948324715,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":305190,"timestamp":282948347716,"id":33,"parentId":24,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":327668,"timestamp":282948325272,"id":24,"parentId":19,"tags":{"page":"/p/[project]"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":310498,"timestamp":282948347624,"id":32,"parentId":28,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":332678,"timestamp":282948325473,"id":28,"parentId":19,"tags":{"page":"/"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":324615,"timestamp":282948336288,"id":29,"parentId":21,"tags":{},"startTime":1788129678334,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":337478,"timestamp":282948323527,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1788129678321,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":331868,"timestamp":282948347802,"id":35,"parentId":26,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":354323,"timestamp":282948325387,"id":26,"parentId":19,"tags":{"page":"/p/[project]/research/[slug]"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":333547,"timestamp":282948347746,"id":34,"parentId":25,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":355981,"timestamp":282948325338,"id":25,"parentId":19,"tags":{"page":"/p/[project]/plan/[name]"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":338616,"timestamp":282948347846,"id":36,"parentId":27,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":361066,"timestamp":282948325428,"id":27,"parentId":19,"tags":{"page":"/p/[project]/scorecards"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"static-check","duration":363834,"timestamp":282948322675,"id":19,"parentId":1,"tags":{},"startTime":1788129678321,"traceId":"9de790abe2b84af0"},{"name":"write-routes-manifest","duration":796,"timestamp":282948689342,"id":38,"parentId":1,"tags":{},"startTime":1788129678687,"traceId":"9de790abe2b84af0"},{"name":"load-dotenv","duration":23,"timestamp":282948697125,"id":41,"parentId":40,"tags":{},"startTime":1788129678695,"traceId":"9de790abe2b84af0"},{"name":"run-export-path-map","duration":208,"timestamp":282948698313,"id":42,"parentId":40,"tags":{},"startTime":1788129678696,"traceId":"9de790abe2b84af0"},{"name":"next-export","duration":202136,"timestamp":282948696591,"id":40,"parentId":1,"tags":{},"startTime":1788129678695,"traceId":"9de790abe2b84af0"},{"name":"move-exported-app-global-error-","duration":307,"timestamp":282948899334,"id":43,"parentId":39,"tags":{},"startTime":1788129678897,"traceId":"9de790abe2b84af0"},{"name":"static-generation","duration":208367,"timestamp":282948692004,"id":39,"parentId":1,"tags":{},"startTime":1788129678690,"traceId":"9de790abe2b84af0"},{"name":"write-routes-manifest","duration":232,"timestamp":282948900460,"id":44,"parentId":1,"tags":{},"startTime":1788129678898,"traceId":"9de790abe2b84af0"},{"name":"print-tree-view","duration":2189,"timestamp":282948907652,"id":45,"parentId":1,"tags":{},"startTime":1788129678906,"traceId":"9de790abe2b84af0"},{"name":"write-route-bundle-stats","duration":5952,"timestamp":282948909854,"id":46,"parentId":1,"tags":{},"startTime":1788129678908,"traceId":"9de790abe2b84af0"},{"name":"telemetry-flush","duration":486376,"timestamp":282948915818,"id":47,"parentId":1,"tags":{},"startTime":1788129678914,"traceId":"9de790abe2b84af0"},{"name":"next-build","duration":11650394,"timestamp":282937751827,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1788129667750,"traceId":"9de790abe2b84af0"}]
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5173950,"timestamp":109568789293,"id":14,"parentId":1,"tags":{},"startTime":1787956298849,"traceId":"62d7f7b5a343608f"},{"name":"turbopack-build-events","duration":41,"timestamp":109568930565,"id":15,"parentId":1,"tags":{},"startTime":1787956298990,"traceId":"62d7f7b5a343608f"},{"name":"run-typescript","duration":2663370,"timestamp":109573994819,"id":16,"parentId":1,"tags":{},"startTime":1787956304054,"traceId":"62d7f7b5a343608f"},{"name":"static-check","duration":247553,"timestamp":109576683554,"id":19,"parentId":1,"tags":{},"startTime":1787956306743,"traceId":"62d7f7b5a343608f"},{"name":"static-generation","duration":216452,"timestamp":109576933457,"id":39,"parentId":1,"tags":{},"startTime":1787956306993,"traceId":"62d7f7b5a343608f"},{"name":"telemetry-flush","duration":490994,"timestamp":109577162114,"id":47,"parentId":1,"tags":{},"startTime":1787956307222,"traceId":"62d7f7b5a343608f"},{"name":"next-build","duration":9023606,"timestamp":109568629525,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1787956298689,"traceId":"62d7f7b5a343608f"}]
1
+ [{"name":"run-turbopack","duration":7604954,"timestamp":282937939176,"id":14,"parentId":1,"tags":{},"startTime":1788129667937,"traceId":"9de790abe2b84af0"},{"name":"turbopack-build-events","duration":45,"timestamp":282938119106,"id":15,"parentId":1,"tags":{},"startTime":1788129668117,"traceId":"9de790abe2b84af0"},{"name":"run-typescript","duration":2676858,"timestamp":282945629856,"id":16,"parentId":1,"tags":{},"startTime":1788129675628,"traceId":"9de790abe2b84af0"},{"name":"static-check","duration":363834,"timestamp":282948322675,"id":19,"parentId":1,"tags":{},"startTime":1788129678321,"traceId":"9de790abe2b84af0"},{"name":"static-generation","duration":208367,"timestamp":282948692004,"id":39,"parentId":1,"tags":{},"startTime":1788129678690,"traceId":"9de790abe2b84af0"},{"name":"telemetry-flush","duration":486376,"timestamp":282948915818,"id":47,"parentId":1,"tags":{},"startTime":1788129678914,"traceId":"9de790abe2b84af0"},{"name":"next-build","duration":11650394,"timestamp":282937751827,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1788129667750,"traceId":"9de790abe2b84af0"}]
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * `indusk context check-pointers` — verify every path-shaped reference in the
3
- * project CLAUDE.md resolves on disk. Under the 60 KB budget regime (entries
4
- * are rule + pointer), a dead pointer is a lost rule body. Exit 1 on dead
5
- * pointers so the check composes into verification pipelines.
3
+ * project CLAUDE.md resolves on disk, and refuse hand-copied version claims.
4
+ * Under the 60 KB budget regime (entries are rule + pointer), a dead pointer
5
+ * is a lost rule body, and a literal `**Version**:` is a copy nothing in the
6
+ * release flow updates. Exit 1 on either so the check composes into
7
+ * verification pipelines.
6
8
  */
7
9
  export declare function contextCheckPointers(projectRoot: string): void;
@@ -1,9 +1,11 @@
1
1
  import { checkClaudeMdPointers } from "../../lib/context-pointers.js";
2
2
  /**
3
3
  * `indusk context check-pointers` — verify every path-shaped reference in the
4
- * project CLAUDE.md resolves on disk. Under the 60 KB budget regime (entries
5
- * are rule + pointer), a dead pointer is a lost rule body. Exit 1 on dead
6
- * pointers so the check composes into verification pipelines.
4
+ * project CLAUDE.md resolves on disk, and refuse hand-copied version claims.
5
+ * Under the 60 KB budget regime (entries are rule + pointer), a dead pointer
6
+ * is a lost rule body, and a literal `**Version**:` is a copy nothing in the
7
+ * release flow updates. Exit 1 on either so the check composes into
8
+ * verification pipelines.
7
9
  */
8
10
  export function contextCheckPointers(projectRoot) {
9
11
  const report = checkClaudeMdPointers(projectRoot);
@@ -13,13 +15,24 @@ export function contextCheckPointers(projectRoot) {
13
15
  return;
14
16
  }
15
17
  console.info(`${report.scanned.length} pointer(s) scanned`);
16
- if (report.dead.length === 0) {
18
+ const failures = report.dead.length + report.versionClaims.length;
19
+ if (failures === 0) {
17
20
  console.info("PASS — all pointers resolve");
18
21
  return;
19
22
  }
20
- console.error(`FAIL — ${report.dead.length} dead pointer(s):`);
21
- for (const p of report.dead) {
22
- console.error(` - ${p}`);
23
+ if (report.dead.length > 0) {
24
+ console.error(`FAIL ${report.dead.length} dead pointer(s):`);
25
+ for (const p of report.dead) {
26
+ console.error(` - ${p}`);
27
+ }
28
+ }
29
+ if (report.versionClaims.length > 0) {
30
+ console.error(`FAIL — ${report.versionClaims.length} hand-copied version claim(s):`);
31
+ for (const v of report.versionClaims) {
32
+ console.error(v.problem === "mismatch"
33
+ ? ` - line ${v.line}: says ${v.claim}, package.json says ${v.actual} — replace the literal with a pointer to package.json/changelog`
34
+ : ` - line ${v.line}: says ${v.claim}, but package.json has no version to check it against — replace the literal with a pointer to package.json/changelog`);
35
+ }
23
36
  }
24
37
  process.exitCode = 1;
25
38
  }
@@ -3,7 +3,8 @@ import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, write
3
3
  import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { globSync } from "glob";
6
- import { disabledDir, disableExtension, enableExtension, ensureExtensionsDirs, extensionConfigDir, extensionsDir, getEnabledExtensions, isEnabled, loadExtension, loadExtensions, resolveManifestPath, } from "../../lib/extension-loader.js";
6
+ import { readConfig, shouldEmitOtelGate } from "../../lib/config.js";
7
+ import { disabledDir, disableExtension, enableExtension, ensureExtensionsDirs, extensionConfigDir, extensionsDir, getEnabledExtensions, isEnabled, loadExtensions, loadExtensionTolerant, resolveManifestPath, } from "../../lib/extension-loader.js";
7
8
  import { runHealthCheck } from "../../lib/health.js";
8
9
  const __dirname = dirname(fileURLToPath(import.meta.url));
9
10
  const packageRoot = join(__dirname, "../../..");
@@ -13,7 +14,7 @@ function getBuiltinExtensions() {
13
14
  return [];
14
15
  const dirs = globSync("*/manifest.json", { cwd: builtinDir });
15
16
  return dirs
16
- .map((d) => loadExtension(join(builtinDir, d)))
17
+ .map((d) => loadExtensionTolerant(join(builtinDir, d)))
17
18
  .filter((m) => m !== null);
18
19
  }
19
20
  export async function extensionsList(projectRoot) {
@@ -47,7 +48,17 @@ export async function extensionsStatus(projectRoot) {
47
48
  for (const ext of enabled) {
48
49
  const checks = ext.manifest.provides.health_checks ?? [];
49
50
  let healthStatus = "no health check";
50
- if (checks.length > 0) {
51
+ // An enabled extension that cannot apply to this project shape must say
52
+ // so, not fail. dusk declares `otel.role: "library"` and correctly ships
53
+ // no instrumentation — its otel checks were permanently red demanding
54
+ // some, which is how a report stops being read.
55
+ const inapplicable = ext.manifest.name === "otel" && !shouldEmitOtelGate(projectRoot)
56
+ ? `not applicable — otel.role is "${readConfig(projectRoot)?.otel?.role}" (disable with \`indusk extensions disable otel\`)`
57
+ : null;
58
+ if (inapplicable) {
59
+ healthStatus = inapplicable;
60
+ }
61
+ else if (checks.length > 0) {
51
62
  // Once per declared repo — see lib/health.ts. In a workbench the code
52
63
  // lives in the repos, not beside `.indusk/`.
53
64
  const results = checks.map((check) => runHealthCheck(projectRoot, check));
@@ -82,7 +93,7 @@ export async function extensionsEnable(projectRoot, names) {
82
93
  // Check if extension requires auth — if so, .env must exist before enabling
83
94
  const builtinManifest = join(builtinDir, name, "manifest.json");
84
95
  if (existsSync(builtinManifest)) {
85
- const manifest = loadExtension(builtinManifest);
96
+ const manifest = loadExtensionTolerant(builtinManifest);
86
97
  if (manifest?.mcp_server?.headers && Object.keys(manifest.mcp_server.headers).length > 0) {
87
98
  const envVars = readExtensionEnv(name);
88
99
  if (Object.keys(envVars).length === 0) {
@@ -477,7 +488,19 @@ export async function extensionsSuggest(projectRoot) {
477
488
  continue;
478
489
  }
479
490
  if (ext.detect.file_pattern) {
480
- const matches = globSync(ext.detect.file_pattern, { cwd: projectRoot, maxDepth: 3 });
491
+ // `otel.role` is core config, not extension config InDusk defines it,
492
+ // so core honouring it is not tool knowledge leaking inward. A library
493
+ // or tool should never emit telemetry, so enabling otel there produces
494
+ // health checks that cannot pass, which is how checks get ignored.
495
+ if (ext.name === "otel" && !shouldEmitOtelGate(projectRoot))
496
+ continue;
497
+ const matches = globSync(ext.detect.file_pattern, {
498
+ cwd: projectRoot,
499
+ maxDepth: 3,
500
+ // A template shipped by a package is not evidence that this project
501
+ // instruments anything. Matching one enabled otel on a library.
502
+ ignore: ext.detect.exclude ?? [],
503
+ });
481
504
  if (matches.length > 0) {
482
505
  suggestions.push({ name: ext.name, reason: `${ext.detect.file_pattern} found` });
483
506
  continue;
@@ -640,7 +663,7 @@ export function envIsFunctional(name) {
640
663
  const manifestPath = join(builtinDir, name, "manifest.json");
641
664
  if (!existsSync(manifestPath))
642
665
  return false;
643
- const manifest = loadExtension(manifestPath);
666
+ const manifest = loadExtensionTolerant(manifestPath);
644
667
  const headers = manifest?.mcp_server?.headers;
645
668
  return !!headers && Object.keys(headers).length > 0;
646
669
  }
@@ -675,7 +698,7 @@ function runHook(projectRoot, name, hook) {
675
698
  const manifestPath = resolveManifestPath(extensionsDir(projectRoot), name);
676
699
  if (!manifestPath)
677
700
  return;
678
- const manifest = loadExtension(manifestPath);
701
+ const manifest = loadExtensionTolerant(manifestPath);
679
702
  if (!manifest?.hooks)
680
703
  return;
681
704
  const command = manifest.hooks[hook];
@@ -705,13 +728,13 @@ function printMcpSetup(projectRoot, name) {
705
728
  const builtinPath = join(builtinDir, name, "manifest.json");
706
729
  if (!existsSync(builtinPath))
707
730
  return;
708
- const manifest = loadExtension(builtinPath);
731
+ const manifest = loadExtensionTolerant(builtinPath);
709
732
  if (!manifest?.mcp_server)
710
733
  return;
711
734
  printMcpInstructions(name, manifest);
712
735
  return;
713
736
  }
714
- const manifest = loadExtension(manifestPath);
737
+ const manifest = loadExtensionTolerant(manifestPath);
715
738
  if (!manifest?.mcp_server)
716
739
  return;
717
740
  printMcpInstructions(name, manifest);
@@ -896,7 +919,7 @@ function installSkill(projectRoot, name) {
896
919
  const manifestPath = resolveManifestPath(extensionsDir(projectRoot), name);
897
920
  if (!manifestPath)
898
921
  return;
899
- const manifest = loadExtension(manifestPath);
922
+ const manifest = loadExtensionTolerant(manifestPath);
900
923
  if (!manifest?.provides.skill)
901
924
  return;
902
925
  // Look for skill.md in built-in extensions
@@ -50,15 +50,35 @@ const GITIGNORE_MARKER = "# InDusk managed";
50
50
  export function ensureGitignore(projectRoot) {
51
51
  const gitignorePath = join(projectRoot, ".gitignore");
52
52
  let content = existsSync(gitignorePath) ? readFileSync(gitignorePath, "utf-8") : "";
53
- // Retire the blanket `.indusk/extensions/` rule from projects that already
54
- // have it. Adding the narrower secrets rules beside it does nothing while
55
- // the blanket line stands manifests stay untracked, and `indusk update`
56
- // keeps replacing local fixes with no diff and no message.
57
- if (/^\.indusk\/extensions\/$/m.test(content)) {
58
- content = content.replace(/^# Extension manifests are package-owned[^\n]*\n/m, "");
59
- content = content.replace(/^\.indusk\/extensions\/$\n?/m, "");
60
- writeFileSync(gitignorePath, content);
61
- console.info(" updated: .gitignore — extension manifests are now tracked (only their .env files are ignored)");
53
+ // Normalize the whole extensions block rather than patching lines into it.
54
+ //
55
+ // Two bugs met here and neither is fixable by appending. The blanket
56
+ // `.indusk/extensions/` rule excluded the directory, and **git does not
57
+ // descend into an excluded directory**, so every file negation inside it was
58
+ // a dead letter — `.env.example` had never been tracked on any machine. Then
59
+ // a later release appended `.env.*` AFTER the existing negation, so even with
60
+ // the directory un-excluded the last rule won.
61
+ //
62
+ // Order is the bug in both cases: a negation must follow what it negates, and
63
+ // nothing may re-ignore it afterwards. So every `.indusk/extensions/` line is
64
+ // removed and the canonical block is written once, in order.
65
+ const EXTENSIONS_BLOCK = [
66
+ "# Extension secrets (manifests and .env.example are tracked configuration)",
67
+ ".indusk/extensions/*/.env",
68
+ ".indusk/extensions/*/.env.*",
69
+ "!.indusk/extensions/*/.env.example",
70
+ ];
71
+ if (/^!?\.indusk\/extensions\//m.test(content)) {
72
+ const kept = content
73
+ .split("\n")
74
+ .filter((l) => !/^!?\.indusk\/extensions\//.test(l))
75
+ .filter((l) => !/^# Extension (manifests are package-owned|secrets)/.test(l));
76
+ const normalized = `${kept.join("\n").trimEnd()}\n${EXTENSIONS_BLOCK.join("\n")}\n`;
77
+ if (normalized !== content) {
78
+ content = normalized;
79
+ writeFileSync(gitignorePath, content);
80
+ console.info(" updated: .gitignore — extension manifests and .env.example are tracked; only secrets ignored");
81
+ }
62
82
  }
63
83
  // Collect entries that are missing from the current .gitignore
64
84
  const missing = GITIGNORE_ENTRIES.filter((e) => !content.includes(e.pattern));
@@ -580,6 +600,19 @@ export async function init(projectRoot, options = {}) {
580
600
  console.info(` removed: ${name} registration from .claude/settings.json`);
581
601
  }
582
602
  }
603
+ // Renamed skills: globSync installs the new name and leaves the old
604
+ // directory behind — still listed, still answering to its old slash command.
605
+ // Fingerprint-checked, so a user's own skill under that name is left alone.
606
+ {
607
+ const { removeLegacySkills } = await import("../../lib/skill-migration.js");
608
+ const skillResult = removeLegacySkills(projectRoot);
609
+ for (const s of skillResult.removed) {
610
+ console.info(` removed: .claude/skills/${s.name} (renamed to ${s.replacedBy})`);
611
+ }
612
+ for (const s of skillResult.foreign) {
613
+ console.info(` note: .claude/skills/${s.name} is not the InDusk skill — left in place (InDusk's is now ${s.replacedBy})`);
614
+ }
615
+ }
583
616
  // 5. Generate .vscode/settings.json
584
617
  if (!local) {
585
618
  console.info("\n[Editor]");
@@ -4,7 +4,7 @@ import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync } from "node:f
4
4
  import { dirname, join } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { globSync } from "glob";
7
- import { loadExtension } from "../../lib/extension-loader.js";
7
+ import { loadExtensionTolerant, localOverrideErrors } from "../../lib/extension-loader.js";
8
8
  import { ensureHooksModuleType } from "../../lib/hooks-module-type.js";
9
9
  import { checkLatestVersion, hasNewerVersion } from "../../lib/version-check.js";
10
10
  import { readWorkbenchRepos, repoDir, resolveReposRoot } from "../../lib/worktree/repos.js";
@@ -344,6 +344,20 @@ export async function update(projectRoot) {
344
344
  console.info(` removed: ${name} registration from .claude/settings.json`);
345
345
  }
346
346
  }
347
+ // 5d. Retire skills renamed in the package. Same shape as 5c: the skills
348
+ // sync above added the new name; this removes the old directory, which
349
+ // would otherwise stay listed and keep answering to its old slash command.
350
+ // Fingerprint-checked, so a user's own skill under that name is left alone.
351
+ {
352
+ const { removeLegacySkills } = await import("../../lib/skill-migration.js");
353
+ const skillResult = removeLegacySkills(projectRoot);
354
+ for (const s of skillResult.removed) {
355
+ console.info(` removed: .claude/skills/${s.name} (renamed to ${s.replacedBy})`);
356
+ }
357
+ for (const s of skillResult.foreign) {
358
+ console.info(` note: .claude/skills/${s.name} is not the InDusk skill — left in place (InDusk's is now ${s.replacedBy})`);
359
+ }
360
+ }
347
361
  // 5b. Migrate stale MCP configs
348
362
  const mcpJsonPath = join(projectRoot, ".mcp.json");
349
363
  if (existsSync(mcpJsonPath)) {
@@ -522,7 +536,7 @@ export async function update(projectRoot) {
522
536
  }
523
537
  }
524
538
  // Run update hooks if present
525
- const manifest = loadExtension(enabledManifest);
539
+ const manifest = loadExtensionTolerant(enabledManifest);
526
540
  const updateHook = manifest?.hooks?.on_update ?? manifest?.hooks?.on_post_update;
527
541
  if (updateHook) {
528
542
  console.info(` ${name}: running update hook...`);
@@ -744,6 +758,16 @@ export async function update(projectRoot) {
744
758
  // and blocked the next pull. Syncing here closes that loop. Workbench-only,
745
759
  // and never fatal — a failed sync must not fail an update.
746
760
  syncAfterUpdate(projectRoot);
761
+ if (localOverrideErrors.length > 0) {
762
+ // Loud, specific, and non-fatal to the rest of the update. The built-in
763
+ // manifest was used for these; the override did not apply.
764
+ console.error("");
765
+ console.error(`${localOverrideErrors.length} manifest.local.json override(s) could not be applied:`);
766
+ for (const e of localOverrideErrors)
767
+ console.error(` - ${e}`);
768
+ console.error(" Those extensions are running the built-in manifest until this is fixed.");
769
+ process.exitCode = 1;
770
+ }
747
771
  console.info("\nDone.");
748
772
  // Non-blocking version notice. Uses the 6h-cached lookup so we don't
749
773
  // hit npm on every invocation. Silently no-ops when offline, when the
@@ -9,12 +9,32 @@
9
9
  * Path-shaped references are extracted from CLAUDE.md and verified against
10
10
  * disk. Globs and `{placeholder}` paths are documentation, not pointers, and
11
11
  * are skipped.
12
+ *
13
+ * The walker also refuses hand-copied version claims. A `**Version**:` line
14
+ * carrying a literal semver is a copy of `package.json` that nothing in the
15
+ * release flow updates — dusk's said "1.36.0 published" for twelve days and
16
+ * four releases while npm served 1.40.3. A literal that matches today passes
17
+ * and fails at the next bump, which is exactly when it becomes a lie; a
18
+ * literal with no `package.json` version to check against is unverifiable and
19
+ * fails outright. The safe resting state is a pointer, not a number.
12
20
  */
21
+ export interface VersionClaim {
22
+ /** 1-indexed line number in the scanned content. */
23
+ line: number;
24
+ /** The literal semver found on a `**Version**:` line. */
25
+ claim: string;
26
+ /** `mismatch` against package.json, or `unverifiable` when it has no version. */
27
+ problem: "mismatch" | "unverifiable";
28
+ /** The authoritative `package.json` version, when one exists. */
29
+ actual?: string;
30
+ }
13
31
  export interface PointerReport {
14
32
  /** Every distinct path-shaped reference found. */
15
33
  scanned: string[];
16
34
  /** The subset that does not resolve on disk. */
17
35
  dead: string[];
36
+ /** Version literals on `**Version**:` lines that are wrong or uncheckable. */
37
+ versionClaims: VersionClaim[];
18
38
  }
19
39
  /** Scan a CLAUDE.md content string for path pointers and verify them against `projectRoot`. */
20
40
  export declare function checkPointers(content: string, projectRoot: string): PointerReport;
@@ -9,12 +9,32 @@
9
9
  * Path-shaped references are extracted from CLAUDE.md and verified against
10
10
  * disk. Globs and `{placeholder}` paths are documentation, not pointers, and
11
11
  * are skipped.
12
+ *
13
+ * The walker also refuses hand-copied version claims. A `**Version**:` line
14
+ * carrying a literal semver is a copy of `package.json` that nothing in the
15
+ * release flow updates — dusk's said "1.36.0 published" for twelve days and
16
+ * four releases while npm served 1.40.3. A literal that matches today passes
17
+ * and fails at the next bump, which is exactly when it becomes a lie; a
18
+ * literal with no `package.json` version to check against is unverifiable and
19
+ * fails outright. The safe resting state is a pointer, not a number.
12
20
  */
13
21
  import { existsSync, readFileSync } from "node:fs";
14
22
  import { join } from "node:path";
15
23
  /** Directory prefixes that count as pointers when they appear in CLAUDE.md. */
16
24
  const POINTER_PREFIXES = ["\\.indusk", "apps", "docker", "packages", "\\.claude"];
17
25
  const POINTER_RE = new RegExp(`(?:^|[\\s(\`\\[])((?:${POINTER_PREFIXES.join("|")})/[A-Za-z0-9_\\-./]+)`, "gm");
26
+ /** A line that states the project's version. Only these lines are version-checked. */
27
+ const VERSION_LINE_RE = /^\s*(?:[-*]\s*)?\*\*Version\*\*\s*:/i;
28
+ const SEMVER_RE = /\b\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?\b/g;
29
+ function packageVersion(projectRoot) {
30
+ try {
31
+ const pkg = JSON.parse(readFileSync(join(projectRoot, "package.json"), "utf-8"));
32
+ return typeof pkg.version === "string" ? pkg.version : null;
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
18
38
  /** Scan a CLAUDE.md content string for path pointers and verify them against `projectRoot`. */
19
39
  export function checkPointers(content, projectRoot) {
20
40
  const seen = new Set();
@@ -31,7 +51,23 @@ export function checkPointers(content, projectRoot) {
31
51
  if (!existsSync(join(projectRoot, p)))
32
52
  dead.push(p);
33
53
  }
34
- return { scanned, dead };
54
+ const versionClaims = [];
55
+ const actual = packageVersion(projectRoot);
56
+ const lines = content.split("\n");
57
+ for (let i = 0; i < lines.length; i++) {
58
+ if (!VERSION_LINE_RE.test(lines[i]))
59
+ continue;
60
+ for (const m of lines[i].matchAll(SEMVER_RE)) {
61
+ if (actual === null) {
62
+ versionClaims.push({ line: i + 1, claim: m[0], problem: "unverifiable" });
63
+ }
64
+ else if (m[0] !== actual) {
65
+ versionClaims.push({ line: i + 1, claim: m[0], problem: "mismatch", actual });
66
+ }
67
+ // A matching literal passes today — and fails here at the next bump.
68
+ }
69
+ }
70
+ return { scanned, dead, versionClaims };
35
71
  }
36
72
  /** Walk `<projectRoot>/CLAUDE.md`. Returns null when the file doesn't exist. */
37
73
  export function checkClaudeMdPointers(projectRoot) {
@@ -1,6 +1,8 @@
1
1
  export interface DetectRule {
2
2
  file?: string;
3
3
  file_pattern?: string;
4
+ /** Globs whose matches are NOT evidence — packaged templates, vendored deps. */
5
+ exclude?: string[];
4
6
  dependency?: string;
5
7
  devDependency?: string;
6
8
  mcp_server?: string;
@@ -77,6 +79,23 @@ export interface LoadedExtension {
77
79
  export declare function extensionsDir(projectRoot: string): string;
78
80
  export declare function disabledDir(projectRoot: string): string;
79
81
  export declare function ensureExtensionsDirs(projectRoot: string): void;
82
+ /**
83
+ * Names every extension whose `manifest.local.json` could not be parsed.
84
+ *
85
+ * A malformed override must be LOUD but must not be CATASTROPHIC. Throwing all
86
+ * the way out of `indusk update` took the whole command down with a stack trace
87
+ * over one bad file — which stops the other twenty extensions from updating and
88
+ * buries the actual message. Callers that enumerate extensions collect here,
89
+ * report clearly, and still fail their exit code so nothing is silent.
90
+ */
91
+ export declare const localOverrideErrors: string[];
92
+ /**
93
+ * Load a manifest, tolerating a broken local override.
94
+ *
95
+ * Returns the built-in manifest and records the error, so one bad override
96
+ * degrades that extension rather than the command.
97
+ */
98
+ export declare function loadExtensionTolerant(manifestPath: string): ExtensionManifest | null;
80
99
  export declare function loadExtension(manifestPath: string): ExtensionManifest | null;
81
100
  /**
82
101
  * Resolve the manifest path for an extension.
@@ -14,6 +14,41 @@ export function ensureExtensionsDirs(projectRoot) {
14
14
  mkdirSync(disabledDir(projectRoot), { recursive: true });
15
15
  }
16
16
  // --- Loading ---
17
+ /**
18
+ * Names every extension whose `manifest.local.json` could not be parsed.
19
+ *
20
+ * A malformed override must be LOUD but must not be CATASTROPHIC. Throwing all
21
+ * the way out of `indusk update` took the whole command down with a stack trace
22
+ * over one bad file — which stops the other twenty extensions from updating and
23
+ * buries the actual message. Callers that enumerate extensions collect here,
24
+ * report clearly, and still fail their exit code so nothing is silent.
25
+ */
26
+ export const localOverrideErrors = [];
27
+ /**
28
+ * Load a manifest, tolerating a broken local override.
29
+ *
30
+ * Returns the built-in manifest and records the error, so one bad override
31
+ * degrades that extension rather than the command.
32
+ */
33
+ export function loadExtensionTolerant(manifestPath) {
34
+ try {
35
+ return loadExtension(manifestPath);
36
+ }
37
+ catch (e) {
38
+ localOverrideErrors.push(e instanceof Error ? e.message : String(e));
39
+ return loadExtensionRaw(manifestPath);
40
+ }
41
+ }
42
+ /** The built-in manifest, with no override applied. */
43
+ function loadExtensionRaw(manifestPath) {
44
+ try {
45
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
46
+ return manifest.name && manifest.provides ? manifest : null;
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
17
52
  export function loadExtension(manifestPath) {
18
53
  let manifest;
19
54
  try {
@@ -61,12 +96,19 @@ function applyLocalOverride(manifestPath, manifest) {
61
96
  const merged = { ...manifest, ...local, provides: { ...manifest.provides } };
62
97
  if (local.provides) {
63
98
  merged.provides = { ...manifest.provides, ...local.provides };
64
- const localChecks = local.provides.health_checks;
65
- if (localChecks) {
66
- const byName = new Map((manifest.provides.health_checks ?? []).map((c) => [c.name, c]));
67
- for (const c of localChecks)
68
- byName.set(c.name, c);
69
- merged.provides.health_checks = [...byName.values()];
99
+ // EVERY array of named entries merges by name — health_checks and
100
+ // verification alike. A wholesale replace would force an override that
101
+ // wants to fix one command to restate all the others, and then silently
102
+ // freeze them at today's values: the forking this exists to avoid,
103
+ // reintroduced one key deeper.
104
+ for (const key of ["health_checks", "verification"]) {
105
+ const localEntries = local.provides[key];
106
+ if (!localEntries)
107
+ continue;
108
+ const byName = new Map((manifest.provides[key] ?? []).map((e) => [e.name, e]));
109
+ for (const e of localEntries)
110
+ byName.set(e.name, e);
111
+ merged.provides[key] = [...byName.values()];
70
112
  }
71
113
  }
72
114
  merged._localOverride = localPath;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Migration surface for skills renamed or retired in the package — the third
3
+ * twin, after `mcp-migration.ts` and `hook-migration.ts`.
4
+ *
5
+ * Skill discovery is `globSync` on both install sides, so a renamed skill
6
+ * arrives under its new name and the old directory stays in every consumer's
7
+ * `.claude/skills/` forever: still listed by `get_skill_summaries`, still
8
+ * answering to its old slash command. `context` is the live instance — renamed
9
+ * to `claude-md` because Claude Code ships a built-in `/context` (the
10
+ * context-window usage view), and a built-in shadows any skill of that name.
11
+ *
12
+ * A hook file name is InDusk's by construction; a skill directory name is not.
13
+ * `context` is exactly the kind of name a user might pick for a skill of their
14
+ * own, so each entry carries a fingerprint the installed `SKILL.md` must match.
15
+ * A directory that does not match is reported as foreign and left alone —
16
+ * look at the target before deleting it.
17
+ */
18
+ export interface LegacySkill {
19
+ /** Directory name under `.claude/skills/`. */
20
+ name: string;
21
+ /** The skill's current name, for the console line. */
22
+ replacedBy: string;
23
+ /**
24
+ * Must match the installed `SKILL.md` for the directory to be treated as
25
+ * InDusk's. The `description:` line is the fingerprint — it has been
26
+ * byte-stable since the skill first shipped, so every consumer has it.
27
+ */
28
+ fingerprint: RegExp;
29
+ }
30
+ /** Skills renamed or retired from the package. Extend on future renames. */
31
+ export declare const LEGACY_SKILLS: readonly LegacySkill[];
32
+ export interface RemoveLegacySkillsResult {
33
+ /** Directories deleted from `.claude/skills/`. */
34
+ removed: LegacySkill[];
35
+ /** Present under a legacy name but not matching the fingerprint — left in place. */
36
+ foreign: LegacySkill[];
37
+ }
38
+ export interface RemoveLegacySkillsOptions {
39
+ /** Override the legacy list (tests). */
40
+ skills?: readonly LegacySkill[];
41
+ }
42
+ /**
43
+ * Remove every legacy skill directory whose `SKILL.md` matches its fingerprint.
44
+ *
45
+ * Absent state is not an error — no skills dir, no directory, no `SKILL.md`,
46
+ * unreadable file — because this runs inside `init`/`update` where a
47
+ * migration must not be able to fail the command. A directory with no
48
+ * `SKILL.md` cannot be identified and is treated as foreign.
49
+ */
50
+ export declare function removeLegacySkills(projectRoot: string, opts?: RemoveLegacySkillsOptions): RemoveLegacySkillsResult;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Migration surface for skills renamed or retired in the package — the third
3
+ * twin, after `mcp-migration.ts` and `hook-migration.ts`.
4
+ *
5
+ * Skill discovery is `globSync` on both install sides, so a renamed skill
6
+ * arrives under its new name and the old directory stays in every consumer's
7
+ * `.claude/skills/` forever: still listed by `get_skill_summaries`, still
8
+ * answering to its old slash command. `context` is the live instance — renamed
9
+ * to `claude-md` because Claude Code ships a built-in `/context` (the
10
+ * context-window usage view), and a built-in shadows any skill of that name.
11
+ *
12
+ * A hook file name is InDusk's by construction; a skill directory name is not.
13
+ * `context` is exactly the kind of name a user might pick for a skill of their
14
+ * own, so each entry carries a fingerprint the installed `SKILL.md` must match.
15
+ * A directory that does not match is reported as foreign and left alone —
16
+ * look at the target before deleting it.
17
+ */
18
+ import { existsSync, readFileSync, rmSync } from "node:fs";
19
+ import { join } from "node:path";
20
+ /** Skills renamed or retired from the package. Extend on future renames. */
21
+ export const LEGACY_SKILLS = [
22
+ {
23
+ name: "context",
24
+ replacedBy: "claude-md",
25
+ fingerprint: /^description:\s*Maintain CLAUDE\.md as living project memory/m,
26
+ },
27
+ ];
28
+ /**
29
+ * Remove every legacy skill directory whose `SKILL.md` matches its fingerprint.
30
+ *
31
+ * Absent state is not an error — no skills dir, no directory, no `SKILL.md`,
32
+ * unreadable file — because this runs inside `init`/`update` where a
33
+ * migration must not be able to fail the command. A directory with no
34
+ * `SKILL.md` cannot be identified and is treated as foreign.
35
+ */
36
+ export function removeLegacySkills(projectRoot, opts = {}) {
37
+ const legacy = opts.skills ?? LEGACY_SKILLS;
38
+ const result = { removed: [], foreign: [] };
39
+ for (const skill of legacy) {
40
+ const dir = join(projectRoot, ".claude/skills", skill.name);
41
+ if (!existsSync(dir))
42
+ continue;
43
+ let body;
44
+ try {
45
+ body = readFileSync(join(dir, "SKILL.md"), "utf-8");
46
+ }
47
+ catch {
48
+ result.foreign.push(skill);
49
+ continue;
50
+ }
51
+ if (!skill.fingerprint.test(body)) {
52
+ result.foreign.push(skill);
53
+ continue;
54
+ }
55
+ try {
56
+ rmSync(dir, { recursive: true, force: true });
57
+ result.removed.push(skill);
58
+ }
59
+ catch {
60
+ // Leave it rather than fail the migration; the next update retries.
61
+ }
62
+ }
63
+ return result;
64
+ }
@@ -18,6 +18,10 @@
18
18
  ]
19
19
  },
20
20
  "detect": {
21
- "file_pattern": "**/instrumentation.{ts,py}"
21
+ "file_pattern": "**/instrumentation.{ts,py}",
22
+ "exclude": [
23
+ "**/templates/**",
24
+ "**/node_modules/**"
25
+ ]
22
26
  }
23
27
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@infinitedusky/indusk-mcp",
3
- "version": "1.40.0",
4
- "description": "InDusk development system \u2014 skills, MCP tools, and CLI for structured AI-assisted development",
3
+ "version": "1.41.0",
4
+ "description": "InDusk development system skills, MCP tools, and CLI for structured AI-assisted development",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
package/skills/catchup.md CHANGED
@@ -172,6 +172,6 @@ Ready to pick up. What would you like to do?
172
172
  - Do NOT skip any step. Each one prevents a class of mistake.
173
173
  - Do NOT mutate any shared file during catchup. The only writes are `indusk agent register` and the implicit self-heartbeat in `indusk agent list`, both touching only the current session's own section.
174
174
  - Do NOT start coding before completing onboarding. The lessons and context exist because of past failures.
175
- - If CLAUDE.md seems outdated, flag it to the user — it may need a `/context` update.
175
+ - If CLAUDE.md seems outdated, flag it to the user — it may need a `/claude-md` update.
176
176
  - If a plan's impl has unchecked items from a previous session, that's where `/work` picks up. Don't re-do completed work.
177
177
  - If you see other agents in `indusk agent list` working on something that overlaps with what the user wants you to do, surface that explicitly before proceeding. The bulletin is visibility, not coordination — the working agent owns the "avoid stepping on each other" judgment. `agent list` now shows each session's **worktree** and **branch**, and prints a `⚠ collision` line to stderr when two live sessions share a worktree — read both when judging overlap.
@@ -1,12 +1,14 @@
1
1
  ---
2
- name: context
2
+ name: claude-md
3
3
  description: Maintain CLAUDE.md as living project memory. Update on triggers (post-retro, post-ADR, corrections). Shape impl documents to include per-phase context updates.
4
4
  argument-hint: "learn \"lesson to remember\""
5
5
  ---
6
6
 
7
7
  You know how to maintain project context in this project.
8
8
 
9
- ## What Context Does
9
+ (This skill was named `context`. Claude Code ships a built-in `/context` command — the context-window usage view — and a built-in shadows any skill of the same name, so `/context learn "…"` opened the token chart instead of running this. Nothing else changed.)
10
+
11
+ ## What It Does
10
12
 
11
13
  Context ensures that project knowledge compounds across sessions. It does this in two ways:
12
14
 
@@ -92,22 +94,22 @@ When an ADR's status changes to `accepted`, add a one-liner to **Key Decisions**
92
94
 
93
95
  Do not duplicate the ADR's rationale. The link is the documentation.
94
96
 
95
- ### 3. `context learn`
97
+ ### 3. `claude-md learn`
96
98
 
97
- When invoked as `/context learn "lesson"`, or when you detect you've been corrected mid-session:
99
+ When invoked as `/claude-md learn "lesson"`, or when you detect you've been corrected mid-session:
98
100
 
99
101
  1. Categorize the lesson:
100
102
  - **Conventions** — patterns to follow or avoid ("use Biome not ESLint", "no default exports")
101
103
  - **Known Gotchas** — mistakes ("don't run npx ce, use pnpm ce", "always env:build before docker compose")
102
104
  2. If ambiguous, default to **Known Gotchas** — better to over-capture than miss a lesson
103
105
  3. Append a concise one-liner to the appropriate section
104
- 4. Never add to Key Decisions via `context learn` — that's only via the post-ADR trigger
105
- 5. Never add to Current State via `context learn` — that's updated by triggers or manually
106
+ 4. Never add to Key Decisions via `claude-md learn` — that's only via the post-ADR trigger
107
+ 5. Never add to Current State via `claude-md learn` — that's updated by triggers or manually
106
108
 
107
- **When you detect you've been corrected** — the user says "no, not that way" or "don't do X, do Y" — suggest running `context learn`. Don't wait to be told. Example:
109
+ **When you detect you've been corrected** — the user says "no, not that way" or "don't do X, do Y" — suggest running `claude-md learn`. Don't wait to be told. Example:
108
110
 
109
111
  > User: "No, use pnpm ce, not npx"
110
- > Agent: *fixes the command* — "Should I capture this? `/context learn 'use pnpm ce, not npx — the skill doc specifies pnpm'`"
112
+ > Agent: *fixes the command* — "Should I capture this? `/claude-md learn 'use pnpm ce, not npx — the skill doc specifies pnpm'`"
111
113
 
112
114
  ## Shaping Impl Documents
113
115
 
@@ -21,7 +21,7 @@ The user runs `/highlight {free-form text} [level: critical|important|note]`.
21
21
  - `observation` — general flag (default)
22
22
  - `decision` — an informal decision the user wants recorded
23
23
  - `surprise` — something unexpected
24
- - `correction` — a mid-session correction (but the work skill already does this on `context learn`; prefer that path)
24
+ - `correction` — a mid-session correction (but the work skill already does this on `claude-md learn`; prefer that path)
25
25
  - A user-supplied tag if the message contains one (`tag=architecture` etc.)
26
26
 
27
27
  3. **Write the highlight** via the InDusk MCP:
package/skills/planner.md CHANGED
@@ -123,7 +123,7 @@ Workflow templates are in `templates/workflows/` in the package. They describe w
123
123
  ```
124
124
  Skip silently on highlight unavailability.
125
125
 
126
- 6. **If test plan is accepted** and the workflow includes an ADR (feature only), write the ADR. The ADR formalizes the decisions that were discussed during research and led to the brief. It records what was chosen, what was rejected, and why. **After the ADR is accepted**, add a one-liner to CLAUDE.md's Key Decisions section per the context skill: `- {decision summary} — see .indusk/planning/{plan}/adr.md`
126
+ 6. **If test plan is accepted** and the workflow includes an ADR (feature only), write the ADR. The ADR formalizes the decisions that were discussed during research and led to the brief. It records what was chosen, what was rejected, and why. **After the ADR is accepted**, add a one-liner to CLAUDE.md's Key Decisions section per the claude-md skill: `- {decision summary} — see .indusk/planning/{plan}/adr.md`
127
127
 
128
128
  **When the ADR moves from `proposed` to `accepted`**, write a highlight so the eval agent can turn it into a structured Y-statement episode:
129
129
  ```
package/skills/work.md CHANGED
@@ -374,13 +374,13 @@ Where the harness `Workflow` tool is available, the loop can run as a Workflow (
374
374
 
375
375
  ## Corrections and Context Learning
376
376
 
377
- When you are corrected mid-work — the user says "no, not that way" or "don't do X, do Y" — suggest capturing it with `context learn`:
377
+ When you are corrected mid-work — the user says "no, not that way" or "don't do X, do Y" — suggest capturing it with `claude-md learn`:
378
378
 
379
- > "Should I capture this? `/context learn 'use pnpm ce, not npx — the skill doc specifies pnpm'`"
379
+ > "Should I capture this? `/claude-md learn 'use pnpm ce, not npx — the skill doc specifies pnpm'`"
380
380
 
381
381
  Don't wait to be told. Corrections are the most valuable source of project knowledge.
382
382
 
383
- **When the user confirms `context learn`, ALSO write a highlight so the eval agent can materialize it as a lesson:**
383
+ **When the user confirms `claude-md learn`, ALSO write a highlight so the eval agent can materialize it as a lesson:**
384
384
  ```
385
385
  mcp__indusk__highlight({
386
386
  tag: "correction",
@@ -393,7 +393,7 @@ The working agent does not write the lesson directly. The eval agent reads the h
393
393
 
394
394
  **What to include in the `note`:** enough for the eval agent to reconstruct the lesson and classify its scope. Example: `pnpm-ce: always use pnpm ce, not npx — skill doc specifies pnpm and mixing causes cache drift`. The eval agent has the full transcript, so concision over completeness is fine.
395
395
 
396
- Skip silently if `mcp__indusk__highlight` is unavailable — highlights are best-effort and must not fail the work item or the `context learn` recording (which is the canonical, local copy of the lesson).
396
+ Skip silently if `mcp__indusk__highlight` is unavailable — highlights are best-effort and must not fail the work item or the `claude-md learn` recording (which is the canonical, local copy of the lesson).
397
397
 
398
398
  ## Worktree Kickoff
399
399