@ashlr/hub 3.11.3 → 3.12.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 (558) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +44 -18
  3. package/dist/authority-surface.json +74 -59
  4. package/dist/build-identity.json +2 -2
  5. package/dist/cli/authority.d.ts +39 -0
  6. package/dist/cli/authority.js +222 -55
  7. package/dist/cli/authority.js.map +1 -1
  8. package/dist/cli/help.js +1 -1
  9. package/dist/cli/help.js.map +1 -1
  10. package/dist/cli/verse.d.ts +3 -0
  11. package/dist/cli/verse.js +10 -0
  12. package/dist/cli/verse.js.map +1 -1
  13. package/dist/core/authority/trust-roots.js +7 -1
  14. package/dist/core/authority/trust-roots.js.map +1 -1
  15. package/dist/core/authority/types.d.ts +2 -2
  16. package/dist/core/cloud/cloud-api.js +1 -1
  17. package/dist/core/cloud/cloud-api.js.map +1 -1
  18. package/dist/core/cloud/delivery-contract.d.ts +1 -1
  19. package/dist/core/cloud/delivery-contract.js +25 -15
  20. package/dist/core/cloud/delivery-contract.js.map +1 -1
  21. package/dist/core/cloud/store.js +6 -0
  22. package/dist/core/cloud/store.js.map +1 -1
  23. package/dist/core/cloud/tracker.d.ts +2 -0
  24. package/dist/core/cloud/tracker.js +140 -37
  25. package/dist/core/cloud/tracker.js.map +1 -1
  26. package/dist/core/cloud/types.d.ts +9 -1
  27. package/dist/core/cloud/types.js.map +1 -1
  28. package/dist/core/comms/dispatch.d.ts +5 -0
  29. package/dist/core/comms/dispatch.js +12 -1
  30. package/dist/core/comms/dispatch.js.map +1 -1
  31. package/dist/core/comms/requests.d.ts +27 -1
  32. package/dist/core/comms/requests.js +50 -1
  33. package/dist/core/comms/requests.js.map +1 -1
  34. package/dist/core/daemon/loop.d.ts +14 -0
  35. package/dist/core/daemon/loop.js +35 -0
  36. package/dist/core/daemon/loop.js.map +1 -1
  37. package/dist/core/fabric/claude-usage.js +23 -1
  38. package/dist/core/fabric/claude-usage.js.map +1 -1
  39. package/dist/core/fleet/dispatch-router.d.ts +7 -0
  40. package/dist/core/fleet/dispatch-router.js +4 -1
  41. package/dist/core/fleet/dispatch-router.js.map +1 -1
  42. package/dist/core/fleet/tick-hooks-live.d.ts +5 -1
  43. package/dist/core/fleet/tick-hooks-live.js +10 -1
  44. package/dist/core/fleet/tick-hooks-live.js.map +1 -1
  45. package/dist/core/local-runtime/llama/config.d.ts +14 -0
  46. package/dist/core/local-runtime/llama/config.js +20 -2
  47. package/dist/core/local-runtime/llama/config.js.map +1 -1
  48. package/dist/core/local-runtime/llama/process.d.ts +19 -0
  49. package/dist/core/local-runtime/llama/process.js +67 -17
  50. package/dist/core/local-runtime/llama/process.js.map +1 -1
  51. package/dist/core/local-runtime/llama/supervisor.js +14 -3
  52. package/dist/core/local-runtime/llama/supervisor.js.map +1 -1
  53. package/dist/core/observability/rollup.d.ts +12 -0
  54. package/dist/core/observability/rollup.js +37 -2
  55. package/dist/core/observability/rollup.js.map +1 -1
  56. package/dist/core/observability/usage-source.js +49 -1
  57. package/dist/core/observability/usage-source.js.map +1 -1
  58. package/dist/core/resources/connection-monitor.js +47 -4
  59. package/dist/core/resources/connection-monitor.js.map +1 -1
  60. package/dist/core/resources/engineering-mission-store.d.ts +1 -1
  61. package/dist/core/routing/headroom.js +7 -2
  62. package/dist/core/routing/headroom.js.map +1 -1
  63. package/dist/core/routing/router.d.ts +48 -0
  64. package/dist/core/routing/router.js +129 -13
  65. package/dist/core/routing/router.js.map +1 -1
  66. package/dist/core/run/best-of-n.d.ts +7 -0
  67. package/dist/core/run/best-of-n.js +3 -0
  68. package/dist/core/run/best-of-n.js.map +1 -1
  69. package/dist/core/run/harness-dispatch.d.ts +147 -0
  70. package/dist/core/run/harness-dispatch.js +234 -0
  71. package/dist/core/run/harness-dispatch.js.map +1 -0
  72. package/dist/core/run/orchestrator.js +3 -0
  73. package/dist/core/run/orchestrator.js.map +1 -1
  74. package/dist/core/run/provider-client.d.ts +8 -0
  75. package/dist/core/run/provider-client.js +4 -0
  76. package/dist/core/run/provider-client.js.map +1 -1
  77. package/dist/core/run/sandboxed-engine.d.ts +8 -0
  78. package/dist/core/run/sandboxed-engine.js +60 -7
  79. package/dist/core/run/sandboxed-engine.js.map +1 -1
  80. package/dist/core/types.d.ts +14 -0
  81. package/dist/core/types.js.map +1 -1
  82. package/dist/core/universe/builtins/preparation/manifest.json +1 -1
  83. package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +188 -6
  84. package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +187 -5
  85. package/dist/core/universe/firm-demo.d.ts +1 -1
  86. package/dist/core/universe/firm-graph.d.ts +2 -2
  87. package/dist/core/util/scrub.js +16 -3
  88. package/dist/core/util/scrub.js.map +1 -1
  89. package/dist/core/verse/accounts.d.ts +9 -1
  90. package/dist/core/verse/accounts.js +52 -11
  91. package/dist/core/verse/accounts.js.map +1 -1
  92. package/dist/core/verse/apps-api.d.ts +12 -0
  93. package/dist/core/verse/apps-api.js +22 -4
  94. package/dist/core/verse/apps-api.js.map +1 -1
  95. package/dist/core/verse/apps.js +22 -12
  96. package/dist/core/verse/apps.js.map +1 -1
  97. package/dist/core/verse/local-models.js +3 -7
  98. package/dist/core/verse/local-models.js.map +1 -1
  99. package/dist/core/verse/model-display-name.d.ts +34 -0
  100. package/dist/core/verse/model-display-name.js +125 -0
  101. package/dist/core/verse/model-display-name.js.map +1 -0
  102. package/dist/core/verse/seats.d.ts +11 -2
  103. package/dist/core/verse/seats.js +42 -18
  104. package/dist/core/verse/seats.js.map +1 -1
  105. package/dist/core/verse/transient-events.d.ts +21 -0
  106. package/dist/core/verse/transient-events.js +12 -0
  107. package/dist/core/verse/transient-events.js.map +1 -0
  108. package/dist/core/verse/types.d.ts +6 -13
  109. package/dist/core/verse/types.js +5 -36
  110. package/dist/core/verse/types.js.map +1 -1
  111. package/dist/core/web/public/next/assets/ActionMenu-B4-39f2S.js +2 -0
  112. package/dist/core/web/public/next/assets/{ActionMenu-FxXeRbPx.js.map → ActionMenu-B4-39f2S.js.map} +1 -1
  113. package/dist/core/web/public/next/assets/Advanced-B-LqYXvd.js +2 -0
  114. package/dist/core/web/public/next/assets/Advanced-B-LqYXvd.js.map +1 -0
  115. package/dist/core/web/public/next/assets/App-E2zCDRxm.js +7 -0
  116. package/dist/core/web/public/next/assets/App-E2zCDRxm.js.map +1 -0
  117. package/dist/core/web/public/next/assets/AppsSection-8wXPPhZb.js +2 -0
  118. package/dist/core/web/public/next/assets/AppsSection-8wXPPhZb.js.map +1 -0
  119. package/dist/core/web/public/next/assets/AreaTrend-BFimExYn.js +2 -0
  120. package/dist/core/web/public/next/assets/{AreaTrend-CDxrQU4b.js.map → AreaTrend-BFimExYn.js.map} +1 -1
  121. package/dist/core/web/public/next/assets/AutonomyOffState-B5eEkmiz.js +2 -0
  122. package/dist/core/web/public/next/assets/AutonomyOffState-B5eEkmiz.js.map +1 -0
  123. package/dist/core/web/public/next/assets/AutonomyOffState-DmbE71vI.css +1 -0
  124. package/dist/core/web/public/next/assets/AutonomySection-B46igJKR.js +2 -0
  125. package/dist/core/web/public/next/assets/{AutonomySection-DuQkHGD_.js.map → AutonomySection-B46igJKR.js.map} +1 -1
  126. package/dist/core/web/public/next/assets/BranchBar-BRkrEQGs.js +2 -0
  127. package/dist/core/web/public/next/assets/{BranchBar-CLsvOcyK.js.map → BranchBar-BRkrEQGs.js.map} +1 -1
  128. package/dist/core/web/public/next/assets/BudgetControl-T_RjPrw9.js +2 -0
  129. package/dist/core/web/public/next/assets/{BudgetControl-TL3FeZ1D.js.map → BudgetControl-T_RjPrw9.js.map} +1 -1
  130. package/dist/core/web/public/next/assets/{Button-HHXgoXGr.js → Button-BhO-WKPp.js} +2 -2
  131. package/dist/core/web/public/next/assets/{Button-HHXgoXGr.js.map → Button-BhO-WKPp.js.map} +1 -1
  132. package/dist/core/web/public/next/assets/CapacityStrip-CkFz5vq2.js +2 -0
  133. package/dist/core/web/public/next/assets/{CapacityStrip-qReu0RaF.js.map → CapacityStrip-CkFz5vq2.js.map} +1 -1
  134. package/dist/core/web/public/next/assets/{useChartWidth-BW6SwYIK.css → ChartFrame-BVuBe6RP.css} +1 -1
  135. package/dist/core/web/public/next/assets/ChartFrame-SygZ7B3x.js +2 -0
  136. package/dist/core/web/public/next/assets/ChartFrame-SygZ7B3x.js.map +1 -0
  137. package/dist/core/web/public/next/assets/ChatSection-D6WybBpB.js +3 -0
  138. package/dist/core/web/public/next/assets/ChatSection-D6WybBpB.js.map +1 -0
  139. package/dist/core/web/public/next/assets/CloudBudgetForm-Bd91iStN.js +2 -0
  140. package/dist/core/web/public/next/assets/CloudBudgetForm-Bd91iStN.js.map +1 -0
  141. package/dist/core/web/public/next/assets/CommandPalette-B6SgDJH-.js +2 -0
  142. package/dist/core/web/public/next/assets/CommandPalette-B6SgDJH-.js.map +1 -0
  143. package/dist/core/web/public/next/assets/CommandSection-CvAVd1w4.css +1 -0
  144. package/dist/core/web/public/next/assets/CommandSection-DgMGoepd.js +2 -0
  145. package/dist/core/web/public/next/assets/CommandSection-DgMGoepd.js.map +1 -0
  146. package/dist/core/web/public/next/assets/ConfirmDialog-Bv4hdK2T.js +2 -0
  147. package/dist/core/web/public/next/assets/{ConfirmDialog-DLrLKM0c.js.map → ConfirmDialog-Bv4hdK2T.js.map} +1 -1
  148. package/dist/core/web/public/next/assets/DeleteChatDialog-CH1Ix8Eh.js +2 -0
  149. package/dist/core/web/public/next/assets/DeleteChatDialog-CH1Ix8Eh.js.map +1 -0
  150. package/dist/core/web/public/next/assets/Dialog-BSsIFNqD.js +2 -0
  151. package/dist/core/web/public/next/assets/{Dialog-BS9Dxi3G.js.map → Dialog-BSsIFNqD.js.map} +1 -1
  152. package/dist/core/web/public/next/assets/DiffPane-BpNuJmth.js +2 -0
  153. package/dist/core/web/public/next/assets/{DiffPane-TOmUf3b2.js.map → DiffPane-BpNuJmth.js.map} +1 -1
  154. package/dist/core/web/public/next/assets/DiffViewer-CJarUvs0.js +2 -0
  155. package/dist/core/web/public/next/assets/{DiffViewer-BpH56302.js.map → DiffViewer-CJarUvs0.js.map} +1 -1
  156. package/dist/core/web/public/next/assets/DockHost-DW9q0NdR.js +2 -0
  157. package/dist/core/web/public/next/assets/DockHost-DW9q0NdR.js.map +1 -0
  158. package/dist/core/web/public/next/assets/{EmptyState-BqR5YAmf.js → EmptyState-DPrd2aak.js} +2 -2
  159. package/dist/core/web/public/next/assets/{EmptyState-BqR5YAmf.js.map → EmptyState-DPrd2aak.js.map} +1 -1
  160. package/dist/core/web/public/next/assets/{Epistemic-dhvDTwAZ.js → Epistemic-D7MxSmED.js} +2 -2
  161. package/dist/core/web/public/next/assets/{Epistemic-dhvDTwAZ.js.map → Epistemic-D7MxSmED.js.map} +1 -1
  162. package/dist/core/web/public/next/assets/FleetSection-BdZN6rGS.js +3 -0
  163. package/dist/core/web/public/next/assets/FleetSection-BdZN6rGS.js.map +1 -0
  164. package/dist/core/web/public/next/assets/Funnel-BeNQZWv2.js +2 -0
  165. package/dist/core/web/public/next/assets/{Funnel-D2u7Wlzc.js.map → Funnel-BeNQZWv2.js.map} +1 -1
  166. package/dist/core/web/public/next/assets/GearTray-CIPtzeIx.js +2 -0
  167. package/dist/core/web/public/next/assets/{GearTray-Cb2npoxM.js.map → GearTray-CIPtzeIx.js.map} +1 -1
  168. package/dist/core/web/public/next/assets/GrowthSection-iiQg6wvK.js +2 -0
  169. package/dist/core/web/public/next/assets/{GrowthSection-C5aDPs8B.js.map → GrowthSection-iiQg6wvK.js.map} +1 -1
  170. package/dist/core/web/public/next/assets/HandoffDialog-DrQ6ofuy.js +2 -0
  171. package/dist/core/web/public/next/assets/{HandoffDialog-BF3AYg-X.js.map → HandoffDialog-DrQ6ofuy.js.map} +1 -1
  172. package/dist/core/web/public/next/assets/Input-C0MQxEM6.js +2 -0
  173. package/dist/core/web/public/next/assets/{Input-B5dmGLZx.js.map → Input-C0MQxEM6.js.map} +1 -1
  174. package/dist/core/web/public/next/assets/LeaderCard-BRr3_yE-.js +2 -0
  175. package/dist/core/web/public/next/assets/LeaderCard-BRr3_yE-.js.map +1 -0
  176. package/dist/core/web/public/next/assets/MatrixHeatmap-DZvZeWXL.js +2 -0
  177. package/dist/core/web/public/next/assets/{MatrixHeatmap-BgEUs2Eu.js.map → MatrixHeatmap-DZvZeWXL.js.map} +1 -1
  178. package/dist/core/web/public/next/assets/McpSection-BRuCcTjT.js +2 -0
  179. package/dist/core/web/public/next/assets/{McpSection-DZkiOuoq.js.map → McpSection-BRuCcTjT.js.map} +1 -1
  180. package/dist/core/web/public/next/assets/MessageMarkdown-bRvD5nSc.js +3 -0
  181. package/dist/core/web/public/next/assets/{MessageMarkdown-BauY8ZTY.js.map → MessageMarkdown-bRvD5nSc.js.map} +1 -1
  182. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DLBNLfsn.js → MessageMarkdownRenderer-FjjkPKA2.js} +4 -4
  183. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DLBNLfsn.js.map → MessageMarkdownRenderer-FjjkPKA2.js.map} +1 -1
  184. package/dist/core/web/public/next/assets/{Meter-DNeocJnD.js → Meter-CFNLpwA-.js} +2 -2
  185. package/dist/core/web/public/next/assets/{Meter-DNeocJnD.js.map → Meter-CFNLpwA-.js.map} +1 -1
  186. package/dist/core/web/public/next/assets/MindSection-BTIiQS8P.js +2 -0
  187. package/dist/core/web/public/next/assets/MindSection-BTIiQS8P.js.map +1 -0
  188. package/dist/core/web/public/next/assets/MutationTokenDialog-T7gv3a9r.js +2 -0
  189. package/dist/core/web/public/next/assets/{MutationTokenDialog-mxrw0Yvy.js.map → MutationTokenDialog-T7gv3a9r.js.map} +1 -1
  190. package/dist/core/web/public/next/assets/NeedsYouDrawer-lYN4G_aM.js +2 -0
  191. package/dist/core/web/public/next/assets/{NeedsYouDrawer-CO-Balfp.js.map → NeedsYouDrawer-lYN4G_aM.js.map} +1 -1
  192. package/dist/core/web/public/next/assets/NeedsYouList-BgH8ezqf.js +2 -0
  193. package/dist/core/web/public/next/assets/{NeedsYouList-CzDZbzRD.js.map → NeedsYouList-BgH8ezqf.js.map} +1 -1
  194. package/dist/core/web/public/next/assets/NewChatDialog-Db5Xjrk8.js +3 -0
  195. package/dist/core/web/public/next/assets/NewChatDialog-Db5Xjrk8.js.map +1 -0
  196. package/dist/core/web/public/next/assets/OnboardingFlow-HUNQGQuU.css +1 -0
  197. package/dist/core/web/public/next/assets/OnboardingFlow-LoY-zuSe.js +2 -0
  198. package/dist/core/web/public/next/assets/OnboardingFlow-LoY-zuSe.js.map +1 -0
  199. package/dist/core/web/public/next/assets/OnboardingGate-C4VXn7BJ.js +3 -0
  200. package/dist/core/web/public/next/assets/OnboardingGate-C4VXn7BJ.js.map +1 -0
  201. package/dist/core/web/public/next/assets/PreviewPane-BPBbcROb.js +2 -0
  202. package/dist/core/web/public/next/assets/{PreviewPane-BS-CleCd.js.map → PreviewPane-BPBbcROb.js.map} +1 -1
  203. package/dist/core/web/public/next/assets/{ProviderLogo-C5mBg8i0.js → ProviderLogo-CT2cSfkg.js} +2 -2
  204. package/dist/core/web/public/next/assets/{ProviderLogo-C5mBg8i0.js.map → ProviderLogo-CT2cSfkg.js.map} +1 -1
  205. package/dist/core/web/public/next/assets/RailStatus-Vgl0GYtd.js +2 -0
  206. package/dist/core/web/public/next/assets/{RailStatus-cPRyOmrk.js.map → RailStatus-Vgl0GYtd.js.map} +1 -1
  207. package/dist/core/web/public/next/assets/{RefreshIndicator-CMwSCiz5.js → RefreshIndicator-CSyqpY_q.js} +2 -2
  208. package/dist/core/web/public/next/assets/{RefreshIndicator-CMwSCiz5.js.map → RefreshIndicator-CSyqpY_q.js.map} +1 -1
  209. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BFi1opsC.js → ResourcePoolConsoleApp-BX2nkdmZ.js} +4 -4
  210. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BFi1opsC.js.map → ResourcePoolConsoleApp-BX2nkdmZ.js.map} +1 -1
  211. package/dist/core/web/public/next/assets/ResourcesChrome-B2U2lO1H.js +3 -0
  212. package/dist/core/web/public/next/assets/ResourcesChrome-B2U2lO1H.js.map +1 -0
  213. package/dist/core/web/public/next/assets/ResourcesDrawer-BCFJ2Uq8.css +1 -0
  214. package/dist/core/web/public/next/assets/ResourcesDrawer-DlUKOjl9.js +2 -0
  215. package/dist/core/web/public/next/assets/ResourcesDrawer-DlUKOjl9.js.map +1 -0
  216. package/dist/core/web/public/next/assets/RouteErrorBoundary-BaC7YVzR.js +2 -0
  217. package/dist/core/web/public/next/assets/{RouteErrorBoundary-DYtwc2ja.js.map → RouteErrorBoundary-BaC7YVzR.js.map} +1 -1
  218. package/dist/core/web/public/next/assets/RunInCloudAction-D5PDHJPE.js +2 -0
  219. package/dist/core/web/public/next/assets/{RunInCloudAction-BEGEEM8O.js.map → RunInCloudAction-D5PDHJPE.js.map} +1 -1
  220. package/dist/core/web/public/next/assets/SeatSelector-Cg75LInq.js +3 -0
  221. package/dist/core/web/public/next/assets/{SeatSelector-CYHRR7Wp.js.map → SeatSelector-Cg75LInq.js.map} +1 -1
  222. package/dist/core/web/public/next/assets/Segmented-CametjLt.js +2 -0
  223. package/dist/core/web/public/next/assets/{Segmented-BE53BenI.js.map → Segmented-CametjLt.js.map} +1 -1
  224. package/dist/core/web/public/next/assets/Select-De52fghU.js +2 -0
  225. package/dist/core/web/public/next/assets/{Select-BwSGkHCS.js.map → Select-De52fghU.js.map} +1 -1
  226. package/dist/core/web/public/next/assets/SessionGate-CzlcNq3O.js +2 -0
  227. package/dist/core/web/public/next/assets/{SessionGate-e0dFJm9d.js.map → SessionGate-CzlcNq3O.js.map} +1 -1
  228. package/dist/core/web/public/next/assets/SessionInsightChip-Bk_Owa7u.js +2 -0
  229. package/dist/core/web/public/next/assets/{SessionInsightChip-CxlSyueJ.js.map → SessionInsightChip-Bk_Owa7u.js.map} +1 -1
  230. package/dist/core/web/public/next/assets/SessionSearch-C6C8DHN8.js +2 -0
  231. package/dist/core/web/public/next/assets/{SessionSearch-_yp7S2TP.js.map → SessionSearch-C6C8DHN8.js.map} +1 -1
  232. package/dist/core/web/public/next/assets/SettingsSection-mI9wQYZg.js +2 -0
  233. package/dist/core/web/public/next/assets/SettingsSection-mI9wQYZg.js.map +1 -0
  234. package/dist/core/web/public/next/assets/Sheet-CJhK9Dqv.js +2 -0
  235. package/dist/core/web/public/next/assets/{Sheet-DVP2Mgy6.js.map → Sheet-CJhK9Dqv.js.map} +1 -1
  236. package/dist/core/web/public/next/assets/ShortcutsOverlay-DDW-i9Fc.js +2 -0
  237. package/dist/core/web/public/next/assets/{ShortcutsOverlay-BcIcoClX.js.map → ShortcutsOverlay-DDW-i9Fc.js.map} +1 -1
  238. package/dist/core/web/public/next/assets/Sidebar-DT7ykaqS.js +3 -0
  239. package/dist/core/web/public/next/assets/Sidebar-DT7ykaqS.js.map +1 -0
  240. package/dist/core/web/public/next/assets/Slider-Bwd9HfXl.js +2 -0
  241. package/dist/core/web/public/next/assets/{Slider-BypUWjpH.js.map → Slider-Bwd9HfXl.js.map} +1 -1
  242. package/dist/core/web/public/next/assets/StatTile-DPZ5yyaU.js +2 -0
  243. package/dist/core/web/public/next/assets/StatTile-DPZ5yyaU.js.map +1 -0
  244. package/dist/core/web/public/next/assets/{StatusBadge-HCZp416_.js → StatusBadge-DHKRtttH.js} +2 -2
  245. package/dist/core/web/public/next/assets/{StatusBadge-HCZp416_.js.map → StatusBadge-DHKRtttH.js.map} +1 -1
  246. package/dist/core/web/public/next/assets/StepBand-DQykLkk_.js +2 -0
  247. package/dist/core/web/public/next/assets/{StepBand-Duz1PUes.js.map → StepBand-DQykLkk_.js.map} +1 -1
  248. package/dist/core/web/public/next/assets/Surface-D--LXgQm.js +2 -0
  249. package/dist/core/web/public/next/assets/Surface-D--LXgQm.js.map +1 -0
  250. package/dist/core/web/public/next/assets/Surface-e1z6GdZt.css +1 -0
  251. package/dist/core/web/public/next/assets/Swimlane-BzH6OCee.js +2 -0
  252. package/dist/core/web/public/next/assets/{Swimlane-DGcIcnNA.js.map → Swimlane-BzH6OCee.js.map} +1 -1
  253. package/dist/core/web/public/next/assets/{Switch-iveI-8NY.js → Switch-PMixU6b0.js} +2 -2
  254. package/dist/core/web/public/next/assets/{Switch-iveI-8NY.js.map → Switch-PMixU6b0.js.map} +1 -1
  255. package/dist/core/web/public/next/assets/{Tag-DH15CUJp.js → Tag-fordBsrJ.js} +2 -2
  256. package/dist/core/web/public/next/assets/{Tag-DH15CUJp.js.map → Tag-fordBsrJ.js.map} +1 -1
  257. package/dist/core/web/public/next/assets/TerminalPane-BSnGdUuF.js +7 -0
  258. package/dist/core/web/public/next/assets/TerminalPane-BSnGdUuF.js.map +1 -0
  259. package/dist/core/web/public/next/assets/UniverseConsoleApp-DtXFhAhw.js +2 -0
  260. package/dist/core/web/public/next/assets/{UniverseConsoleApp-C8yQ0AaR.js.map → UniverseConsoleApp-DtXFhAhw.js.map} +1 -1
  261. package/dist/core/web/public/next/assets/{UniverseView-_nPURPqe.js → UniverseView-sWm3pnTW.js} +3 -3
  262. package/dist/core/web/public/next/assets/{UniverseView-_nPURPqe.js.map → UniverseView-sWm3pnTW.js.map} +1 -1
  263. package/dist/core/web/public/next/assets/UsageSection-CiD1DbuF.js +3 -0
  264. package/dist/core/web/public/next/assets/UsageSection-CiD1DbuF.js.map +1 -0
  265. package/dist/core/web/public/next/assets/VerseConsoleApp-BCY5uSok.js +3 -0
  266. package/dist/core/web/public/next/assets/VerseConsoleApp-BCY5uSok.js.map +1 -0
  267. package/dist/core/web/public/next/assets/Workspace-BQSZFSeO.js +10 -0
  268. package/dist/core/web/public/next/assets/Workspace-BQSZFSeO.js.map +1 -0
  269. package/dist/core/web/public/next/assets/actions-BmIf9avl.css +1 -0
  270. package/dist/core/web/public/next/assets/actions-Ci6I4C0l.js +2 -0
  271. package/dist/core/web/public/next/assets/actions-Ci6I4C0l.js.map +1 -0
  272. package/dist/core/web/public/next/assets/apps-model-DlwnfqwJ.js +2 -0
  273. package/dist/core/web/public/next/assets/apps-model-DlwnfqwJ.js.map +1 -0
  274. package/dist/core/web/public/next/assets/authority-model-BFuPezSo.js +2 -0
  275. package/dist/core/web/public/next/assets/authority-model-BFuPezSo.js.map +1 -0
  276. package/dist/core/web/public/next/assets/binding-left-DZpq5sLf.js +2 -0
  277. package/dist/core/web/public/next/assets/binding-left-DZpq5sLf.js.map +1 -0
  278. package/dist/core/web/public/next/assets/{budget-queries-V3wcJVK_.js → budget-queries-DsAjH8ac.js} +2 -2
  279. package/dist/core/web/public/next/assets/{budget-queries-V3wcJVK_.js.map → budget-queries-DsAjH8ac.js.map} +1 -1
  280. package/dist/core/web/public/next/assets/capacity-strip-model-Dn1cNOhz.js +2 -0
  281. package/dist/core/web/public/next/assets/capacity-strip-model-Dn1cNOhz.js.map +1 -0
  282. package/dist/core/web/public/next/assets/charts-C_xJbJiw.js +2 -0
  283. package/dist/core/web/public/next/assets/charts-C_xJbJiw.js.map +1 -0
  284. package/dist/core/web/public/next/assets/charts-DhKTrQLw.css +1 -0
  285. package/dist/core/web/public/next/assets/clipboard-DkZdqlxf.js +2 -0
  286. package/dist/core/web/public/next/assets/clipboard-DkZdqlxf.js.map +1 -0
  287. package/dist/core/web/public/next/assets/cloud-D-HXms6q.css +1 -0
  288. package/dist/core/web/public/next/assets/cloud-model-CX407gPY.js +2 -0
  289. package/dist/core/web/public/next/assets/cloud-model-CX407gPY.js.map +1 -0
  290. package/dist/core/web/public/next/assets/cloud-queries-QAhpExlz.js +2 -0
  291. package/dist/core/web/public/next/assets/cloud-queries-QAhpExlz.js.map +1 -0
  292. package/dist/core/web/public/next/assets/cloud.module-DOP-N4Ch.js +2 -0
  293. package/dist/core/web/public/next/assets/cloud.module-DOP-N4Ch.js.map +1 -0
  294. package/dist/core/web/public/next/assets/command-catalog-CF0cQQac.js +2 -0
  295. package/dist/core/web/public/next/assets/command-catalog-CF0cQQac.js.map +1 -0
  296. package/dist/core/web/public/next/assets/context-model-Co4wh3SM.js +2 -0
  297. package/dist/core/web/public/next/assets/context-model-Co4wh3SM.js.map +1 -0
  298. package/dist/core/web/public/next/assets/context-model-DV1zCfAm.js +3 -0
  299. package/dist/core/web/public/next/assets/context-model-DV1zCfAm.js.map +1 -0
  300. package/dist/core/web/public/next/assets/{context-queries-CrPcHWTz.js → context-queries-CktFQqSS.js} +2 -2
  301. package/dist/core/web/public/next/assets/{context-queries-CrPcHWTz.js.map → context-queries-CktFQqSS.js.map} +1 -1
  302. package/dist/core/web/public/next/assets/{control-queries-CmgBgKV7.js → control-queries-DAvlh_YM.js} +2 -2
  303. package/dist/core/web/public/next/assets/{control-queries-CmgBgKV7.js.map → control-queries-DAvlh_YM.js.map} +1 -1
  304. package/dist/core/web/public/next/assets/copy-setup-CqRSfELB.js +2 -0
  305. package/dist/core/web/public/next/assets/copy-setup-CqRSfELB.js.map +1 -0
  306. package/dist/core/web/public/next/assets/dock-icons-BFuBbqJl.js +2 -0
  307. package/dist/core/web/public/next/assets/{dock-icons-CUh8dOxJ.js.map → dock-icons-BFuBbqJl.js.map} +1 -1
  308. package/dist/core/web/public/next/assets/fleet-model-Dfd5JyLR.js +2 -0
  309. package/dist/core/web/public/next/assets/fleet-model-Dfd5JyLR.js.map +1 -0
  310. package/dist/core/web/public/next/assets/fleet-queries-RtMTd5rR.js +2 -0
  311. package/dist/core/web/public/next/assets/fleet-queries-RtMTd5rR.js.map +1 -0
  312. package/dist/core/web/public/next/assets/{focus-trap-HtcoXeEq.js → focus-trap-BdrbWfC4.js} +2 -2
  313. package/dist/core/web/public/next/assets/{focus-trap-HtcoXeEq.js.map → focus-trap-BdrbWfC4.js.map} +1 -1
  314. package/dist/core/web/public/next/assets/format-Dk4Fmxax.js +2 -0
  315. package/dist/core/web/public/next/assets/format-Dk4Fmxax.js.map +1 -0
  316. package/dist/core/web/public/next/assets/{git-model-bk_RXh3y.js → git-model-_BnI_Ogh.js} +2 -2
  317. package/dist/core/web/public/next/assets/{git-model-bk_RXh3y.js.map → git-model-_BnI_Ogh.js.map} +1 -1
  318. package/dist/core/web/public/next/assets/global-CNNGMril.js +2 -0
  319. package/dist/core/web/public/next/assets/{global-oEl9Qj8u.js.map → global-CNNGMril.js.map} +1 -1
  320. package/dist/core/web/public/next/assets/{guarded-runners-LHLXmXIk.js → guarded-runners-DPh2d32e.js} +2 -2
  321. package/dist/core/web/public/next/assets/{guarded-runners-LHLXmXIk.js.map → guarded-runners-DPh2d32e.js.map} +1 -1
  322. package/dist/core/web/public/next/assets/icons-0haWy6nh.js +2 -0
  323. package/dist/core/web/public/next/assets/icons-0haWy6nh.js.map +1 -0
  324. package/dist/core/web/public/next/assets/{index-BVxOlseC.js → index-QesfXBsb.js} +3 -3
  325. package/dist/core/web/public/next/assets/{index-BVxOlseC.js.map → index-QesfXBsb.js.map} +1 -1
  326. package/dist/core/web/public/next/assets/live-model-De-q0ZFK.js +2 -0
  327. package/dist/core/web/public/next/assets/live-model-De-q0ZFK.js.map +1 -0
  328. package/dist/core/web/public/next/assets/local-model-C9xNi9fN.js +2 -0
  329. package/dist/core/web/public/next/assets/local-model-C9xNi9fN.js.map +1 -0
  330. package/dist/core/web/public/next/assets/mind.module-BrK2nFOL.js +2 -0
  331. package/dist/core/web/public/next/assets/{mind.module-gTGAuJt1.js.map → mind.module-BrK2nFOL.js.map} +1 -1
  332. package/dist/core/web/public/next/assets/mutations-DTCtKCn_.js +2 -0
  333. package/dist/core/web/public/next/assets/{mutations-C5S7okTW.js.map → mutations-DTCtKCn_.js.map} +1 -1
  334. package/dist/core/web/public/next/assets/nav-KmGX0CVz.js +2 -0
  335. package/dist/core/web/public/next/assets/{nav-NVtnuG7A.js.map → nav-KmGX0CVz.js.map} +1 -1
  336. package/dist/core/web/public/next/assets/{overnight-queries-DGm3qL1b.js → overnight-queries-mlO0xzsr.js} +2 -2
  337. package/dist/core/web/public/next/assets/{overnight-queries-DGm3qL1b.js.map → overnight-queries-mlO0xzsr.js.map} +1 -1
  338. package/dist/core/web/public/next/assets/primitives-D0Fb3TtS.js +1 -0
  339. package/dist/core/web/public/next/assets/{queries-CYisSAAB.js → queries-CyBE8nsW.js} +2 -2
  340. package/dist/core/web/public/next/assets/{queries-CYisSAAB.js.map → queries-CyBE8nsW.js.map} +1 -1
  341. package/dist/core/web/public/next/assets/reasoning-pref-CaoA4_Vl.js +2 -0
  342. package/dist/core/web/public/next/assets/{reasoning-pref-BUcFF_5G.js.map → reasoning-pref-CaoA4_Vl.js.map} +1 -1
  343. package/dist/core/web/public/next/assets/{reveal-anchor-D-tV8xau.js → reveal-anchor-BP1VqnPU.js} +2 -2
  344. package/dist/core/web/public/next/assets/{reveal-anchor-D-tV8xau.js.map → reveal-anchor-BP1VqnPU.js.map} +1 -1
  345. package/dist/core/web/public/next/assets/seat-subscription-C5Tvr0WQ.js +2 -0
  346. package/dist/core/web/public/next/assets/{seat-subscription-B-f9ViU2.js.map → seat-subscription-C5Tvr0WQ.js.map} +1 -1
  347. package/dist/core/web/public/next/assets/{sidebar-model-DQ-FyBHW.js → sidebar-model-B5Qk95k_.js} +2 -2
  348. package/dist/core/web/public/next/assets/{sidebar-model-DQ-FyBHW.js.map → sidebar-model-B5Qk95k_.js.map} +1 -1
  349. package/dist/core/web/public/next/assets/slots-DHKQDoE6.js +3 -0
  350. package/dist/core/web/public/next/assets/{slots-BhP8b8tf.js.map → slots-DHKQDoE6.js.map} +1 -1
  351. package/dist/core/web/public/next/assets/surface-data-CchClvHo.js +2 -0
  352. package/dist/core/web/public/next/assets/surface-data-CchClvHo.js.map +1 -0
  353. package/dist/core/web/public/next/assets/surface-prefetch-BWr0LBQn.js +2 -0
  354. package/dist/core/web/public/next/assets/surface-prefetch-BWr0LBQn.js.map +1 -0
  355. package/dist/core/web/public/next/assets/{tasks-model-BKDNqmmt.js → tasks-model-D6WFVULI.js} +2 -2
  356. package/dist/core/web/public/next/assets/{tasks-model-BKDNqmmt.js.map → tasks-model-D6WFVULI.js.map} +1 -1
  357. package/dist/core/web/public/next/assets/{terminal-icons-D2xe-aM1.js → terminal-icons-BvCvuXk2.js} +2 -2
  358. package/dist/core/web/public/next/assets/{terminal-icons-D2xe-aM1.js.map → terminal-icons-BvCvuXk2.js.map} +1 -1
  359. package/dist/core/web/public/next/assets/transient-events-nTLhMBND.js +2 -0
  360. package/dist/core/web/public/next/assets/transient-events-nTLhMBND.js.map +1 -0
  361. package/dist/core/web/public/next/assets/types-D5XOdyw8.js.map +1 -1
  362. package/dist/core/web/public/next/assets/{usage-queries-BZuAANlI.js → usage-queries-D1SU1t7r.js} +2 -2
  363. package/dist/core/web/public/next/assets/{usage-queries-BZuAANlI.js.map → usage-queries-D1SU1t7r.js.map} +1 -1
  364. package/dist/core/web/public/next/assets/{use-guarded-action-Cf4MeNBa.js → use-guarded-action-BZmBv7CJ.js} +2 -2
  365. package/dist/core/web/public/next/assets/{use-guarded-action-Cf4MeNBa.js.map → use-guarded-action-BZmBv7CJ.js.map} +1 -1
  366. package/dist/core/web/public/next/assets/{use-ticker-D9yi49my.js → use-ticker-CkJ4-0wU.js} +2 -2
  367. package/dist/core/web/public/next/assets/{use-ticker-D9yi49my.js.map → use-ticker-CkJ4-0wU.js.map} +1 -1
  368. package/dist/core/web/public/next/assets/{use-token-gate-DqrSXdX6.js → use-token-gate-CYcfk_GS.js} +2 -2
  369. package/dist/core/web/public/next/assets/{use-token-gate-DqrSXdX6.js.map → use-token-gate-CYcfk_GS.js.map} +1 -1
  370. package/dist/core/web/public/next/assets/useOnboarding-CujRS6PK.js +2 -0
  371. package/dist/core/web/public/next/assets/useOnboarding-CujRS6PK.js.map +1 -0
  372. package/dist/core/web/public/next/assets/useSeatsRefresh-BEaQdkZs.js +2 -0
  373. package/dist/core/web/public/next/assets/useSeatsRefresh-BEaQdkZs.js.map +1 -0
  374. package/dist/core/web/public/next/assets/useVerseTranscript-BQ0J6Xhx.js +2 -0
  375. package/dist/core/web/public/next/assets/{useVerseTranscript-CDYrrWOO.js.map → useVerseTranscript-BQ0J6Xhx.js.map} +1 -1
  376. package/dist/core/web/public/next/assets/verse-icons-DndgEgKS.js +2 -0
  377. package/dist/core/web/public/next/assets/verse-icons-DndgEgKS.js.map +1 -0
  378. package/dist/core/web/public/next/assets/verse-model-MMySehjj.js +2 -0
  379. package/dist/core/web/public/next/assets/verse-model-MMySehjj.js.map +1 -0
  380. package/dist/core/web/public/next/assets/verse-store-DNVRuiJL.js +2 -0
  381. package/dist/core/web/public/next/assets/verse-store-DNVRuiJL.js.map +1 -0
  382. package/dist/core/web/public/next/assets/warmup-CNEH_-be.js +3 -0
  383. package/dist/core/web/public/next/assets/{warmup-HG5vYbsN.js.map → warmup-CNEH_-be.js.map} +1 -1
  384. package/dist/core/web/public/next/assets/why-seat-model-jlDTwYSc.js +2 -0
  385. package/dist/core/web/public/next/assets/why-seat-model-jlDTwYSc.js.map +1 -0
  386. package/dist/core/web/public/next/assets/{workspace-model-CbhdPhei.js → workspace-model-Dukb2wwv.js} +2 -2
  387. package/dist/core/web/public/next/assets/{workspace-model-CbhdPhei.js.map → workspace-model-Dukb2wwv.js.map} +1 -1
  388. package/dist/core/web/public/next/index.html +1 -1
  389. package/dist/release-dependency-inventory.json +1 -1
  390. package/docs/README.md +2 -1
  391. package/package.json +1 -1
  392. package/dist/core/web/public/next/assets/ActionMenu-FxXeRbPx.js +0 -2
  393. package/dist/core/web/public/next/assets/Advanced-D_eS4472.js +0 -2
  394. package/dist/core/web/public/next/assets/Advanced-D_eS4472.js.map +0 -1
  395. package/dist/core/web/public/next/assets/App-Cj4zKbG3.js +0 -7
  396. package/dist/core/web/public/next/assets/App-Cj4zKbG3.js.map +0 -1
  397. package/dist/core/web/public/next/assets/AppsSection-Ddu_RCQE.js +0 -2
  398. package/dist/core/web/public/next/assets/AppsSection-Ddu_RCQE.js.map +0 -1
  399. package/dist/core/web/public/next/assets/AreaTrend-CDxrQU4b.js +0 -2
  400. package/dist/core/web/public/next/assets/AutonomySection-DuQkHGD_.js +0 -2
  401. package/dist/core/web/public/next/assets/BranchBar-CLsvOcyK.js +0 -2
  402. package/dist/core/web/public/next/assets/BudgetControl-TL3FeZ1D.js +0 -2
  403. package/dist/core/web/public/next/assets/BurnDown-sFXkUGdB.js +0 -2
  404. package/dist/core/web/public/next/assets/BurnDown-sFXkUGdB.js.map +0 -1
  405. package/dist/core/web/public/next/assets/CapacityStrip-qReu0RaF.js +0 -2
  406. package/dist/core/web/public/next/assets/ChatSection-DZuZfTaC.js +0 -3
  407. package/dist/core/web/public/next/assets/ChatSection-DZuZfTaC.js.map +0 -1
  408. package/dist/core/web/public/next/assets/CloudBudgetForm-DJbiT1wi.js +0 -2
  409. package/dist/core/web/public/next/assets/CloudBudgetForm-DJbiT1wi.js.map +0 -1
  410. package/dist/core/web/public/next/assets/CommandPalette-zYLFZRnj.js +0 -2
  411. package/dist/core/web/public/next/assets/CommandPalette-zYLFZRnj.js.map +0 -1
  412. package/dist/core/web/public/next/assets/CommandSection-rIeMK5Ch.js +0 -2
  413. package/dist/core/web/public/next/assets/CommandSection-rIeMK5Ch.js.map +0 -1
  414. package/dist/core/web/public/next/assets/ConfirmDialog-DLrLKM0c.js +0 -2
  415. package/dist/core/web/public/next/assets/Dialog-BS9Dxi3G.js +0 -2
  416. package/dist/core/web/public/next/assets/DiffPane-TOmUf3b2.js +0 -2
  417. package/dist/core/web/public/next/assets/DiffViewer-BpH56302.js +0 -2
  418. package/dist/core/web/public/next/assets/DockHost-DzkzR-HD.js +0 -2
  419. package/dist/core/web/public/next/assets/DockHost-DzkzR-HD.js.map +0 -1
  420. package/dist/core/web/public/next/assets/FleetSection-ViAb549H.js +0 -3
  421. package/dist/core/web/public/next/assets/FleetSection-ViAb549H.js.map +0 -1
  422. package/dist/core/web/public/next/assets/Funnel-D2u7Wlzc.js +0 -2
  423. package/dist/core/web/public/next/assets/GearTray-Cb2npoxM.js +0 -2
  424. package/dist/core/web/public/next/assets/GrowthSection-C5aDPs8B.js +0 -2
  425. package/dist/core/web/public/next/assets/HandoffDialog-BF3AYg-X.js +0 -2
  426. package/dist/core/web/public/next/assets/Input-B5dmGLZx.js +0 -2
  427. package/dist/core/web/public/next/assets/LeaderCard-DZrmjDbI.js +0 -2
  428. package/dist/core/web/public/next/assets/LeaderCard-DZrmjDbI.js.map +0 -1
  429. package/dist/core/web/public/next/assets/MatrixHeatmap-BgEUs2Eu.js +0 -2
  430. package/dist/core/web/public/next/assets/McpSection-DZkiOuoq.js +0 -2
  431. package/dist/core/web/public/next/assets/MessageMarkdown-BauY8ZTY.js +0 -3
  432. package/dist/core/web/public/next/assets/MindSection-BvJXFjyX.js +0 -2
  433. package/dist/core/web/public/next/assets/MindSection-BvJXFjyX.js.map +0 -1
  434. package/dist/core/web/public/next/assets/MutationTokenDialog-mxrw0Yvy.js +0 -2
  435. package/dist/core/web/public/next/assets/NeedsYouDrawer-CO-Balfp.js +0 -2
  436. package/dist/core/web/public/next/assets/NeedsYouList-CzDZbzRD.js +0 -2
  437. package/dist/core/web/public/next/assets/NewChatDialog-B8eJjlFf.js +0 -3
  438. package/dist/core/web/public/next/assets/NewChatDialog-B8eJjlFf.js.map +0 -1
  439. package/dist/core/web/public/next/assets/OnboardingFlow-Cij6KWat.js +0 -2
  440. package/dist/core/web/public/next/assets/OnboardingFlow-Cij6KWat.js.map +0 -1
  441. package/dist/core/web/public/next/assets/OnboardingFlow-DSpPj8UE.css +0 -1
  442. package/dist/core/web/public/next/assets/PreviewPane-BS-CleCd.js +0 -2
  443. package/dist/core/web/public/next/assets/RailStatus-cPRyOmrk.js +0 -2
  444. package/dist/core/web/public/next/assets/ResourcesChrome-BJCauW_t.js +0 -3
  445. package/dist/core/web/public/next/assets/ResourcesChrome-BJCauW_t.js.map +0 -1
  446. package/dist/core/web/public/next/assets/ResourcesDrawer-BDecg6nO.js +0 -2
  447. package/dist/core/web/public/next/assets/ResourcesDrawer-BDecg6nO.js.map +0 -1
  448. package/dist/core/web/public/next/assets/ResourcesDrawer-CSKIO_wZ.css +0 -1
  449. package/dist/core/web/public/next/assets/RouteErrorBoundary-DYtwc2ja.js +0 -2
  450. package/dist/core/web/public/next/assets/RunInCloudAction-BEGEEM8O.js +0 -2
  451. package/dist/core/web/public/next/assets/SeatSelector-CYHRR7Wp.js +0 -3
  452. package/dist/core/web/public/next/assets/Segmented-BE53BenI.js +0 -2
  453. package/dist/core/web/public/next/assets/Select-BwSGkHCS.js +0 -2
  454. package/dist/core/web/public/next/assets/SessionGate-e0dFJm9d.js +0 -2
  455. package/dist/core/web/public/next/assets/SessionInsightChip-CxlSyueJ.js +0 -2
  456. package/dist/core/web/public/next/assets/SessionSearch-_yp7S2TP.js +0 -2
  457. package/dist/core/web/public/next/assets/SettingsSection-wGnpWeGW.js +0 -2
  458. package/dist/core/web/public/next/assets/SettingsSection-wGnpWeGW.js.map +0 -1
  459. package/dist/core/web/public/next/assets/Sheet-DVP2Mgy6.js +0 -2
  460. package/dist/core/web/public/next/assets/ShortcutsOverlay-BcIcoClX.js +0 -2
  461. package/dist/core/web/public/next/assets/Sidebar-DjQOqPbm.js +0 -3
  462. package/dist/core/web/public/next/assets/Sidebar-DjQOqPbm.js.map +0 -1
  463. package/dist/core/web/public/next/assets/Slider-BypUWjpH.js +0 -2
  464. package/dist/core/web/public/next/assets/StepBand-Duz1PUes.js +0 -2
  465. package/dist/core/web/public/next/assets/Surface-B75lVfzm.js +0 -2
  466. package/dist/core/web/public/next/assets/Surface-B75lVfzm.js.map +0 -1
  467. package/dist/core/web/public/next/assets/Surface-DMca0gAe.css +0 -1
  468. package/dist/core/web/public/next/assets/Swimlane-DGcIcnNA.js +0 -2
  469. package/dist/core/web/public/next/assets/TerminalPane-MQT-veKZ.js +0 -7
  470. package/dist/core/web/public/next/assets/TerminalPane-MQT-veKZ.js.map +0 -1
  471. package/dist/core/web/public/next/assets/UniverseConsoleApp-C8yQ0AaR.js +0 -2
  472. package/dist/core/web/public/next/assets/UsageSection-CqxRGJ40.js +0 -2
  473. package/dist/core/web/public/next/assets/UsageSection-CqxRGJ40.js.map +0 -1
  474. package/dist/core/web/public/next/assets/VerseConsoleApp-DTjDpGCd.js +0 -3
  475. package/dist/core/web/public/next/assets/VerseConsoleApp-DTjDpGCd.js.map +0 -1
  476. package/dist/core/web/public/next/assets/Workspace-DfcFGzME.js +0 -10
  477. package/dist/core/web/public/next/assets/Workspace-DfcFGzME.js.map +0 -1
  478. package/dist/core/web/public/next/assets/actions-Ddfg2iLl.css +0 -1
  479. package/dist/core/web/public/next/assets/actions-tWevL9HV.js +0 -2
  480. package/dist/core/web/public/next/assets/actions-tWevL9HV.js.map +0 -1
  481. package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js +0 -2
  482. package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js.map +0 -1
  483. package/dist/core/web/public/next/assets/capacity-strip-model-BDbmQ3e3.js +0 -2
  484. package/dist/core/web/public/next/assets/capacity-strip-model-BDbmQ3e3.js.map +0 -1
  485. package/dist/core/web/public/next/assets/charts-CfAjuKMv.js +0 -2
  486. package/dist/core/web/public/next/assets/charts-CfAjuKMv.js.map +0 -1
  487. package/dist/core/web/public/next/assets/charts-uSX6xVYN.css +0 -1
  488. package/dist/core/web/public/next/assets/cloud-C1KPNRHC.css +0 -1
  489. package/dist/core/web/public/next/assets/cloud-queries-Br_r0UAz.js +0 -2
  490. package/dist/core/web/public/next/assets/cloud-queries-Br_r0UAz.js.map +0 -1
  491. package/dist/core/web/public/next/assets/cloud.module-ascz58c3.js +0 -2
  492. package/dist/core/web/public/next/assets/cloud.module-ascz58c3.js.map +0 -1
  493. package/dist/core/web/public/next/assets/command-bus-xYZoK9nQ.js +0 -2
  494. package/dist/core/web/public/next/assets/command-bus-xYZoK9nQ.js.map +0 -1
  495. package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js +0 -2
  496. package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js.map +0 -1
  497. package/dist/core/web/public/next/assets/composer-keys-su0g1h9o.js +0 -2
  498. package/dist/core/web/public/next/assets/composer-keys-su0g1h9o.js.map +0 -1
  499. package/dist/core/web/public/next/assets/context-model-BC-HOmPo.js +0 -2
  500. package/dist/core/web/public/next/assets/context-model-BC-HOmPo.js.map +0 -1
  501. package/dist/core/web/public/next/assets/context-model-CIBmSugV.js +0 -2
  502. package/dist/core/web/public/next/assets/context-model-CIBmSugV.js.map +0 -1
  503. package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js +0 -2
  504. package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js.map +0 -1
  505. package/dist/core/web/public/next/assets/dock-icons-CUh8dOxJ.js +0 -2
  506. package/dist/core/web/public/next/assets/dock-store-B2vlxqPu.js +0 -2
  507. package/dist/core/web/public/next/assets/dock-store-B2vlxqPu.js.map +0 -1
  508. package/dist/core/web/public/next/assets/fleet-model-7i-FbzKI.js +0 -2
  509. package/dist/core/web/public/next/assets/fleet-model-7i-FbzKI.js.map +0 -1
  510. package/dist/core/web/public/next/assets/fleet-queries-DzGoqq8X.js +0 -2
  511. package/dist/core/web/public/next/assets/fleet-queries-DzGoqq8X.js.map +0 -1
  512. package/dist/core/web/public/next/assets/format-BkWdOQDL.js +0 -2
  513. package/dist/core/web/public/next/assets/format-BkWdOQDL.js.map +0 -1
  514. package/dist/core/web/public/next/assets/global-oEl9Qj8u.js +0 -2
  515. package/dist/core/web/public/next/assets/guarded-action-OzqcPjmh.js +0 -3
  516. package/dist/core/web/public/next/assets/guarded-action-OzqcPjmh.js.map +0 -1
  517. package/dist/core/web/public/next/assets/icon-base-DvM1eI5V.js +0 -2
  518. package/dist/core/web/public/next/assets/icon-base-DvM1eI5V.js.map +0 -1
  519. package/dist/core/web/public/next/assets/icons-DEQa2rTx.js +0 -2
  520. package/dist/core/web/public/next/assets/icons-DEQa2rTx.js.map +0 -1
  521. package/dist/core/web/public/next/assets/live-model-bmsJgnYD.js +0 -2
  522. package/dist/core/web/public/next/assets/live-model-bmsJgnYD.js.map +0 -1
  523. package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js +0 -2
  524. package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js.map +0 -1
  525. package/dist/core/web/public/next/assets/mind.module-gTGAuJt1.js +0 -2
  526. package/dist/core/web/public/next/assets/mutations-C5S7okTW.js +0 -2
  527. package/dist/core/web/public/next/assets/nav-NVtnuG7A.js +0 -2
  528. package/dist/core/web/public/next/assets/preloaded-Cwf9rsnZ.js +0 -2
  529. package/dist/core/web/public/next/assets/preloaded-Cwf9rsnZ.js.map +0 -1
  530. package/dist/core/web/public/next/assets/primitives-DyCKYSBG.js +0 -1
  531. package/dist/core/web/public/next/assets/reasoning-pref-BUcFF_5G.js +0 -2
  532. package/dist/core/web/public/next/assets/seat-subscription-B-f9ViU2.js +0 -2
  533. package/dist/core/web/public/next/assets/section-visibility-Yctxu-if.js +0 -2
  534. package/dist/core/web/public/next/assets/section-visibility-Yctxu-if.js.map +0 -1
  535. package/dist/core/web/public/next/assets/slots-BhP8b8tf.js +0 -3
  536. package/dist/core/web/public/next/assets/surface-data-DTI7LjvH.js +0 -2
  537. package/dist/core/web/public/next/assets/surface-data-DTI7LjvH.js.map +0 -1
  538. package/dist/core/web/public/next/assets/surface-prefetch-CdUEBFrl.js +0 -2
  539. package/dist/core/web/public/next/assets/surface-prefetch-CdUEBFrl.js.map +0 -1
  540. package/dist/core/web/public/next/assets/useChartWidth-owwodNVz.js +0 -2
  541. package/dist/core/web/public/next/assets/useChartWidth-owwodNVz.js.map +0 -1
  542. package/dist/core/web/public/next/assets/useSeatsRefresh-DgFy-Ph4.js +0 -2
  543. package/dist/core/web/public/next/assets/useSeatsRefresh-DgFy-Ph4.js.map +0 -1
  544. package/dist/core/web/public/next/assets/useVerseTranscript-CDYrrWOO.js +0 -2
  545. package/dist/core/web/public/next/assets/verse-icons-F9VwX07_.js +0 -2
  546. package/dist/core/web/public/next/assets/verse-icons-F9VwX07_.js.map +0 -1
  547. package/dist/core/web/public/next/assets/verse-model-DyCwZF-M.js +0 -2
  548. package/dist/core/web/public/next/assets/verse-model-DyCwZF-M.js.map +0 -1
  549. package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js +0 -3
  550. package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js.map +0 -1
  551. package/dist/core/web/public/next/assets/verse-ui-store-62DxpVHS.js +0 -3
  552. package/dist/core/web/public/next/assets/verse-ui-store-62DxpVHS.js.map +0 -1
  553. package/dist/core/web/public/next/assets/viewport-nTubFCwf.js +0 -2
  554. package/dist/core/web/public/next/assets/viewport-nTubFCwf.js.map +0 -1
  555. package/dist/core/web/public/next/assets/warmup-HG5vYbsN.js +0 -3
  556. package/dist/core/web/public/next/assets/workbench-types-DzN-5trg.js +0 -2
  557. package/dist/core/web/public/next/assets/workbench-types-DzN-5trg.js.map +0 -1
  558. /package/dist/core/web/public/next/assets/{BurnDown-BuLMsJMx.css → StatTile-BuLMsJMx.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"UniverseView-_nPURPqe.js","names":[],"sources":["../../../../../../src/web-ui/hooks/useScrollRestore.ts","../../../../../../src/web-ui/routes/universe/UniverseView.module.css","../../../../../../src/web-ui/routes/universe/UniverseScope.tsx","../../../../../../src/web-ui/routes/universe/UniverseDeliveries.tsx","../../../../../../src/core/universe/graph-query.ts","../../../../../../src/web-ui/routes/universe/UniverseGraph.module.css","../../../../../../src/web-ui/routes/universe/UniverseGraph.tsx","../../../../../../src/web-ui/data/universe-readiness-queries.ts","../../../../../../src/web-ui/routes/universe/CampaignReadiness.module.css","../../../../../../src/web-ui/routes/universe/CampaignReadiness.tsx","../../../../../../src/web-ui/routes/universe/UniverseView.tsx"],"sourcesContent":["/**\n * hooks/useScrollRestore.ts — React port of the one thing app.js got right\n * for view state (captureMainViewState / restoreMainViewState at\n * app.js:692-718), adapted to survive both route changes AND the\n * background-refresh re-renders the data layer now does constantly.\n *\n * The old bug this fixes: app.js captured `window.scrollY`, but the actual\n * scroll container was `.main` (styles.css sets `body.live-shell {overflow:\n * hidden}`), so scroll position always read 0 and reset on every ~8-15s\n * poll. Here the caller passes the REAL scrolling element's ref directly —\n * there is no ambiguity about which element scrolls.\n *\n * State survives:\n * - scrollTop of the container\n * - which element (if any) had focus, keyed by a stable `data-focus-key`\n * attribute the view puts on focusable rows/controls\n * - open/closed state of any `<details data-state-key>` in the subtree\n *\n * Keyed by `routeKey` (typically the route pathname) so switching views and\n * coming back restores each view's own scroll position independently.\n */\nimport { useEffect, useLayoutEffect, useRef, type RefObject } from 'react';\n\ninterface ViewState {\n scrollTop: number;\n focusKey: string | null;\n details: Map<string, boolean>;\n}\n\nconst stateByKey = new Map<string, ViewState>();\n\nfunction capture(container: HTMLElement): ViewState {\n const active = document.activeElement;\n const focusKey =\n active instanceof HTMLElement && container.contains(active)\n ? active.getAttribute('data-focus-key')\n : null;\n const details = new Map<string, boolean>();\n container.querySelectorAll('details[data-state-key]').forEach((node) => {\n const key = node.getAttribute('data-state-key');\n if (key) details.set(key, (node as HTMLDetailsElement).open);\n });\n return { scrollTop: container.scrollTop, focusKey, details };\n}\n\nfunction restore(container: HTMLElement, saved: ViewState): void {\n container.querySelectorAll('details[data-state-key]').forEach((node) => {\n const key = node.getAttribute('data-state-key');\n if (key && saved.details.has(key)) (node as HTMLDetailsElement).open = saved.details.get(key)!;\n });\n container.scrollTop = saved.scrollTop;\n if (!saved.focusKey) return;\n const target = container.querySelector<HTMLElement>(`[data-focus-key=\"${CSS.escape(saved.focusKey)}\"]`);\n if (!target) return;\n try {\n target.focus({ preventScroll: true });\n } catch {\n target.focus();\n }\n container.scrollTop = saved.scrollTop;\n}\n\n/**\n * Attach to the scrolling container. Call `saveNow()` before any render\n * that's about to replace the subtree wholesale (rare in React, but\n * available for parity with the old imperative call sites); normally you\n * don't need to call anything — mount/unmount and periodic capture on\n * scroll/blur handle it.\n */\nexport function useScrollRestore(routeKey: string, containerRef: RefObject<HTMLElement | null>) {\n const routeKeyRef = useRef(routeKey);\n routeKeyRef.current = routeKey;\n\n // Restore synchronously before paint so there's no visible jump.\n useLayoutEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const saved = stateByKey.get(routeKey);\n if (saved) restore(el, saved);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- deliberately re-runs only on routeKey; the ref itself is stable for the shell's lifetime.\n }, [routeKey]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n let raf = 0;\n function onScroll() {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n if (el) stateByKey.set(routeKeyRef.current, capture(el));\n });\n }\n el.addEventListener('scroll', onScroll, { passive: true });\n document.addEventListener('focusout', onScroll);\n document.addEventListener('toggle', onScroll, true);\n\n return () => {\n cancelAnimationFrame(raf);\n el.removeEventListener('scroll', onScroll);\n document.removeEventListener('focusout', onScroll);\n document.removeEventListener('toggle', onScroll, true);\n // Final capture on unmount so a same-tick route swap doesn't lose the\n // last scroll position (scroll events can be throttled by the\n // browser right before teardown). Uses the `el` captured when this\n // effect was set up, not containerRef.current — the ref may already\n // point elsewhere (or be null) by the time cleanup runs.\n stateByKey.set(routeKeyRef.current, capture(el));\n };\n }, [containerRef]);\n}\n",".view { max-width: 1600px; min-width: 0; display: flex; flex-direction: column; gap: var(--space-6); }\n.view h1, .view h2, .view h3, .view p, .view dl, .view dd { margin: 0; }\n.view h1 { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-3xl-size); line-height: var(--text-3xl-line); letter-spacing: -.045em; font-weight: var(--font-weight-semibold); }\n.view h2 { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-lg-size); line-height: var(--text-lg-line); letter-spacing: -.02em; font-weight: var(--font-weight-semibold); }\n.view h3 { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-md-size); line-height: var(--text-md-line); }\n.view p { max-width: 78ch; color: var(--text-secondary); line-height: var(--text-base-line); }\n.view button, .view select, .view summary { cursor: pointer; }\n.view button:focus-visible, .view select:focus-visible, .view summary:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 3px; }\n.header, .sectionHeading { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--space-5); }\n.header p { margin-top: var(--space-2); }\n.actions { display: flex; align-items: flex-end; gap: var(--space-3); }\n.refresh, .selectLabel select { min-height: 36px; border: 1px solid var(--border-default); border-radius: var(--radius-sm); padding: var(--space-2) var(--space-3); background: var(--bg-surface); color: var(--text-primary); font: inherit; }\n.refresh:hover { background: var(--bg-hover); }\n.refresh:disabled { cursor: wait; color: var(--text-disabled); }\n.selectLabel { display: flex; flex-direction: column; gap: var(--space-1); color: var(--text-secondary); font-size: var(--text-xs-size); }\n.selectLabel select { max-width: 280px; font-size: var(--text-sm-size); }\n.freshness { min-height: 18px; display: flex; gap: var(--space-4); flex-wrap: wrap; color: var(--text-tertiary); font-size: var(--text-xs-size); margin-top: calc(-1 * var(--space-3)); }\n.objective { border-left: 3px solid var(--text-link); padding: var(--space-5); display: flex; flex-direction: column; gap: var(--space-4); background: var(--bg-surface); border-radius: 0 var(--radius-md) var(--radius-md) 0; }\n.objective h2 { font-size: var(--text-xl-size); line-height: var(--text-xl-line); }\n.objectiveFacts { display: flex; flex-wrap: wrap; gap: var(--space-3) var(--space-8); }\n.objectiveFacts dt, .measurements dt, .resources dt, .artifact dt { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.objectiveFacts dd { margin-top: var(--space-1); font-size: var(--text-sm-size); }\n.archive, .comparison { border: 1px solid var(--border-default); border-radius: var(--radius-md); background: var(--bg-surface); overflow: hidden; }\n.campaign { border: 1px solid var(--border-strong); border-radius: var(--radius-lg); background: var(--bg-surface); min-width: 0; overflow: hidden; }\n.campaignBody { display: flex; flex-direction: column; gap: var(--space-4); padding: 0 var(--space-5) var(--space-5); }\n.campaignHeading { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); overflow-wrap: anywhere; }\n.campaignFacts { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--space-4); padding-block: var(--space-4); border-block: 1px solid var(--border-subtle); }\n.campaignFacts dt { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.campaignFacts dd { margin-top: var(--space-1); font-size: var(--text-sm-size); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }\n.view .campaignNote, .campaignBody > p { font-size: var(--text-xs-size); }\n.campaignBody .command { margin-top: 0; }\n.delivery { border-top: 1px solid var(--border-subtle); padding-top: var(--space-3); font-size: var(--text-sm-size); }\n.delivery summary { display: flex; align-items: baseline; gap: var(--space-3); flex-wrap: wrap; overflow-wrap: anywhere; }\n.delivery summary::before { content: '+'; color: var(--text-link); }\n.delivery[open] summary::before { content: '−'; }\n.delivery summary span { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.deliveryFacts { display: grid; gap: var(--space-3); padding: var(--space-4) 0; }\n.deliveryFacts dt { color: var(--text-tertiary); font-size: var(--text-xs-size); }\n.deliveryFacts dd { overflow-wrap: anywhere; margin-top: var(--space-1); }\n.sectionHeading { padding: var(--space-5); }\n.sectionHeading p { margin-top: var(--space-1); font-size: var(--text-sm-size); }\n.archiveCount { color: var(--text-secondary); font-size: var(--text-xs-size); white-space: nowrap; padding-top: var(--space-1); }\n.tableScroll { overflow-x: auto; }\n.archiveTable { width: 100%; border-collapse: collapse; text-align: left; font-variant-numeric: tabular-nums; }\n.archiveTable thead { color: var(--text-secondary); font-size: var(--text-xs-size); background: var(--bg-canvas); }\n.archiveTable th, .archiveTable td { padding: var(--space-3) var(--space-5); border-top: 1px solid var(--border-subtle); }\n.archiveTable th { font-weight: var(--font-weight-medium); }\n.archiveTable tbody tr[data-selected] { background: var(--bg-selected); }\n.archiveTable td { font-size: var(--text-sm-size); }\n.nicheFilled, .nicheEmpty { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: var(--space-3); border: 1px solid var(--status-success-solid); }\n.nicheFilled { background: var(--status-success-solid); }\n.nicheEmpty { border-color: var(--border-strong); }\n.eliteButton { padding: var(--space-1) 0; color: var(--text-link); background: none; border: 0; font: inherit; text-align: left; text-decoration: underline; text-underline-offset: 3px; }\n.muted { color: var(--text-tertiary); }\n.runMeta { display: flex; align-items: center; gap: var(--space-4); flex-wrap: wrap; padding: 0 var(--space-5) var(--space-4); font-size: var(--text-xs-size); color: var(--text-secondary); }\n.comparisonBody { display: grid; grid-template-columns: minmax(210px, 0.8fr) minmax(0, 2fr); border-top: 1px solid var(--border-default); }\n.trialList { border-right: 1px solid var(--border-default); display: flex; flex-direction: column; align-self: stretch; background: var(--bg-canvas); }\n.trialButton { display: flex; flex-direction: column; gap: var(--space-2); text-align: left; border: 0; border-bottom: 1px solid var(--border-default); border-left: 3px solid transparent; padding: var(--space-4); background: transparent; color: var(--text-primary); font: inherit; }\n.trialButton:hover { background: var(--bg-hover); }\n.trialButton[aria-pressed=\"true\"] { background: var(--bg-selected); border-left-color: var(--accent-500); }\n.trialTitle, .trialSubline { display: flex; justify-content: space-between; gap: var(--space-3); overflow-wrap: anywhere; }\n.trialTitle { font-family: var(--font-display, var(--font-ui)); font-weight: var(--font-weight-medium); }\n.trialTitle > span { font-variant-numeric: tabular-nums; }\n.trialSubline { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.trialDetail { padding: var(--space-5); min-width: 0; display: flex; flex-direction: column; gap: var(--space-4); }\n.detailHeading { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); }\n.hypothesis { font-size: var(--text-sm-size); }\n.lineage { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-3); padding: var(--space-3) 0; font-size: var(--text-sm-size); border-top: 1px solid var(--border-subtle); border-bottom: 1px solid var(--border-subtle); overflow-wrap: anywhere; }\n.generation { margin-left: auto; color: var(--text-tertiary); font-size: var(--text-xs-size); }\n.reason { font-size: var(--text-base-size); }\n.view .currentElite { margin-top: calc(-1 * var(--space-2)); color: var(--status-success-fg); font-size: var(--text-xs-size); }\n.measurements { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--space-4); }\n.measurements dd { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-xl-size); line-height: var(--text-xl-line); font-variant-numeric: tabular-nums; margin-top: var(--space-1); overflow-wrap: anywhere; }\n.generationEvidence { display: flex; flex-direction: column; gap: var(--space-3); padding-top: var(--space-4); border-top: 1px solid var(--border-subtle); }\n.generationEvidence h4 { margin: 0; font-size: var(--text-sm-size); font-weight: var(--font-weight-semibold); }\n.generationEvidence .measurements dd { font-size: var(--text-sm-size); }\n.generationEvidence p { font-size: var(--text-xs-size); }\n.diagnosticCodes { display: flex; flex-direction: column; gap: var(--space-2); font-size: var(--text-sm-size); }\n.diagnosticCodes ul { margin: 0; padding-left: var(--space-5); }\n.diagnosticCodes p { font-size: var(--text-xs-size); }\n.artifact { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.artifact summary { width: fit-content; padding: var(--space-1) 0; }\n.artifact dl { display: flex; flex-direction: column; gap: var(--space-3); padding-top: var(--space-3); }\n.artifact dd { overflow-wrap: anywhere; }\n.artifact pre, .command { overflow-x: auto; white-space: pre-wrap; overflow-wrap: anywhere; background: var(--bg-code); padding: var(--space-4); border-radius: var(--radius-sm); font-family: var(--font-mono); font-size: var(--text-xs-size); line-height: var(--text-base-line); margin: var(--space-3) 0 0; }\n.notice { border: 1px solid var(--status-warning-solid); border-radius: var(--radius-md); background: var(--status-warning-bg); padding: var(--space-4); display: flex; flex-direction: column; gap: var(--space-2); }\n.notice p { color: var(--text-primary); font-size: var(--text-sm-size); overflow-wrap: anywhere; }\n.running { display: flex; align-items: center; gap: var(--space-3); font-size: var(--text-sm-size); }\n.view .failure { color: var(--status-danger-fg); overflow-wrap: anywhere; padding: 0 var(--space-5) var(--space-3); }\n.trialDetail .failure { padding: 0; }\n.failureEvidence { margin: 0; max-height: 240px; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; padding: var(--space-3); border-radius: var(--radius-sm); background: var(--status-danger-bg); color: var(--status-danger-fg); font-family: var(--font-mono); font-size: var(--text-xs-size); line-height: var(--text-base-line); }\n.empty { border: 1px dashed var(--border-strong); border-radius: var(--radius-lg); padding: var(--space-8); display: flex; flex-direction: column; gap: var(--space-3); background: var(--bg-surface); }\n.empty .command { max-width: 720px; margin: 0; }\n.empty details { color: var(--text-secondary); font-size: var(--text-sm-size); margin-top: var(--space-2); }\n.empty details .command { margin-top: var(--space-3); }\n.noTrials { padding: var(--space-5); }\n.resources { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-1) 0 var(--space-5); }\n.resources h2 { font-size: var(--text-sm-size); }\n.resources dl { display: flex; flex-wrap: wrap; gap: var(--space-5) var(--space-10); }\n.resources dd { font-size: var(--text-base-size); margin-top: var(--space-1); font-variant-numeric: tabular-nums; }\n.resources p { color: var(--text-tertiary); font-size: var(--text-xs-size); }\n@media (max-width: 900px) { .header, .sectionHeading { flex-wrap: wrap; } .comparisonBody { grid-template-columns: minmax(180px, 0.8fr) minmax(0, 1.4fr); } }\n@media (max-width: 600px) {\n .view h1 { font-size: var(--text-2xl-size); line-height: var(--text-2xl-line); }\n .view { gap: var(--space-4); }\n .actions { width: 100%; justify-content: space-between; }\n .objective { padding-left: var(--space-3); }\n .comparisonBody { display: flex; flex-direction: column; }\n .trialList { border-right: 0; border-bottom: 1px solid var(--border-default); max-height: 240px; overflow-y: auto; }\n .sectionHeading, .trialDetail { padding: var(--space-4); }\n .campaignBody { padding-right: var(--space-4); padding-left: var(--space-4); }\n .empty { padding: var(--space-5); }\n .running { align-items: flex-start; }\n .archiveTable th, .archiveTable td { padding: var(--space-3); }\n .archiveTable th:first-child { min-width: 120px; }\n .archiveTable td { min-width: 100px; }\n}\n","import { createContext, useCallback, useContext } from 'react';\n\n/** Absent in the ordinary dashboard; scoped consoles obtain this after auth. */\nexport const UniverseRootContext = createContext<string | null>(null);\n\nexport function quoteShellArgument(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nexport function withUniverseRoot(command: string, root: string | null): string {\n if (root === null) return command;\n return command.split('\\n').map((line) => `${line} --root ${quoteShellArgument(root)}`).join('\\n');\n}\n\n/** Commands are display-only. No browser action invokes a process. */\nexport function useUniverseCommand(): (command: string) => string {\n const root = useContext(UniverseRootContext);\n return useCallback((command: string) => withUniverseRoot(command, root), [root]);\n}\n","import type { UniverseOverview, UniverseSummary } from '../../data/api-types.js';\nimport styles from './UniverseView.module.css';\nimport { quoteShellArgument as quote, useUniverseCommand } from './UniverseScope.js';\n\ntype DeliveryReport = NonNullable<UniverseOverview['deliveryReports']>[number];\n\n// The authenticated API abbreviates this user's home. A quoted tilde does not\n// expand in the shell, so keep the home expansion separate from the path data.\nconst repoArgument = (value: string): string => value.startsWith('~/') ? `\"$HOME\"/${quote(value.slice(2))}` : quote(value);\nconst visibleDigest = (value: string): string => value === '[REDACTED]' ? 'Hidden by the console privacy filter' : value;\n\nexport function UniverseDeliveries({ summary, report, onInspectTrial }: {\n summary: UniverseSummary;\n report?: DeliveryReport;\n onInspectTrial: (runId: string, trialId: string) => void;\n}) {\n const verified = report?.sourceState === 'healthy';\n const command = useUniverseCommand();\n const degraded = report?.sourceState === 'degraded';\n const deliveries = report?.deliveries ?? [];\n return (\n <section className={styles.archive} aria-label=\"Repository delivery\">\n <div className={styles.sectionHeading}>\n <div><h2>Repository delivery</h2><p>Turn a retained artifact into an exact local Git branch. Your current checkout stays untouched.</p></div>\n </div>\n <div className={styles.campaignBody}>\n {degraded ? <div className={styles.notice} role=\"status\"><strong>Delivery evidence could not be verified.</strong><p>{report.reasons.join('; ') || 'Refresh after restoring the recorded repository and receipt.'}</p></div> : null}\n {deliveries.length ? deliveries.map((delivery) => (\n <details key={delivery.id} className={styles.delivery}>\n <summary>\n <code>{delivery.branch}</code>\n <span>{!verified ? `Unverified record (${delivery.status})` : delivery.status === 'delivered' ? 'Local branch verified' : delivery.status === 'unchanged' ? 'No change; no branch created' : 'Pending; not confirmed delivered'}</span>\n </summary>\n <dl className={styles.deliveryFacts}>\n <div><dt>Repository</dt><dd><code>{delivery.repo}</code></dd></div>\n <div><dt>Commit</dt><dd><code>{delivery.commit}</code></dd></div>\n <div><dt>Pinned base</dt><dd><code>{delivery.baseCommit}</code></dd></div>\n <div><dt>Artifact digest</dt><dd><code>{visibleDigest(delivery.artifactDigest)}</code></dd></div>\n <div><dt>Comparator digest</dt><dd><code>{visibleDigest(delivery.comparatorDigest)}</code></dd></div>\n <div><dt>Changed files</dt><dd>{delivery.changedFiles.length ? delivery.changedFiles.map((path) => <code key={path}>{path}<br /></code>) : 'None'}</dd></div>\n </dl>\n {summary.runs.some((run) => run.id === delivery.runId && run.trials.some((trial) => trial.id === delivery.trialId)) ?\n <button type=\"button\" className={styles.eliteButton} onClick={() => onInspectTrial(delivery.runId, delivery.trialId)}>Inspect source trial</button> :\n <p>Source trial unavailable in the current history.</p>}\n {verified && delivery.status === 'delivered' ? <pre className={styles.command}><code>{`git -C ${repoArgument(delivery.repo)} show --stat ${quote(delivery.commit)}`}</code></pre> : null}\n {delivery.artifactDigest === '[REDACTED]' || delivery.comparatorDigest === '[REDACTED]' ?\n <p>Read exact identities locally with <code>{command(`ashlr universe deliveries ${quote(summary.manifest.id)} --json`)}</code>.</p> : null}\n </details>\n )) : <p>{degraded ? 'No delivery can be confirmed from this read.' : 'No local branches delivered yet.'}</p>}\n {summary.sourceState === 'healthy' && !degraded && summary.elites.length ? (\n <details className={styles.artifact}>\n <summary>Deliver a retained artifact from your terminal</summary>\n <p>Choose a new branch name. Each command writes only a new local branch in <code>{summary.manifest.seed.repo}</code>; it does not switch branches, merge, or push.</p>\n {summary.elites.map((elite) => <div key={elite.trialId}>\n <p>{elite.niche}: {elite.variantId}</p>\n <pre className={styles.command}><code>{command(`ashlr universe deliver ${quote(summary.manifest.id)} --trial ${quote(elite.trialId)} --branch ${quote(`codex/universe-${summary.manifest.id}-${elite.trialId.slice(0, 8)}`)} --json`)}</code></pre>\n </div>)}\n </details>\n ) : null}\n <p>Verification binds the branch to the recorded evaluator result. It is not a fresh evaluation, a merge, or a production deployment. Refresh to inspect delivery changes made in your terminal.</p>\n </div>\n </section>\n );\n}\n","import type { UniverseGraph, UniverseGraphEdge, UniverseGraphTraversal } from './graph-types.js';\n\nexport const MAX_UNIVERSE_GRAPH_DEPTH = 64;\nconst MAX_QUERY_NODES = 25_000;\nconst MAX_QUERY_EDGES = 100_000;\n\n/** Browser-safe bounded breadth-first traversal, including the focus node. */\nexport function traverseUniverseGraph(graph: UniverseGraph, options: {\n nodeId: string; direction: 'ancestors' | 'descendants'; maxDepth?: number;\n}): UniverseGraphTraversal {\n const result: UniverseGraphTraversal = { nodeIds: [], edgeIds: [], complete: true, issues: [] };\n const issue = (code: string, message: string): void => {\n result.complete = false;\n result.issues.push({ code, message, nodeIds: [] });\n };\n const depth = options.maxDepth ?? MAX_UNIVERSE_GRAPH_DEPTH;\n if (!Number.isSafeInteger(depth) || depth < 1 || depth > MAX_UNIVERSE_GRAPH_DEPTH ||\n !['ancestors', 'descendants'].includes(options.direction)) {\n issue('invalid-query', 'Traversal requires a direction and depth from 1 to 64.'); return result;\n }\n if (graph.nodes.length > MAX_QUERY_NODES || graph.edges.length > MAX_QUERY_EDGES) {\n issue('graph-limit', 'Graph exceeds the traversal envelope.'); return result;\n }\n const nodes = new Set(graph.nodes.map((node) => node.id));\n if (nodes.size !== graph.nodes.length) { issue('duplicate-node', 'Graph contains duplicated node identities.'); return result; }\n if (!nodes.has(options.nodeId)) { issue('invalid-node', 'The requested graph node is unavailable.'); return result; }\n const adjacency = new Map<string, UniverseGraphEdge[]>();\n const forward = new Map<string, string[]>();\n const incoming = new Map([...nodes].map((id) => [id, 0]));\n const edgeIds = new Set<string>();\n for (const edge of graph.edges) {\n if (!nodes.has(edge.from) || !nodes.has(edge.to) || edgeIds.has(edge.id)) {\n issue('invalid-edge', 'Graph contains an unresolved or duplicated edge.'); return result;\n }\n edgeIds.add(edge.id);\n const targets = forward.get(edge.from) ?? [];\n targets.push(edge.to); forward.set(edge.from, targets);\n incoming.set(edge.to, incoming.get(edge.to)! + 1);\n const from = options.direction === 'ancestors' ? edge.to : edge.from;\n const list = adjacency.get(from) ?? [];\n list.push(edge); adjacency.set(from, list);\n }\n const ordered = [...incoming].filter(([, count]) => count === 0).map(([id]) => id);\n for (let index = 0; index < ordered.length; index++) for (const target of forward.get(ordered[index]!) ?? []) {\n incoming.set(target, incoming.get(target)! - 1);\n if (incoming.get(target) === 0) ordered.push(target);\n }\n if (ordered.length !== nodes.size) { issue('cycle', 'Graph contains a dependency cycle.'); return result; }\n const seen = new Set([options.nodeId]);\n let frontier = [options.nodeId];\n for (let level = 0; frontier.length && level < depth; level++) {\n const next: string[] = [];\n for (const id of frontier) {\n for (const edge of adjacency.get(id) ?? []) {\n const target = options.direction === 'ancestors' ? edge.from : edge.to;\n if (!seen.has(target)) { seen.add(target); next.push(target); }\n }\n }\n frontier = next;\n }\n if (frontier.some((id) => (adjacency.get(id) ?? []).some((edge) => !seen.has(options.direction === 'ancestors' ? edge.from : edge.to)))) {\n issue('depth-limit', 'Additional related nodes exist beyond the selected depth.');\n }\n if (!graph.complete || graph.sourceState !== 'healthy') issue('source-incomplete', 'Traversal uses incomplete or degraded source evidence.');\n result.nodeIds = [...seen].sort();\n // Return the induced graph, including cross-links between nodes discovered\n // at the exact depth boundary, not merely the breadth-first search tree.\n result.edgeIds = graph.edges.filter((edge) => seen.has(edge.from) && seen.has(edge.to)).map((edge) => edge.id).sort();\n return result;\n}\n",".section { min-width: 0; border: 1px solid var(--border-strong); border-radius: var(--radius-lg); background: var(--bg-surface); overflow: hidden; }\n.header { padding: var(--space-5); display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-4); }\n.header p { margin-top: var(--space-1); font-size: var(--text-sm-size); }\n.header h2 { font-family: var(--font-display, var(--font-ui)); letter-spacing: -.025em; }\n.button, .filters select { min-height: 36px; border: 1px solid var(--border-default); border-radius: var(--radius-sm); padding: var(--space-2) var(--space-3); background: var(--bg-surface); color: var(--text-primary); font: inherit; }\n.button { white-space: nowrap; }\n.button:hover { background: var(--bg-hover); }\n.button:disabled { color: var(--text-disabled); cursor: wait; }\n.section button:focus-visible, .section select:focus-visible, .section summary:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 3px; }\n.body { padding: 0 var(--space-5) var(--space-5); display: flex; flex-direction: column; gap: var(--space-4); min-width: 0; }\n.toolbar, .facts { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-3); }\n.facts { font-size: var(--text-xs-size); color: var(--text-secondary); gap: var(--space-2) var(--space-5); padding-block: var(--space-3); border-block: 1px solid var(--border-subtle); font-variant-numeric: tabular-nums; }\n.toolbar .button { margin-left: auto; }\n.notice { padding: var(--space-3); border-left: 3px solid var(--status-warning-solid); background: var(--status-warning-bg); font-size: var(--text-sm-size); }\n.filters { display: flex; flex-wrap: wrap; gap: var(--space-3); align-items: flex-end; padding: var(--space-3); border-radius: var(--radius-sm); background: var(--bg-canvas); }\n.filters label { display: flex; flex-direction: column; gap: var(--space-1); color: var(--text-secondary); font-size: var(--text-xs-size); }\n.filters select { max-width: 240px; font-size: var(--text-sm-size); }\n.note { font-size: var(--text-xs-size); }\n.diagram { overflow: auto; max-height: 460px; border: 1px solid var(--border-strong); border-radius: var(--radius-md); background: var(--bg-canvas); scrollbar-color: var(--border-strong) var(--bg-canvas); }\n.diagram svg { display: block; min-height: 220px; }\n.diagram [role='button'] { cursor: pointer; }\n.diagram [role='button']:focus-visible { outline: none; }\n.diagram [role='button']:focus-visible rect { stroke: var(--border-focus); stroke-width: 3; stroke-dasharray: 4 2; }\n.diagram [role='button']:hover rect { stroke: var(--text-link); stroke-width: 2; }\n.edge { stroke: var(--border-strong); stroke-width: 1.5; }\n.feedback { stroke: var(--text-link); stroke-dasharray: 5 4; }\n.arrow { fill: var(--border-strong); }\n.nodeBox { fill: var(--bg-surface-raised); stroke: var(--border-strong); stroke-width: 1.25; }\n.selectedBox { fill: var(--bg-selected); stroke: var(--text-link); stroke-width: 2.5; }\n.nodeLabel { fill: var(--text-primary); font-family: var(--font-display, var(--font-ui)); font-size: var(--text-xs-size); font-weight: var(--font-weight-semibold); }\n.nodeKind, .columnLabel { fill: var(--text-secondary); font-size: var(--text-xs-size); }\n.nodeKind { letter-spacing: -.02em; }\n.columnLabel { font-family: var(--font-display, var(--font-ui)); font-weight: var(--font-weight-medium); }\n/* Shape distinguishes entity kinds; color remains reserved for selection/evidence. */\n.diagram [data-kind='universe'] rect, .diagram [data-kind='campaign'] rect { rx: 14px; }\n.diagram [data-kind='seed'] rect, .diagram [data-kind='artifact'] rect { rx: 1px; }\n.diagram [data-kind='comparator'] rect { stroke-dasharray: 6 3; }\n.diagram [data-kind='delivery'] rect { rx: 1px; stroke-width: 2.5; }\n.diagram [data-kind='reservation'] rect { stroke-dasharray: 2 3; }\n.legend { display: flex; flex-wrap: wrap; gap: var(--space-4); font-size: var(--text-xs-size); color: var(--text-secondary); }\n.legend span::before { content: ''; display: inline-block; width: 24px; margin-right: var(--space-2); vertical-align: middle; border-top: 2px solid var(--border-strong); }\n.legend .feedbackLegend::before { border-top-style: dashed; border-color: var(--text-link); }\n.workspace { display: grid; grid-template-columns: minmax(180px, .8fr) minmax(0, 1.7fr); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); overflow: hidden; }\n.nodeList { display: flex; flex-direction: column; max-height: 480px; overflow: auto; border-right: 1px solid var(--border-subtle); padding: var(--space-2); background: var(--bg-canvas); }\n.nodeButton { display: flex; flex-direction: column; gap: var(--space-1); padding: var(--space-3); border: 0; border-left: 3px solid transparent; text-align: left; background: transparent; color: var(--text-primary); font: inherit; font-size: var(--text-sm-size); overflow-wrap: anywhere; }\n.nodeButton:hover { background: var(--bg-hover); }\n.nodeButton[aria-pressed='true'] { border-left-color: var(--accent-500); background: var(--bg-selected); }\n.nodeButton small { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.nodeButton > span { font-family: var(--font-display, var(--font-ui)); font-weight: var(--font-weight-medium); }\n.nodeButton[data-kind='campaign'], .nodeButton[data-kind='universe'] { border-radius: var(--radius-md); }\n.inspector { min-width: 0; padding: var(--space-5); display: flex; flex-direction: column; gap: var(--space-4); }\n.inspector h3 { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-xl-size); line-height: var(--text-xl-line); letter-spacing: -.025em; overflow-wrap: anywhere; }\n.properties { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--space-3); }\n.properties dt { font-size: var(--text-xs-size); color: var(--text-secondary); }\n.properties dd { margin-top: var(--space-1); font-size: var(--text-sm-size); overflow-wrap: anywhere; }\n.relations { display: flex; flex-direction: column; gap: var(--space-2); padding-left: var(--space-4); margin: 0; font-size: var(--text-sm-size); }\n.link { background: transparent; border: 0; padding: 0; color: var(--text-link); text-decoration: underline; text-underline-offset: 3px; text-align: left; font: inherit; overflow-wrap: anywhere; }\n.findings { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-4); border-inline-start: 3px solid var(--border-strong); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; background: var(--bg-canvas); }\n.findings ul { margin: 0; padding-left: var(--space-4); display: flex; flex-direction: column; gap: var(--space-3); }\n.findings p, .findings li { font-size: var(--text-sm-size); }\n.findingLinks { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-top: var(--space-1); }\n.exact { overflow-wrap: anywhere; font-size: var(--text-xs-size); }\n.pagination { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-3); font-size: var(--text-xs-size); }\n@media (max-width: 600px) {\n .header { flex-wrap: wrap; padding: var(--space-4); }\n .body { padding-right: var(--space-4); padding-left: var(--space-4); }\n .workspace { display: flex; flex-direction: column; }\n .nodeList { max-height: 220px; border-right: 0; border-bottom: 1px solid var(--border-subtle); padding-right: 0; }\n .inspector { padding: var(--space-4); }\n .filters select { max-width: 190px; }\n .diagram { max-height: 360px; }\n}\n","import { useId, useMemo, useState } from 'react';\nimport type { UniverseGraph as GraphReport, UniverseGraphNode, UniverseGraphEdge } from '../../../core/universe/graph-types.js';\nimport { traverseUniverseGraph } from '../../../core/universe/graph-query.js';\nimport { useQuery, useRefetch } from '../../data/hooks.js';\nimport { useUniverseCommand } from './UniverseScope.js';\nimport { universeGraphQuery } from '../../data/queries.js';\nimport styles from './UniverseGraph.module.css';\n\nconst DISPLAY_LIMIT = 60;\nconst DISPLAY_EDGE_LIMIT = 240;\ntype InspectTrial = (runId: string, trialId: string) => boolean;\nconst KIND_LABELS: Record<UniverseGraphNode['kind'], string> = {\n universe: 'Universe', seed: 'Seed', comparator: 'Evaluator', campaign: 'Campaign',\n reservation: 'Reservation', run: 'Run', trial: 'Trial', artifact: 'Artifact', delivery: 'Delivery',\n};\nconst EDGE_LABELS: Record<UniverseGraphEdge['kind'], string> = {\n contains: 'Contains', 'seed-parent': 'Seed parent', parent: 'Candidate parent', feedback: 'Evaluator feedback',\n evaluates: 'Evaluates', produced: 'Produced artifact', reserved: 'Reserved work',\n 'executed-as': 'Executed as', 'delivered-as': 'Delivered as',\n};\nconst evidenceLabel = (node: UniverseGraphNode): string => node.evidence === 'verified-local-delivery'\n ? 'Local delivery checked' : node.evidence === 'recorded' ? 'Recorded evidence'\n : node.evidence === 'pending' ? 'Pending evidence' : 'Evidence unavailable';\nconst short = (value: string, length: number): string => value.length > length ? `${value.slice(0, length - 1)}…` : value;\n\n/** Bounded, deterministic columns; the full text node list remains usable without the SVG. */\nfunction GraphDiagram({ nodes, edges, selectedId, select }: {\n nodes: UniverseGraphNode[]; edges: UniverseGraphEdge[]; selectedId?: string;\n select: (id: string) => void;\n}) {\n const marker = `universe-arrow-${useId().replaceAll(':', '')}`;\n const columns = [...new Set(nodes.map((node) => node.generation ?? 0))].sort((a, b) => a - b);\n const positions = new Map<string, { x: number; y: number }>();\n let rows = 1;\n columns.forEach((generation, column) => {\n const members = nodes.filter((node) => (node.generation ?? 0) === generation);\n rows = Math.max(rows, members.length);\n members.forEach((node, row) => positions.set(node.id, { x: 24 + column * 225, y: 32 + row * 76 }));\n });\n return (\n <div className={styles.diagram}>\n <svg width={Math.max(260, columns.length * 225 + 24)} height={rows * 76 + 40} role=\"group\" aria-label=\"Evidence relationship diagram\">\n <defs><marker id={marker} markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"3\" orient=\"auto\"><path d=\"M0,0 L0,6 L8,3 z\" className={styles.arrow} /></marker></defs>\n {columns.map((generation, column) => <text key={generation} x={24 + column * 225} y={18} className={styles.columnLabel}>{generation === 0 ? 'Experiment context' : `Generation ${generation}`}</text>)}\n {edges.map((edge) => {\n const from = positions.get(edge.from); const to = positions.get(edge.to);\n if (!from || !to) return null;\n const sameColumn = from.x === to.x;\n const startX = from.x + 180; const endX = sameColumn ? to.x + 180 : to.x;\n const mid = sameColumn ? startX + 28 : (startX + endX) / 2;\n return <path key={edge.id} d={`M ${startX} ${from.y + 27} C ${mid} ${from.y + 27}, ${mid} ${to.y + 27}, ${endX} ${to.y + 27}`} fill=\"none\" markerEnd={`url(#${marker})`} className={`${styles.edge} ${edge.kind === 'feedback' ? styles.feedback : ''}`}><title>{EDGE_LABELS[edge.kind]}</title></path>;\n })}\n {nodes.map((node) => {\n const position = positions.get(node.id)!;\n return <g key={node.id} data-kind={node.kind} transform={`translate(${position.x},${position.y})`} role=\"button\" tabIndex={0} aria-label={`Select ${KIND_LABELS[node.kind].toLowerCase()}: ${node.label}`} aria-pressed={node.id === selectedId}\n onClick={() => select(node.id)} onKeyDown={(event) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); select(node.id); } }}>\n <title>{`${node.label}: ${node.state}. ${evidenceLabel(node)}`}</title>\n <rect width=\"180\" height=\"54\" rx=\"5\" className={node.id === selectedId ? styles.selectedBox : styles.nodeBox} />\n <text x=\"10\" y=\"20\" className={styles.nodeLabel}>{short(node.label, 24)}</text>\n <text x=\"10\" y=\"39\" className={styles.nodeKind}>{KIND_LABELS[node.kind]} · {short(node.state, 18)}</text>\n </g>;\n })}\n </svg>\n </div>\n );\n}\n\nfunction NodeInspector({ node, graph, byId, select, onInspectTrial }: {\n node: UniverseGraphNode; graph: GraphReport; byId: Map<string, UniverseGraphNode>;\n select: (id: string) => void; onInspectTrial: InspectTrial;\n}) {\n const [unavailableTrial, setUnavailableTrial] = useState<string | null>(null);\n const command = useUniverseCommand();\n const relationships = graph.edges.filter((edge) => edge.from === node.id || edge.to === node.id);\n return <section className={styles.inspector} aria-label=\"Selected graph evidence\">\n <h3>{node.label}</h3>\n <dl className={styles.properties}>\n <div><dt>Entity</dt><dd>{KIND_LABELS[node.kind]}</dd></div>\n <div><dt>State</dt><dd>{node.state}</dd></div>\n <div><dt>Evidence</dt><dd>{evidenceLabel(node)}</dd></div>\n {node.generation !== undefined ? <div><dt>Generation</dt><dd>{node.generation}</dd></div> : null}\n {node.niche ? <div><dt>Niche</dt><dd>{node.niche}</dd></div> : null}\n {node.score !== undefined ? <div><dt>Evaluator score</dt><dd>{node.score === null ? 'Unavailable' : node.score}</dd></div> : null}\n {node.currentElite ? <div><dt>Archive</dt><dd>Current local elite</dd></div> : null}\n {node.admitted && !node.currentElite ? <div><dt>Archive</dt><dd>Historical admission; not the current elite</dd></div> : null}\n </dl>\n <p className={styles.note}>The graph observes saved evidence. It does not rerun evaluation or establish accepted production value.</p>\n {node.runId && node.trialId ? <button type=\"button\" className={styles.link} onClick={() => setUnavailableTrial(onInspectTrial(node.runId!, node.trialId!) ? null : node.id)}>Inspect exact trial evidence</button> : null}\n {unavailableTrial === node.id ? <p className={styles.notice} role=\"status\">This exact trial is not present in the current overview. Refresh Universe before inspecting it; no other trial was selected.</p> : null}\n <h4>Direct relationships</h4>\n {relationships.length ? <ul className={styles.relations}>{relationships.slice(0, DISPLAY_LIMIT).map((edge) => {\n const incoming = edge.to === node.id;\n const other = byId.get(incoming ? edge.from : edge.to);\n return <li key={edge.id}>{EDGE_LABELS[edge.kind]} {incoming ? 'from' : 'to'}{' '}{other\n ? <button type=\"button\" className={styles.link} onClick={() => select(other.id)}>{other.label}</button>\n : <span>unavailable source</span>}</li>;\n })}</ul> : <p className={styles.note}>No direct relationships in this observation.</p>}\n {relationships.length > DISPLAY_LIMIT ? <p className={styles.note}>{relationships.length - DISPLAY_LIMIT} additional relationships omitted from this panel. Inspect the CLI graph for the full observation.</p> : null}\n <details className={styles.exact}><summary>Record identity</summary>\n <dl className={styles.properties}>\n <div><dt>Graph node</dt><dd><code>{node.id}</code></dd></div>\n {node.runId ? <div><dt>Run</dt><dd><code>{node.runId}</code></dd></div> : null}\n {node.trialId ? <div><dt>Trial</dt><dd><code>{node.trialId}</code></dd></div> : null}\n {node.variantId ? <div><dt>Variant</dt><dd><code>{node.variantId}</code></dd></div> : null}\n {node.campaignId ? <div><dt>Campaign</dt><dd><code>{node.campaignId}</code></dd></div> : null}\n {node.branch ? <div><dt>Local branch</dt><dd><code>{node.branch}</code></dd></div> : null}\n {node.commit ? <div><dt>Commit</dt><dd><code>{node.commit}</code></dd></div> : null}\n {node.manifestDigest ? <div><dt>Manifest digest</dt><dd><code>{node.manifestDigest === '[REDACTED]' ? 'Hidden by the console privacy filter' : node.manifestDigest}</code></dd></div> : null}\n {node.comparatorDigest ? <div><dt>Comparator digest</dt><dd><code>{node.comparatorDigest === '[REDACTED]' ? 'Hidden by the console privacy filter' : node.comparatorDigest}</code></dd></div> : null}\n {node.artifactDigest ? <div><dt>Artifact digest</dt><dd><code>{node.artifactDigest === '[REDACTED]' ? 'Hidden by the console privacy filter' : node.artifactDigest}</code></dd></div> : null}\n </dl>\n <p>Read exact local provenance with <code>{command(`ashlr universe graph ${graph.universeId} --json`)}</code>.</p>\n </details>\n </section>;\n}\n\nfunction GraphExplorer({ graph, onInspectTrial }: { graph: GraphReport; onInspectTrial: InspectTrial }) {\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [kind, setKind] = useState('all');\n const [niche, setNiche] = useState('all');\n const [direction, setDirection] = useState<'all' | 'ancestors' | 'descendants'>('all');\n const [depth, setDepth] = useState(2);\n const [requestedPage, setRequestedPage] = useState<number | null>(null);\n const byId = useMemo(() => new Map(graph.nodes.map((node) => [node.id, node])), [graph.nodes]);\n const selected = selectedId === null ? graph.nodes.find((node) => node.kind === 'trial' && node.currentElite) ?? graph.nodes.find((node) => node.kind === 'trial') ?? graph.nodes[0] : byId.get(selectedId);\n const traversal = useMemo(() => selected && direction !== 'all' ? traverseUniverseGraph(graph, { nodeId: selected.id, direction, maxDepth: depth }) : null, [graph, selected, direction, depth]);\n const traversedIds = useMemo(() => traversal ? new Set(traversal.nodeIds) : null, [traversal]);\n const matching = graph.nodes.filter((node) => (!traversedIds || traversedIds.has(node.id)) && (kind === 'all' || node.kind === kind) && (niche === 'all' || node.niche === niche));\n const pageCount = Math.max(1, Math.ceil(matching.length / DISPLAY_LIMIT));\n const selectedPage = Math.floor(Math.max(0, matching.findIndex((node) => node.id === selected?.id)) / DISPLAY_LIMIT);\n const page = Math.min(requestedPage ?? selectedPage, pageCount - 1);\n const nodes = matching.slice(page * DISPLAY_LIMIT, (page + 1) * DISPLAY_LIMIT);\n const visibleIds = new Set(nodes.map((node) => node.id));\n const edges = graph.edges.filter((edge) => visibleIds.has(edge.from) && visibleIds.has(edge.to));\n const select = (id: string) => { setSelectedId(id); setKind('all'); setNiche('all'); setRequestedPage(null); };\n const niches = [...new Set(graph.nodes.flatMap((node) => node.niche ? [node.niche] : []))].sort();\n return <>\n <div className={styles.facts}><span>Source: {graph.sourceState}</span><span>{graph.complete ? 'Source graph complete' : 'Source graph incomplete'}</span><span>{graph.counts.trials} trial records included</span><span>{graph.counts.verifiedDeliveries} checked local deliveries included</span></div>\n {!graph.complete || graph.sourceState === 'degraded' ? <p className={styles.notice} role=\"status\">Graph evidence is incomplete. Missing relationships are not proof that no work or delivery occurred.</p> : null}\n {graph.issues.length ? <details className={styles.note}><summary>Source issues ({graph.issues.length})</summary><ul>{graph.issues.map((issue, index) => <li key={`${issue.code}-${index}`}><code>{issue.code}</code>: {issue.message}</li>)}</ul></details> : null}\n {graph.findings.length ? <section className={styles.findings} aria-label=\"Graph observations\"><h3>Useful observations</h3><ul>{graph.findings.slice(0, DISPLAY_LIMIT).map((finding) => <li key={finding.id}>\n <strong>{finding.kind === 'repeated-output' ? 'Repeated artifact output' : 'Current elite without recorded delivery'}</strong>\n {finding.kind === 'repeated-output' ? <p>{finding.trialCount} trials share a recorded artifact digest. {finding.usageComplete ? `Reported generation tokens: ${finding.reportedTokens ?? 'unavailable'}.` : `Total generation tokens unavailable; recorded subtotal: ${finding.recordedTokens}.`}</p> : <p>No verified delivery is linked to this current local elite in the observation.</p>}\n <div className={styles.findingLinks}>{finding.nodeIds.slice(0, 8).map((id) => { const node = byId.get(id); return node ? <button type=\"button\" className={styles.link} key={id} onClick={() => select(id)}>Inspect {node.label}</button> : null; })}</div>\n {finding.nodeIds.length > 8 ? <p>{finding.nodeIds.length - 8} additional nodes in this group; inspect CLI JSON for all identities.</p> : null}\n </li>)}</ul><p>These are evidence patterns, not cost savings, automatic delivery instructions or proof of business value.</p>{graph.findings.length > DISPLAY_LIMIT ? <p>{graph.findings.length - DISPLAY_LIMIT} additional observations omitted from this panel.</p> : null}</section> : null}\n {graph.nodes.length ? <>\n <div className={styles.filters}>\n <label>Entity type<select value={kind} onChange={(event) => { setKind(event.target.value); setRequestedPage(null); }}><option value=\"all\">All entity types</option>{Object.entries(KIND_LABELS).map(([value, label]) => <option key={value} value={value}>{label}</option>)}</select></label>\n <label>Niche<select value={niche} onChange={(event) => { setNiche(event.target.value); setRequestedPage(null); }}><option value=\"all\">All niches</option>{niches.map((value) => <option key={value}>{value}</option>)}</select></label>\n <label>Trace from selection<select value={direction} onChange={(event) => { setDirection(event.target.value as typeof direction); setRequestedPage(null); }} disabled={!selected}><option value=\"all\">All nodes</option><option value=\"ancestors\">Ancestors</option><option value=\"descendants\">Descendants</option></select></label>\n <label>Traversal depth<select value={depth} onChange={(event) => { setDepth(Number(event.target.value)); setRequestedPage(null); }} disabled={direction === 'all'}>{[1, 2, 3, 4, 8, 16, 32, 64].map((value) => <option key={value}>{value}</option>)}</select></label>\n </div>\n <p className={styles.note} role=\"status\">Showing {nodes.length} of {matching.length} matching nodes ({graph.nodes.length} in source). {direction !== 'all' ? `Trace is bounded to ${depth} relationship hops. ` : ''}{matching.length > DISPLAY_LIMIT ? `Diagram shows at most ${DISPLAY_LIMIT} nodes per page; relationships crossing pages remain in the inspector. ` : ''}{traversal && !traversal.complete ? 'Traversal is incomplete; the depth bound or source evidence limits this trace.' : ''}</p>\n {pageCount > 1 ? <nav className={styles.pagination} aria-label=\"Graph node pages\"><button type=\"button\" className={styles.button} disabled={page === 0} onClick={() => setRequestedPage(page - 1)}>Previous node page</button><span>Page {page + 1} of {pageCount}</span><button type=\"button\" className={styles.button} disabled={page + 1 === pageCount} onClick={() => setRequestedPage(page + 1)}>Next node page</button></nav> : null}\n {selectedId !== null && !selected ? <p className={styles.notice} role=\"status\">The selected node is no longer present in the current graph. Select another recorded node; no substitute has been chosen.</p> : null}\n {nodes.length ? <><GraphDiagram nodes={nodes} edges={edges.slice(0, DISPLAY_EDGE_LIMIT)} selectedId={selected?.id} select={select} /><div className={styles.legend}><span>Recorded relationship</span><span className={styles.feedbackLegend}>Evaluator feedback (not candidate ancestry)</span></div>{edges.length > DISPLAY_EDGE_LIMIT ? <p className={styles.note}>Diagram shows {DISPLAY_EDGE_LIMIT} of {edges.length} relationships on this page. Select a node to inspect its direct relationships.</p> : null}</> : <p className={styles.notice}>No nodes match these filters. Broaden the entity type, niche or trace direction.</p>}\n <div className={styles.workspace}>\n <div className={styles.nodeList} role=\"group\" aria-label=\"Graph nodes\">{nodes.map((node) => <button type=\"button\" key={node.id} data-kind={node.kind} className={styles.nodeButton} aria-label={`Inspect ${KIND_LABELS[node.kind].toLowerCase()}: ${node.label}`} aria-pressed={node.id === selected?.id} onClick={() => setSelectedId(node.id)}><span>{node.label}</span><small>{KIND_LABELS[node.kind]} · {node.state}{node.generation !== undefined ? ` · generation ${node.generation}` : ''}</small></button>)}</div>\n {selected ? <NodeInspector node={selected} graph={graph} byId={byId} select={select} onInspectTrial={onInspectTrial} /> : null}\n </div>\n </> : <p>{graph.sourceState === 'missing' ? 'No recorded graph source is available for this universe.' : graph.complete ? 'This observation contains no graph nodes.' : 'Graph nodes could not be established from incomplete evidence.'}</p>}\n </>;\n}\n\nfunction LoadedGraph({ universeId, onInspectTrial }: { universeId: string; onInspectTrial: InspectTrial }) {\n const definition = useMemo(() => universeGraphQuery(universeId), [universeId]);\n const query = useQuery(definition);\n const refresh = useRefetch(definition);\n return <div className={styles.body}>\n <div className={styles.toolbar}><p className={styles.note}>{query.data ? `Observed ${query.data.sampledAt}${query.status === 'error' ? ' · Last successful read' : ''}` : 'Read-only graph observation; no work is started.'}</p><button type=\"button\" className={styles.button} onClick={refresh} disabled={query.status === 'loading' || query.status === 'refreshing'}>{query.status === 'refreshing' ? 'Refreshing graph…' : 'Refresh graph'}</button></div>\n {query.status === 'loading' ? <p role=\"status\">Loading graph evidence…</p> : null}\n {query.status === 'error' ? <p className={styles.notice} role=\"alert\">Graph records unavailable. {query.error?.message} Refresh graph to retry.{query.data ? ' The graph below is the last successful observation.' : ''}</p> : null}\n {query.data ? <GraphExplorer graph={query.data} onInspectTrial={onInspectTrial} /> : null}\n </div>;\n}\n\n/** Mounting this section does not fetch: only opening the inspector mounts its query. */\nexport function UniverseGraph({ universeId, onInspectTrial }: { universeId: string; onInspectTrial: InspectTrial }) {\n const [open, setOpen] = useState(false);\n const panelId = `universe-graph-${useId().replaceAll(':', '')}`;\n return <section className={styles.section} aria-label=\"Evidence graph\">\n <div className={styles.header}><div><h2>Evidence graph</h2><p>Trace candidate ancestry, evaluator feedback and local delivery back to recorded trials.</p></div><button type=\"button\" className={styles.button} aria-expanded={open} aria-controls={panelId} onClick={() => setOpen((value) => !value)}>{open ? 'Close graph' : 'Open graph'}</button></div>\n <div id={panelId}>{open ? <LoadedGraph universeId={universeId} onInspectTrial={onInspectTrial} /> : null}</div>\n </section>;\n}\n","import type { UniverseCampaignReadinessView } from '../../core/web/universe-console-types.js';\nimport { apiGet } from './client.js';\nimport type { QueryDef } from './queries.js';\n\nconst ID = /^[a-z0-9][a-z0-9_-]{0,63}$/;\nconst FIELDS = ['schemaVersion', 'readinessScope', 'campaignId', 'universeId', 'observedState', 'sourceState',\n 'disposition', 'reasonCode', 'resourceRuntimeRequired', 'sampledAt'];\nconst STATES = ['ready', 'running', 'pause-requested', 'stop-requested', 'paused', 'interrupted', 'completed', 'stopped', 'failed'];\nconst DISPOSITIONS: Record<UniverseCampaignReadinessView['disposition'], true> = {\n startable: true, owned: true, 'owner-held': true, 'resource-withheld': true, 'recovery-required': true,\n 'attention-required': true, 'budget-exhausted': true, terminal: true, unavailable: true,\n};\nconst REASONS: Record<UniverseCampaignReadinessView['reasonCode'], true> = {\n 'never-started': true, 'owner-active': true, 'pause-requested': true, 'stop-requested': true, 'owner-paused': true,\n 'owner-abandoned': true, 'run-incomplete': true, 'resource-withheld': true, 'resource-outcome-ambiguous': true,\n 'resource-attention-required': true, 'generation-attention-required': true, 'duration-budget-exhausted': true, 'generation-budget-exhausted': true,\n 'stagnation-budget-exhausted': true, 'request-budget-exhausted': true, 'reported-token-budget-exhausted': true,\n 'usage-unavailable': true, 'campaign-completed': true, 'campaign-stopped': true, 'campaign-failed': true,\n 'paused-unclassified': true, 'interrupted-unclassified': true, 'campaign-missing': true, 'evidence-degraded': true, 'snapshot-changed': true,\n 'seed-evaluation-unresolved': true, 'seed-evaluation-attention-required': true,\n};\n\n/** Reject mismatched identities and uncontracted/private fields before they reach the view. */\nexport function validateUniverseCampaignReadinessView(value: unknown, campaignId: string, universeId: string): UniverseCampaignReadinessView {\n const invalid = () => new Error('Recorded campaign check is unavailable.');\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw invalid();\n const report = value as Record<string, unknown>;\n if (Object.keys(report).length !== FIELDS.length || Object.keys(report).some((field) => !FIELDS.includes(field)) ||\n report.schemaVersion !== 1 || report.readinessScope !== 'recorded-campaign-evidence' || report.campaignId !== campaignId ||\n typeof report.sourceState !== 'string' || !['healthy', 'missing', 'degraded'].includes(report.sourceState) ||\n !(report.universeId === universeId || report.universeId === null && report.sourceState !== 'healthy') ||\n !(report.observedState === null && report.sourceState !== 'healthy' || typeof report.observedState === 'string' && STATES.includes(report.observedState)) ||\n typeof report.disposition !== 'string' || !Object.hasOwn(DISPOSITIONS, report.disposition) ||\n typeof report.reasonCode !== 'string' || !Object.hasOwn(REASONS, report.reasonCode) ||\n !(typeof report.resourceRuntimeRequired === 'boolean' || report.resourceRuntimeRequired === null && report.sourceState !== 'healthy') ||\n typeof report.sampledAt !== 'string' || !/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(report.sampledAt) ||\n !Number.isFinite(Date.parse(report.sampledAt)) || new Date(report.sampledAt).toISOString() !== report.sampledAt ||\n report.sourceState !== 'healthy' && (report.universeId !== null || report.observedState !== null ||\n report.resourceRuntimeRequired !== null || report.disposition !== 'unavailable')) throw invalid();\n return value as UniverseCampaignReadinessView;\n}\n\n/** On demand only: independent from the overview's polling and SSE invalidation keys. */\nexport function universeCampaignReadinessQuery(campaignId: string, universeId: string): QueryDef<UniverseCampaignReadinessView> {\n if (!ID.test(campaignId) || !ID.test(universeId)) throw new Error('Invalid recorded campaign check identity.');\n return {\n key: `universe-campaign-readiness:${universeId}:${campaignId}`,\n fetch: async (signal) => validateUniverseCampaignReadinessView(\n await apiGet<unknown>(`/api/universe/campaign-readiness?campaignId=${encodeURIComponent(campaignId)}`, signal), campaignId, universeId),\n };\n}\n",".panel { border-block: 1px solid var(--border-default); padding-block: 16px; text-align: left; min-width: 0; }\n.result { margin-top: 14px; min-width: 0; }\n.heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }\n.heading h4 { margin: 0; font-family: var(--font-display); font-size: 1rem; color: var(--text-primary); }\n.button { font: inherit; color: var(--text-link); border: 1px solid var(--border-strong); border-radius: 6px; padding: 8px 12px; background: var(--bg-surface); cursor: pointer; white-space: normal; text-align: left; }\n.button:hover:not(:disabled) { background: var(--bg-hover); }\n.button:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 3px; }\n.button:disabled { cursor: wait; color: var(--text-secondary); }\n.outcome { font-weight: 600; color: var(--text-primary); }\n.facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 12px 20px; margin: 16px 0; }\n.facts div { min-width: 0; }\n.facts dt { color: var(--text-secondary); font-size: .8rem; }\n.facts dd { margin: 4px 0 0; color: var(--text-primary); overflow-wrap: anywhere; font-size: .9rem; }\n.note { color: var(--text-secondary); font-size: .85rem; max-width: 78ch; line-height: 1.55; margin-bottom: 0; }\n.notice { color: var(--status-warning-fg); font-size: .9rem; }\n","import { useMemo, useState } from 'react';\nimport type { UniverseCampaignReadinessView } from '../../../core/web/universe-console-types.js';\nimport { useQuery, useRefetch } from '../../data/hooks.js';\nimport { universeCampaignReadinessQuery } from '../../data/universe-readiness-queries.js';\nimport styles from './CampaignReadiness.module.css';\n\nconst LABELS: Record<UniverseCampaignReadinessView['disposition'], string> = {\n startable: 'Recorded evidence permitted a run attempt',\n owned: 'Campaign owner was recorded active',\n 'owner-held': 'Owner control held the campaign',\n 'resource-withheld': 'Last attempt was withheld by resources',\n 'recovery-required': 'Recovery inspection was required',\n 'attention-required': 'Attention was required',\n 'budget-exhausted': 'Recorded budget was exhausted',\n terminal: 'Campaign had ended',\n unavailable: 'Recorded check was unavailable',\n};\n\nfunction RecordedCheck({ campaignId, universeId }: { campaignId: string; universeId: string }) {\n const query = useMemo(() => universeCampaignReadinessQuery(campaignId, universeId), [campaignId, universeId]);\n // `freshMs: 0` opts out of useQuery's default mount-freshness window. This\n // component only mounts when the operator discloses it, so every mount IS\n // the request for a new sample — accepting a cached one because it is a few\n // seconds old would silently answer a click with the previous reading.\n const { data, status } = useQuery(query, { freshMs: 0 });\n const refresh = useRefetch(query);\n const busy = status === 'loading' || status === 'refreshing' || status === 'idle';\n const historical = busy || status === 'error';\n return <div className={styles.result} aria-busy={busy}>\n <div className={styles.heading}><h4>Last recorded check</h4><button type=\"button\" className={styles.button} disabled={busy} onClick={refresh}>{busy ? 'Checking recorded evidence…' : 'Refresh check'}</button></div>\n {status === 'error' ? <p className={styles.notice} role=\"alert\">Recorded check could not be refreshed. Retry the check; no current readiness conclusion is available.</p> : null}\n {data ? <>\n {historical ? <p className={styles.notice}>Previous sample only. {busy ? 'A new check is pending.' : 'The latest check failed.'}</p> : null}\n {!historical ? <p className={styles.outcome}>{data.sourceState === 'healthy' ? LABELS[data.disposition] : 'Recorded evidence was unavailable or incomplete'}</p> : null}\n <dl className={styles.facts}>\n <div><dt>Sampled</dt><dd><time dateTime={data.sampledAt}>{new Date(data.sampledAt).toLocaleString()}</time></dd></div>\n <div><dt>Source</dt><dd>{data.sourceState}</dd></div>\n <div><dt>{historical ? 'Previous disposition' : 'Recorded disposition'}</dt><dd>{data.disposition}</dd></div>\n <div><dt>Reason code</dt><dd><code>{data.reasonCode}</code></dd></div>\n <div><dt>Observed campaign state</dt><dd>{data.observedState ?? 'Unavailable'}</dd></div>\n <div><dt>Resource runtime binding</dt><dd>{data.resourceRuntimeRequired === null ? 'Unknown' : data.resourceRuntimeRequired ? 'Explicit private runtime required for a run attempt' : 'Not required by the recorded manifest'}</dd></div>\n </dl>\n </> : busy ? <p role=\"status\">Reading saved campaign controls and outcomes…</p> : null}\n <p className={styles.note}>This checks saved campaign controls and outcomes—not current provider connection, quota, worker capacity, evaluator execution, or execution-lease availability. A recorded startable result is advisory; the runner must still perform its admission checks.</p>\n </div>;\n}\n\n/** Mount the shared query only on request; switching campaigns resets this disclosure. */\nexport function CampaignReadiness({ campaignId, universeId }: { campaignId: string; universeId: string }) {\n const [open, setOpen] = useState(false);\n return <section className={styles.panel} aria-label=\"Recorded campaign readiness\">\n <button type=\"button\" className={styles.button} aria-expanded={open} onClick={() => setOpen((value) => !value)}>{open ? 'Hide recorded readiness' : 'Check recorded readiness'}</button>\n {!open ? <p className={styles.note}>Inspect saved controls, remaining budgets, and recovery conditions for this campaign. This does not start work.</p> : <RecordedCheck campaignId={campaignId} universeId={universeId} />}\n </section>;\n}\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport { StatusBadge } from '../../components/primitives/StatusBadge.js';\nimport { RefreshIndicator } from '../../components/primitives/RefreshIndicator.js';\nimport { SkeletonLine } from '../../components/primitives/Skeleton.js';\nimport { useQuery, useRefetch } from '../../data/hooks.js';\nimport { universeOverviewQuery } from '../../data/queries.js';\nimport type { UniverseOverview, UniverseRun, UniverseSummary, UniverseTrial } from '../../data/api-types.js';\nimport { useScrollRestore } from '../../hooks/useScrollRestore.js';\nimport styles from './UniverseView.module.css';\nimport { UniverseDeliveries } from './UniverseDeliveries.js';\nimport { UniverseGraph } from './UniverseGraph.js';\nimport { UniverseRootContext, useUniverseCommand } from './UniverseScope.js';\nimport { CampaignReadiness } from './CampaignReadiness.js';\n\ntype Campaign = NonNullable<UniverseOverview['campaigns']>[number];\nconst ACTIVE_CAMPAIGN_STATES = new Set(['running', 'pause-requested', 'stop-requested']);\n\nfunction number(value: number): string {\n return value.toLocaleString(undefined, { maximumFractionDigits: 6 });\n}\n\nfunction duration(ms: number): string {\n return ms < 1_000\n ? `${ms.toLocaleString(undefined, { maximumFractionDigits: 0 })} ms`\n : `${(ms / 1_000).toLocaleString(undefined, { maximumFractionDigits: 2 })} s`;\n}\n\nfunction timestamp(value: string): string {\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString();\n}\n\nfunction FirstExperiment() {\n const command = useUniverseCommand();\n return (\n <section className={styles.empty} aria-labelledby=\"universe-start-title\">\n <h2 id=\"universe-start-title\">Start your first universe</h2>\n <p>Run two measured generations on a disposable seed, then inspect which variants earned a place in the archive.</p>\n <pre className={styles.command}><code>{command('ashlr universe demo')}</code></pre>\n <p>The local demonstration needs no model credentials. Refresh this page after running it.</p>\n <details>\n <summary>Bring your own experiment</summary>\n <pre className={styles.command}><code>{command('ashlr universe init --manifest path/to/universe.json\\nashlr universe run <id>\\nashlr universe status <id> --json\\nashlr universe archive <id> --json')}</code></pre>\n </details>\n </section>\n );\n}\n\nfunction selectionReason(trial: UniverseTrial, summary: UniverseSummary, run: UniverseRun): string {\n if (trial.status !== 'passed') return 'Not admitted. The trial did not finish with a passing measurement.';\n if (run.status !== 'completed') return 'This generation has not completed. Its measurements have not been admitted to the archive.';\n if (trial.selected && trial.delta === null) return 'Established the first measured elite in this niche.';\n if (trial.selected) return `Admitted in generation ${run.generation} after an improvement of ${number(trial.delta!)} over the prior niche elite.`;\n return `Not admitted in this generation. Selection compares passing trials within each niche and requires an improvement of ${number(summary.manifest.metric.minImprovement)}.`;\n}\n\nconst RESOURCE_DISPATCH_LABELS: Record<string, string> = {\n 'not-started': 'Not started', withheld: 'Admission withheld', settled: 'Receipt settled',\n replayed: 'Recorded task replayed; no redispatch', unavailable: 'Evidence unavailable',\n};\nconst RESOURCE_USAGE_LABELS: Record<string, string> = {\n 'codex-turn': 'Codex reported turns', 'claude-main-loop': 'Claude main loop only',\n 'local-chat-completion': 'Local chat completion',\n};\n\nexport function GenerationEvidence({ trial }: { trial: UniverseTrial }) {\n const receipt = trial.generation;\n if (!receipt) return <p className={styles.hypothesis}>Operator command. Model usage was not measured.</p>;\n const pooled = receipt.provider === 'resource-pool';\n const resource = pooled ? receipt.resource : undefined;\n const tokenCount = (value: number | null) => value === null ? 'Unavailable' : number(value);\n return (\n <section className={styles.generationEvidence} aria-label=\"Model generation evidence\">\n <div className={styles.detailHeading}><h4>Model generation</h4><StatusBadge status={receipt.status} tone={receipt.status === 'succeeded' ? 'success' : undefined} /></div>\n <dl className={styles.measurements}>\n <div><dt>Model</dt><dd>{receipt.model ?? resource?.workerModel ?? 'Not assigned'}</dd></div>\n <div><dt>Accounting</dt><dd>{receipt.usage.state === 'reported' ? 'Provider-reported' : 'Unavailable'}</dd></div>\n <div><dt>Input tokens</dt><dd>{tokenCount(receipt.usage.inputTokens)}</dd></div>\n <div><dt>Output tokens</dt><dd>{tokenCount(receipt.usage.outputTokens)}</dd></div>\n <div><dt>Generation duration</dt><dd>{duration(receipt.durationMs)}</dd></div>\n <div><dt>{pooled ? 'Provider request count' : 'Request'}</dt><dd>{pooled ? 'Unknown' : receipt.requestStarted ? 'Started' : 'Not started'}</dd></div>\n </dl>\n {pooled ? <section aria-label=\"Recorded resource task evidence\">\n <h4>Recorded resource task</h4>\n <dl className={styles.measurements}>\n <div><dt>Dispatch evidence</dt><dd>{resource && Object.hasOwn(RESOURCE_DISPATCH_LABELS, resource.dispatch) ? RESOURCE_DISPATCH_LABELS[resource.dispatch] : 'Unavailable'}</dd></div>\n <div><dt>Pool</dt><dd>{resource?.poolId ?? 'Unavailable'}</dd></div>\n <div><dt>Worker</dt><dd>{resource?.workerId ?? 'Not assigned'}</dd></div>\n <div><dt>Worker provider</dt><dd>{resource?.workerProvider ?? 'Not assigned'}</dd></div>\n <div><dt>Task</dt><dd><code>{resource?.taskId ?? 'Unavailable'}</code></dd></div>\n <div><dt>Recorded task outcome</dt><dd>{resource?.taskStatus ?? 'Unavailable'}</dd></div>\n <div><dt>Worker usage scope</dt><dd>{resource?.usageScope && Object.hasOwn(RESOURCE_USAGE_LABELS, resource.usageScope) ? RESOURCE_USAGE_LABELS[resource.usageScope] : 'Unavailable'}</dd></div>\n </dl>\n <p>Recorded provenance only, not a current worker heartbeat. Task completion does not mean the candidate response validated or the evaluator accepted it.</p>\n {resource?.taskStatus === 'reserved' || resource?.taskStatus === 'uncertain'\n ? <p className={styles.notice}>The resource receipt still occupies capacity. Reconcile the affected pool before another attempt; this view does not release its slot.</p> : null}\n </section> : null}\n <details className={styles.artifact}>\n <summary>Generation source and changes</summary>\n <dl>\n <div><dt>Provider</dt><dd>{receipt.provider}</dd></div>\n {!pooled ? <div><dt>Endpoint</dt><dd><code>{receipt.endpoint}</code></dd></div> : null}\n {resource ? <>\n <div><dt>Allowed workers</dt><dd>{resource.allowedWorkerIds.join(', ')}</dd></div>\n <div><dt>Pool digest</dt><dd><code>{resource.poolDigest}</code></dd></div>\n <div><dt>Task digest</dt><dd><code>{resource.taskDigest ?? 'Unavailable'}</code></dd></div>\n <div><dt>Resource receipt digest</dt><dd><code>{resource.receiptDigest ?? 'Unavailable'}</code></dd></div>\n </> : null}\n <div><dt>Changed files</dt><dd>{receipt.changedFiles.length ? receipt.changedFiles.join(', ') : 'None'}</dd></div>\n <div><dt>Prompt digest</dt><dd><code>{receipt.promptDigest ?? 'Unavailable'}</code></dd></div>\n <div><dt>Response digest</dt><dd><code>{receipt.responseDigest ?? 'Unavailable'}</code></dd></div>\n {receipt.feedback ? <><div><dt>Evaluator feedback source</dt><dd>Generation {receipt.feedback.generation} · trial {receipt.feedback.trialId}</dd></div><div><dt>Feedback digest</dt><dd><code>{receipt.feedback.digest}</code></dd></div></> : null}\n {receipt.search ? <><div><dt>Recorded search context</dt><dd>Version {receipt.search.schemaVersion}</dd></div><div><dt>Search context digest</dt><dd><code>{receipt.search.digest}</code></dd></div></> : null}\n {receipt.seedContext ? <><div><dt>Historical seed context</dt><dd>Version {receipt.seedContext.schemaVersion}</dd></div><div><dt>Seed context digest</dt><dd><code>{receipt.seedContext.digest}</code></dd></div></> : null}\n </dl>\n {receipt.seedContext ? <p>Historical measured seed evidence is retained across campaign generations. It is not the trial parent, latest-attempt feedback, or acceptance.</p> : null}\n {pooled ? <p>Some digests are redacted in the web view. Use scoped CLI JSON for exact evidence; this view does not revalidate the resource ledger.</p> : null}\n </details>\n <p>Generation success means a valid replacement response, not evaluator acceptance. {pooled\n ? 'Token counts come from the recorded worker receipt and keep its usage scope; model identity is the configured model name. Native provider request counts and account-wide spend remain unknown.'\n : 'Token counts come from the endpoint response; model identity is the configured name.'}</p>\n {receipt.feedback ? <p>Feedback can come from a failed attempt. It is distinct from the retained parent shown in the lineage.</p> : null}\n {receipt.search ? <p>Search context supplies the metric and bounded repetition evidence, with a retained baseline and previous selection result when available. A repeated artifact is not an evaluator result or a reason to skip evaluation.</p> : null}\n </section>\n );\n}\n\nfunction TrialDetail({ trial, summary, run }: { trial: UniverseTrial; summary: UniverseSummary; run: UniverseRun }) {\n const command = useUniverseCommand();\n const parent = summary.runs.flatMap((item) => item.trials).find((item) => item.id === trial.parentTrialId);\n const current = summary.elites.some((elite) => elite.trialId === trial.id);\n const variant = summary.manifest.variants.find((item) => item.id === trial.variantId);\n return (\n <section className={styles.trialDetail} aria-label={`Evidence for ${trial.variantId}`}>\n <div className={styles.detailHeading}>\n <h3>{trial.variantId}</h3>\n <StatusBadge status={trial.status} tone={trial.status === 'passed' ? 'success' : undefined} />\n </div>\n {variant ? <p className={styles.hypothesis}>{variant.hypothesis}</p> : null}\n <div className={styles.lineage} aria-label=\"Variant lineage\">\n <span>{trial.parentTrialId ? (parent?.variantId ?? trial.parentTrialId) : 'Seed'}</span>\n <span aria-hidden=\"true\">→</span>\n <strong>{trial.variantId}</strong>\n <span className={styles.generation}>Generation {run.generation}</span>\n </div>\n <p className={styles.reason}>{selectionReason(trial, summary, run)}</p>\n {trial.selected ? <p className={styles.currentElite}>{summary.sourceState === 'degraded' ? 'Admission recorded; the current niche elite could not be verified.' : current ? 'Current niche elite' : 'Previously admitted; a later trial now holds this niche.'}</p> : null}\n <dl className={styles.measurements}>\n <div><dt>{summary.manifest.metric.name}</dt><dd>{trial.score === null ? 'Not measured' : number(trial.score)}</dd></div>\n <div><dt>Improvement over prior elite</dt><dd>{trial.delta === null ? 'No prior comparison' : number(trial.delta)}</dd></div>\n <div><dt>Trial duration</dt><dd>{duration(trial.durationMs)}</dd></div>\n {Object.entries(trial.metrics).filter(([key]) => key !== summary.manifest.metric.name).map(([key, value]) => (\n <div key={key}><dt>{key}</dt><dd>{number(value)}</dd></div>\n ))}\n </dl>\n <GenerationEvidence trial={trial} />\n {trial.diagnostics?.length ? <div className={styles.diagnosticCodes} aria-label=\"Evaluator diagnostic codes\"><strong>Evaluator diagnostics</strong><ul>{trial.diagnostics.map((diagnostic, index) => <li key={`${diagnostic.code}-${index}`}><code>{diagnostic.code}</code></li>)}</ul><p>Codes are shown here; diagnostic messages and private locations are omitted.</p></div> : null}\n {trial.error ? <pre role=\"status\" aria-label=\"Trial failure evidence\" className={styles.failureEvidence}>{trial.error}</pre> : null}\n {trial.artifact ? (\n <details className={styles.artifact}>\n <summary>Artifact and evaluator identity</summary>\n <dl>\n <div><dt>Artifact</dt><dd><code>{trial.artifact.path}</code></dd></div>\n <div><dt>Content digest</dt><dd><code>{trial.artifact.digest}</code></dd></div>\n <div><dt>Seed revision</dt><dd><code>{trial.artifact.revision}</code></dd></div>\n <div><dt>Comparator digest</dt><dd><code>{run.comparatorDigest}</code></dd></div>\n </dl>\n <p>For exact local records, run <code>{command(`ashlr universe status ${summary.manifest.id} --json`)}</code>.</p>\n </details>\n ) : null}\n <details className={styles.artifact}>\n <summary>Raw measurement record</summary>\n <pre>{JSON.stringify({ ...trial, ...(trial.diagnostics ? { diagnostics: trial.diagnostics.map(({ code }) => ({ code })) } : {}) }, null, 2)}</pre>\n </details>\n </section>\n );\n}\n\nfunction Campaigns({ campaigns, summary, onInspectRun }: {\n campaigns: Campaign[]; summary: UniverseSummary; onInspectRun: (runId: string) => void;\n}) {\n const [campaignId, setCampaignId] = useState<string | null>(null);\n const command = useUniverseCommand();\n const root = useContext(UniverseRootContext);\n const campaign = campaigns.find((item) => item.definition.id === campaignId) ??\n campaigns.find((item) => ACTIVE_CAMPAIGN_STATES.has(item.state)) ?? campaigns.at(-1);\n if (!campaign) return (\n <section className={styles.campaign} aria-label=\"Campaigns\">\n <div className={styles.sectionHeading}><div><h2>Continue with a campaign</h2><p>Run successive generations automatically within a fixed resource budget. A passing trial does not end the search.</p></div></div>\n <div className={styles.campaignBody}>\n <p>Set <code>universeId</code> to <code>{summary.manifest.id}</code> in your campaign manifest.</p>\n <pre className={styles.command}><code>{command('ashlr universe campaign init --manifest campaign.json\\nashlr universe campaign run <campaign-id>')}</code></pre>\n <p>The console observes saved evidence. These commands run in your terminal, without installing a background service.</p>\n </div>\n </section>\n );\n const { definition, progress } = campaign;\n const verified = campaign.sourceState === 'healthy';\n const value = (count: number) => verified ? number(count) : 'Unavailable';\n const availableRuns = new Set(summary.runs.map((item) => item.id));\n if (summary.activeRun) availableRuns.add(summary.activeRun.id);\n const controls = [`ashlr universe campaign status ${definition.id} --json`];\n controls.push(`ashlr universe campaign check ${definition.id} --json${root === null ? \" --root '/absolute/private/experiments'\" : ''}`);\n if (ACTIVE_CAMPAIGN_STATES.has(campaign.state)) controls.push(`ashlr universe campaign pause ${definition.id}`);\n if (!['completed', 'stopped', 'failed'].includes(campaign.state)) controls.push(`ashlr universe campaign stop ${definition.id}`);\n return (\n <section className={styles.campaign} aria-label=\"Campaigns\">\n <div className={styles.sectionHeading}>\n <div><h2>Autonomous campaign</h2><p>Generations continue until the campaign reaches its resource or stagnation limit.</p></div>\n {campaigns.length > 1 ? <label className={styles.selectLabel}>Campaign<select value={definition.id} onChange={(event) => setCampaignId(event.target.value)}>{campaigns.map((item) => <option key={item.definition.id} value={item.definition.id}>{item.definition.id}</option>)}</select></label> : null}\n </div>\n <div className={styles.campaignBody}>\n <div className={styles.campaignHeading}><h3>{definition.id}</h3><StatusBadge status={campaign.state} tone={campaign.state === 'ready' ? 'neutral' : undefined} /></div>\n {verified ? null : <div className={styles.notice} role=\"status\"><strong>Campaign history is incomplete.</strong><p>{campaign.reasons.join('; ') || 'Recorded progress could not be verified.'}</p></div>}\n <p className={styles.reason}><strong>Reason: </strong>{campaign.reason ?? (campaign.state === 'ready' ? 'Registered; execution readiness has not been checked.' : 'No stop reason recorded.')}</p>\n <p>Use the recovery check before resuming. It reads recorded controls and outcomes, not current worker readiness.{root === null ? ' Replace the example root with your exact Universe store.' : ''}</p>\n <CampaignReadiness key={`${summary.manifest.id}:${definition.id}`} campaignId={definition.id} universeId={summary.manifest.id} />\n {campaign.state === 'pause-requested' || campaign.state === 'stop-requested' ? <p role=\"status\">Control requested. The owner has not yet acknowledged that work has stopped.</p> : null}\n <dl className={styles.campaignFacts}>\n <div><dt>Generation attempts</dt><dd>{value(progress.attempts)} / {definition.budget.maxGenerations}</dd></div>\n <div><dt>Reserved generation invocations</dt><dd>{value(progress.reservedModelRequests)} / {definition.budget.maxModelRequests}</dd></div>\n <div><dt>Stagnant generations</dt><dd>{value(progress.stagnantGenerations)} / {definition.budget.maxStagnantGenerations}</dd></div>\n <div><dt>Deadline</dt><dd>{campaign.deadlineAt ? timestamp(campaign.deadlineAt) : 'Starts on first run'}</dd></div>\n <div><dt>Completed generations</dt><dd>{value(progress.completedRuns)}</dd></div>\n <div><dt>Interrupted generations</dt><dd>{value(progress.interruptedRuns)}</dd></div>\n <div><dt>Initial niche admissions</dt><dd>{value(progress.admissions)}</dd></div>\n <div><dt>Strict improvements</dt><dd>{value(progress.improvements)}</dd></div>\n <div><dt>Reported token total</dt><dd>{verified && progress.usageComplete && progress.reportedTokens !== null ? number(progress.reportedTokens) : 'Unavailable'}</dd></div>\n <div><dt>Recorded token subtotal</dt><dd>{value(progress.recordedTokens)}</dd></div>\n <div><dt>Reported-token stop threshold</dt><dd>{definition.budget.maxReportedTokens === null ? 'Not configured' : number(definition.budget.maxReportedTokens)}</dd></div>\n <div><dt>Bounded evaluator feedback</dt><dd>{definition.feedback ? 'Enabled' : 'Disabled'}</dd></div>\n </dl>\n <p className={styles.campaignNote}>Resume keeps the original deadline and consumed budget. Token figures cover recorded model requests; a recorded subtotal is not proof of complete spend. A reported-token threshold cannot prevent spend already incurred.</p>\n <p className={styles.campaignNote}>The legacy maxModelRequests field reserves generation transport invocations, not native API calls. A native invocation may make zero or multiple provider requests. Resource-pool run/resume requires its explicit private runtime option again; this read-only console does not hold that binding.</p>\n </div>\n {campaign.steps.length ? <div className={styles.tableScroll}>\n <table className={styles.archiveTable} aria-label=\"Campaign generations\">\n <thead><tr><th scope=\"col\">Generation</th><th scope=\"col\">State</th><th scope=\"col\">Trials passed</th><th scope=\"col\">New niches</th><th scope=\"col\">Improvements</th><th scope=\"col\">Generation invocations reserved</th></tr></thead>\n <tbody>{campaign.steps.map((step) => <tr key={step.runId}>\n <th scope=\"row\">{availableRuns.has(step.runId) ? <button type=\"button\" className={styles.eliteButton} aria-label={`Inspect campaign generation ${step.generation}`} onClick={() => onInspectRun(step.runId)}>{step.generation}</button> : <span>{step.generation} · Evidence pending</span>}</th>\n <td>{step.state}</td><td>{value(step.passedTrials)} / {value(step.trialCount)}</td><td>{value(step.admissions)}</td><td>{value(step.improvements)}</td><td>{value(step.reservedModelRequests)}</td>\n </tr>)}</tbody>\n </table>\n </div> : null}\n <div className={styles.campaignBody}>\n <details className={styles.artifact}><summary>Inspect or control from your terminal</summary><pre className={styles.command}><code>{command(controls.join('\\n'))}</code></pre><p>Pause and stop are requests until acknowledged. These controls do not change the legacy fleet daemon or its kill switch.</p></details>\n <p className={styles.campaignNote}>Campaign termination is not project success. Archive admissions are local evaluator results, not accepted production changes.</p>\n </div>\n </section>\n );\n}\n\nfunction UniverseExperiment({ summary, campaigns, deliveryReport }: {\n summary: UniverseSummary;\n campaigns: Campaign[];\n deliveryReport?: NonNullable<UniverseOverview['deliveryReports']>[number];\n}) {\n const [runId, setRunId] = useState<string | null>(null);\n const command = useUniverseCommand();\n const [trialId, setTrialId] = useState<string | null>(null);\n const comparisonRef = useRef<HTMLElement>(null);\n const runs = summary.activeRun && !summary.runs.some((run) => run.id === summary.activeRun!.id)\n ? [...summary.runs, summary.activeRun] : summary.runs;\n const run = runs.find((item) => item.id === runId) ?? summary.activeRun ?? runs.at(-1);\n const trial = run?.trials.find((item) => item.id === trialId) ?? run?.trials.find((item) => item.selected) ?? run?.trials[0];\n const niches = [...new Set(summary.manifest.variants.map((variant) => variant.niche))];\n const totalDuration = runs.reduce((sum, item) => sum + item.durationMs, 0);\n\n return (\n <>\n <section className={styles.objective} aria-label=\"Universe objective\">\n <h2>{summary.manifest.name}</h2>\n <p>{summary.manifest.objective}</p>\n <dl className={styles.objectiveFacts}>\n <div><dt>Selection metric</dt><dd>{summary.manifest.metric.name} · {summary.manifest.metric.direction}</dd></div>\n <div><dt>Minimum improvement</dt><dd>{number(summary.manifest.metric.minImprovement)}</dd></div>\n <div><dt>Run budget</dt><dd>{summary.manifest.budget.maxTrials} trials / {duration(summary.manifest.budget.maxDurationMs)}</dd></div>\n <div><dt>Parallel trials</dt><dd>{summary.manifest.budget.maxParallel}</dd></div>\n </dl>\n </section>\n\n {summary.sourceState === 'degraded' ? (\n <div className={styles.notice} role=\"status\"><strong>Some experiment records could not be read.</strong><p>{summary.reasons.join('; ')}</p></div>\n ) : null}\n {summary.activeRun ? (\n <div className={styles.running} role=\"status\">\n <StatusBadge status={summary.activeRun.status} />\n <span>Generation {summary.activeRun.generation}: {summary.activeRun.trials.length} trial measurements recorded. Refreshing every 3 seconds.</span>\n </div>\n ) : null}\n\n <Campaigns campaigns={campaigns} summary={summary} onInspectRun={(id) => { setRunId(id); setTrialId(null); }} />\n\n <UniverseGraph universeId={summary.manifest.id} onInspectTrial={(run, trial) => {\n if (!runs.some((item) => item.id === run && item.trials.some((candidate) => candidate.id === trial))) return false;\n setRunId(run); setTrialId(trial);\n window.requestAnimationFrame(() => comparisonRef.current?.scrollIntoView?.({ block: 'start' }));\n return true;\n }} />\n\n <section className={styles.archive} aria-labelledby=\"universe-archive-title\">\n <div className={styles.sectionHeading}>\n <div><h2 id=\"universe-archive-title\">Population archive</h2><p>Each niche keeps its best measured variant. Inspect an elite to see the experiment that earned its place.</p></div>\n <span className={styles.archiveCount}>{summary.sourceState === 'degraded' ? 'Archive incomplete' : `${summary.elites.length} / ${niches.length} niches populated`}</span>\n </div>\n <div className={styles.tableScroll}>\n <table className={styles.archiveTable}>\n <thead><tr><th scope=\"col\">Niche</th><th scope=\"col\">Retained variant</th><th scope=\"col\">{summary.manifest.metric.name}</th><th scope=\"col\">Generation</th></tr></thead>\n <tbody>{niches.map((niche) => {\n const elite = summary.elites.find((item) => item.niche === niche);\n return (\n <tr key={niche} data-selected={elite?.trialId === trial?.id || undefined}>\n <th scope=\"row\"><span className={elite ? styles.nicheFilled : styles.nicheEmpty} aria-hidden=\"true\" />{niche}</th>\n <td>{elite ? (\n <button type=\"button\" className={styles.eliteButton} aria-label={`Inspect ${elite.variantId} in ${niche}`} onClick={() => { setRunId(elite.runId); setTrialId(elite.trialId); }}>{elite.variantId}</button>\n ) : <span className={styles.muted}>{summary.sourceState === 'degraded' ? 'History incomplete' : 'No retained variant'}</span>}</td>\n <td>{elite ? number(elite.score) : summary.sourceState === 'degraded' ? 'Unavailable' : 'Not measured'}</td>\n <td>{elite ? elite.generation : '—'}</td>\n </tr>\n );\n })}</tbody>\n </table>\n </div>\n </section>\n\n {run ? (\n <section ref={comparisonRef} className={styles.comparison} aria-labelledby=\"universe-comparison-title\">\n <div className={styles.sectionHeading}>\n <div><h2 id=\"universe-comparison-title\">Experiment comparison</h2><p>Selection is local to a niche. Positive improvement means better in either metric direction.</p></div>\n <label className={styles.selectLabel}>Generation\n <select value={run.id} onChange={(event) => { setRunId(event.target.value); setTrialId(null); }}>\n {[...runs].reverse().map((item) => <option key={item.id} value={item.id}>{item.generation} · {item.status}</option>)}\n </select>\n </label>\n </div>\n <div className={styles.runMeta}><StatusBadge status={run.status} tone={run.status === 'completed' ? 'success' : undefined} /><span>Started {timestamp(run.startedAt)}</span><span>{duration(run.durationMs)} recorded</span><span>{run.trials.filter((item) => item.status === 'passed').length} / {run.trials.length} trials passed</span><span>{run.status === 'completed' ? `${run.trials.filter((item) => item.selected).length} admitted` : run.status === 'running' ? 'Selection pending' : 'Selection not applied'}</span></div>\n {run.error ? <p className={styles.failure} role=\"status\">{run.error}</p> : null}\n {trial ? (\n <div className={styles.comparisonBody}>\n <div className={styles.trialList} aria-label=\"Trials\">\n {run.trials.map((item) => (\n <button type=\"button\" key={item.id} className={styles.trialButton} aria-pressed={item.id === trial.id} onClick={() => setTrialId(item.id)}>\n <span className={styles.trialTitle}>{item.variantId}<span>{item.score === null ? '—' : number(item.score)}</span></span>\n <span className={styles.trialSubline}>{item.niche}<span>{item.selected ? 'Admitted' : item.status}</span></span>\n </button>\n ))}\n </div>\n <TrialDetail trial={trial} summary={summary} run={run} />\n </div>\n ) : <p className={styles.noTrials}>No trial measurements have been recorded for this generation yet.</p>}\n </section>\n ) : (\n <section className={styles.empty}>\n <h2>This universe is registered</h2>\n <pre className={styles.command}><code>{command(`ashlr universe run ${summary.manifest.id}`)}</code></pre>\n <p>No generation has run yet. Verify the evaluator and required runtime before starting, then refresh to compare measurements.</p>\n </section>\n )}\n\n <UniverseDeliveries summary={summary} report={deliveryReport} onInspectTrial={(run, trial) => { setRunId(run); setTrialId(trial); }} />\n\n <footer className={styles.resources} aria-label=\"Generation resources\">\n <h2>Recorded resources</h2>\n <dl><div><dt>Runtime across {runs.length} generations</dt><dd>{duration(totalDuration)}</dd></div><div><dt>Model tokens{run ? ` in generation ${run.generation}` : ''}</dt><dd>{run?.tokensUsed == null ? 'Unavailable' : number(run.tokensUsed)}</dd></div><div><dt>Model cost</dt><dd>Unavailable</dd></div></dl>\n {run?.generationUsage ? <p>Generation usage coverage: {run.generationUsage.reportedRequests} / {run.generationUsage.requestsStarted} recorded started requests reported tokens across {run.generationUsage.trials} model trials. {run.generationUsage.resourceAttempts === undefined\n ? 'Totals require a completed generation, at least one recorded request, and usage from every recorded request. Interrupted in-flight usage may be missing.'\n : 'These request counters cover the direct local path only. Combined totals also require complete resource-attempt usage and a completed generation; interrupted in-flight usage may be missing.'}</p> : null}\n {run?.generationUsage?.resourceAttempts !== undefined ? <p>Resource handoff coverage: {run.generationUsage.resourceReportedAttempts ?? 'Unavailable'} / {run.generationUsage.resourceAttempts} attempted handoffs reported worker tokens. Handoffs do not guarantee worker starts or count provider requests; incomplete resource usage keeps the combined total unavailable.</p> : null}\n <p>Tokens cover model generation only, not command or evaluator work. Missing usage and dollar costs stay unavailable. Evaluator scores do not establish business value or accepted production changes.</p>\n </footer>\n </>\n );\n}\n\nexport function UniverseView() {\n const containerRef = useRef<HTMLDivElement>(null);\n useScrollRestore('/universe', containerRef);\n const query = useQuery(universeOverviewQuery);\n const refresh = useRefetch(universeOverviewQuery);\n const [universeId, setUniverseId] = useState<string | null>(null);\n const overview = query.data;\n const universe = overview?.universes.find((item) => item.manifest.id === universeId) ?? overview?.universes[0];\n const isRunning = (overview?.universes.some((item) => item.activeRun !== null) ?? false) ||\n (overview?.campaigns?.some((item) => ACTIVE_CAMPAIGN_STATES.has(item.state)) ?? false);\n useEffect(() => {\n let disposed = false;\n const poll = () => { if (!disposed && document.visibilityState !== 'hidden') refresh(); };\n // Idle discovery notices work started elsewhere without requiring a manual\n // refresh. The existing cache coalesces overlapping reads and owns their\n // lifetime; hiding/unmounting stops new polling, not a shared in-flight read.\n const timer = window.setInterval(poll, isRunning ? 3_000 : 15_000);\n document.addEventListener('visibilitychange', poll);\n return () => {\n disposed = true;\n window.clearInterval(timer);\n document.removeEventListener('visibilitychange', poll);\n };\n }, [isRunning, refresh]);\n return (\n <div ref={containerRef} className={styles.view}>\n <header className={styles.header}>\n <div><h1>Ashlrverse</h1><p>Run experiments. Compare futures. Keep what earns its place.</p></div>\n <div className={styles.actions}>\n {overview && overview.universes.length > 1 ? (\n <label className={styles.selectLabel}>Universe<select value={universe?.manifest.id} onChange={(event) => setUniverseId(event.target.value)}>{overview.universes.map((item) => <option value={item.manifest.id} key={item.manifest.id}>{item.manifest.name}</option>)}</select></label>\n ) : null}\n <button type=\"button\" className={styles.refresh} onClick={refresh} disabled={query.status === 'loading' || query.status === 'refreshing'}>Refresh</button>\n </div>\n </header>\n <div className={styles.freshness} aria-live=\"polite\">\n {query.status === 'refreshing' ? <RefreshIndicator /> : null}\n {overview ? <span>Observed {timestamp(overview.sampledAt)}{query.status === 'error' ? ' · Last successful read' : ''}</span> : null}\n {overview ? <span>Local experiments</span> : null}\n <span>Refreshes every {isRunning ? '3' : '15'} seconds while visible</span>\n </div>\n {query.status === 'loading' ? <section className={styles.empty} aria-label=\"Loading Universe experiments\"><SkeletonLine width=\"60%\" /><SkeletonLine width=\"90%\" /><SkeletonLine width=\"80%\" /></section> : null}\n {query.status === 'error' ? <div className={styles.notice} role=\"alert\"><h2>Universe records unavailable</h2><p>{query.error?.message ?? 'The experiment store could not be read.'}</p><p>Refresh to retry. Any records below are from the last successful read.</p></div> : null}\n {overview?.sourceState === 'degraded' ? <div className={styles.notice} role=\"status\"><strong>Experiment history is incomplete.</strong><p>{overview.reasons.join('; ') || 'Some persisted records could not be verified.'}</p></div> : null}\n {universe ? <UniverseExperiment key={universe.manifest.id} summary={universe} campaigns={overview?.campaigns?.filter((item) => item.definition.universeId === universe.manifest.id) ?? []} deliveryReport={overview?.deliveryReports?.find((report) => report.universeId === universe.manifest.id)} /> : overview && overview.sourceState !== 'degraded' ? <FirstExperiment /> : null}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"UniverseView-sWm3pnTW.js","names":[],"sources":["../../../../../../src/web-ui/hooks/useScrollRestore.ts","../../../../../../src/web-ui/routes/universe/UniverseView.module.css","../../../../../../src/web-ui/routes/universe/UniverseScope.tsx","../../../../../../src/web-ui/routes/universe/UniverseDeliveries.tsx","../../../../../../src/core/universe/graph-query.ts","../../../../../../src/web-ui/routes/universe/UniverseGraph.module.css","../../../../../../src/web-ui/routes/universe/UniverseGraph.tsx","../../../../../../src/web-ui/data/universe-readiness-queries.ts","../../../../../../src/web-ui/routes/universe/CampaignReadiness.module.css","../../../../../../src/web-ui/routes/universe/CampaignReadiness.tsx","../../../../../../src/web-ui/routes/universe/UniverseView.tsx"],"sourcesContent":["/**\n * hooks/useScrollRestore.ts — React port of the one thing app.js got right\n * for view state (captureMainViewState / restoreMainViewState at\n * app.js:692-718), adapted to survive both route changes AND the\n * background-refresh re-renders the data layer now does constantly.\n *\n * The old bug this fixes: app.js captured `window.scrollY`, but the actual\n * scroll container was `.main` (styles.css sets `body.live-shell {overflow:\n * hidden}`), so scroll position always read 0 and reset on every ~8-15s\n * poll. Here the caller passes the REAL scrolling element's ref directly —\n * there is no ambiguity about which element scrolls.\n *\n * State survives:\n * - scrollTop of the container\n * - which element (if any) had focus, keyed by a stable `data-focus-key`\n * attribute the view puts on focusable rows/controls\n * - open/closed state of any `<details data-state-key>` in the subtree\n *\n * Keyed by `routeKey` (typically the route pathname) so switching views and\n * coming back restores each view's own scroll position independently.\n */\nimport { useEffect, useLayoutEffect, useRef, type RefObject } from 'react';\n\ninterface ViewState {\n scrollTop: number;\n focusKey: string | null;\n details: Map<string, boolean>;\n}\n\nconst stateByKey = new Map<string, ViewState>();\n\nfunction capture(container: HTMLElement): ViewState {\n const active = document.activeElement;\n const focusKey =\n active instanceof HTMLElement && container.contains(active)\n ? active.getAttribute('data-focus-key')\n : null;\n const details = new Map<string, boolean>();\n container.querySelectorAll('details[data-state-key]').forEach((node) => {\n const key = node.getAttribute('data-state-key');\n if (key) details.set(key, (node as HTMLDetailsElement).open);\n });\n return { scrollTop: container.scrollTop, focusKey, details };\n}\n\nfunction restore(container: HTMLElement, saved: ViewState): void {\n container.querySelectorAll('details[data-state-key]').forEach((node) => {\n const key = node.getAttribute('data-state-key');\n if (key && saved.details.has(key)) (node as HTMLDetailsElement).open = saved.details.get(key)!;\n });\n container.scrollTop = saved.scrollTop;\n if (!saved.focusKey) return;\n const target = container.querySelector<HTMLElement>(`[data-focus-key=\"${CSS.escape(saved.focusKey)}\"]`);\n if (!target) return;\n try {\n target.focus({ preventScroll: true });\n } catch {\n target.focus();\n }\n container.scrollTop = saved.scrollTop;\n}\n\n/**\n * Attach to the scrolling container. Call `saveNow()` before any render\n * that's about to replace the subtree wholesale (rare in React, but\n * available for parity with the old imperative call sites); normally you\n * don't need to call anything — mount/unmount and periodic capture on\n * scroll/blur handle it.\n */\nexport function useScrollRestore(routeKey: string, containerRef: RefObject<HTMLElement | null>) {\n const routeKeyRef = useRef(routeKey);\n routeKeyRef.current = routeKey;\n\n // Restore synchronously before paint so there's no visible jump.\n useLayoutEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const saved = stateByKey.get(routeKey);\n if (saved) restore(el, saved);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- deliberately re-runs only on routeKey; the ref itself is stable for the shell's lifetime.\n }, [routeKey]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n let raf = 0;\n function onScroll() {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n if (el) stateByKey.set(routeKeyRef.current, capture(el));\n });\n }\n el.addEventListener('scroll', onScroll, { passive: true });\n document.addEventListener('focusout', onScroll);\n document.addEventListener('toggle', onScroll, true);\n\n return () => {\n cancelAnimationFrame(raf);\n el.removeEventListener('scroll', onScroll);\n document.removeEventListener('focusout', onScroll);\n document.removeEventListener('toggle', onScroll, true);\n // Final capture on unmount so a same-tick route swap doesn't lose the\n // last scroll position (scroll events can be throttled by the\n // browser right before teardown). Uses the `el` captured when this\n // effect was set up, not containerRef.current — the ref may already\n // point elsewhere (or be null) by the time cleanup runs.\n stateByKey.set(routeKeyRef.current, capture(el));\n };\n }, [containerRef]);\n}\n",".view { max-width: 1600px; min-width: 0; display: flex; flex-direction: column; gap: var(--space-6); }\n.view h1, .view h2, .view h3, .view p, .view dl, .view dd { margin: 0; }\n.view h1 { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-3xl-size); line-height: var(--text-3xl-line); letter-spacing: -.045em; font-weight: var(--font-weight-semibold); }\n.view h2 { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-lg-size); line-height: var(--text-lg-line); letter-spacing: -.02em; font-weight: var(--font-weight-semibold); }\n.view h3 { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-md-size); line-height: var(--text-md-line); }\n.view p { max-width: 78ch; color: var(--text-secondary); line-height: var(--text-base-line); }\n.view button, .view select, .view summary { cursor: pointer; }\n.view button:focus-visible, .view select:focus-visible, .view summary:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 3px; }\n.header, .sectionHeading { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--space-5); }\n.header p { margin-top: var(--space-2); }\n.actions { display: flex; align-items: flex-end; gap: var(--space-3); }\n.refresh, .selectLabel select { min-height: 36px; border: 1px solid var(--border-default); border-radius: var(--radius-sm); padding: var(--space-2) var(--space-3); background: var(--bg-surface); color: var(--text-primary); font: inherit; }\n.refresh:hover { background: var(--bg-hover); }\n.refresh:disabled { cursor: wait; color: var(--text-disabled); }\n.selectLabel { display: flex; flex-direction: column; gap: var(--space-1); color: var(--text-secondary); font-size: var(--text-xs-size); }\n.selectLabel select { max-width: 280px; font-size: var(--text-sm-size); }\n.freshness { min-height: 18px; display: flex; gap: var(--space-4); flex-wrap: wrap; color: var(--text-tertiary); font-size: var(--text-xs-size); margin-top: calc(-1 * var(--space-3)); }\n.objective { border-left: 3px solid var(--text-link); padding: var(--space-5); display: flex; flex-direction: column; gap: var(--space-4); background: var(--bg-surface); border-radius: 0 var(--radius-md) var(--radius-md) 0; }\n.objective h2 { font-size: var(--text-xl-size); line-height: var(--text-xl-line); }\n.objectiveFacts { display: flex; flex-wrap: wrap; gap: var(--space-3) var(--space-8); }\n.objectiveFacts dt, .measurements dt, .resources dt, .artifact dt { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.objectiveFacts dd { margin-top: var(--space-1); font-size: var(--text-sm-size); }\n.archive, .comparison { border: 1px solid var(--border-default); border-radius: var(--radius-md); background: var(--bg-surface); overflow: hidden; }\n.campaign { border: 1px solid var(--border-strong); border-radius: var(--radius-lg); background: var(--bg-surface); min-width: 0; overflow: hidden; }\n.campaignBody { display: flex; flex-direction: column; gap: var(--space-4); padding: 0 var(--space-5) var(--space-5); }\n.campaignHeading { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); overflow-wrap: anywhere; }\n.campaignFacts { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--space-4); padding-block: var(--space-4); border-block: 1px solid var(--border-subtle); }\n.campaignFacts dt { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.campaignFacts dd { margin-top: var(--space-1); font-size: var(--text-sm-size); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }\n.view .campaignNote, .campaignBody > p { font-size: var(--text-xs-size); }\n.campaignBody .command { margin-top: 0; }\n.delivery { border-top: 1px solid var(--border-subtle); padding-top: var(--space-3); font-size: var(--text-sm-size); }\n.delivery summary { display: flex; align-items: baseline; gap: var(--space-3); flex-wrap: wrap; overflow-wrap: anywhere; }\n.delivery summary::before { content: '+'; color: var(--text-link); }\n.delivery[open] summary::before { content: '−'; }\n.delivery summary span { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.deliveryFacts { display: grid; gap: var(--space-3); padding: var(--space-4) 0; }\n.deliveryFacts dt { color: var(--text-tertiary); font-size: var(--text-xs-size); }\n.deliveryFacts dd { overflow-wrap: anywhere; margin-top: var(--space-1); }\n.sectionHeading { padding: var(--space-5); }\n.sectionHeading p { margin-top: var(--space-1); font-size: var(--text-sm-size); }\n.archiveCount { color: var(--text-secondary); font-size: var(--text-xs-size); white-space: nowrap; padding-top: var(--space-1); }\n.tableScroll { overflow-x: auto; }\n.archiveTable { width: 100%; border-collapse: collapse; text-align: left; font-variant-numeric: tabular-nums; }\n.archiveTable thead { color: var(--text-secondary); font-size: var(--text-xs-size); background: var(--bg-canvas); }\n.archiveTable th, .archiveTable td { padding: var(--space-3) var(--space-5); border-top: 1px solid var(--border-subtle); }\n.archiveTable th { font-weight: var(--font-weight-medium); }\n.archiveTable tbody tr[data-selected] { background: var(--bg-selected); }\n.archiveTable td { font-size: var(--text-sm-size); }\n.nicheFilled, .nicheEmpty { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: var(--space-3); border: 1px solid var(--status-success-solid); }\n.nicheFilled { background: var(--status-success-solid); }\n.nicheEmpty { border-color: var(--border-strong); }\n.eliteButton { padding: var(--space-1) 0; color: var(--text-link); background: none; border: 0; font: inherit; text-align: left; text-decoration: underline; text-underline-offset: 3px; }\n.muted { color: var(--text-tertiary); }\n.runMeta { display: flex; align-items: center; gap: var(--space-4); flex-wrap: wrap; padding: 0 var(--space-5) var(--space-4); font-size: var(--text-xs-size); color: var(--text-secondary); }\n.comparisonBody { display: grid; grid-template-columns: minmax(210px, 0.8fr) minmax(0, 2fr); border-top: 1px solid var(--border-default); }\n.trialList { border-right: 1px solid var(--border-default); display: flex; flex-direction: column; align-self: stretch; background: var(--bg-canvas); }\n.trialButton { display: flex; flex-direction: column; gap: var(--space-2); text-align: left; border: 0; border-bottom: 1px solid var(--border-default); border-left: 3px solid transparent; padding: var(--space-4); background: transparent; color: var(--text-primary); font: inherit; }\n.trialButton:hover { background: var(--bg-hover); }\n.trialButton[aria-pressed=\"true\"] { background: var(--bg-selected); border-left-color: var(--accent-500); }\n.trialTitle, .trialSubline { display: flex; justify-content: space-between; gap: var(--space-3); overflow-wrap: anywhere; }\n.trialTitle { font-family: var(--font-display, var(--font-ui)); font-weight: var(--font-weight-medium); }\n.trialTitle > span { font-variant-numeric: tabular-nums; }\n.trialSubline { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.trialDetail { padding: var(--space-5); min-width: 0; display: flex; flex-direction: column; gap: var(--space-4); }\n.detailHeading { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); }\n.hypothesis { font-size: var(--text-sm-size); }\n.lineage { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-3); padding: var(--space-3) 0; font-size: var(--text-sm-size); border-top: 1px solid var(--border-subtle); border-bottom: 1px solid var(--border-subtle); overflow-wrap: anywhere; }\n.generation { margin-left: auto; color: var(--text-tertiary); font-size: var(--text-xs-size); }\n.reason { font-size: var(--text-base-size); }\n.view .currentElite { margin-top: calc(-1 * var(--space-2)); color: var(--status-success-fg); font-size: var(--text-xs-size); }\n.measurements { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--space-4); }\n.measurements dd { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-xl-size); line-height: var(--text-xl-line); font-variant-numeric: tabular-nums; margin-top: var(--space-1); overflow-wrap: anywhere; }\n.generationEvidence { display: flex; flex-direction: column; gap: var(--space-3); padding-top: var(--space-4); border-top: 1px solid var(--border-subtle); }\n.generationEvidence h4 { margin: 0; font-size: var(--text-sm-size); font-weight: var(--font-weight-semibold); }\n.generationEvidence .measurements dd { font-size: var(--text-sm-size); }\n.generationEvidence p { font-size: var(--text-xs-size); }\n.diagnosticCodes { display: flex; flex-direction: column; gap: var(--space-2); font-size: var(--text-sm-size); }\n.diagnosticCodes ul { margin: 0; padding-left: var(--space-5); }\n.diagnosticCodes p { font-size: var(--text-xs-size); }\n.artifact { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.artifact summary { width: fit-content; padding: var(--space-1) 0; }\n.artifact dl { display: flex; flex-direction: column; gap: var(--space-3); padding-top: var(--space-3); }\n.artifact dd { overflow-wrap: anywhere; }\n.artifact pre, .command { overflow-x: auto; white-space: pre-wrap; overflow-wrap: anywhere; background: var(--bg-code); padding: var(--space-4); border-radius: var(--radius-sm); font-family: var(--font-mono); font-size: var(--text-xs-size); line-height: var(--text-base-line); margin: var(--space-3) 0 0; }\n.notice { border: 1px solid var(--status-warning-solid); border-radius: var(--radius-md); background: var(--status-warning-bg); padding: var(--space-4); display: flex; flex-direction: column; gap: var(--space-2); }\n.notice p { color: var(--text-primary); font-size: var(--text-sm-size); overflow-wrap: anywhere; }\n.running { display: flex; align-items: center; gap: var(--space-3); font-size: var(--text-sm-size); }\n.view .failure { color: var(--status-danger-fg); overflow-wrap: anywhere; padding: 0 var(--space-5) var(--space-3); }\n.trialDetail .failure { padding: 0; }\n.failureEvidence { margin: 0; max-height: 240px; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; padding: var(--space-3); border-radius: var(--radius-sm); background: var(--status-danger-bg); color: var(--status-danger-fg); font-family: var(--font-mono); font-size: var(--text-xs-size); line-height: var(--text-base-line); }\n.empty { border: 1px dashed var(--border-strong); border-radius: var(--radius-lg); padding: var(--space-8); display: flex; flex-direction: column; gap: var(--space-3); background: var(--bg-surface); }\n.empty .command { max-width: 720px; margin: 0; }\n.empty details { color: var(--text-secondary); font-size: var(--text-sm-size); margin-top: var(--space-2); }\n.empty details .command { margin-top: var(--space-3); }\n.noTrials { padding: var(--space-5); }\n.resources { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-1) 0 var(--space-5); }\n.resources h2 { font-size: var(--text-sm-size); }\n.resources dl { display: flex; flex-wrap: wrap; gap: var(--space-5) var(--space-10); }\n.resources dd { font-size: var(--text-base-size); margin-top: var(--space-1); font-variant-numeric: tabular-nums; }\n.resources p { color: var(--text-tertiary); font-size: var(--text-xs-size); }\n@media (max-width: 900px) { .header, .sectionHeading { flex-wrap: wrap; } .comparisonBody { grid-template-columns: minmax(180px, 0.8fr) minmax(0, 1.4fr); } }\n@media (max-width: 600px) {\n .view h1 { font-size: var(--text-2xl-size); line-height: var(--text-2xl-line); }\n .view { gap: var(--space-4); }\n .actions { width: 100%; justify-content: space-between; }\n .objective { padding-left: var(--space-3); }\n .comparisonBody { display: flex; flex-direction: column; }\n .trialList { border-right: 0; border-bottom: 1px solid var(--border-default); max-height: 240px; overflow-y: auto; }\n .sectionHeading, .trialDetail { padding: var(--space-4); }\n .campaignBody { padding-right: var(--space-4); padding-left: var(--space-4); }\n .empty { padding: var(--space-5); }\n .running { align-items: flex-start; }\n .archiveTable th, .archiveTable td { padding: var(--space-3); }\n .archiveTable th:first-child { min-width: 120px; }\n .archiveTable td { min-width: 100px; }\n}\n","import { createContext, useCallback, useContext } from 'react';\n\n/** Absent in the ordinary dashboard; scoped consoles obtain this after auth. */\nexport const UniverseRootContext = createContext<string | null>(null);\n\nexport function quoteShellArgument(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nexport function withUniverseRoot(command: string, root: string | null): string {\n if (root === null) return command;\n return command.split('\\n').map((line) => `${line} --root ${quoteShellArgument(root)}`).join('\\n');\n}\n\n/** Commands are display-only. No browser action invokes a process. */\nexport function useUniverseCommand(): (command: string) => string {\n const root = useContext(UniverseRootContext);\n return useCallback((command: string) => withUniverseRoot(command, root), [root]);\n}\n","import type { UniverseOverview, UniverseSummary } from '../../data/api-types.js';\nimport styles from './UniverseView.module.css';\nimport { quoteShellArgument as quote, useUniverseCommand } from './UniverseScope.js';\n\ntype DeliveryReport = NonNullable<UniverseOverview['deliveryReports']>[number];\n\n// The authenticated API abbreviates this user's home. A quoted tilde does not\n// expand in the shell, so keep the home expansion separate from the path data.\nconst repoArgument = (value: string): string => value.startsWith('~/') ? `\"$HOME\"/${quote(value.slice(2))}` : quote(value);\nconst visibleDigest = (value: string): string => value === '[REDACTED]' ? 'Hidden by the console privacy filter' : value;\n\nexport function UniverseDeliveries({ summary, report, onInspectTrial }: {\n summary: UniverseSummary;\n report?: DeliveryReport;\n onInspectTrial: (runId: string, trialId: string) => void;\n}) {\n const verified = report?.sourceState === 'healthy';\n const command = useUniverseCommand();\n const degraded = report?.sourceState === 'degraded';\n const deliveries = report?.deliveries ?? [];\n return (\n <section className={styles.archive} aria-label=\"Repository delivery\">\n <div className={styles.sectionHeading}>\n <div><h2>Repository delivery</h2><p>Turn a retained artifact into an exact local Git branch. Your current checkout stays untouched.</p></div>\n </div>\n <div className={styles.campaignBody}>\n {degraded ? <div className={styles.notice} role=\"status\"><strong>Delivery evidence could not be verified.</strong><p>{report.reasons.join('; ') || 'Refresh after restoring the recorded repository and receipt.'}</p></div> : null}\n {deliveries.length ? deliveries.map((delivery) => (\n <details key={delivery.id} className={styles.delivery}>\n <summary>\n <code>{delivery.branch}</code>\n <span>{!verified ? `Unverified record (${delivery.status})` : delivery.status === 'delivered' ? 'Local branch verified' : delivery.status === 'unchanged' ? 'No change; no branch created' : 'Pending; not confirmed delivered'}</span>\n </summary>\n <dl className={styles.deliveryFacts}>\n <div><dt>Repository</dt><dd><code>{delivery.repo}</code></dd></div>\n <div><dt>Commit</dt><dd><code>{delivery.commit}</code></dd></div>\n <div><dt>Pinned base</dt><dd><code>{delivery.baseCommit}</code></dd></div>\n <div><dt>Artifact digest</dt><dd><code>{visibleDigest(delivery.artifactDigest)}</code></dd></div>\n <div><dt>Comparator digest</dt><dd><code>{visibleDigest(delivery.comparatorDigest)}</code></dd></div>\n <div><dt>Changed files</dt><dd>{delivery.changedFiles.length ? delivery.changedFiles.map((path) => <code key={path}>{path}<br /></code>) : 'None'}</dd></div>\n </dl>\n {summary.runs.some((run) => run.id === delivery.runId && run.trials.some((trial) => trial.id === delivery.trialId)) ?\n <button type=\"button\" className={styles.eliteButton} onClick={() => onInspectTrial(delivery.runId, delivery.trialId)}>Inspect source trial</button> :\n <p>Source trial unavailable in the current history.</p>}\n {verified && delivery.status === 'delivered' ? <pre className={styles.command}><code>{`git -C ${repoArgument(delivery.repo)} show --stat ${quote(delivery.commit)}`}</code></pre> : null}\n {delivery.artifactDigest === '[REDACTED]' || delivery.comparatorDigest === '[REDACTED]' ?\n <p>Read exact identities locally with <code>{command(`ashlr universe deliveries ${quote(summary.manifest.id)} --json`)}</code>.</p> : null}\n </details>\n )) : <p>{degraded ? 'No delivery can be confirmed from this read.' : 'No local branches delivered yet.'}</p>}\n {summary.sourceState === 'healthy' && !degraded && summary.elites.length ? (\n <details className={styles.artifact}>\n <summary>Deliver a retained artifact from your terminal</summary>\n <p>Choose a new branch name. Each command writes only a new local branch in <code>{summary.manifest.seed.repo}</code>; it does not switch branches, merge, or push.</p>\n {summary.elites.map((elite) => <div key={elite.trialId}>\n <p>{elite.niche}: {elite.variantId}</p>\n <pre className={styles.command}><code>{command(`ashlr universe deliver ${quote(summary.manifest.id)} --trial ${quote(elite.trialId)} --branch ${quote(`codex/universe-${summary.manifest.id}-${elite.trialId.slice(0, 8)}`)} --json`)}</code></pre>\n </div>)}\n </details>\n ) : null}\n <p>Verification binds the branch to the recorded evaluator result. It is not a fresh evaluation, a merge, or a production deployment. Refresh to inspect delivery changes made in your terminal.</p>\n </div>\n </section>\n );\n}\n","import type { UniverseGraph, UniverseGraphEdge, UniverseGraphTraversal } from './graph-types.js';\n\nexport const MAX_UNIVERSE_GRAPH_DEPTH = 64;\nconst MAX_QUERY_NODES = 25_000;\nconst MAX_QUERY_EDGES = 100_000;\n\n/** Browser-safe bounded breadth-first traversal, including the focus node. */\nexport function traverseUniverseGraph(graph: UniverseGraph, options: {\n nodeId: string; direction: 'ancestors' | 'descendants'; maxDepth?: number;\n}): UniverseGraphTraversal {\n const result: UniverseGraphTraversal = { nodeIds: [], edgeIds: [], complete: true, issues: [] };\n const issue = (code: string, message: string): void => {\n result.complete = false;\n result.issues.push({ code, message, nodeIds: [] });\n };\n const depth = options.maxDepth ?? MAX_UNIVERSE_GRAPH_DEPTH;\n if (!Number.isSafeInteger(depth) || depth < 1 || depth > MAX_UNIVERSE_GRAPH_DEPTH ||\n !['ancestors', 'descendants'].includes(options.direction)) {\n issue('invalid-query', 'Traversal requires a direction and depth from 1 to 64.'); return result;\n }\n if (graph.nodes.length > MAX_QUERY_NODES || graph.edges.length > MAX_QUERY_EDGES) {\n issue('graph-limit', 'Graph exceeds the traversal envelope.'); return result;\n }\n const nodes = new Set(graph.nodes.map((node) => node.id));\n if (nodes.size !== graph.nodes.length) { issue('duplicate-node', 'Graph contains duplicated node identities.'); return result; }\n if (!nodes.has(options.nodeId)) { issue('invalid-node', 'The requested graph node is unavailable.'); return result; }\n const adjacency = new Map<string, UniverseGraphEdge[]>();\n const forward = new Map<string, string[]>();\n const incoming = new Map([...nodes].map((id) => [id, 0]));\n const edgeIds = new Set<string>();\n for (const edge of graph.edges) {\n if (!nodes.has(edge.from) || !nodes.has(edge.to) || edgeIds.has(edge.id)) {\n issue('invalid-edge', 'Graph contains an unresolved or duplicated edge.'); return result;\n }\n edgeIds.add(edge.id);\n const targets = forward.get(edge.from) ?? [];\n targets.push(edge.to); forward.set(edge.from, targets);\n incoming.set(edge.to, incoming.get(edge.to)! + 1);\n const from = options.direction === 'ancestors' ? edge.to : edge.from;\n const list = adjacency.get(from) ?? [];\n list.push(edge); adjacency.set(from, list);\n }\n const ordered = [...incoming].filter(([, count]) => count === 0).map(([id]) => id);\n for (let index = 0; index < ordered.length; index++) for (const target of forward.get(ordered[index]!) ?? []) {\n incoming.set(target, incoming.get(target)! - 1);\n if (incoming.get(target) === 0) ordered.push(target);\n }\n if (ordered.length !== nodes.size) { issue('cycle', 'Graph contains a dependency cycle.'); return result; }\n const seen = new Set([options.nodeId]);\n let frontier = [options.nodeId];\n for (let level = 0; frontier.length && level < depth; level++) {\n const next: string[] = [];\n for (const id of frontier) {\n for (const edge of adjacency.get(id) ?? []) {\n const target = options.direction === 'ancestors' ? edge.from : edge.to;\n if (!seen.has(target)) { seen.add(target); next.push(target); }\n }\n }\n frontier = next;\n }\n if (frontier.some((id) => (adjacency.get(id) ?? []).some((edge) => !seen.has(options.direction === 'ancestors' ? edge.from : edge.to)))) {\n issue('depth-limit', 'Additional related nodes exist beyond the selected depth.');\n }\n if (!graph.complete || graph.sourceState !== 'healthy') issue('source-incomplete', 'Traversal uses incomplete or degraded source evidence.');\n result.nodeIds = [...seen].sort();\n // Return the induced graph, including cross-links between nodes discovered\n // at the exact depth boundary, not merely the breadth-first search tree.\n result.edgeIds = graph.edges.filter((edge) => seen.has(edge.from) && seen.has(edge.to)).map((edge) => edge.id).sort();\n return result;\n}\n",".section { min-width: 0; border: 1px solid var(--border-strong); border-radius: var(--radius-lg); background: var(--bg-surface); overflow: hidden; }\n.header { padding: var(--space-5); display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-4); }\n.header p { margin-top: var(--space-1); font-size: var(--text-sm-size); }\n.header h2 { font-family: var(--font-display, var(--font-ui)); letter-spacing: -.025em; }\n.button, .filters select { min-height: 36px; border: 1px solid var(--border-default); border-radius: var(--radius-sm); padding: var(--space-2) var(--space-3); background: var(--bg-surface); color: var(--text-primary); font: inherit; }\n.button { white-space: nowrap; }\n.button:hover { background: var(--bg-hover); }\n.button:disabled { color: var(--text-disabled); cursor: wait; }\n.section button:focus-visible, .section select:focus-visible, .section summary:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 3px; }\n.body { padding: 0 var(--space-5) var(--space-5); display: flex; flex-direction: column; gap: var(--space-4); min-width: 0; }\n.toolbar, .facts { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-3); }\n.facts { font-size: var(--text-xs-size); color: var(--text-secondary); gap: var(--space-2) var(--space-5); padding-block: var(--space-3); border-block: 1px solid var(--border-subtle); font-variant-numeric: tabular-nums; }\n.toolbar .button { margin-left: auto; }\n.notice { padding: var(--space-3); border-left: 3px solid var(--status-warning-solid); background: var(--status-warning-bg); font-size: var(--text-sm-size); }\n.filters { display: flex; flex-wrap: wrap; gap: var(--space-3); align-items: flex-end; padding: var(--space-3); border-radius: var(--radius-sm); background: var(--bg-canvas); }\n.filters label { display: flex; flex-direction: column; gap: var(--space-1); color: var(--text-secondary); font-size: var(--text-xs-size); }\n.filters select { max-width: 240px; font-size: var(--text-sm-size); }\n.note { font-size: var(--text-xs-size); }\n.diagram { overflow: auto; max-height: 460px; border: 1px solid var(--border-strong); border-radius: var(--radius-md); background: var(--bg-canvas); scrollbar-color: var(--border-strong) var(--bg-canvas); }\n.diagram svg { display: block; min-height: 220px; }\n.diagram [role='button'] { cursor: pointer; }\n.diagram [role='button']:focus-visible { outline: none; }\n.diagram [role='button']:focus-visible rect { stroke: var(--border-focus); stroke-width: 3; stroke-dasharray: 4 2; }\n.diagram [role='button']:hover rect { stroke: var(--text-link); stroke-width: 2; }\n.edge { stroke: var(--border-strong); stroke-width: 1.5; }\n.feedback { stroke: var(--text-link); stroke-dasharray: 5 4; }\n.arrow { fill: var(--border-strong); }\n.nodeBox { fill: var(--bg-surface-raised); stroke: var(--border-strong); stroke-width: 1.25; }\n.selectedBox { fill: var(--bg-selected); stroke: var(--text-link); stroke-width: 2.5; }\n.nodeLabel { fill: var(--text-primary); font-family: var(--font-display, var(--font-ui)); font-size: var(--text-xs-size); font-weight: var(--font-weight-semibold); }\n.nodeKind, .columnLabel { fill: var(--text-secondary); font-size: var(--text-xs-size); }\n.nodeKind { letter-spacing: -.02em; }\n.columnLabel { font-family: var(--font-display, var(--font-ui)); font-weight: var(--font-weight-medium); }\n/* Shape distinguishes entity kinds; color remains reserved for selection/evidence. */\n.diagram [data-kind='universe'] rect, .diagram [data-kind='campaign'] rect { rx: 14px; }\n.diagram [data-kind='seed'] rect, .diagram [data-kind='artifact'] rect { rx: 1px; }\n.diagram [data-kind='comparator'] rect { stroke-dasharray: 6 3; }\n.diagram [data-kind='delivery'] rect { rx: 1px; stroke-width: 2.5; }\n.diagram [data-kind='reservation'] rect { stroke-dasharray: 2 3; }\n.legend { display: flex; flex-wrap: wrap; gap: var(--space-4); font-size: var(--text-xs-size); color: var(--text-secondary); }\n.legend span::before { content: ''; display: inline-block; width: 24px; margin-right: var(--space-2); vertical-align: middle; border-top: 2px solid var(--border-strong); }\n.legend .feedbackLegend::before { border-top-style: dashed; border-color: var(--text-link); }\n.workspace { display: grid; grid-template-columns: minmax(180px, .8fr) minmax(0, 1.7fr); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); overflow: hidden; }\n.nodeList { display: flex; flex-direction: column; max-height: 480px; overflow: auto; border-right: 1px solid var(--border-subtle); padding: var(--space-2); background: var(--bg-canvas); }\n.nodeButton { display: flex; flex-direction: column; gap: var(--space-1); padding: var(--space-3); border: 0; border-left: 3px solid transparent; text-align: left; background: transparent; color: var(--text-primary); font: inherit; font-size: var(--text-sm-size); overflow-wrap: anywhere; }\n.nodeButton:hover { background: var(--bg-hover); }\n.nodeButton[aria-pressed='true'] { border-left-color: var(--accent-500); background: var(--bg-selected); }\n.nodeButton small { color: var(--text-secondary); font-size: var(--text-xs-size); }\n.nodeButton > span { font-family: var(--font-display, var(--font-ui)); font-weight: var(--font-weight-medium); }\n.nodeButton[data-kind='campaign'], .nodeButton[data-kind='universe'] { border-radius: var(--radius-md); }\n.inspector { min-width: 0; padding: var(--space-5); display: flex; flex-direction: column; gap: var(--space-4); }\n.inspector h3 { font-family: var(--font-display, var(--font-ui)); font-size: var(--text-xl-size); line-height: var(--text-xl-line); letter-spacing: -.025em; overflow-wrap: anywhere; }\n.properties { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--space-3); }\n.properties dt { font-size: var(--text-xs-size); color: var(--text-secondary); }\n.properties dd { margin-top: var(--space-1); font-size: var(--text-sm-size); overflow-wrap: anywhere; }\n.relations { display: flex; flex-direction: column; gap: var(--space-2); padding-left: var(--space-4); margin: 0; font-size: var(--text-sm-size); }\n.link { background: transparent; border: 0; padding: 0; color: var(--text-link); text-decoration: underline; text-underline-offset: 3px; text-align: left; font: inherit; overflow-wrap: anywhere; }\n.findings { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-4); border-inline-start: 3px solid var(--border-strong); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; background: var(--bg-canvas); }\n.findings ul { margin: 0; padding-left: var(--space-4); display: flex; flex-direction: column; gap: var(--space-3); }\n.findings p, .findings li { font-size: var(--text-sm-size); }\n.findingLinks { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-top: var(--space-1); }\n.exact { overflow-wrap: anywhere; font-size: var(--text-xs-size); }\n.pagination { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-3); font-size: var(--text-xs-size); }\n@media (max-width: 600px) {\n .header { flex-wrap: wrap; padding: var(--space-4); }\n .body { padding-right: var(--space-4); padding-left: var(--space-4); }\n .workspace { display: flex; flex-direction: column; }\n .nodeList { max-height: 220px; border-right: 0; border-bottom: 1px solid var(--border-subtle); padding-right: 0; }\n .inspector { padding: var(--space-4); }\n .filters select { max-width: 190px; }\n .diagram { max-height: 360px; }\n}\n","import { useId, useMemo, useState } from 'react';\nimport type { UniverseGraph as GraphReport, UniverseGraphNode, UniverseGraphEdge } from '../../../core/universe/graph-types.js';\nimport { traverseUniverseGraph } from '../../../core/universe/graph-query.js';\nimport { useQuery, useRefetch } from '../../data/hooks.js';\nimport { useUniverseCommand } from './UniverseScope.js';\nimport { universeGraphQuery } from '../../data/queries.js';\nimport styles from './UniverseGraph.module.css';\n\nconst DISPLAY_LIMIT = 60;\nconst DISPLAY_EDGE_LIMIT = 240;\ntype InspectTrial = (runId: string, trialId: string) => boolean;\nconst KIND_LABELS: Record<UniverseGraphNode['kind'], string> = {\n universe: 'Universe', seed: 'Seed', comparator: 'Evaluator', campaign: 'Campaign',\n reservation: 'Reservation', run: 'Run', trial: 'Trial', artifact: 'Artifact', delivery: 'Delivery',\n};\nconst EDGE_LABELS: Record<UniverseGraphEdge['kind'], string> = {\n contains: 'Contains', 'seed-parent': 'Seed parent', parent: 'Candidate parent', feedback: 'Evaluator feedback',\n evaluates: 'Evaluates', produced: 'Produced artifact', reserved: 'Reserved work',\n 'executed-as': 'Executed as', 'delivered-as': 'Delivered as',\n};\nconst evidenceLabel = (node: UniverseGraphNode): string => node.evidence === 'verified-local-delivery'\n ? 'Local delivery checked' : node.evidence === 'recorded' ? 'Recorded evidence'\n : node.evidence === 'pending' ? 'Pending evidence' : 'Evidence unavailable';\nconst short = (value: string, length: number): string => value.length > length ? `${value.slice(0, length - 1)}…` : value;\n\n/** Bounded, deterministic columns; the full text node list remains usable without the SVG. */\nfunction GraphDiagram({ nodes, edges, selectedId, select }: {\n nodes: UniverseGraphNode[]; edges: UniverseGraphEdge[]; selectedId?: string;\n select: (id: string) => void;\n}) {\n const marker = `universe-arrow-${useId().replaceAll(':', '')}`;\n const columns = [...new Set(nodes.map((node) => node.generation ?? 0))].sort((a, b) => a - b);\n const positions = new Map<string, { x: number; y: number }>();\n let rows = 1;\n columns.forEach((generation, column) => {\n const members = nodes.filter((node) => (node.generation ?? 0) === generation);\n rows = Math.max(rows, members.length);\n members.forEach((node, row) => positions.set(node.id, { x: 24 + column * 225, y: 32 + row * 76 }));\n });\n return (\n <div className={styles.diagram}>\n <svg width={Math.max(260, columns.length * 225 + 24)} height={rows * 76 + 40} role=\"group\" aria-label=\"Evidence relationship diagram\">\n <defs><marker id={marker} markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"3\" orient=\"auto\"><path d=\"M0,0 L0,6 L8,3 z\" className={styles.arrow} /></marker></defs>\n {columns.map((generation, column) => <text key={generation} x={24 + column * 225} y={18} className={styles.columnLabel}>{generation === 0 ? 'Experiment context' : `Generation ${generation}`}</text>)}\n {edges.map((edge) => {\n const from = positions.get(edge.from); const to = positions.get(edge.to);\n if (!from || !to) return null;\n const sameColumn = from.x === to.x;\n const startX = from.x + 180; const endX = sameColumn ? to.x + 180 : to.x;\n const mid = sameColumn ? startX + 28 : (startX + endX) / 2;\n return <path key={edge.id} d={`M ${startX} ${from.y + 27} C ${mid} ${from.y + 27}, ${mid} ${to.y + 27}, ${endX} ${to.y + 27}`} fill=\"none\" markerEnd={`url(#${marker})`} className={`${styles.edge} ${edge.kind === 'feedback' ? styles.feedback : ''}`}><title>{EDGE_LABELS[edge.kind]}</title></path>;\n })}\n {nodes.map((node) => {\n const position = positions.get(node.id)!;\n return <g key={node.id} data-kind={node.kind} transform={`translate(${position.x},${position.y})`} role=\"button\" tabIndex={0} aria-label={`Select ${KIND_LABELS[node.kind].toLowerCase()}: ${node.label}`} aria-pressed={node.id === selectedId}\n onClick={() => select(node.id)} onKeyDown={(event) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); select(node.id); } }}>\n <title>{`${node.label}: ${node.state}. ${evidenceLabel(node)}`}</title>\n <rect width=\"180\" height=\"54\" rx=\"5\" className={node.id === selectedId ? styles.selectedBox : styles.nodeBox} />\n <text x=\"10\" y=\"20\" className={styles.nodeLabel}>{short(node.label, 24)}</text>\n <text x=\"10\" y=\"39\" className={styles.nodeKind}>{KIND_LABELS[node.kind]} · {short(node.state, 18)}</text>\n </g>;\n })}\n </svg>\n </div>\n );\n}\n\nfunction NodeInspector({ node, graph, byId, select, onInspectTrial }: {\n node: UniverseGraphNode; graph: GraphReport; byId: Map<string, UniverseGraphNode>;\n select: (id: string) => void; onInspectTrial: InspectTrial;\n}) {\n const [unavailableTrial, setUnavailableTrial] = useState<string | null>(null);\n const command = useUniverseCommand();\n const relationships = graph.edges.filter((edge) => edge.from === node.id || edge.to === node.id);\n return <section className={styles.inspector} aria-label=\"Selected graph evidence\">\n <h3>{node.label}</h3>\n <dl className={styles.properties}>\n <div><dt>Entity</dt><dd>{KIND_LABELS[node.kind]}</dd></div>\n <div><dt>State</dt><dd>{node.state}</dd></div>\n <div><dt>Evidence</dt><dd>{evidenceLabel(node)}</dd></div>\n {node.generation !== undefined ? <div><dt>Generation</dt><dd>{node.generation}</dd></div> : null}\n {node.niche ? <div><dt>Niche</dt><dd>{node.niche}</dd></div> : null}\n {node.score !== undefined ? <div><dt>Evaluator score</dt><dd>{node.score === null ? 'Unavailable' : node.score}</dd></div> : null}\n {node.currentElite ? <div><dt>Archive</dt><dd>Current local elite</dd></div> : null}\n {node.admitted && !node.currentElite ? <div><dt>Archive</dt><dd>Historical admission; not the current elite</dd></div> : null}\n </dl>\n <p className={styles.note}>The graph observes saved evidence. It does not rerun evaluation or establish accepted production value.</p>\n {node.runId && node.trialId ? <button type=\"button\" className={styles.link} onClick={() => setUnavailableTrial(onInspectTrial(node.runId!, node.trialId!) ? null : node.id)}>Inspect exact trial evidence</button> : null}\n {unavailableTrial === node.id ? <p className={styles.notice} role=\"status\">This exact trial is not present in the current overview. Refresh Universe before inspecting it; no other trial was selected.</p> : null}\n <h4>Direct relationships</h4>\n {relationships.length ? <ul className={styles.relations}>{relationships.slice(0, DISPLAY_LIMIT).map((edge) => {\n const incoming = edge.to === node.id;\n const other = byId.get(incoming ? edge.from : edge.to);\n return <li key={edge.id}>{EDGE_LABELS[edge.kind]} {incoming ? 'from' : 'to'}{' '}{other\n ? <button type=\"button\" className={styles.link} onClick={() => select(other.id)}>{other.label}</button>\n : <span>unavailable source</span>}</li>;\n })}</ul> : <p className={styles.note}>No direct relationships in this observation.</p>}\n {relationships.length > DISPLAY_LIMIT ? <p className={styles.note}>{relationships.length - DISPLAY_LIMIT} additional relationships omitted from this panel. Inspect the CLI graph for the full observation.</p> : null}\n <details className={styles.exact}><summary>Record identity</summary>\n <dl className={styles.properties}>\n <div><dt>Graph node</dt><dd><code>{node.id}</code></dd></div>\n {node.runId ? <div><dt>Run</dt><dd><code>{node.runId}</code></dd></div> : null}\n {node.trialId ? <div><dt>Trial</dt><dd><code>{node.trialId}</code></dd></div> : null}\n {node.variantId ? <div><dt>Variant</dt><dd><code>{node.variantId}</code></dd></div> : null}\n {node.campaignId ? <div><dt>Campaign</dt><dd><code>{node.campaignId}</code></dd></div> : null}\n {node.branch ? <div><dt>Local branch</dt><dd><code>{node.branch}</code></dd></div> : null}\n {node.commit ? <div><dt>Commit</dt><dd><code>{node.commit}</code></dd></div> : null}\n {node.manifestDigest ? <div><dt>Manifest digest</dt><dd><code>{node.manifestDigest === '[REDACTED]' ? 'Hidden by the console privacy filter' : node.manifestDigest}</code></dd></div> : null}\n {node.comparatorDigest ? <div><dt>Comparator digest</dt><dd><code>{node.comparatorDigest === '[REDACTED]' ? 'Hidden by the console privacy filter' : node.comparatorDigest}</code></dd></div> : null}\n {node.artifactDigest ? <div><dt>Artifact digest</dt><dd><code>{node.artifactDigest === '[REDACTED]' ? 'Hidden by the console privacy filter' : node.artifactDigest}</code></dd></div> : null}\n </dl>\n <p>Read exact local provenance with <code>{command(`ashlr universe graph ${graph.universeId} --json`)}</code>.</p>\n </details>\n </section>;\n}\n\nfunction GraphExplorer({ graph, onInspectTrial }: { graph: GraphReport; onInspectTrial: InspectTrial }) {\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [kind, setKind] = useState('all');\n const [niche, setNiche] = useState('all');\n const [direction, setDirection] = useState<'all' | 'ancestors' | 'descendants'>('all');\n const [depth, setDepth] = useState(2);\n const [requestedPage, setRequestedPage] = useState<number | null>(null);\n const byId = useMemo(() => new Map(graph.nodes.map((node) => [node.id, node])), [graph.nodes]);\n const selected = selectedId === null ? graph.nodes.find((node) => node.kind === 'trial' && node.currentElite) ?? graph.nodes.find((node) => node.kind === 'trial') ?? graph.nodes[0] : byId.get(selectedId);\n const traversal = useMemo(() => selected && direction !== 'all' ? traverseUniverseGraph(graph, { nodeId: selected.id, direction, maxDepth: depth }) : null, [graph, selected, direction, depth]);\n const traversedIds = useMemo(() => traversal ? new Set(traversal.nodeIds) : null, [traversal]);\n const matching = graph.nodes.filter((node) => (!traversedIds || traversedIds.has(node.id)) && (kind === 'all' || node.kind === kind) && (niche === 'all' || node.niche === niche));\n const pageCount = Math.max(1, Math.ceil(matching.length / DISPLAY_LIMIT));\n const selectedPage = Math.floor(Math.max(0, matching.findIndex((node) => node.id === selected?.id)) / DISPLAY_LIMIT);\n const page = Math.min(requestedPage ?? selectedPage, pageCount - 1);\n const nodes = matching.slice(page * DISPLAY_LIMIT, (page + 1) * DISPLAY_LIMIT);\n const visibleIds = new Set(nodes.map((node) => node.id));\n const edges = graph.edges.filter((edge) => visibleIds.has(edge.from) && visibleIds.has(edge.to));\n const select = (id: string) => { setSelectedId(id); setKind('all'); setNiche('all'); setRequestedPage(null); };\n const niches = [...new Set(graph.nodes.flatMap((node) => node.niche ? [node.niche] : []))].sort();\n return <>\n <div className={styles.facts}><span>Source: {graph.sourceState}</span><span>{graph.complete ? 'Source graph complete' : 'Source graph incomplete'}</span><span>{graph.counts.trials} trial records included</span><span>{graph.counts.verifiedDeliveries} checked local deliveries included</span></div>\n {!graph.complete || graph.sourceState === 'degraded' ? <p className={styles.notice} role=\"status\">Graph evidence is incomplete. Missing relationships are not proof that no work or delivery occurred.</p> : null}\n {graph.issues.length ? <details className={styles.note}><summary>Source issues ({graph.issues.length})</summary><ul>{graph.issues.map((issue, index) => <li key={`${issue.code}-${index}`}><code>{issue.code}</code>: {issue.message}</li>)}</ul></details> : null}\n {graph.findings.length ? <section className={styles.findings} aria-label=\"Graph observations\"><h3>Useful observations</h3><ul>{graph.findings.slice(0, DISPLAY_LIMIT).map((finding) => <li key={finding.id}>\n <strong>{finding.kind === 'repeated-output' ? 'Repeated artifact output' : 'Current elite without recorded delivery'}</strong>\n {finding.kind === 'repeated-output' ? <p>{finding.trialCount} trials share a recorded artifact digest. {finding.usageComplete ? `Reported generation tokens: ${finding.reportedTokens ?? 'unavailable'}.` : `Total generation tokens unavailable; recorded subtotal: ${finding.recordedTokens}.`}</p> : <p>No verified delivery is linked to this current local elite in the observation.</p>}\n <div className={styles.findingLinks}>{finding.nodeIds.slice(0, 8).map((id) => { const node = byId.get(id); return node ? <button type=\"button\" className={styles.link} key={id} onClick={() => select(id)}>Inspect {node.label}</button> : null; })}</div>\n {finding.nodeIds.length > 8 ? <p>{finding.nodeIds.length - 8} additional nodes in this group; inspect CLI JSON for all identities.</p> : null}\n </li>)}</ul><p>These are evidence patterns, not cost savings, automatic delivery instructions or proof of business value.</p>{graph.findings.length > DISPLAY_LIMIT ? <p>{graph.findings.length - DISPLAY_LIMIT} additional observations omitted from this panel.</p> : null}</section> : null}\n {graph.nodes.length ? <>\n <div className={styles.filters}>\n <label>Entity type<select value={kind} onChange={(event) => { setKind(event.target.value); setRequestedPage(null); }}><option value=\"all\">All entity types</option>{Object.entries(KIND_LABELS).map(([value, label]) => <option key={value} value={value}>{label}</option>)}</select></label>\n <label>Niche<select value={niche} onChange={(event) => { setNiche(event.target.value); setRequestedPage(null); }}><option value=\"all\">All niches</option>{niches.map((value) => <option key={value}>{value}</option>)}</select></label>\n <label>Trace from selection<select value={direction} onChange={(event) => { setDirection(event.target.value as typeof direction); setRequestedPage(null); }} disabled={!selected}><option value=\"all\">All nodes</option><option value=\"ancestors\">Ancestors</option><option value=\"descendants\">Descendants</option></select></label>\n <label>Traversal depth<select value={depth} onChange={(event) => { setDepth(Number(event.target.value)); setRequestedPage(null); }} disabled={direction === 'all'}>{[1, 2, 3, 4, 8, 16, 32, 64].map((value) => <option key={value}>{value}</option>)}</select></label>\n </div>\n <p className={styles.note} role=\"status\">Showing {nodes.length} of {matching.length} matching nodes ({graph.nodes.length} in source). {direction !== 'all' ? `Trace is bounded to ${depth} relationship hops. ` : ''}{matching.length > DISPLAY_LIMIT ? `Diagram shows at most ${DISPLAY_LIMIT} nodes per page; relationships crossing pages remain in the inspector. ` : ''}{traversal && !traversal.complete ? 'Traversal is incomplete; the depth bound or source evidence limits this trace.' : ''}</p>\n {pageCount > 1 ? <nav className={styles.pagination} aria-label=\"Graph node pages\"><button type=\"button\" className={styles.button} disabled={page === 0} onClick={() => setRequestedPage(page - 1)}>Previous node page</button><span>Page {page + 1} of {pageCount}</span><button type=\"button\" className={styles.button} disabled={page + 1 === pageCount} onClick={() => setRequestedPage(page + 1)}>Next node page</button></nav> : null}\n {selectedId !== null && !selected ? <p className={styles.notice} role=\"status\">The selected node is no longer present in the current graph. Select another recorded node; no substitute has been chosen.</p> : null}\n {nodes.length ? <><GraphDiagram nodes={nodes} edges={edges.slice(0, DISPLAY_EDGE_LIMIT)} selectedId={selected?.id} select={select} /><div className={styles.legend}><span>Recorded relationship</span><span className={styles.feedbackLegend}>Evaluator feedback (not candidate ancestry)</span></div>{edges.length > DISPLAY_EDGE_LIMIT ? <p className={styles.note}>Diagram shows {DISPLAY_EDGE_LIMIT} of {edges.length} relationships on this page. Select a node to inspect its direct relationships.</p> : null}</> : <p className={styles.notice}>No nodes match these filters. Broaden the entity type, niche or trace direction.</p>}\n <div className={styles.workspace}>\n <div className={styles.nodeList} role=\"group\" aria-label=\"Graph nodes\">{nodes.map((node) => <button type=\"button\" key={node.id} data-kind={node.kind} className={styles.nodeButton} aria-label={`Inspect ${KIND_LABELS[node.kind].toLowerCase()}: ${node.label}`} aria-pressed={node.id === selected?.id} onClick={() => setSelectedId(node.id)}><span>{node.label}</span><small>{KIND_LABELS[node.kind]} · {node.state}{node.generation !== undefined ? ` · generation ${node.generation}` : ''}</small></button>)}</div>\n {selected ? <NodeInspector node={selected} graph={graph} byId={byId} select={select} onInspectTrial={onInspectTrial} /> : null}\n </div>\n </> : <p>{graph.sourceState === 'missing' ? 'No recorded graph source is available for this universe.' : graph.complete ? 'This observation contains no graph nodes.' : 'Graph nodes could not be established from incomplete evidence.'}</p>}\n </>;\n}\n\nfunction LoadedGraph({ universeId, onInspectTrial }: { universeId: string; onInspectTrial: InspectTrial }) {\n const definition = useMemo(() => universeGraphQuery(universeId), [universeId]);\n const query = useQuery(definition);\n const refresh = useRefetch(definition);\n return <div className={styles.body}>\n <div className={styles.toolbar}><p className={styles.note}>{query.data ? `Observed ${query.data.sampledAt}${query.status === 'error' ? ' · Last successful read' : ''}` : 'Read-only graph observation; no work is started.'}</p><button type=\"button\" className={styles.button} onClick={refresh} disabled={query.status === 'loading' || query.status === 'refreshing'}>{query.status === 'refreshing' ? 'Refreshing graph…' : 'Refresh graph'}</button></div>\n {query.status === 'loading' ? <p role=\"status\">Loading graph evidence…</p> : null}\n {query.status === 'error' ? <p className={styles.notice} role=\"alert\">Graph records unavailable. {query.error?.message} Refresh graph to retry.{query.data ? ' The graph below is the last successful observation.' : ''}</p> : null}\n {query.data ? <GraphExplorer graph={query.data} onInspectTrial={onInspectTrial} /> : null}\n </div>;\n}\n\n/** Mounting this section does not fetch: only opening the inspector mounts its query. */\nexport function UniverseGraph({ universeId, onInspectTrial }: { universeId: string; onInspectTrial: InspectTrial }) {\n const [open, setOpen] = useState(false);\n const panelId = `universe-graph-${useId().replaceAll(':', '')}`;\n return <section className={styles.section} aria-label=\"Evidence graph\">\n <div className={styles.header}><div><h2>Evidence graph</h2><p>Trace candidate ancestry, evaluator feedback and local delivery back to recorded trials.</p></div><button type=\"button\" className={styles.button} aria-expanded={open} aria-controls={panelId} onClick={() => setOpen((value) => !value)}>{open ? 'Close graph' : 'Open graph'}</button></div>\n <div id={panelId}>{open ? <LoadedGraph universeId={universeId} onInspectTrial={onInspectTrial} /> : null}</div>\n </section>;\n}\n","import type { UniverseCampaignReadinessView } from '../../core/web/universe-console-types.js';\nimport { apiGet } from './client.js';\nimport type { QueryDef } from './queries.js';\n\nconst ID = /^[a-z0-9][a-z0-9_-]{0,63}$/;\nconst FIELDS = ['schemaVersion', 'readinessScope', 'campaignId', 'universeId', 'observedState', 'sourceState',\n 'disposition', 'reasonCode', 'resourceRuntimeRequired', 'sampledAt'];\nconst STATES = ['ready', 'running', 'pause-requested', 'stop-requested', 'paused', 'interrupted', 'completed', 'stopped', 'failed'];\nconst DISPOSITIONS: Record<UniverseCampaignReadinessView['disposition'], true> = {\n startable: true, owned: true, 'owner-held': true, 'resource-withheld': true, 'recovery-required': true,\n 'attention-required': true, 'budget-exhausted': true, terminal: true, unavailable: true,\n};\nconst REASONS: Record<UniverseCampaignReadinessView['reasonCode'], true> = {\n 'never-started': true, 'owner-active': true, 'pause-requested': true, 'stop-requested': true, 'owner-paused': true,\n 'owner-abandoned': true, 'run-incomplete': true, 'resource-withheld': true, 'resource-outcome-ambiguous': true,\n 'resource-attention-required': true, 'generation-attention-required': true, 'duration-budget-exhausted': true, 'generation-budget-exhausted': true,\n 'stagnation-budget-exhausted': true, 'request-budget-exhausted': true, 'reported-token-budget-exhausted': true,\n 'usage-unavailable': true, 'campaign-completed': true, 'campaign-stopped': true, 'campaign-failed': true,\n 'paused-unclassified': true, 'interrupted-unclassified': true, 'campaign-missing': true, 'evidence-degraded': true, 'snapshot-changed': true,\n 'seed-evaluation-unresolved': true, 'seed-evaluation-attention-required': true,\n};\n\n/** Reject mismatched identities and uncontracted/private fields before they reach the view. */\nexport function validateUniverseCampaignReadinessView(value: unknown, campaignId: string, universeId: string): UniverseCampaignReadinessView {\n const invalid = () => new Error('Recorded campaign check is unavailable.');\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw invalid();\n const report = value as Record<string, unknown>;\n if (Object.keys(report).length !== FIELDS.length || Object.keys(report).some((field) => !FIELDS.includes(field)) ||\n report.schemaVersion !== 1 || report.readinessScope !== 'recorded-campaign-evidence' || report.campaignId !== campaignId ||\n typeof report.sourceState !== 'string' || !['healthy', 'missing', 'degraded'].includes(report.sourceState) ||\n !(report.universeId === universeId || report.universeId === null && report.sourceState !== 'healthy') ||\n !(report.observedState === null && report.sourceState !== 'healthy' || typeof report.observedState === 'string' && STATES.includes(report.observedState)) ||\n typeof report.disposition !== 'string' || !Object.hasOwn(DISPOSITIONS, report.disposition) ||\n typeof report.reasonCode !== 'string' || !Object.hasOwn(REASONS, report.reasonCode) ||\n !(typeof report.resourceRuntimeRequired === 'boolean' || report.resourceRuntimeRequired === null && report.sourceState !== 'healthy') ||\n typeof report.sampledAt !== 'string' || !/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(report.sampledAt) ||\n !Number.isFinite(Date.parse(report.sampledAt)) || new Date(report.sampledAt).toISOString() !== report.sampledAt ||\n report.sourceState !== 'healthy' && (report.universeId !== null || report.observedState !== null ||\n report.resourceRuntimeRequired !== null || report.disposition !== 'unavailable')) throw invalid();\n return value as UniverseCampaignReadinessView;\n}\n\n/** On demand only: independent from the overview's polling and SSE invalidation keys. */\nexport function universeCampaignReadinessQuery(campaignId: string, universeId: string): QueryDef<UniverseCampaignReadinessView> {\n if (!ID.test(campaignId) || !ID.test(universeId)) throw new Error('Invalid recorded campaign check identity.');\n return {\n key: `universe-campaign-readiness:${universeId}:${campaignId}`,\n fetch: async (signal) => validateUniverseCampaignReadinessView(\n await apiGet<unknown>(`/api/universe/campaign-readiness?campaignId=${encodeURIComponent(campaignId)}`, signal), campaignId, universeId),\n };\n}\n",".panel { border-block: 1px solid var(--border-default); padding-block: 16px; text-align: left; min-width: 0; }\n.result { margin-top: 14px; min-width: 0; }\n.heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }\n.heading h4 { margin: 0; font-family: var(--font-display); font-size: 1rem; color: var(--text-primary); }\n.button { font: inherit; color: var(--text-link); border: 1px solid var(--border-strong); border-radius: 6px; padding: 8px 12px; background: var(--bg-surface); cursor: pointer; white-space: normal; text-align: left; }\n.button:hover:not(:disabled) { background: var(--bg-hover); }\n.button:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 3px; }\n.button:disabled { cursor: wait; color: var(--text-secondary); }\n.outcome { font-weight: 600; color: var(--text-primary); }\n.facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 12px 20px; margin: 16px 0; }\n.facts div { min-width: 0; }\n.facts dt { color: var(--text-secondary); font-size: .8rem; }\n.facts dd { margin: 4px 0 0; color: var(--text-primary); overflow-wrap: anywhere; font-size: .9rem; }\n.note { color: var(--text-secondary); font-size: .85rem; max-width: 78ch; line-height: 1.55; margin-bottom: 0; }\n.notice { color: var(--status-warning-fg); font-size: .9rem; }\n","import { useMemo, useState } from 'react';\nimport type { UniverseCampaignReadinessView } from '../../../core/web/universe-console-types.js';\nimport { useQuery, useRefetch } from '../../data/hooks.js';\nimport { universeCampaignReadinessQuery } from '../../data/universe-readiness-queries.js';\nimport styles from './CampaignReadiness.module.css';\n\nconst LABELS: Record<UniverseCampaignReadinessView['disposition'], string> = {\n startable: 'Recorded evidence permitted a run attempt',\n owned: 'Campaign owner was recorded active',\n 'owner-held': 'Owner control held the campaign',\n 'resource-withheld': 'Last attempt was withheld by resources',\n 'recovery-required': 'Recovery inspection was required',\n 'attention-required': 'Attention was required',\n 'budget-exhausted': 'Recorded budget was exhausted',\n terminal: 'Campaign had ended',\n unavailable: 'Recorded check was unavailable',\n};\n\nfunction RecordedCheck({ campaignId, universeId }: { campaignId: string; universeId: string }) {\n const query = useMemo(() => universeCampaignReadinessQuery(campaignId, universeId), [campaignId, universeId]);\n // `freshMs: 0` opts out of useQuery's default mount-freshness window. This\n // component only mounts when the operator discloses it, so every mount IS\n // the request for a new sample — accepting a cached one because it is a few\n // seconds old would silently answer a click with the previous reading.\n const { data, status } = useQuery(query, { freshMs: 0 });\n const refresh = useRefetch(query);\n const busy = status === 'loading' || status === 'refreshing' || status === 'idle';\n const historical = busy || status === 'error';\n return <div className={styles.result} aria-busy={busy}>\n <div className={styles.heading}><h4>Last recorded check</h4><button type=\"button\" className={styles.button} disabled={busy} onClick={refresh}>{busy ? 'Checking recorded evidence…' : 'Refresh check'}</button></div>\n {status === 'error' ? <p className={styles.notice} role=\"alert\">Recorded check could not be refreshed. Retry the check; no current readiness conclusion is available.</p> : null}\n {data ? <>\n {historical ? <p className={styles.notice}>Previous sample only. {busy ? 'A new check is pending.' : 'The latest check failed.'}</p> : null}\n {!historical ? <p className={styles.outcome}>{data.sourceState === 'healthy' ? LABELS[data.disposition] : 'Recorded evidence was unavailable or incomplete'}</p> : null}\n <dl className={styles.facts}>\n <div><dt>Sampled</dt><dd><time dateTime={data.sampledAt}>{new Date(data.sampledAt).toLocaleString()}</time></dd></div>\n <div><dt>Source</dt><dd>{data.sourceState}</dd></div>\n <div><dt>{historical ? 'Previous disposition' : 'Recorded disposition'}</dt><dd>{data.disposition}</dd></div>\n <div><dt>Reason code</dt><dd><code>{data.reasonCode}</code></dd></div>\n <div><dt>Observed campaign state</dt><dd>{data.observedState ?? 'Unavailable'}</dd></div>\n <div><dt>Resource runtime binding</dt><dd>{data.resourceRuntimeRequired === null ? 'Unknown' : data.resourceRuntimeRequired ? 'Explicit private runtime required for a run attempt' : 'Not required by the recorded manifest'}</dd></div>\n </dl>\n </> : busy ? <p role=\"status\">Reading saved campaign controls and outcomes…</p> : null}\n <p className={styles.note}>This checks saved campaign controls and outcomes—not current provider connection, quota, worker capacity, evaluator execution, or execution-lease availability. A recorded startable result is advisory; the runner must still perform its admission checks.</p>\n </div>;\n}\n\n/** Mount the shared query only on request; switching campaigns resets this disclosure. */\nexport function CampaignReadiness({ campaignId, universeId }: { campaignId: string; universeId: string }) {\n const [open, setOpen] = useState(false);\n return <section className={styles.panel} aria-label=\"Recorded campaign readiness\">\n <button type=\"button\" className={styles.button} aria-expanded={open} onClick={() => setOpen((value) => !value)}>{open ? 'Hide recorded readiness' : 'Check recorded readiness'}</button>\n {!open ? <p className={styles.note}>Inspect saved controls, remaining budgets, and recovery conditions for this campaign. This does not start work.</p> : <RecordedCheck campaignId={campaignId} universeId={universeId} />}\n </section>;\n}\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport { StatusBadge } from '../../components/primitives/StatusBadge.js';\nimport { RefreshIndicator } from '../../components/primitives/RefreshIndicator.js';\nimport { SkeletonLine } from '../../components/primitives/Skeleton.js';\nimport { useQuery, useRefetch } from '../../data/hooks.js';\nimport { universeOverviewQuery } from '../../data/queries.js';\nimport type { UniverseOverview, UniverseRun, UniverseSummary, UniverseTrial } from '../../data/api-types.js';\nimport { useScrollRestore } from '../../hooks/useScrollRestore.js';\nimport styles from './UniverseView.module.css';\nimport { UniverseDeliveries } from './UniverseDeliveries.js';\nimport { UniverseGraph } from './UniverseGraph.js';\nimport { UniverseRootContext, useUniverseCommand } from './UniverseScope.js';\nimport { CampaignReadiness } from './CampaignReadiness.js';\n\ntype Campaign = NonNullable<UniverseOverview['campaigns']>[number];\nconst ACTIVE_CAMPAIGN_STATES = new Set(['running', 'pause-requested', 'stop-requested']);\n\nfunction number(value: number): string {\n return value.toLocaleString(undefined, { maximumFractionDigits: 6 });\n}\n\nfunction duration(ms: number): string {\n return ms < 1_000\n ? `${ms.toLocaleString(undefined, { maximumFractionDigits: 0 })} ms`\n : `${(ms / 1_000).toLocaleString(undefined, { maximumFractionDigits: 2 })} s`;\n}\n\nfunction timestamp(value: string): string {\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleString();\n}\n\nfunction FirstExperiment() {\n const command = useUniverseCommand();\n return (\n <section className={styles.empty} aria-labelledby=\"universe-start-title\">\n <h2 id=\"universe-start-title\">Start your first universe</h2>\n <p>Run two measured generations on a disposable seed, then inspect which variants earned a place in the archive.</p>\n <pre className={styles.command}><code>{command('ashlr universe demo')}</code></pre>\n <p>The local demonstration needs no model credentials. Refresh this page after running it.</p>\n <details>\n <summary>Bring your own experiment</summary>\n <pre className={styles.command}><code>{command('ashlr universe init --manifest path/to/universe.json\\nashlr universe run <id>\\nashlr universe status <id> --json\\nashlr universe archive <id> --json')}</code></pre>\n </details>\n </section>\n );\n}\n\nfunction selectionReason(trial: UniverseTrial, summary: UniverseSummary, run: UniverseRun): string {\n if (trial.status !== 'passed') return 'Not admitted. The trial did not finish with a passing measurement.';\n if (run.status !== 'completed') return 'This generation has not completed. Its measurements have not been admitted to the archive.';\n if (trial.selected && trial.delta === null) return 'Established the first measured elite in this niche.';\n if (trial.selected) return `Admitted in generation ${run.generation} after an improvement of ${number(trial.delta!)} over the prior niche elite.`;\n return `Not admitted in this generation. Selection compares passing trials within each niche and requires an improvement of ${number(summary.manifest.metric.minImprovement)}.`;\n}\n\nconst RESOURCE_DISPATCH_LABELS: Record<string, string> = {\n 'not-started': 'Not started', withheld: 'Admission withheld', settled: 'Receipt settled',\n replayed: 'Recorded task replayed; no redispatch', unavailable: 'Evidence unavailable',\n};\nconst RESOURCE_USAGE_LABELS: Record<string, string> = {\n 'codex-turn': 'Codex reported turns', 'claude-main-loop': 'Claude main loop only',\n 'local-chat-completion': 'Local chat completion',\n};\n\nexport function GenerationEvidence({ trial }: { trial: UniverseTrial }) {\n const receipt = trial.generation;\n if (!receipt) return <p className={styles.hypothesis}>Operator command. Model usage was not measured.</p>;\n const pooled = receipt.provider === 'resource-pool';\n const resource = pooled ? receipt.resource : undefined;\n const tokenCount = (value: number | null) => value === null ? 'Unavailable' : number(value);\n return (\n <section className={styles.generationEvidence} aria-label=\"Model generation evidence\">\n <div className={styles.detailHeading}><h4>Model generation</h4><StatusBadge status={receipt.status} tone={receipt.status === 'succeeded' ? 'success' : undefined} /></div>\n <dl className={styles.measurements}>\n <div><dt>Model</dt><dd>{receipt.model ?? resource?.workerModel ?? 'Not assigned'}</dd></div>\n <div><dt>Accounting</dt><dd>{receipt.usage.state === 'reported' ? 'Provider-reported' : 'Unavailable'}</dd></div>\n <div><dt>Input tokens</dt><dd>{tokenCount(receipt.usage.inputTokens)}</dd></div>\n <div><dt>Output tokens</dt><dd>{tokenCount(receipt.usage.outputTokens)}</dd></div>\n <div><dt>Generation duration</dt><dd>{duration(receipt.durationMs)}</dd></div>\n <div><dt>{pooled ? 'Provider request count' : 'Request'}</dt><dd>{pooled ? 'Unknown' : receipt.requestStarted ? 'Started' : 'Not started'}</dd></div>\n </dl>\n {pooled ? <section aria-label=\"Recorded resource task evidence\">\n <h4>Recorded resource task</h4>\n <dl className={styles.measurements}>\n <div><dt>Dispatch evidence</dt><dd>{resource && Object.hasOwn(RESOURCE_DISPATCH_LABELS, resource.dispatch) ? RESOURCE_DISPATCH_LABELS[resource.dispatch] : 'Unavailable'}</dd></div>\n <div><dt>Pool</dt><dd>{resource?.poolId ?? 'Unavailable'}</dd></div>\n <div><dt>Worker</dt><dd>{resource?.workerId ?? 'Not assigned'}</dd></div>\n <div><dt>Worker provider</dt><dd>{resource?.workerProvider ?? 'Not assigned'}</dd></div>\n <div><dt>Task</dt><dd><code>{resource?.taskId ?? 'Unavailable'}</code></dd></div>\n <div><dt>Recorded task outcome</dt><dd>{resource?.taskStatus ?? 'Unavailable'}</dd></div>\n <div><dt>Worker usage scope</dt><dd>{resource?.usageScope && Object.hasOwn(RESOURCE_USAGE_LABELS, resource.usageScope) ? RESOURCE_USAGE_LABELS[resource.usageScope] : 'Unavailable'}</dd></div>\n </dl>\n <p>Recorded provenance only, not a current worker heartbeat. Task completion does not mean the candidate response validated or the evaluator accepted it.</p>\n {resource?.taskStatus === 'reserved' || resource?.taskStatus === 'uncertain'\n ? <p className={styles.notice}>The resource receipt still occupies capacity. Reconcile the affected pool before another attempt; this view does not release its slot.</p> : null}\n </section> : null}\n <details className={styles.artifact}>\n <summary>Generation source and changes</summary>\n <dl>\n <div><dt>Provider</dt><dd>{receipt.provider}</dd></div>\n {!pooled ? <div><dt>Endpoint</dt><dd><code>{receipt.endpoint}</code></dd></div> : null}\n {resource ? <>\n <div><dt>Allowed workers</dt><dd>{resource.allowedWorkerIds.join(', ')}</dd></div>\n <div><dt>Pool digest</dt><dd><code>{resource.poolDigest}</code></dd></div>\n <div><dt>Task digest</dt><dd><code>{resource.taskDigest ?? 'Unavailable'}</code></dd></div>\n <div><dt>Resource receipt digest</dt><dd><code>{resource.receiptDigest ?? 'Unavailable'}</code></dd></div>\n </> : null}\n <div><dt>Changed files</dt><dd>{receipt.changedFiles.length ? receipt.changedFiles.join(', ') : 'None'}</dd></div>\n <div><dt>Prompt digest</dt><dd><code>{receipt.promptDigest ?? 'Unavailable'}</code></dd></div>\n <div><dt>Response digest</dt><dd><code>{receipt.responseDigest ?? 'Unavailable'}</code></dd></div>\n {receipt.feedback ? <><div><dt>Evaluator feedback source</dt><dd>Generation {receipt.feedback.generation} · trial {receipt.feedback.trialId}</dd></div><div><dt>Feedback digest</dt><dd><code>{receipt.feedback.digest}</code></dd></div></> : null}\n {receipt.search ? <><div><dt>Recorded search context</dt><dd>Version {receipt.search.schemaVersion}</dd></div><div><dt>Search context digest</dt><dd><code>{receipt.search.digest}</code></dd></div></> : null}\n {receipt.seedContext ? <><div><dt>Historical seed context</dt><dd>Version {receipt.seedContext.schemaVersion}</dd></div><div><dt>Seed context digest</dt><dd><code>{receipt.seedContext.digest}</code></dd></div></> : null}\n </dl>\n {receipt.seedContext ? <p>Historical measured seed evidence is retained across campaign generations. It is not the trial parent, latest-attempt feedback, or acceptance.</p> : null}\n {pooled ? <p>Some digests are redacted in the web view. Use scoped CLI JSON for exact evidence; this view does not revalidate the resource ledger.</p> : null}\n </details>\n <p>Generation success means a valid replacement response, not evaluator acceptance. {pooled\n ? 'Token counts come from the recorded worker receipt and keep its usage scope; model identity is the configured model name. Native provider request counts and account-wide spend remain unknown.'\n : 'Token counts come from the endpoint response; model identity is the configured name.'}</p>\n {receipt.feedback ? <p>Feedback can come from a failed attempt. It is distinct from the retained parent shown in the lineage.</p> : null}\n {receipt.search ? <p>Search context supplies the metric and bounded repetition evidence, with a retained baseline and previous selection result when available. A repeated artifact is not an evaluator result or a reason to skip evaluation.</p> : null}\n </section>\n );\n}\n\nfunction TrialDetail({ trial, summary, run }: { trial: UniverseTrial; summary: UniverseSummary; run: UniverseRun }) {\n const command = useUniverseCommand();\n const parent = summary.runs.flatMap((item) => item.trials).find((item) => item.id === trial.parentTrialId);\n const current = summary.elites.some((elite) => elite.trialId === trial.id);\n const variant = summary.manifest.variants.find((item) => item.id === trial.variantId);\n return (\n <section className={styles.trialDetail} aria-label={`Evidence for ${trial.variantId}`}>\n <div className={styles.detailHeading}>\n <h3>{trial.variantId}</h3>\n <StatusBadge status={trial.status} tone={trial.status === 'passed' ? 'success' : undefined} />\n </div>\n {variant ? <p className={styles.hypothesis}>{variant.hypothesis}</p> : null}\n <div className={styles.lineage} aria-label=\"Variant lineage\">\n <span>{trial.parentTrialId ? (parent?.variantId ?? trial.parentTrialId) : 'Seed'}</span>\n <span aria-hidden=\"true\">→</span>\n <strong>{trial.variantId}</strong>\n <span className={styles.generation}>Generation {run.generation}</span>\n </div>\n <p className={styles.reason}>{selectionReason(trial, summary, run)}</p>\n {trial.selected ? <p className={styles.currentElite}>{summary.sourceState === 'degraded' ? 'Admission recorded; the current niche elite could not be verified.' : current ? 'Current niche elite' : 'Previously admitted; a later trial now holds this niche.'}</p> : null}\n <dl className={styles.measurements}>\n <div><dt>{summary.manifest.metric.name}</dt><dd>{trial.score === null ? 'Not measured' : number(trial.score)}</dd></div>\n <div><dt>Improvement over prior elite</dt><dd>{trial.delta === null ? 'No prior comparison' : number(trial.delta)}</dd></div>\n <div><dt>Trial duration</dt><dd>{duration(trial.durationMs)}</dd></div>\n {Object.entries(trial.metrics).filter(([key]) => key !== summary.manifest.metric.name).map(([key, value]) => (\n <div key={key}><dt>{key}</dt><dd>{number(value)}</dd></div>\n ))}\n </dl>\n <GenerationEvidence trial={trial} />\n {trial.diagnostics?.length ? <div className={styles.diagnosticCodes} aria-label=\"Evaluator diagnostic codes\"><strong>Evaluator diagnostics</strong><ul>{trial.diagnostics.map((diagnostic, index) => <li key={`${diagnostic.code}-${index}`}><code>{diagnostic.code}</code></li>)}</ul><p>Codes are shown here; diagnostic messages and private locations are omitted.</p></div> : null}\n {trial.error ? <pre role=\"status\" aria-label=\"Trial failure evidence\" className={styles.failureEvidence}>{trial.error}</pre> : null}\n {trial.artifact ? (\n <details className={styles.artifact}>\n <summary>Artifact and evaluator identity</summary>\n <dl>\n <div><dt>Artifact</dt><dd><code>{trial.artifact.path}</code></dd></div>\n <div><dt>Content digest</dt><dd><code>{trial.artifact.digest}</code></dd></div>\n <div><dt>Seed revision</dt><dd><code>{trial.artifact.revision}</code></dd></div>\n <div><dt>Comparator digest</dt><dd><code>{run.comparatorDigest}</code></dd></div>\n </dl>\n <p>For exact local records, run <code>{command(`ashlr universe status ${summary.manifest.id} --json`)}</code>.</p>\n </details>\n ) : null}\n <details className={styles.artifact}>\n <summary>Raw measurement record</summary>\n <pre>{JSON.stringify({ ...trial, ...(trial.diagnostics ? { diagnostics: trial.diagnostics.map(({ code }) => ({ code })) } : {}) }, null, 2)}</pre>\n </details>\n </section>\n );\n}\n\nfunction Campaigns({ campaigns, summary, onInspectRun }: {\n campaigns: Campaign[]; summary: UniverseSummary; onInspectRun: (runId: string) => void;\n}) {\n const [campaignId, setCampaignId] = useState<string | null>(null);\n const command = useUniverseCommand();\n const root = useContext(UniverseRootContext);\n const campaign = campaigns.find((item) => item.definition.id === campaignId) ??\n campaigns.find((item) => ACTIVE_CAMPAIGN_STATES.has(item.state)) ?? campaigns.at(-1);\n if (!campaign) return (\n <section className={styles.campaign} aria-label=\"Campaigns\">\n <div className={styles.sectionHeading}><div><h2>Continue with a campaign</h2><p>Run successive generations automatically within a fixed resource budget. A passing trial does not end the search.</p></div></div>\n <div className={styles.campaignBody}>\n <p>Set <code>universeId</code> to <code>{summary.manifest.id}</code> in your campaign manifest.</p>\n <pre className={styles.command}><code>{command('ashlr universe campaign init --manifest campaign.json\\nashlr universe campaign run <campaign-id>')}</code></pre>\n <p>The console observes saved evidence. These commands run in your terminal, without installing a background service.</p>\n </div>\n </section>\n );\n const { definition, progress } = campaign;\n const verified = campaign.sourceState === 'healthy';\n const value = (count: number) => verified ? number(count) : 'Unavailable';\n const availableRuns = new Set(summary.runs.map((item) => item.id));\n if (summary.activeRun) availableRuns.add(summary.activeRun.id);\n const controls = [`ashlr universe campaign status ${definition.id} --json`];\n controls.push(`ashlr universe campaign check ${definition.id} --json${root === null ? \" --root '/absolute/private/experiments'\" : ''}`);\n if (ACTIVE_CAMPAIGN_STATES.has(campaign.state)) controls.push(`ashlr universe campaign pause ${definition.id}`);\n if (!['completed', 'stopped', 'failed'].includes(campaign.state)) controls.push(`ashlr universe campaign stop ${definition.id}`);\n return (\n <section className={styles.campaign} aria-label=\"Campaigns\">\n <div className={styles.sectionHeading}>\n <div><h2>Autonomous campaign</h2><p>Generations continue until the campaign reaches its resource or stagnation limit.</p></div>\n {campaigns.length > 1 ? <label className={styles.selectLabel}>Campaign<select value={definition.id} onChange={(event) => setCampaignId(event.target.value)}>{campaigns.map((item) => <option key={item.definition.id} value={item.definition.id}>{item.definition.id}</option>)}</select></label> : null}\n </div>\n <div className={styles.campaignBody}>\n <div className={styles.campaignHeading}><h3>{definition.id}</h3><StatusBadge status={campaign.state} tone={campaign.state === 'ready' ? 'neutral' : undefined} /></div>\n {verified ? null : <div className={styles.notice} role=\"status\"><strong>Campaign history is incomplete.</strong><p>{campaign.reasons.join('; ') || 'Recorded progress could not be verified.'}</p></div>}\n <p className={styles.reason}><strong>Reason: </strong>{campaign.reason ?? (campaign.state === 'ready' ? 'Registered; execution readiness has not been checked.' : 'No stop reason recorded.')}</p>\n <p>Use the recovery check before resuming. It reads recorded controls and outcomes, not current worker readiness.{root === null ? ' Replace the example root with your exact Universe store.' : ''}</p>\n <CampaignReadiness key={`${summary.manifest.id}:${definition.id}`} campaignId={definition.id} universeId={summary.manifest.id} />\n {campaign.state === 'pause-requested' || campaign.state === 'stop-requested' ? <p role=\"status\">Control requested. The owner has not yet acknowledged that work has stopped.</p> : null}\n <dl className={styles.campaignFacts}>\n <div><dt>Generation attempts</dt><dd>{value(progress.attempts)} / {definition.budget.maxGenerations}</dd></div>\n <div><dt>Reserved generation invocations</dt><dd>{value(progress.reservedModelRequests)} / {definition.budget.maxModelRequests}</dd></div>\n <div><dt>Stagnant generations</dt><dd>{value(progress.stagnantGenerations)} / {definition.budget.maxStagnantGenerations}</dd></div>\n <div><dt>Deadline</dt><dd>{campaign.deadlineAt ? timestamp(campaign.deadlineAt) : 'Starts on first run'}</dd></div>\n <div><dt>Completed generations</dt><dd>{value(progress.completedRuns)}</dd></div>\n <div><dt>Interrupted generations</dt><dd>{value(progress.interruptedRuns)}</dd></div>\n <div><dt>Initial niche admissions</dt><dd>{value(progress.admissions)}</dd></div>\n <div><dt>Strict improvements</dt><dd>{value(progress.improvements)}</dd></div>\n <div><dt>Reported token total</dt><dd>{verified && progress.usageComplete && progress.reportedTokens !== null ? number(progress.reportedTokens) : 'Unavailable'}</dd></div>\n <div><dt>Recorded token subtotal</dt><dd>{value(progress.recordedTokens)}</dd></div>\n <div><dt>Reported-token stop threshold</dt><dd>{definition.budget.maxReportedTokens === null ? 'Not configured' : number(definition.budget.maxReportedTokens)}</dd></div>\n <div><dt>Bounded evaluator feedback</dt><dd>{definition.feedback ? 'Enabled' : 'Disabled'}</dd></div>\n </dl>\n <p className={styles.campaignNote}>Resume keeps the original deadline and consumed budget. Token figures cover recorded model requests; a recorded subtotal is not proof of complete spend. A reported-token threshold cannot prevent spend already incurred.</p>\n <p className={styles.campaignNote}>The legacy maxModelRequests field reserves generation transport invocations, not native API calls. A native invocation may make zero or multiple provider requests. Resource-pool run/resume requires its explicit private runtime option again; this read-only console does not hold that binding.</p>\n </div>\n {campaign.steps.length ? <div className={styles.tableScroll}>\n <table className={styles.archiveTable} aria-label=\"Campaign generations\">\n <thead><tr><th scope=\"col\">Generation</th><th scope=\"col\">State</th><th scope=\"col\">Trials passed</th><th scope=\"col\">New niches</th><th scope=\"col\">Improvements</th><th scope=\"col\">Generation invocations reserved</th></tr></thead>\n <tbody>{campaign.steps.map((step) => <tr key={step.runId}>\n <th scope=\"row\">{availableRuns.has(step.runId) ? <button type=\"button\" className={styles.eliteButton} aria-label={`Inspect campaign generation ${step.generation}`} onClick={() => onInspectRun(step.runId)}>{step.generation}</button> : <span>{step.generation} · Evidence pending</span>}</th>\n <td>{step.state}</td><td>{value(step.passedTrials)} / {value(step.trialCount)}</td><td>{value(step.admissions)}</td><td>{value(step.improvements)}</td><td>{value(step.reservedModelRequests)}</td>\n </tr>)}</tbody>\n </table>\n </div> : null}\n <div className={styles.campaignBody}>\n <details className={styles.artifact}><summary>Inspect or control from your terminal</summary><pre className={styles.command}><code>{command(controls.join('\\n'))}</code></pre><p>Pause and stop are requests until acknowledged. These controls do not change the legacy fleet daemon or its kill switch.</p></details>\n <p className={styles.campaignNote}>Campaign termination is not project success. Archive admissions are local evaluator results, not accepted production changes.</p>\n </div>\n </section>\n );\n}\n\nfunction UniverseExperiment({ summary, campaigns, deliveryReport }: {\n summary: UniverseSummary;\n campaigns: Campaign[];\n deliveryReport?: NonNullable<UniverseOverview['deliveryReports']>[number];\n}) {\n const [runId, setRunId] = useState<string | null>(null);\n const command = useUniverseCommand();\n const [trialId, setTrialId] = useState<string | null>(null);\n const comparisonRef = useRef<HTMLElement>(null);\n const runs = summary.activeRun && !summary.runs.some((run) => run.id === summary.activeRun!.id)\n ? [...summary.runs, summary.activeRun] : summary.runs;\n const run = runs.find((item) => item.id === runId) ?? summary.activeRun ?? runs.at(-1);\n const trial = run?.trials.find((item) => item.id === trialId) ?? run?.trials.find((item) => item.selected) ?? run?.trials[0];\n const niches = [...new Set(summary.manifest.variants.map((variant) => variant.niche))];\n const totalDuration = runs.reduce((sum, item) => sum + item.durationMs, 0);\n\n return (\n <>\n <section className={styles.objective} aria-label=\"Universe objective\">\n <h2>{summary.manifest.name}</h2>\n <p>{summary.manifest.objective}</p>\n <dl className={styles.objectiveFacts}>\n <div><dt>Selection metric</dt><dd>{summary.manifest.metric.name} · {summary.manifest.metric.direction}</dd></div>\n <div><dt>Minimum improvement</dt><dd>{number(summary.manifest.metric.minImprovement)}</dd></div>\n <div><dt>Run budget</dt><dd>{summary.manifest.budget.maxTrials} trials / {duration(summary.manifest.budget.maxDurationMs)}</dd></div>\n <div><dt>Parallel trials</dt><dd>{summary.manifest.budget.maxParallel}</dd></div>\n </dl>\n </section>\n\n {summary.sourceState === 'degraded' ? (\n <div className={styles.notice} role=\"status\"><strong>Some experiment records could not be read.</strong><p>{summary.reasons.join('; ')}</p></div>\n ) : null}\n {summary.activeRun ? (\n <div className={styles.running} role=\"status\">\n <StatusBadge status={summary.activeRun.status} />\n <span>Generation {summary.activeRun.generation}: {summary.activeRun.trials.length} trial measurements recorded. Refreshing every 3 seconds.</span>\n </div>\n ) : null}\n\n <Campaigns campaigns={campaigns} summary={summary} onInspectRun={(id) => { setRunId(id); setTrialId(null); }} />\n\n <UniverseGraph universeId={summary.manifest.id} onInspectTrial={(run, trial) => {\n if (!runs.some((item) => item.id === run && item.trials.some((candidate) => candidate.id === trial))) return false;\n setRunId(run); setTrialId(trial);\n window.requestAnimationFrame(() => comparisonRef.current?.scrollIntoView?.({ block: 'start' }));\n return true;\n }} />\n\n <section className={styles.archive} aria-labelledby=\"universe-archive-title\">\n <div className={styles.sectionHeading}>\n <div><h2 id=\"universe-archive-title\">Population archive</h2><p>Each niche keeps its best measured variant. Inspect an elite to see the experiment that earned its place.</p></div>\n <span className={styles.archiveCount}>{summary.sourceState === 'degraded' ? 'Archive incomplete' : `${summary.elites.length} / ${niches.length} niches populated`}</span>\n </div>\n <div className={styles.tableScroll}>\n <table className={styles.archiveTable}>\n <thead><tr><th scope=\"col\">Niche</th><th scope=\"col\">Retained variant</th><th scope=\"col\">{summary.manifest.metric.name}</th><th scope=\"col\">Generation</th></tr></thead>\n <tbody>{niches.map((niche) => {\n const elite = summary.elites.find((item) => item.niche === niche);\n return (\n <tr key={niche} data-selected={elite?.trialId === trial?.id || undefined}>\n <th scope=\"row\"><span className={elite ? styles.nicheFilled : styles.nicheEmpty} aria-hidden=\"true\" />{niche}</th>\n <td>{elite ? (\n <button type=\"button\" className={styles.eliteButton} aria-label={`Inspect ${elite.variantId} in ${niche}`} onClick={() => { setRunId(elite.runId); setTrialId(elite.trialId); }}>{elite.variantId}</button>\n ) : <span className={styles.muted}>{summary.sourceState === 'degraded' ? 'History incomplete' : 'No retained variant'}</span>}</td>\n <td>{elite ? number(elite.score) : summary.sourceState === 'degraded' ? 'Unavailable' : 'Not measured'}</td>\n <td>{elite ? elite.generation : '—'}</td>\n </tr>\n );\n })}</tbody>\n </table>\n </div>\n </section>\n\n {run ? (\n <section ref={comparisonRef} className={styles.comparison} aria-labelledby=\"universe-comparison-title\">\n <div className={styles.sectionHeading}>\n <div><h2 id=\"universe-comparison-title\">Experiment comparison</h2><p>Selection is local to a niche. Positive improvement means better in either metric direction.</p></div>\n <label className={styles.selectLabel}>Generation\n <select value={run.id} onChange={(event) => { setRunId(event.target.value); setTrialId(null); }}>\n {[...runs].reverse().map((item) => <option key={item.id} value={item.id}>{item.generation} · {item.status}</option>)}\n </select>\n </label>\n </div>\n <div className={styles.runMeta}><StatusBadge status={run.status} tone={run.status === 'completed' ? 'success' : undefined} /><span>Started {timestamp(run.startedAt)}</span><span>{duration(run.durationMs)} recorded</span><span>{run.trials.filter((item) => item.status === 'passed').length} / {run.trials.length} trials passed</span><span>{run.status === 'completed' ? `${run.trials.filter((item) => item.selected).length} admitted` : run.status === 'running' ? 'Selection pending' : 'Selection not applied'}</span></div>\n {run.error ? <p className={styles.failure} role=\"status\">{run.error}</p> : null}\n {trial ? (\n <div className={styles.comparisonBody}>\n <div className={styles.trialList} aria-label=\"Trials\">\n {run.trials.map((item) => (\n <button type=\"button\" key={item.id} className={styles.trialButton} aria-pressed={item.id === trial.id} onClick={() => setTrialId(item.id)}>\n <span className={styles.trialTitle}>{item.variantId}<span>{item.score === null ? '—' : number(item.score)}</span></span>\n <span className={styles.trialSubline}>{item.niche}<span>{item.selected ? 'Admitted' : item.status}</span></span>\n </button>\n ))}\n </div>\n <TrialDetail trial={trial} summary={summary} run={run} />\n </div>\n ) : <p className={styles.noTrials}>No trial measurements have been recorded for this generation yet.</p>}\n </section>\n ) : (\n <section className={styles.empty}>\n <h2>This universe is registered</h2>\n <pre className={styles.command}><code>{command(`ashlr universe run ${summary.manifest.id}`)}</code></pre>\n <p>No generation has run yet. Verify the evaluator and required runtime before starting, then refresh to compare measurements.</p>\n </section>\n )}\n\n <UniverseDeliveries summary={summary} report={deliveryReport} onInspectTrial={(run, trial) => { setRunId(run); setTrialId(trial); }} />\n\n <footer className={styles.resources} aria-label=\"Generation resources\">\n <h2>Recorded resources</h2>\n <dl><div><dt>Runtime across {runs.length} generations</dt><dd>{duration(totalDuration)}</dd></div><div><dt>Model tokens{run ? ` in generation ${run.generation}` : ''}</dt><dd>{run?.tokensUsed == null ? 'Unavailable' : number(run.tokensUsed)}</dd></div><div><dt>Model cost</dt><dd>Unavailable</dd></div></dl>\n {run?.generationUsage ? <p>Generation usage coverage: {run.generationUsage.reportedRequests} / {run.generationUsage.requestsStarted} recorded started requests reported tokens across {run.generationUsage.trials} model trials. {run.generationUsage.resourceAttempts === undefined\n ? 'Totals require a completed generation, at least one recorded request, and usage from every recorded request. Interrupted in-flight usage may be missing.'\n : 'These request counters cover the direct local path only. Combined totals also require complete resource-attempt usage and a completed generation; interrupted in-flight usage may be missing.'}</p> : null}\n {run?.generationUsage?.resourceAttempts !== undefined ? <p>Resource handoff coverage: {run.generationUsage.resourceReportedAttempts ?? 'Unavailable'} / {run.generationUsage.resourceAttempts} attempted handoffs reported worker tokens. Handoffs do not guarantee worker starts or count provider requests; incomplete resource usage keeps the combined total unavailable.</p> : null}\n <p>Tokens cover model generation only, not command or evaluator work. Missing usage and dollar costs stay unavailable. Evaluator scores do not establish business value or accepted production changes.</p>\n </footer>\n </>\n );\n}\n\nexport function UniverseView() {\n const containerRef = useRef<HTMLDivElement>(null);\n useScrollRestore('/universe', containerRef);\n const query = useQuery(universeOverviewQuery);\n const refresh = useRefetch(universeOverviewQuery);\n const [universeId, setUniverseId] = useState<string | null>(null);\n const overview = query.data;\n const universe = overview?.universes.find((item) => item.manifest.id === universeId) ?? overview?.universes[0];\n const isRunning = (overview?.universes.some((item) => item.activeRun !== null) ?? false) ||\n (overview?.campaigns?.some((item) => ACTIVE_CAMPAIGN_STATES.has(item.state)) ?? false);\n useEffect(() => {\n let disposed = false;\n const poll = () => { if (!disposed && document.visibilityState !== 'hidden') refresh(); };\n // Idle discovery notices work started elsewhere without requiring a manual\n // refresh. The existing cache coalesces overlapping reads and owns their\n // lifetime; hiding/unmounting stops new polling, not a shared in-flight read.\n const timer = window.setInterval(poll, isRunning ? 3_000 : 15_000);\n document.addEventListener('visibilitychange', poll);\n return () => {\n disposed = true;\n window.clearInterval(timer);\n document.removeEventListener('visibilitychange', poll);\n };\n }, [isRunning, refresh]);\n return (\n <div ref={containerRef} className={styles.view}>\n <header className={styles.header}>\n <div><h1>Ashlrverse</h1><p>Run experiments. Compare futures. Keep what earns its place.</p></div>\n <div className={styles.actions}>\n {overview && overview.universes.length > 1 ? (\n <label className={styles.selectLabel}>Universe<select value={universe?.manifest.id} onChange={(event) => setUniverseId(event.target.value)}>{overview.universes.map((item) => <option value={item.manifest.id} key={item.manifest.id}>{item.manifest.name}</option>)}</select></label>\n ) : null}\n <button type=\"button\" className={styles.refresh} onClick={refresh} disabled={query.status === 'loading' || query.status === 'refreshing'}>Refresh</button>\n </div>\n </header>\n <div className={styles.freshness} aria-live=\"polite\">\n {query.status === 'refreshing' ? <RefreshIndicator /> : null}\n {overview ? <span>Observed {timestamp(overview.sampledAt)}{query.status === 'error' ? ' · Last successful read' : ''}</span> : null}\n {overview ? <span>Local experiments</span> : null}\n <span>Refreshes every {isRunning ? '3' : '15'} seconds while visible</span>\n </div>\n {query.status === 'loading' ? <section className={styles.empty} aria-label=\"Loading Universe experiments\"><SkeletonLine width=\"60%\" /><SkeletonLine width=\"90%\" /><SkeletonLine width=\"80%\" /></section> : null}\n {query.status === 'error' ? <div className={styles.notice} role=\"alert\"><h2>Universe records unavailable</h2><p>{query.error?.message ?? 'The experiment store could not be read.'}</p><p>Refresh to retry. Any records below are from the last successful read.</p></div> : null}\n {overview?.sourceState === 'degraded' ? <div className={styles.notice} role=\"status\"><strong>Experiment history is incomplete.</strong><p>{overview.reasons.join('; ') || 'Some persisted records could not be verified.'}</p></div> : null}\n {universe ? <UniverseExperiment key={universe.manifest.id} summary={universe} campaigns={overview?.campaigns?.filter((item) => item.definition.universeId === universe.manifest.id) ?? []} deliveryReport={overview?.deliveryReports?.find((report) => report.universeId === universe.manifest.id)} /> : overview && overview.sourceState !== 'degraded' ? <FirstExperiment /> : null}\n </div>\n );\n}\n"],"mappings":"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"}