@knpkv/control-center 0.1.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 (664) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +309 -0
  3. package/dist/client/.vite/manifest.json +452 -0
  4. package/dist/client/assets/ActiveWorkPage-Bvji6Tys.js +2 -0
  5. package/dist/client/assets/ActiveWorkPage-Bvji6Tys.js.map +1 -0
  6. package/dist/client/assets/ActiveWorkPage-CxNa23uW.css +1 -0
  7. package/dist/client/assets/AgentPage-Bom41la2.js +3 -0
  8. package/dist/client/assets/AgentPage-Bom41la2.js.map +1 -0
  9. package/dist/client/assets/AgentPage-f6WXQA21.css +1 -0
  10. package/dist/client/assets/AtlassianOAuthCallbackPage-Cqqgj2o3.css +1 -0
  11. package/dist/client/assets/AtlassianOAuthCallbackPage-dr-B9-DD.js +2 -0
  12. package/dist/client/assets/AtlassianOAuthCallbackPage-dr-B9-DD.js.map +1 -0
  13. package/dist/client/assets/AuthorizedSharePage-C-P-PNfm.js +2 -0
  14. package/dist/client/assets/AuthorizedSharePage-C-P-PNfm.js.map +1 -0
  15. package/dist/client/assets/AuthorizedSharePage-DzE_yvHI.css +1 -0
  16. package/dist/client/assets/BrowserCrypto-BPiuCuW-.js +2 -0
  17. package/dist/client/assets/BrowserCrypto-BPiuCuW-.js.map +1 -0
  18. package/dist/client/assets/BrowserSessionHydrator-C8F_LGhg.js +2 -0
  19. package/dist/client/assets/BrowserSessionHydrator-C8F_LGhg.js.map +1 -0
  20. package/dist/client/assets/CommandSearch-D6iFcdvj.js +2 -0
  21. package/dist/client/assets/CommandSearch-D6iFcdvj.js.map +1 -0
  22. package/dist/client/assets/CommandSearch-Df36xGJc.css +1 -0
  23. package/dist/client/assets/Dialog-DwSIPb-B-DVn37afM.js +42 -0
  24. package/dist/client/assets/Dialog-DwSIPb-B-DVn37afM.js.map +1 -0
  25. package/dist/client/assets/ItemsPage-DsQCbQ11.css +1 -0
  26. package/dist/client/assets/ItemsPage-x39U11an.js +2 -0
  27. package/dist/client/assets/ItemsPage-x39U11an.js.map +1 -0
  28. package/dist/client/assets/PairPage-D5vlz4OG.js +2 -0
  29. package/dist/client/assets/PairPage-D5vlz4OG.js.map +1 -0
  30. package/dist/client/assets/PortfolioOverview-DSUabOmm.js +2 -0
  31. package/dist/client/assets/PortfolioOverview-DSUabOmm.js.map +1 -0
  32. package/dist/client/assets/PortfolioOverview-nrb6Ebbh.css +1 -0
  33. package/dist/client/assets/ReleaseRoute-DyDm5s85.js +2 -0
  34. package/dist/client/assets/ReleaseRoute-DyDm5s85.js.map +1 -0
  35. package/dist/client/assets/ReleaseRoute-R3GdFaGc.css +1 -0
  36. package/dist/client/assets/ReleaseWorkset-6gGnZPS8.css +1 -0
  37. package/dist/client/assets/ReleaseWorkset-BhGacsgb.js +2 -0
  38. package/dist/client/assets/ReleaseWorkset-BhGacsgb.js.map +1 -0
  39. package/dist/client/assets/ServicesPage-CoMVH2Si.js +2 -0
  40. package/dist/client/assets/ServicesPage-CoMVH2Si.js.map +1 -0
  41. package/dist/client/assets/ServicesPage-D76DN13E.css +1 -0
  42. package/dist/client/assets/TimelinePage-38jhMz_L.css +1 -0
  43. package/dist/client/assets/TimelinePage-D8Fj_351.js +2 -0
  44. package/dist/client/assets/TimelinePage-D8Fj_351.js.map +1 -0
  45. package/dist/client/assets/WorkspaceEntityLink-BRifdJHn.js +2 -0
  46. package/dist/client/assets/WorkspaceEntityLink-BRifdJHn.js.map +1 -0
  47. package/dist/client/assets/WorkspaceEntityRoute-BwpujSqk.css +1 -0
  48. package/dist/client/assets/WorkspaceEntityRoute-DPci8Q8I.js +30 -0
  49. package/dist/client/assets/WorkspaceEntityRoute-DPci8Q8I.js.map +1 -0
  50. package/dist/client/assets/WorkspaceReleaseLayout-CMg2-6IQ.css +1 -0
  51. package/dist/client/assets/WorkspaceReleaseLayout-DDLdY0rU.js +2 -0
  52. package/dist/client/assets/WorkspaceReleaseLayout-DDLdY0rU.js.map +1 -0
  53. package/dist/client/assets/authenticatedMutationClient-D5yD0rch.js +2 -0
  54. package/dist/client/assets/authenticatedMutationClient-D5yD0rch.js.map +1 -0
  55. package/dist/client/assets/authorizedShareTransport-Dyj53kJf.js +2 -0
  56. package/dist/client/assets/authorizedShareTransport-Dyj53kJf.js.map +1 -0
  57. package/dist/client/assets/client-OmvShYdC.js +12 -0
  58. package/dist/client/assets/client-OmvShYdC.js.map +1 -0
  59. package/dist/client/assets/connectionTestTransport-c25QXx7A.js +2 -0
  60. package/dist/client/assets/connectionTestTransport-c25QXx7A.js.map +1 -0
  61. package/dist/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  62. package/dist/client/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
  63. package/dist/client/assets/index-CkslINEH.css +1 -0
  64. package/dist/client/assets/index-DLoOV6Hp.js +11 -0
  65. package/dist/client/assets/index-DLoOV6Hp.js.map +1 -0
  66. package/dist/client/assets/jsx-runtime-n5LQ9ujS.js +2 -0
  67. package/dist/client/assets/jsx-runtime-n5LQ9ujS.js.map +1 -0
  68. package/dist/client/assets/patterns-DEbg7R-A-Cw0A2uKS.js +2 -0
  69. package/dist/client/assets/patterns-DEbg7R-A-Cw0A2uKS.js.map +1 -0
  70. package/dist/client/assets/presentPortfolio-CkRqd_zz.js +2 -0
  71. package/dist/client/assets/presentPortfolio-CkRqd_zz.js.map +1 -0
  72. package/dist/client/assets/presentWorkspaceItems-BU__8LcC.js +2 -0
  73. package/dist/client/assets/presentWorkspaceItems-BU__8LcC.js.map +1 -0
  74. package/dist/client/assets/releasePaths-s-fSbIM-.js +2 -0
  75. package/dist/client/assets/releasePaths-s-fSbIM-.js.map +1 -0
  76. package/dist/client/assets/releaseRoutes-DSWkTh-E.js +2 -0
  77. package/dist/client/assets/releaseRoutes-DSWkTh-E.js.map +1 -0
  78. package/dist/client/assets/serviceOnboarding-B9pvdyWf.js +2 -0
  79. package/dist/client/assets/serviceOnboarding-B9pvdyWf.js.map +1 -0
  80. package/dist/client/assets/useCompactReleasePreview-Ch3XxgJU.js +2 -0
  81. package/dist/client/assets/useCompactReleasePreview-Ch3XxgJU.js.map +1 -0
  82. package/dist/client/assets/useWorkspaceItems-D0FuHGto.js +2 -0
  83. package/dist/client/assets/useWorkspaceItems-D0FuHGto.js.map +1 -0
  84. package/dist/client/assets/workspaceEntityPaths-xAl2jRFm.js +2 -0
  85. package/dist/client/assets/workspaceEntityPaths-xAl2jRFm.js.map +1 -0
  86. package/dist/client/assets/workspaceEntityRoutes-CRcfSq7c.js +2 -0
  87. package/dist/client/assets/workspaceEntityRoutes-CRcfSq7c.js.map +1 -0
  88. package/dist/client/build-graph.json +1465 -0
  89. package/dist/client/index.html +17 -0
  90. package/dist/server/api/agent.d.ts +652 -0
  91. package/dist/server/api/agent.d.ts.map +1 -0
  92. package/dist/server/api/client.d.ts +17 -0
  93. package/dist/server/api/client.d.ts.map +1 -0
  94. package/dist/server/api/controlCenterApi.d.ts +16 -0
  95. package/dist/server/api/controlCenterApi.d.ts.map +1 -0
  96. package/dist/server/api/deliveryGraph.d.ts +8714 -0
  97. package/dist/server/api/deliveryGraph.d.ts.map +1 -0
  98. package/dist/server/api/errors.d.ts +87 -0
  99. package/dist/server/api/errors.d.ts.map +1 -0
  100. package/dist/server/api/index.d.ts +14 -0
  101. package/dist/server/api/index.d.ts.map +1 -0
  102. package/dist/server/api/index.js +12 -0
  103. package/dist/server/api/index.js.map +1 -0
  104. package/dist/server/api/liveEvents.d.ts +1120 -0
  105. package/dist/server/api/liveEvents.d.ts.map +1 -0
  106. package/dist/server/api/media.d.ts +30 -0
  107. package/dist/server/api/media.d.ts.map +1 -0
  108. package/dist/server/api/plugins.d.ts +1853 -0
  109. package/dist/server/api/plugins.d.ts.map +1 -0
  110. package/dist/server/api/portfolio.d.ts +742 -0
  111. package/dist/server/api/portfolio.d.ts.map +1 -0
  112. package/dist/server/api/session.d.ts +204 -0
  113. package/dist/server/api/session.d.ts.map +1 -0
  114. package/dist/server/api/shares.d.ts +422 -0
  115. package/dist/server/api/shares.d.ts.map +1 -0
  116. package/dist/server/api/timeline.d.ts +86 -0
  117. package/dist/server/api/timeline.d.ts.map +1 -0
  118. package/dist/server/api/wire.d.ts +4 -0
  119. package/dist/server/api/wire.d.ts.map +1 -0
  120. package/dist/server/assets/BindConfig-BjK10BEb.js +15440 -0
  121. package/dist/server/assets/BindConfig-BjK10BEb.js.map +1 -0
  122. package/dist/server/assets/controlCenterApi-tZPvRPRH.js +1430 -0
  123. package/dist/server/assets/controlCenterApi-tZPvRPRH.js.map +1 -0
  124. package/dist/server/assets/domainEvent-x7yeq-gU.js +2130 -0
  125. package/dist/server/assets/domainEvent-x7yeq-gU.js.map +1 -0
  126. package/dist/server/assets/firstPartyServices-Y41P8uke.js +49 -0
  127. package/dist/server/assets/firstPartyServices-Y41P8uke.js.map +1 -0
  128. package/dist/server/assets/manualPluginSynchronization-C0aHB4UM.js +1805 -0
  129. package/dist/server/assets/manualPluginSynchronization-C0aHB4UM.js.map +1 -0
  130. package/dist/server/assets/portfolioInvalidation-Ds9Xm4_P.js +15463 -0
  131. package/dist/server/assets/portfolioInvalidation-Ds9Xm4_P.js.map +1 -0
  132. package/dist/server/assets/readiness-CzU3vjYQ.js +1012 -0
  133. package/dist/server/assets/readiness-CzU3vjYQ.js.map +1 -0
  134. package/dist/server/build-graph.json +3948 -0
  135. package/dist/server/domain/actors.d.ts +147 -0
  136. package/dist/server/domain/actors.d.ts.map +1 -0
  137. package/dist/server/domain/authorizedShare.d.ts +24 -0
  138. package/dist/server/domain/authorizedShare.d.ts.map +1 -0
  139. package/dist/server/domain/deliveryGraph.d.ts +848 -0
  140. package/dist/server/domain/deliveryGraph.d.ts.map +1 -0
  141. package/dist/server/domain/domainEvent.d.ts +50 -0
  142. package/dist/server/domain/domainEvent.d.ts.map +1 -0
  143. package/dist/server/domain/firstPartyServices.d.ts +60 -0
  144. package/dist/server/domain/firstPartyServices.d.ts.map +1 -0
  145. package/dist/server/domain/freshness.d.ts +367 -0
  146. package/dist/server/domain/freshness.d.ts.map +1 -0
  147. package/dist/server/domain/governedAction/bindings.d.ts +264 -0
  148. package/dist/server/domain/governedAction/bindings.d.ts.map +1 -0
  149. package/dist/server/domain/governedAction/index.d.ts +6 -0
  150. package/dist/server/domain/governedAction/index.d.ts.map +1 -0
  151. package/dist/server/domain/governedAction/lifecycle.d.ts +71 -0
  152. package/dist/server/domain/governedAction/lifecycle.d.ts.map +1 -0
  153. package/dist/server/domain/governedAction/model.d.ts +357 -0
  154. package/dist/server/domain/governedAction/model.d.ts.map +1 -0
  155. package/dist/server/domain/governedAction/stateMachine.d.ts +450 -0
  156. package/dist/server/domain/governedAction/stateMachine.d.ts.map +1 -0
  157. package/dist/server/domain/identifiers.d.ts +110 -0
  158. package/dist/server/domain/identifiers.d.ts.map +1 -0
  159. package/dist/server/domain/index.d.ts +26 -0
  160. package/dist/server/domain/index.d.ts.map +1 -0
  161. package/dist/server/domain/index.js +52 -0
  162. package/dist/server/domain/index.js.map +1 -0
  163. package/dist/server/domain/normalizedIssue.d.ts +223 -0
  164. package/dist/server/domain/normalizedIssue.d.ts.map +1 -0
  165. package/dist/server/domain/plugins/actions.d.ts +246 -0
  166. package/dist/server/domain/plugins/actions.d.ts.map +1 -0
  167. package/dist/server/domain/plugins/bounds.d.ts +12 -0
  168. package/dist/server/domain/plugins/bounds.d.ts.map +1 -0
  169. package/dist/server/domain/plugins/descriptor.d.ts +205 -0
  170. package/dist/server/domain/plugins/descriptor.d.ts.map +1 -0
  171. package/dist/server/domain/plugins/discovery.d.ts +39 -0
  172. package/dist/server/domain/plugins/discovery.d.ts.map +1 -0
  173. package/dist/server/domain/plugins/events.d.ts +232 -0
  174. package/dist/server/domain/plugins/events.d.ts.map +1 -0
  175. package/dist/server/domain/plugins/index.d.ts +11 -0
  176. package/dist/server/domain/plugins/index.d.ts.map +1 -0
  177. package/dist/server/domain/readiness/evaluate.d.ts +4 -0
  178. package/dist/server/domain/readiness/evaluate.d.ts.map +1 -0
  179. package/dist/server/domain/readiness/index.d.ts +7 -0
  180. package/dist/server/domain/readiness/index.d.ts.map +1 -0
  181. package/dist/server/domain/readiness/material.d.ts +114 -0
  182. package/dist/server/domain/readiness/material.d.ts.map +1 -0
  183. package/dist/server/domain/readiness/model.d.ts +1736 -0
  184. package/dist/server/domain/readiness/model.d.ts.map +1 -0
  185. package/dist/server/domain/readiness/policy.d.ts +73 -0
  186. package/dist/server/domain/readiness/policy.d.ts.map +1 -0
  187. package/dist/server/domain/readiness/rollup.d.ts +6 -0
  188. package/dist/server/domain/readiness/rollup.d.ts.map +1 -0
  189. package/dist/server/domain/relationshipRepair.d.ts +97 -0
  190. package/dist/server/domain/relationshipRepair.d.ts.map +1 -0
  191. package/dist/server/domain/release.d.ts +191 -0
  192. package/dist/server/domain/release.d.ts.map +1 -0
  193. package/dist/server/domain/releaseRelay.d.ts +44 -0
  194. package/dist/server/domain/releaseRelay.d.ts.map +1 -0
  195. package/dist/server/domain/sourceRevision.d.ts +39 -0
  196. package/dist/server/domain/sourceRevision.d.ts.map +1 -0
  197. package/dist/server/domain/timeline.d.ts +105 -0
  198. package/dist/server/domain/timeline.d.ts.map +1 -0
  199. package/dist/server/domain/utcTimestamp.d.ts +9 -0
  200. package/dist/server/domain/utcTimestamp.d.ts.map +1 -0
  201. package/dist/server/index.d.ts +8 -0
  202. package/dist/server/index.d.ts.map +1 -0
  203. package/dist/server/index.js +7 -0
  204. package/dist/server/server/DataRootProtocol.d.ts +80 -0
  205. package/dist/server/server/DataRootProtocol.d.ts.map +1 -0
  206. package/dist/server/server/agent/AgentJobWorker.d.ts +48 -0
  207. package/dist/server/server/agent/AgentJobWorker.d.ts.map +1 -0
  208. package/dist/server/server/agent/AgentRuntimeRegistry.d.ts +17 -0
  209. package/dist/server/server/agent/AgentRuntimeRegistry.d.ts.map +1 -0
  210. package/dist/server/server/agent/index.d.ts +4 -0
  211. package/dist/server/server/agent/index.d.ts.map +1 -0
  212. package/dist/server/server/api/ApiConfiguration.d.ts +24 -0
  213. package/dist/server/server/api/ApiConfiguration.d.ts.map +1 -0
  214. package/dist/server/server/api/ApiMiddleware.d.ts +14 -0
  215. package/dist/server/server/api/ApiMiddleware.d.ts.map +1 -0
  216. package/dist/server/server/api/ApplicationServices.d.ts +320 -0
  217. package/dist/server/server/api/ApplicationServices.d.ts.map +1 -0
  218. package/dist/server/server/api/ControlCenterApiServer.d.ts +11 -0
  219. package/dist/server/server/api/ControlCenterApiServer.d.ts.map +1 -0
  220. package/dist/server/server/api/ErrorMapping.d.ts +29 -0
  221. package/dist/server/server/api/ErrorMapping.d.ts.map +1 -0
  222. package/dist/server/server/api/Handlers.d.ts +24 -0
  223. package/dist/server/server/api/Handlers.d.ts.map +1 -0
  224. package/dist/server/server/api/LiveStreamAdmission.d.ts +34 -0
  225. package/dist/server/server/api/LiveStreamAdmission.d.ts.map +1 -0
  226. package/dist/server/server/api/RequestBoundary.d.ts +17 -0
  227. package/dist/server/server/api/RequestBoundary.d.ts.map +1 -0
  228. package/dist/server/server/api/RequestContext.d.ts +38 -0
  229. package/dist/server/server/api/RequestContext.d.ts.map +1 -0
  230. package/dist/server/server/api/RequestLimits.d.ts +79 -0
  231. package/dist/server/server/api/RequestLimits.d.ts.map +1 -0
  232. package/dist/server/server/api/index.d.ts +9 -0
  233. package/dist/server/server/api/index.d.ts.map +1 -0
  234. package/dist/server/server/application/authorizedShares.d.ts +29 -0
  235. package/dist/server/server/application/authorizedShares.d.ts.map +1 -0
  236. package/dist/server/server/application/awsResourceDiscovery.d.ts +18 -0
  237. package/dist/server/server/application/awsResourceDiscovery.d.ts.map +1 -0
  238. package/dist/server/server/application/connectionOwnership.d.ts +50 -0
  239. package/dist/server/server/application/connectionOwnership.d.ts.map +1 -0
  240. package/dist/server/server/application/deliveryGraphInspection.d.ts +59 -0
  241. package/dist/server/server/application/deliveryGraphInspection.d.ts.map +1 -0
  242. package/dist/server/server/application/errors.d.ts +10 -0
  243. package/dist/server/server/application/errors.d.ts.map +1 -0
  244. package/dist/server/server/application/fakeReleaseNormalization.d.ts +152 -0
  245. package/dist/server/server/application/fakeReleaseNormalization.d.ts.map +1 -0
  246. package/dist/server/server/application/index.d.ts +17 -0
  247. package/dist/server/server/application/index.d.ts.map +1 -0
  248. package/dist/server/server/application/liveEvents.d.ts +22 -0
  249. package/dist/server/server/application/liveEvents.d.ts.map +1 -0
  250. package/dist/server/server/application/manualPluginSynchronization.d.ts +41 -0
  251. package/dist/server/server/application/manualPluginSynchronization.d.ts.map +1 -0
  252. package/dist/server/server/application/mediaReads.d.ts +14 -0
  253. package/dist/server/server/application/mediaReads.d.ts.map +1 -0
  254. package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts +109 -0
  255. package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts.map +1 -0
  256. package/dist/server/server/application/pluginAdministration.d.ts +1318 -0
  257. package/dist/server/server/application/pluginAdministration.d.ts.map +1 -0
  258. package/dist/server/server/application/pluginSynchronizationAuthority.d.ts +22 -0
  259. package/dist/server/server/application/pluginSynchronizationAuthority.d.ts.map +1 -0
  260. package/dist/server/server/application/portfolioInvalidation.d.ts +35 -0
  261. package/dist/server/server/application/portfolioInvalidation.d.ts.map +1 -0
  262. package/dist/server/server/application/portfolioSnapshots.d.ts +12 -0
  263. package/dist/server/server/application/portfolioSnapshots.d.ts.map +1 -0
  264. package/dist/server/server/application/readinessDigests.d.ts +3 -0
  265. package/dist/server/server/application/readinessDigests.d.ts.map +1 -0
  266. package/dist/server/server/application/relationshipInference.d.ts +57 -0
  267. package/dist/server/server/application/relationshipInference.d.ts.map +1 -0
  268. package/dist/server/server/application/relationshipInferenceMaterialization.d.ts +26 -0
  269. package/dist/server/server/application/relationshipInferenceMaterialization.d.ts.map +1 -0
  270. package/dist/server/server/application/relationshipRepairProposals.d.ts +41 -0
  271. package/dist/server/server/application/relationshipRepairProposals.d.ts.map +1 -0
  272. package/dist/server/server/application/releaseAgent.d.ts +30 -0
  273. package/dist/server/server/application/releaseAgent.d.ts.map +1 -0
  274. package/dist/server/server/application/releaseAgentJobs.d.ts +26 -0
  275. package/dist/server/server/application/releaseAgentJobs.d.ts.map +1 -0
  276. package/dist/server/server/application/releaseSynchronization.d.ts +55 -0
  277. package/dist/server/server/application/releaseSynchronization.d.ts.map +1 -0
  278. package/dist/server/server/application/timelineExportAudits.d.ts +22 -0
  279. package/dist/server/server/application/timelineExportAudits.d.ts.map +1 -0
  280. package/dist/server/server/application/timelineExports.d.ts +46 -0
  281. package/dist/server/server/application/timelineExports.d.ts.map +1 -0
  282. package/dist/server/server/application/timelineReads.d.ts +29 -0
  283. package/dist/server/server/application/timelineReads.d.ts.map +1 -0
  284. package/dist/server/server/auth/Auth.d.ts +169 -0
  285. package/dist/server/server/auth/Auth.d.ts.map +1 -0
  286. package/dist/server/server/auth/AuthRepository.d.ts +160 -0
  287. package/dist/server/server/auth/AuthRepository.d.ts.map +1 -0
  288. package/dist/server/server/auth/TerminalRecovery.d.ts +35 -0
  289. package/dist/server/server/auth/TerminalRecovery.d.ts.map +1 -0
  290. package/dist/server/server/auth/errors.d.ts +31 -0
  291. package/dist/server/server/auth/errors.d.ts.map +1 -0
  292. package/dist/server/server/auth/index.d.ts +5 -0
  293. package/dist/server/server/auth/index.d.ts.map +1 -0
  294. package/dist/server/server/auth/models.d.ts +63 -0
  295. package/dist/server/server/auth/models.d.ts.map +1 -0
  296. package/dist/server/server/cli.d.ts +3 -0
  297. package/dist/server/server/cli.d.ts.map +1 -0
  298. package/dist/server/server/cli.js +669 -0
  299. package/dist/server/server/cli.js.map +1 -0
  300. package/dist/server/server/cliArguments.d.ts +21 -0
  301. package/dist/server/server/cliArguments.d.ts.map +1 -0
  302. package/dist/server/server/cliConfiguration.d.ts +20 -0
  303. package/dist/server/server/cliConfiguration.d.ts.map +1 -0
  304. package/dist/server/server/governance/governedActionAuthority.d.ts +54 -0
  305. package/dist/server/server/governance/governedActionAuthority.d.ts.map +1 -0
  306. package/dist/server/server/governance/governedActionDigests.d.ts +1348 -0
  307. package/dist/server/server/governance/governedActionDigests.d.ts.map +1 -0
  308. package/dist/server/server/governance/internal/GovernedActionExecutionEngine.d.ts +55 -0
  309. package/dist/server/server/governance/internal/GovernedActionExecutionEngine.d.ts.map +1 -0
  310. package/dist/server/server/governance/internal/GovernedActionExecutionStore.d.ts +116 -0
  311. package/dist/server/server/governance/internal/GovernedActionExecutionStore.d.ts.map +1 -0
  312. package/dist/server/server/governance/internal/GovernedActionPolicyEvaluator.d.ts +120 -0
  313. package/dist/server/server/governance/internal/GovernedActionPolicyEvaluator.d.ts.map +1 -0
  314. package/dist/server/server/governance/internal/execution-store/begin.d.ts +17 -0
  315. package/dist/server/server/governance/internal/execution-store/begin.d.ts.map +1 -0
  316. package/dist/server/server/governance/internal/execution-store/current-evidence.d.ts +33 -0
  317. package/dist/server/server/governance/internal/execution-store/current-evidence.d.ts.map +1 -0
  318. package/dist/server/server/governance/internal/execution-store/current-session.d.ts +29 -0
  319. package/dist/server/server/governance/internal/execution-store/current-session.d.ts.map +1 -0
  320. package/dist/server/server/governance/internal/execution-store/current-target.d.ts +28 -0
  321. package/dist/server/server/governance/internal/execution-store/current-target.d.ts.map +1 -0
  322. package/dist/server/server/governance/internal/execution-store/dispatch-inbox.d.ts +20 -0
  323. package/dist/server/server/governance/internal/execution-store/dispatch-inbox.d.ts.map +1 -0
  324. package/dist/server/server/governance/internal/execution-store/dispatch-outcome.d.ts +78 -0
  325. package/dist/server/server/governance/internal/execution-store/dispatch-outcome.d.ts.map +1 -0
  326. package/dist/server/server/governance/internal/execution-store/inspect.d.ts +17 -0
  327. package/dist/server/server/governance/internal/execution-store/inspect.d.ts.map +1 -0
  328. package/dist/server/server/governance/internal/execution-store/live.d.ts +6 -0
  329. package/dist/server/server/governance/internal/execution-store/live.d.ts.map +1 -0
  330. package/dist/server/server/governance/internal/execution-store/preparation.d.ts +42 -0
  331. package/dist/server/server/governance/internal/execution-store/preparation.d.ts.map +1 -0
  332. package/dist/server/server/governance/internal/execution-store/provider-outcome-fold.d.ts +33 -0
  333. package/dist/server/server/governance/internal/execution-store/provider-outcome-fold.d.ts.map +1 -0
  334. package/dist/server/server/governance/internal/execution-store/reconciliation-inbox.d.ts +20 -0
  335. package/dist/server/server/governance/internal/execution-store/reconciliation-inbox.d.ts.map +1 -0
  336. package/dist/server/server/governance/internal/execution-store/reconciliation-locator.d.ts +5 -0
  337. package/dist/server/server/governance/internal/execution-store/reconciliation-locator.d.ts.map +1 -0
  338. package/dist/server/server/governance/internal/execution-store/reconciliation-outcome.d.ts +123 -0
  339. package/dist/server/server/governance/internal/execution-store/reconciliation-outcome.d.ts.map +1 -0
  340. package/dist/server/server/governance/internal/execution-store/record-blocked.d.ts +13 -0
  341. package/dist/server/server/governance/internal/execution-store/record-blocked.d.ts.map +1 -0
  342. package/dist/server/server/governance/internal/execution-store/record-dispatch.d.ts +12 -0
  343. package/dist/server/server/governance/internal/execution-store/record-dispatch.d.ts.map +1 -0
  344. package/dist/server/server/governance/internal/execution-store/record-reconciliation.d.ts +12 -0
  345. package/dist/server/server/governance/internal/execution-store/record-reconciliation.d.ts.map +1 -0
  346. package/dist/server/server/governance/internal/execution-store/record-recovery-unavailable.d.ts +11 -0
  347. package/dist/server/server/governance/internal/execution-store/record-recovery-unavailable.d.ts.map +1 -0
  348. package/dist/server/server/governance/internal/execution-store/record-unknown.d.ts +11 -0
  349. package/dist/server/server/governance/internal/execution-store/record-unknown.d.ts.map +1 -0
  350. package/dist/server/server/governance/internal/execution-store/recovery-candidates.d.ts +12 -0
  351. package/dist/server/server/governance/internal/execution-store/recovery-candidates.d.ts.map +1 -0
  352. package/dist/server/server/governance/internal/execution-store/recovery-claim-expiry.d.ts +9 -0
  353. package/dist/server/server/governance/internal/execution-store/recovery-claim-expiry.d.ts.map +1 -0
  354. package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts +465 -0
  355. package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts.map +1 -0
  356. package/dist/server/server/governance/internal/execution-store/tokens.d.ts +52 -0
  357. package/dist/server/server/governance/internal/execution-store/tokens.d.ts.map +1 -0
  358. package/dist/server/server/http/StaticApplication.d.ts +8 -0
  359. package/dist/server/server/http/StaticApplication.d.ts.map +1 -0
  360. package/dist/server/server/http/index.d.ts +4 -0
  361. package/dist/server/server/http/index.d.ts.map +1 -0
  362. package/dist/server/server/http/security/HttpLimits.d.ts +22 -0
  363. package/dist/server/server/http/security/HttpLimits.d.ts.map +1 -0
  364. package/dist/server/server/http/security/RequestPolicy.d.ts +26 -0
  365. package/dist/server/server/http/security/RequestPolicy.d.ts.map +1 -0
  366. package/dist/server/server/http/security/RichDocument.d.ts +154 -0
  367. package/dist/server/server/http/security/RichDocument.d.ts.map +1 -0
  368. package/dist/server/server/http/security/SecurityHeaders.d.ts +7 -0
  369. package/dist/server/server/http/security/SecurityHeaders.d.ts.map +1 -0
  370. package/dist/server/server/http/security/StaticAssetStore.d.ts +43 -0
  371. package/dist/server/server/http/security/StaticAssetStore.d.ts.map +1 -0
  372. package/dist/server/server/http/security/UrlPolicy.d.ts +30 -0
  373. package/dist/server/server/http/security/UrlPolicy.d.ts.map +1 -0
  374. package/dist/server/server/http/security/index.d.ts +8 -0
  375. package/dist/server/server/http/security/index.d.ts.map +1 -0
  376. package/dist/server/server/index.d.ts +18 -0
  377. package/dist/server/server/index.d.ts.map +1 -0
  378. package/dist/server/server/index.js +583 -0
  379. package/dist/server/server/index.js.map +1 -0
  380. package/dist/server/server/observability.d.ts +13 -0
  381. package/dist/server/server/observability.d.ts.map +1 -0
  382. package/dist/server/server/persistence/ContentStore.d.ts +86 -0
  383. package/dist/server/server/persistence/ContentStore.d.ts.map +1 -0
  384. package/dist/server/server/persistence/Database.d.ts +26 -0
  385. package/dist/server/server/persistence/Database.d.ts.map +1 -0
  386. package/dist/server/server/persistence/Persistence.d.ts +7042 -0
  387. package/dist/server/server/persistence/Persistence.d.ts.map +1 -0
  388. package/dist/server/server/persistence/PersistenceConfig.d.ts +27 -0
  389. package/dist/server/server/persistence/PersistenceConfig.d.ts.map +1 -0
  390. package/dist/server/server/persistence/backup/BackupArchive.d.ts +32 -0
  391. package/dist/server/server/persistence/backup/BackupArchive.d.ts.map +1 -0
  392. package/dist/server/server/persistence/backup/BackupArchiveCore.d.ts +23 -0
  393. package/dist/server/server/persistence/backup/BackupArchiveCore.d.ts.map +1 -0
  394. package/dist/server/server/persistence/backup/BackupManifest.d.ts +136 -0
  395. package/dist/server/server/persistence/backup/BackupManifest.d.ts.map +1 -0
  396. package/dist/server/server/persistence/backup/DatabaseSnapshot.d.ts +53 -0
  397. package/dist/server/server/persistence/backup/DatabaseSnapshot.d.ts.map +1 -0
  398. package/dist/server/server/persistence/backup/errors.d.ts +53 -0
  399. package/dist/server/server/persistence/backup/errors.d.ts.map +1 -0
  400. package/dist/server/server/persistence/backup/index.d.ts +4 -0
  401. package/dist/server/server/persistence/backup/index.d.ts.map +1 -0
  402. package/dist/server/server/persistence/errors.d.ts +99 -0
  403. package/dist/server/server/persistence/errors.d.ts.map +1 -0
  404. package/dist/server/server/persistence/governedActionReconciliationLocator.d.ts +14 -0
  405. package/dist/server/server/persistence/governedActionReconciliationLocator.d.ts.map +1 -0
  406. package/dist/server/server/persistence/index.d.ts +11 -0
  407. package/dist/server/server/persistence/index.d.ts.map +1 -0
  408. package/dist/server/server/persistence/object-store/BlobDigest.d.ts +6 -0
  409. package/dist/server/server/persistence/object-store/BlobDigest.d.ts.map +1 -0
  410. package/dist/server/server/persistence/object-store/BlobPath.d.ts +12 -0
  411. package/dist/server/server/persistence/object-store/BlobPath.d.ts.map +1 -0
  412. package/dist/server/server/persistence/object-store/BlobPublisher.d.ts +8 -0
  413. package/dist/server/server/persistence/object-store/BlobPublisher.d.ts.map +1 -0
  414. package/dist/server/server/persistence/object-store/BlobRef.d.ts +16 -0
  415. package/dist/server/server/persistence/object-store/BlobRef.d.ts.map +1 -0
  416. package/dist/server/server/persistence/object-store/BlobStore.d.ts +37 -0
  417. package/dist/server/server/persistence/object-store/BlobStore.d.ts.map +1 -0
  418. package/dist/server/server/persistence/object-store/BlobStoreError.d.ts +57 -0
  419. package/dist/server/server/persistence/object-store/BlobStoreError.d.ts.map +1 -0
  420. package/dist/server/server/persistence/object-store/BlobStoreTypes.d.ts +28 -0
  421. package/dist/server/server/persistence/object-store/BlobStoreTypes.d.ts.map +1 -0
  422. package/dist/server/server/persistence/object-store/OpenedBlob.d.ts +21 -0
  423. package/dist/server/server/persistence/object-store/OpenedBlob.d.ts.map +1 -0
  424. package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts +21 -0
  425. package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts.map +1 -0
  426. package/dist/server/server/persistence/repositories/agentJobModels.d.ts +142 -0
  427. package/dist/server/server/persistence/repositories/agentJobModels.d.ts.map +1 -0
  428. package/dist/server/server/persistence/repositories/agentJobRepository.d.ts +134 -0
  429. package/dist/server/server/persistence/repositories/agentJobRepository.d.ts.map +1 -0
  430. package/dist/server/server/persistence/repositories/authorizedShareRepository.d.ts +92 -0
  431. package/dist/server/server/persistence/repositories/authorizedShareRepository.d.ts.map +1 -0
  432. package/dist/server/server/persistence/repositories/contentBlobMetadataRepository.d.ts +67 -0
  433. package/dist/server/server/persistence/repositories/contentBlobMetadataRepository.d.ts.map +1 -0
  434. package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts +2989 -0
  435. package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts.map +1 -0
  436. package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts +566 -0
  437. package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts.map +1 -0
  438. package/dist/server/server/persistence/repositories/delivery-graph/integrity.d.ts +16 -0
  439. package/dist/server/server/persistence/repositories/delivery-graph/integrity.d.ts.map +1 -0
  440. package/dist/server/server/persistence/repositories/delivery-graph/quarantine.d.ts +22 -0
  441. package/dist/server/server/persistence/repositories/delivery-graph/quarantine.d.ts.map +1 -0
  442. package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts +2147 -0
  443. package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts.map +1 -0
  444. package/dist/server/server/persistence/repositories/delivery-graph/release-slice.d.ts +16 -0
  445. package/dist/server/server/persistence/repositories/delivery-graph/release-slice.d.ts.map +1 -0
  446. package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts +683 -0
  447. package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts.map +1 -0
  448. package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts +946 -0
  449. package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts.map +1 -0
  450. package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts +2121 -0
  451. package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts.map +1 -0
  452. package/dist/server/server/persistence/repositories/domainEventModels.d.ts +89 -0
  453. package/dist/server/server/persistence/repositories/domainEventModels.d.ts.map +1 -0
  454. package/dist/server/server/persistence/repositories/domainEventRepository.d.ts +85 -0
  455. package/dist/server/server/persistence/repositories/domainEventRepository.d.ts.map +1 -0
  456. package/dist/server/server/persistence/repositories/entityRepository.d.ts +134 -0
  457. package/dist/server/server/persistence/repositories/entityRepository.d.ts.map +1 -0
  458. package/dist/server/server/persistence/repositories/governed-action/codec.d.ts +1478 -0
  459. package/dist/server/server/persistence/repositories/governed-action/codec.d.ts.map +1 -0
  460. package/dist/server/server/persistence/repositories/governed-action/contract.d.ts +858 -0
  461. package/dist/server/server/persistence/repositories/governed-action/contract.d.ts.map +1 -0
  462. package/dist/server/server/persistence/repositories/governed-action/quarantine.d.ts +22 -0
  463. package/dist/server/server/persistence/repositories/governed-action/quarantine.d.ts.map +1 -0
  464. package/dist/server/server/persistence/repositories/governed-action/read.d.ts +452 -0
  465. package/dist/server/server/persistence/repositories/governed-action/read.d.ts.map +1 -0
  466. package/dist/server/server/persistence/repositories/governed-action/rows.d.ts +115 -0
  467. package/dist/server/server/persistence/repositories/governed-action/rows.d.ts.map +1 -0
  468. package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts +457 -0
  469. package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts.map +1 -0
  470. package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts +518 -0
  471. package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts.map +1 -0
  472. package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts +702 -0
  473. package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts.map +1 -0
  474. package/dist/server/server/persistence/repositories/governed-action/write.d.ts +618 -0
  475. package/dist/server/server/persistence/repositories/governed-action/write.d.ts.map +1 -0
  476. package/dist/server/server/persistence/repositories/governedActionRepository.d.ts +467 -0
  477. package/dist/server/server/persistence/repositories/governedActionRepository.d.ts.map +1 -0
  478. package/dist/server/server/persistence/repositories/index.d.ts +26 -0
  479. package/dist/server/server/persistence/repositories/index.d.ts.map +1 -0
  480. package/dist/server/server/persistence/repositories/internal.d.ts +38 -0
  481. package/dist/server/server/persistence/repositories/internal.d.ts.map +1 -0
  482. package/dist/server/server/persistence/repositories/models.d.ts +420 -0
  483. package/dist/server/server/persistence/repositories/models.d.ts.map +1 -0
  484. package/dist/server/server/persistence/repositories/peopleRepository.d.ts +407 -0
  485. package/dist/server/server/persistence/repositories/peopleRepository.d.ts.map +1 -0
  486. package/dist/server/server/persistence/repositories/persistedRowQuarantine.d.ts +20 -0
  487. package/dist/server/server/persistence/repositories/persistedRowQuarantine.d.ts.map +1 -0
  488. package/dist/server/server/persistence/repositories/pluginConfigurationModels.d.ts +76 -0
  489. package/dist/server/server/persistence/repositories/pluginConfigurationModels.d.ts.map +1 -0
  490. package/dist/server/server/persistence/repositories/pluginConfigurationRepository.d.ts +179 -0
  491. package/dist/server/server/persistence/repositories/pluginConfigurationRepository.d.ts.map +1 -0
  492. package/dist/server/server/persistence/repositories/pluginConnectionRepository.d.ts +123 -0
  493. package/dist/server/server/persistence/repositories/pluginConnectionRepository.d.ts.map +1 -0
  494. package/dist/server/server/persistence/repositories/pluginRuntimeModels.d.ts +195 -0
  495. package/dist/server/server/persistence/repositories/pluginRuntimeModels.d.ts.map +1 -0
  496. package/dist/server/server/persistence/repositories/pluginRuntimeRepository.d.ts +431 -0
  497. package/dist/server/server/persistence/repositories/pluginRuntimeRepository.d.ts.map +1 -0
  498. package/dist/server/server/persistence/repositories/providerAccountRepository.d.ts +150 -0
  499. package/dist/server/server/persistence/repositories/providerAccountRepository.d.ts.map +1 -0
  500. package/dist/server/server/persistence/repositories/quarantineRepository.d.ts +42 -0
  501. package/dist/server/server/persistence/repositories/quarantineRepository.d.ts.map +1 -0
  502. package/dist/server/server/persistence/repositories/readiness/assessments.d.ts +2679 -0
  503. package/dist/server/server/persistence/repositories/readiness/assessments.d.ts.map +1 -0
  504. package/dist/server/server/persistence/repositories/readiness/codec.d.ts +1368 -0
  505. package/dist/server/server/persistence/repositories/readiness/codec.d.ts.map +1 -0
  506. package/dist/server/server/persistence/repositories/readiness/contract.d.ts +3315 -0
  507. package/dist/server/server/persistence/repositories/readiness/contract.d.ts.map +1 -0
  508. package/dist/server/server/persistence/repositories/readiness/materialization.d.ts +459 -0
  509. package/dist/server/server/persistence/repositories/readiness/materialization.d.ts.map +1 -0
  510. package/dist/server/server/persistence/repositories/readiness/quarantine.d.ts +22 -0
  511. package/dist/server/server/persistence/repositories/readiness/quarantine.d.ts.map +1 -0
  512. package/dist/server/server/persistence/repositories/readiness/queue.d.ts +112 -0
  513. package/dist/server/server/persistence/repositories/readiness/queue.d.ts.map +1 -0
  514. package/dist/server/server/persistence/repositories/readiness/rows.d.ts +169 -0
  515. package/dist/server/server/persistence/repositories/readiness/rows.d.ts.map +1 -0
  516. package/dist/server/server/persistence/repositories/readiness/rules.d.ts +85 -0
  517. package/dist/server/server/persistence/repositories/readiness/rules.d.ts.map +1 -0
  518. package/dist/server/server/persistence/repositories/readinessRepository.d.ts +1722 -0
  519. package/dist/server/server/persistence/repositories/readinessRepository.d.ts.map +1 -0
  520. package/dist/server/server/persistence/repositories/relationshipRepairProposalRepository.d.ts +294 -0
  521. package/dist/server/server/persistence/repositories/relationshipRepairProposalRepository.d.ts.map +1 -0
  522. package/dist/server/server/persistence/repositories/releaseRepository.d.ts +1062 -0
  523. package/dist/server/server/persistence/repositories/releaseRepository.d.ts.map +1 -0
  524. package/dist/server/server/persistence/repositories/timelineExportAuditRepository.d.ts +39 -0
  525. package/dist/server/server/persistence/repositories/timelineExportAuditRepository.d.ts.map +1 -0
  526. package/dist/server/server/persistence/repositories/timelineRepository.d.ts +84 -0
  527. package/dist/server/server/persistence/repositories/timelineRepository.d.ts.map +1 -0
  528. package/dist/server/server/persistence/repositories/workspaceRepository.d.ts +52 -0
  529. package/dist/server/server/persistence/repositories/workspaceRepository.d.ts.map +1 -0
  530. package/dist/server/server/persistence/schema.d.ts +17 -0
  531. package/dist/server/server/persistence/schema.d.ts.map +1 -0
  532. package/dist/server/server/persistence/schemas.d.ts +14 -0
  533. package/dist/server/server/persistence/schemas.d.ts.map +1 -0
  534. package/dist/server/server/plugins/AtlassianBasicAuth.d.ts +2 -0
  535. package/dist/server/server/plugins/AtlassianBasicAuth.d.ts.map +1 -0
  536. package/dist/server/server/plugins/PluginCapabilityCodecs.d.ts +357 -0
  537. package/dist/server/server/plugins/PluginCapabilityCodecs.d.ts.map +1 -0
  538. package/dist/server/server/plugins/PluginConnection.d.ts +28 -0
  539. package/dist/server/server/plugins/PluginConnection.d.ts.map +1 -0
  540. package/dist/server/server/plugins/PluginConnectionMap.d.ts +22 -0
  541. package/dist/server/server/plugins/PluginConnectionMap.d.ts.map +1 -0
  542. package/dist/server/server/plugins/PluginDefinition.d.ts +9 -0
  543. package/dist/server/server/plugins/PluginDefinition.d.ts.map +1 -0
  544. package/dist/server/server/plugins/PluginDefinitionV1.d.ts +11 -0
  545. package/dist/server/server/plugins/PluginDefinitionV1.d.ts.map +1 -0
  546. package/dist/server/server/plugins/PluginExecutor.d.ts +14 -0
  547. package/dist/server/server/plugins/PluginExecutor.d.ts.map +1 -0
  548. package/dist/server/server/plugins/atlassian/AtlassianOAuthGrants.d.ts +35 -0
  549. package/dist/server/server/plugins/atlassian/AtlassianOAuthGrants.d.ts.map +1 -0
  550. package/dist/server/server/plugins/atlassian/AtlassianProfiles.d.ts +39 -0
  551. package/dist/server/server/plugins/atlassian/AtlassianProfiles.d.ts.map +1 -0
  552. package/dist/server/server/plugins/catalog/firstPartyServiceCatalog.d.ts +13 -0
  553. package/dist/server/server/plugins/catalog/firstPartyServiceCatalog.d.ts.map +1 -0
  554. package/dist/server/server/plugins/clockify/ClockifyReadPlugin.d.ts +78 -0
  555. package/dist/server/server/plugins/clockify/ClockifyReadPlugin.d.ts.map +1 -0
  556. package/dist/server/server/plugins/clockify/ClockifyReadProvider.d.ts +2 -0
  557. package/dist/server/server/plugins/clockify/ClockifyReadProvider.d.ts.map +1 -0
  558. package/dist/server/server/plugins/clockify/ClockifyTimeEntryNormalization.d.ts +2 -0
  559. package/dist/server/server/plugins/clockify/ClockifyTimeEntryNormalization.d.ts.map +1 -0
  560. package/dist/server/server/plugins/clockify/index.d.ts +3 -0
  561. package/dist/server/server/plugins/clockify/index.d.ts.map +1 -0
  562. package/dist/server/server/plugins/codecommit/CodeCommitPluginDefinition.d.ts +4 -0
  563. package/dist/server/server/plugins/codecommit/CodeCommitPluginDefinition.d.ts.map +1 -0
  564. package/dist/server/server/plugins/codecommit/index.d.ts +3 -0
  565. package/dist/server/server/plugins/codecommit/index.d.ts.map +1 -0
  566. package/dist/server/server/plugins/codepipeline/CodePipelinePluginDefinition.d.ts +4 -0
  567. package/dist/server/server/plugins/codepipeline/CodePipelinePluginDefinition.d.ts.map +1 -0
  568. package/dist/server/server/plugins/codepipeline/CodePipelineReadClient.d.ts +2 -0
  569. package/dist/server/server/plugins/codepipeline/CodePipelineReadClient.d.ts.map +1 -0
  570. package/dist/server/server/plugins/codepipeline/CodePipelineReadProvider.d.ts +2 -0
  571. package/dist/server/server/plugins/codepipeline/CodePipelineReadProvider.d.ts.map +1 -0
  572. package/dist/server/server/plugins/codepipeline/index.d.ts +3 -0
  573. package/dist/server/server/plugins/codepipeline/index.d.ts.map +1 -0
  574. package/dist/server/server/plugins/confluence/ConfluencePageAdapter.d.ts +2 -0
  575. package/dist/server/server/plugins/confluence/ConfluencePageAdapter.d.ts.map +1 -0
  576. package/dist/server/server/plugins/confluence/ConfluencePageClient.d.ts +2 -0
  577. package/dist/server/server/plugins/confluence/ConfluencePageClient.d.ts.map +1 -0
  578. package/dist/server/server/plugins/confluence/ConfluencePagePluginDefinition.d.ts +44 -0
  579. package/dist/server/server/plugins/confluence/ConfluencePagePluginDefinition.d.ts.map +1 -0
  580. package/dist/server/server/plugins/confluence/ConfluencePageSchemas.d.ts +2 -0
  581. package/dist/server/server/plugins/confluence/ConfluencePageSchemas.d.ts.map +1 -0
  582. package/dist/server/server/plugins/confluence/SafeConfluenceMarkdown.d.ts +2 -0
  583. package/dist/server/server/plugins/confluence/SafeConfluenceMarkdown.d.ts.map +1 -0
  584. package/dist/server/server/plugins/failures.d.ts +79 -0
  585. package/dist/server/server/plugins/failures.d.ts.map +1 -0
  586. package/dist/server/server/plugins/fake/FakePluginDefinition.d.ts +17 -0
  587. package/dist/server/server/plugins/fake/FakePluginDefinition.d.ts.map +1 -0
  588. package/dist/server/server/plugins/fake/FakePluginProbe.d.ts +40 -0
  589. package/dist/server/server/plugins/fake/FakePluginProbe.d.ts.map +1 -0
  590. package/dist/server/server/plugins/fake/FakePluginScenario.d.ts +46 -0
  591. package/dist/server/server/plugins/fake/FakePluginScenario.d.ts.map +1 -0
  592. package/dist/server/server/plugins/firstPartySynchronization.d.ts +7 -0
  593. package/dist/server/server/plugins/firstPartySynchronization.d.ts.map +1 -0
  594. package/dist/server/server/plugins/index.d.ts +21 -0
  595. package/dist/server/server/plugins/index.d.ts.map +1 -0
  596. package/dist/server/server/plugins/internal/AuthorizedPluginExecutor.d.ts +8 -0
  597. package/dist/server/server/plugins/internal/AuthorizedPluginExecutor.d.ts.map +1 -0
  598. package/dist/server/server/plugins/internal/AuthorizedPluginExecutorMap.d.ts +27 -0
  599. package/dist/server/server/plugins/internal/AuthorizedPluginExecutorMap.d.ts.map +1 -0
  600. package/dist/server/server/plugins/internal/FirstPartyPluginRuntimeRegistry.d.ts +2 -0
  601. package/dist/server/server/plugins/internal/FirstPartyPluginRuntimeRegistry.d.ts.map +1 -0
  602. package/dist/server/server/plugins/internal/PluginRuntime.d.ts +13 -0
  603. package/dist/server/server/plugins/internal/PluginRuntime.d.ts.map +1 -0
  604. package/dist/server/server/plugins/internal/PluginRuntimeAuthority.d.ts +154 -0
  605. package/dist/server/server/plugins/internal/PluginRuntimeAuthority.d.ts.map +1 -0
  606. package/dist/server/server/plugins/internal/PluginRuntimeAuthorityRepository.d.ts +131 -0
  607. package/dist/server/server/plugins/internal/PluginRuntimeAuthorityRepository.d.ts.map +1 -0
  608. package/dist/server/server/plugins/internal/PluginRuntimeAuthoritySource.d.ts +23 -0
  609. package/dist/server/server/plugins/internal/PluginRuntimeAuthoritySource.d.ts.map +1 -0
  610. package/dist/server/server/plugins/internal/PluginRuntimeMap.d.ts +23 -0
  611. package/dist/server/server/plugins/internal/PluginRuntimeMap.d.ts.map +1 -0
  612. package/dist/server/server/plugins/internal/PluginRuntimeRegistry.d.ts +21 -0
  613. package/dist/server/server/plugins/internal/PluginRuntimeRegistry.d.ts.map +1 -0
  614. package/dist/server/server/plugins/jira/JiraIssueNormalization.d.ts +2 -0
  615. package/dist/server/server/plugins/jira/JiraIssueNormalization.d.ts.map +1 -0
  616. package/dist/server/server/plugins/jira/JiraReadPlugin.d.ts +74 -0
  617. package/dist/server/server/plugins/jira/JiraReadPlugin.d.ts.map +1 -0
  618. package/dist/server/server/plugins/jira/JiraReadProvider.d.ts +7 -0
  619. package/dist/server/server/plugins/jira/JiraReadProvider.d.ts.map +1 -0
  620. package/dist/server/server/plugins/jira/index.d.ts +3 -0
  621. package/dist/server/server/plugins/jira/index.d.ts.map +1 -0
  622. package/dist/server/server/plugins/negotiation.d.ts +75 -0
  623. package/dist/server/server/plugins/negotiation.d.ts.map +1 -0
  624. package/dist/server/server/plugins/retryPolicy.d.ts +28 -0
  625. package/dist/server/server/plugins/retryPolicy.d.ts.map +1 -0
  626. package/dist/server/server/readinessDigests.d.ts +103 -0
  627. package/dist/server/server/readinessDigests.d.ts.map +1 -0
  628. package/dist/server/server/runtime/Bootstrap.d.ts +39 -0
  629. package/dist/server/server/runtime/Bootstrap.d.ts.map +1 -0
  630. package/dist/server/server/runtime/ControlCenterServer.d.ts +57 -0
  631. package/dist/server/server/runtime/ControlCenterServer.d.ts.map +1 -0
  632. package/dist/server/server/runtime/DatabaseDrain.d.ts +6 -0
  633. package/dist/server/server/runtime/DatabaseDrain.d.ts.map +1 -0
  634. package/dist/server/server/runtime/DomainEventWakeups.d.ts +22 -0
  635. package/dist/server/server/runtime/DomainEventWakeups.d.ts.map +1 -0
  636. package/dist/server/server/runtime/FirstPartyPluginRuntime.d.ts +2 -0
  637. package/dist/server/server/runtime/FirstPartyPluginRuntime.d.ts.map +1 -0
  638. package/dist/server/server/runtime/GovernedActionExecutionStartup.d.ts +35 -0
  639. package/dist/server/server/runtime/GovernedActionExecutionStartup.d.ts.map +1 -0
  640. package/dist/server/server/runtime/NodeTransport.d.ts +57 -0
  641. package/dist/server/server/runtime/NodeTransport.d.ts.map +1 -0
  642. package/dist/server/server/runtime/ReleaseSynchronizationStartup.d.ts +44 -0
  643. package/dist/server/server/runtime/ReleaseSynchronizationStartup.d.ts.map +1 -0
  644. package/dist/server/server/runtime/RequestUrlBoundary.d.ts +4 -0
  645. package/dist/server/server/runtime/RequestUrlBoundary.d.ts.map +1 -0
  646. package/dist/server/server/runtime/ServerLifecycle.d.ts +74 -0
  647. package/dist/server/server/runtime/ServerLifecycle.d.ts.map +1 -0
  648. package/dist/server/server/runtime/index.d.ts +9 -0
  649. package/dist/server/server/runtime/index.d.ts.map +1 -0
  650. package/dist/server/server/secrets/SecretRef.d.ts +6 -0
  651. package/dist/server/server/secrets/SecretRef.d.ts.map +1 -0
  652. package/dist/server/server/secrets/SecretStore.d.ts +39 -0
  653. package/dist/server/server/secrets/SecretStore.d.ts.map +1 -0
  654. package/dist/server/server/secrets/SecretStoreError.d.ts +41 -0
  655. package/dist/server/server/secrets/SecretStoreError.d.ts.map +1 -0
  656. package/dist/server/server/secrets/index.d.ts +5 -0
  657. package/dist/server/server/secrets/index.d.ts.map +1 -0
  658. package/dist/server/server/security/BindConfig.d.ts +51 -0
  659. package/dist/server/server/security/BindConfig.d.ts.map +1 -0
  660. package/dist/server/server/security/RequestSecurity.d.ts +84 -0
  661. package/dist/server/server/security/RequestSecurity.d.ts.map +1 -0
  662. package/dist/server/server/security/index.d.ts +3 -0
  663. package/dist/server/server/security/index.d.ts.map +1 -0
  664. package/package.json +101 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReleaseRoute-DyDm5s85.js","names":[],"sources":["../../../src/client/releases/relationshipRepairCandidateTransport.ts","../../../src/client/releases/RelationshipRepairCandidatePicker.module.css","../../../src/client/releases/RelationshipRepairCandidatePicker.tsx","../../../src/client/releases/relationshipRepairTransport.ts","../../../src/client/releases/useRelationshipRepairProposals.ts","../../../src/client/releases/RelationshipRepairPanel.module.css","../../../src/client/releases/RelationshipRepairPanel.tsx","../../../src/client/releases/ReleaseRoute.module.css","../../../src/client/releases/ReleaseRoute.tsx"],"sourcesContent":["import * as BrowserCrypto from \"@effect/platform-browser/BrowserCrypto\"\nimport * as Crypto from \"effect/Crypto\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\"\n\nimport { makeControlCenterApiClient } from \"../../api/client.js\"\nimport type { RelationshipRepairCandidates, RelationshipRepairProposalDraft } from \"../../api/deliveryGraph.js\"\nimport type { LedgerRevision } from \"../../domain/deliveryGraph.js\"\nimport type {\n EnvironmentId,\n RelationshipId,\n RelationshipRepairProposalId,\n ReleaseId\n} from \"../../domain/identifiers.js\"\nimport { RelationshipRepairProposalId as RelationshipRepairProposalIdSchema } from \"../../domain/identifiers.js\"\nimport type { RelationshipRepairProposal } from \"../../domain/relationshipRepair.js\"\nimport { makeAuthenticatedMutationClient } from \"../authenticatedMutationClient.js\"\n\n/** Generate one canonical proposal identity at the browser mutation boundary. */\nexport const makeRelationshipRepairProposalId = Effect.gen(function*() {\n const cryptoService = yield* Crypto.Crypto\n const uuid = yield* cryptoService.randomUUIDv7\n return yield* Schema.decodeUnknownEffect(RelationshipRepairProposalIdSchema)(uuid)\n})\n\nexport interface RelationshipRepairCandidateTransport {\n readonly create: (\n releaseId: ReleaseId,\n draft: RelationshipRepairProposalDraft,\n proposalId: RelationshipRepairProposalId,\n signal: AbortSignal\n ) => Promise<RelationshipRepairProposal>\n readonly draft: (\n releaseId: ReleaseId,\n environmentId: EnvironmentId | null,\n relationshipId: RelationshipId,\n revision: LedgerRevision,\n signal: AbortSignal\n ) => Promise<RelationshipRepairProposalDraft>\n readonly list: (\n releaseId: ReleaseId,\n environmentId: EnvironmentId | null,\n signal: AbortSignal\n ) => Promise<RelationshipRepairCandidates>\n readonly makeProposalId: () => Promise<RelationshipRepairProposalId>\n}\n\n/** Generated-client transport for owner-governed repair candidate creation. */\nexport const browserRelationshipRepairCandidateTransport: RelationshipRepairCandidateTransport = {\n create: (releaseId, draft, proposalId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.deliveryGraph.createRepairProposal({\n params: {\n releaseId,\n relationshipId: draft.precondition.relationshipId\n },\n payload: {\n proposalId,\n environmentId: draft.candidate.impact.environmentId,\n expectedRevision: draft.precondition.expectedRevision,\n disposition: draft.proposal.disposition,\n rationale: draft.proposal.rationale\n }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n draft: (releaseId, environmentId, relationshipId, revision, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.deliveryGraph.repairProposalDraft({\n params: { releaseId, relationshipId },\n query: environmentId === null ? { revision } : { environmentId, revision }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n list: (releaseId, environmentId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.deliveryGraph.repairCandidates({\n params: { releaseId },\n query: environmentId === null ? {} : { environmentId }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n makeProposalId: () => Effect.runPromise(makeRelationshipRepairProposalId.pipe(Effect.provide(BrowserCrypto.layer)))\n}\n",".candidates,\n.draft {\n display: grid;\n}\n\n.candidates {\n gap: var(--rly-space-8);\n}\n\n.candidateHeader,\n.draftHeader,\n.actions {\n align-items: center;\n display: flex;\n justify-content: space-between;\n}\n\n.candidate {\n align-items: center;\n background: transparent;\n border: 1px solid var(--rly-color-border-1);\n border-radius: var(--rly-radius-control);\n color: var(--rly-color-text-1);\n cursor: pointer;\n display: flex;\n font: inherit;\n gap: var(--rly-space-16);\n justify-content: space-between;\n padding: var(--rly-space-16);\n text-align: start;\n}\n\n.candidate:hover,\n.candidate:focus-visible {\n background: var(--rly-color-surface-2);\n border-color: var(--rly-color-border-2);\n outline: none;\n}\n\n.candidate > span:first-child {\n display: grid;\n gap: var(--rly-space-4);\n}\n\n.candidate strong {\n font: var(--rly-type-body-weight) var(--rly-type-body-size) / var(--rly-type-body-line-height)\n var(--rly-type-body-font);\n text-transform: capitalize;\n}\n\n.candidate small {\n color: var(--rly-color-text-2);\n font: var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height)\n var(--rly-type-meta-font);\n}\n\n.draft {\n gap: var(--rly-space-16);\n padding: var(--rly-space-20);\n}\n\n.draftHeader {\n gap: var(--rly-space-16);\n}\n\n.actions {\n justify-content: flex-end;\n gap: var(--rly-space-8);\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .draft {\n animation: reveal-draft 160ms ease-out both;\n }\n}\n\n@keyframes reveal-draft {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n}\n","import { Button, StateLabel, StatePanel, Surface, Text } from \"@knpkv/rly/primitives\"\nimport { type ReactElement, type ReactNode, useEffect, useRef, useState } from \"react\"\n\nimport type {\n RelationshipRepairCandidate,\n RelationshipRepairCandidates,\n RelationshipRepairProposalDraft\n} from \"../../api/deliveryGraph.js\"\nimport { MAXIMUM_RELEASE_SLICE_RECORDS } from \"../../api/deliveryGraph.js\"\nimport type { SessionSummary } from \"../../api/session.js\"\nimport type { EnvironmentId, RelationshipRepairProposalId, ReleaseId } from \"../../domain/identifiers.js\"\nimport { loadReleaseEnvironmentSlices } from \"./loadReleaseEnvironmentSlices.js\"\nimport {\n browserRelationshipRepairCandidateTransport,\n type RelationshipRepairCandidateTransport\n} from \"./relationshipRepairCandidateTransport.js\"\nimport styles from \"./RelationshipRepairCandidatePicker.module.css\"\n\ntype PickerState =\n | { readonly _tag: \"idle\" }\n | { readonly _tag: \"loading\" }\n | { readonly _tag: \"load-failed\" }\n | { readonly _tag: \"ready\"; readonly page: RelationshipRepairCandidates }\n | { readonly _tag: \"drafting\"; readonly page: RelationshipRepairCandidates }\n | {\n readonly _tag: \"draft-failed\"\n readonly candidate: RelationshipRepairCandidate\n readonly page: RelationshipRepairCandidates\n }\n | {\n readonly _tag: \"draft\"\n readonly draft: RelationshipRepairProposalDraft\n readonly page: RelationshipRepairCandidates\n }\n | {\n readonly _tag: \"creating\"\n readonly draft: RelationshipRepairProposalDraft\n readonly page: RelationshipRepairCandidates\n readonly proposalId: RelationshipRepairProposalId | null\n }\n | {\n readonly _tag: \"create-failed\"\n readonly draft: RelationshipRepairProposalDraft\n readonly page: RelationshipRepairCandidates\n readonly proposalId: RelationshipRepairProposalId | null\n }\n | { readonly _tag: \"created\" }\n\nconst titleCase = (value: string): string => value.replaceAll(\"-\", \" \")\n\nconst candidateTitle = (candidate: RelationshipRepairCandidate): string =>\n `${titleCase(candidate.relationship.sourceNodeKind)} → ${titleCase(candidate.relationship.targetNodeKind)}`\n\nconst aggregateCandidatePages = (\n releaseId: ReleaseId,\n pages: ReadonlyArray<RelationshipRepairCandidates>\n): RelationshipRepairCandidates => {\n const seen = new Set<string>()\n const candidates: Array<RelationshipRepairCandidate> = []\n for (const candidate of pages.flatMap((page) => page.candidates)) {\n const identity = `${candidate.relationship.relationshipId}:${candidate.relationship.revision}`\n if (seen.has(identity)) continue\n seen.add(identity)\n candidates.push(candidate)\n }\n return {\n releaseId,\n environmentId: null,\n truncated: pages.some(({ truncated }) => truncated) || candidates.length > MAXIMUM_RELEASE_SLICE_RECORDS,\n candidates: candidates.slice(0, MAXIMUM_RELEASE_SLICE_RECORDS)\n }\n}\n\nconst PickerResult = ({\n announce = false,\n children,\n stateTag\n}: {\n readonly announce?: boolean\n readonly children: ReactNode\n readonly stateTag: PickerState[\"_tag\"]\n}): ReactElement => {\n const result = useRef<HTMLDivElement>(null)\n useEffect(() => result.current?.focus(), [stateTag])\n return (\n <div aria-live={announce ? \"polite\" : undefined} ref={result} role={announce ? \"status\" : undefined} tabIndex={-1}>\n {children}\n </div>\n )\n}\n\ninterface RelationshipRepairCandidatePickerProps {\n readonly environmentIds: ReadonlyArray<EnvironmentId>\n readonly onCreated: () => void\n readonly releaseId: ReleaseId\n readonly session: SessionSummary\n readonly transport?: RelationshipRepairCandidateTransport\n}\n\n/** Discover one incomplete relationship, preview its immutable draft, then create a governed proposal. */\nexport const RelationshipRepairCandidatePicker = ({\n environmentIds,\n onCreated,\n releaseId,\n session,\n transport = browserRelationshipRepairCandidateTransport\n}: RelationshipRepairCandidatePickerProps): ReactElement | null => {\n const [state, setState] = useState<PickerState>({ _tag: \"idle\" })\n const request = useRef<AbortController | null>(null)\n const actorId = session.actor._tag === \"human\" ? session.actor.personId : session.actor.agentId\n const authorityScope = `${session.sessionId}:${session.workspaceId}:${session.permission}:${session.actor._tag}:${actorId}`\n const environmentScopeKey = environmentIds.join(\":\")\n\n useEffect(() => {\n request.current?.abort()\n request.current = null\n setState({ _tag: \"idle\" })\n return () => request.current?.abort()\n }, [authorityScope, environmentScopeKey, releaseId])\n\n if (session.permission !== \"workspace-owner\") return null\n\n const run = async <Value,>(\n effect: (signal: AbortSignal) => Promise<Value>,\n onSuccess: (value: Value) => void,\n onFailure: () => void\n ): Promise<void> => {\n request.current?.abort()\n const abort = new AbortController()\n request.current = abort\n try {\n const value = await effect(abort.signal)\n if (!abort.signal.aborted && request.current === abort) onSuccess(value)\n } catch {\n if (!abort.signal.aborted && request.current === abort) onFailure()\n } finally {\n if (request.current === abort) request.current = null\n }\n }\n\n const discover = (): void => {\n setState({ _tag: \"loading\" })\n void run(\n (signal) =>\n loadReleaseEnvironmentSlices(environmentIds, (environmentId) =>\n transport.list(releaseId, environmentId, signal)\n ),\n (pages) => setState({ _tag: \"ready\", page: aggregateCandidatePages(releaseId, pages) }),\n () => setState({ _tag: \"load-failed\" })\n )\n }\n\n const select = (candidate: RelationshipRepairCandidate, page: RelationshipRepairCandidates): void => {\n setState({ _tag: \"drafting\", page })\n void run(\n (signal) =>\n transport.draft(\n releaseId,\n candidate.impact.environmentId,\n candidate.relationship.relationshipId,\n candidate.relationship.revision,\n signal\n ),\n (draft) => setState({ _tag: \"draft\", draft, page }),\n () => setState({ _tag: \"draft-failed\", candidate, page })\n )\n }\n\n const refreshCandidate = (staleCandidate: RelationshipRepairCandidate): void => {\n setState({ _tag: \"loading\" })\n void run(\n (signal) =>\n loadReleaseEnvironmentSlices(environmentIds, (environmentId) =>\n transport.list(releaseId, environmentId, signal)\n ),\n (pages) => {\n const page = aggregateCandidatePages(releaseId, pages)\n const candidate = page.candidates.find(\n (item) => item.relationship.relationshipId === staleCandidate.relationship.relationshipId\n )\n if (candidate === undefined) {\n setState({ _tag: \"ready\", page })\n return\n }\n select(candidate, page)\n },\n () => setState({ _tag: \"load-failed\" })\n )\n }\n\n const create = (\n draft: RelationshipRepairProposalDraft,\n page: RelationshipRepairCandidates,\n pendingProposalId: RelationshipRepairProposalId | null = null\n ): void => {\n request.current?.abort()\n const abort = new AbortController()\n request.current = abort\n setState({ _tag: \"creating\", draft, page, proposalId: pendingProposalId })\n void (async () => {\n let proposalId = pendingProposalId\n try {\n proposalId ??= await transport.makeProposalId()\n if (abort.signal.aborted || request.current !== abort) return\n setState({ _tag: \"creating\", draft, page, proposalId })\n await transport.create(releaseId, draft, proposalId, abort.signal)\n if (abort.signal.aborted || request.current !== abort) return\n setState({ _tag: \"created\" })\n onCreated()\n } catch {\n if (!abort.signal.aborted && request.current === abort) {\n setState({ _tag: \"create-failed\", draft, page, proposalId })\n }\n } finally {\n if (request.current === abort) request.current = null\n }\n })()\n }\n\n if (state._tag === \"idle\") {\n return <Button onClick={discover}>Find repair candidates</Button>\n }\n if (state._tag === \"loading\") {\n return (\n <PickerResult announce stateTag={state._tag}>\n <Text tone=\"secondary\">Finding incomplete relationships…</Text>\n </PickerResult>\n )\n }\n if (state._tag === \"load-failed\") {\n return (\n <PickerResult stateTag={state._tag}>\n <StatePanel\n action={<Button onClick={discover}>Try again</Button>}\n announce=\"assertive\"\n description=\"Candidate discovery did not change the release.\"\n title=\"Could not find candidates\"\n tone=\"caution\"\n />\n </PickerResult>\n )\n }\n if (state._tag === \"created\") {\n return (\n <PickerResult announce stateTag={state._tag}>\n <StateLabel label=\"Proposal created\" tone=\"positive\" />\n </PickerResult>\n )\n }\n if (state._tag === \"drafting\") {\n return (\n <PickerResult announce stateTag={state._tag}>\n <Text tone=\"secondary\">Preparing an exact proposal…</Text>\n </PickerResult>\n )\n }\n if (state._tag === \"draft-failed\") {\n return (\n <PickerResult stateTag={state._tag}>\n <StatePanel\n action={<Button onClick={() => refreshCandidate(state.candidate)}>Refresh candidate</Button>}\n announce=\"assertive\"\n description=\"The relationship may have changed since discovery.\"\n title=\"Candidate is stale\"\n tone=\"caution\"\n />\n </PickerResult>\n )\n }\n if (state._tag === \"draft\" || state._tag === \"creating\" || state._tag === \"create-failed\") {\n const isCreating = state._tag === \"creating\"\n return (\n <PickerResult announce={isCreating} stateTag={state._tag}>\n <Surface as=\"section\" className={styles.draft} padding=\"none\" tone=\"secondary\">\n <div className={styles.draftHeader}>\n <div>\n <Text as=\"h4\" variant=\"card-title\">\n {titleCase(state.draft.proposal.disposition)} relationship\n </Text>\n <Text tone=\"tertiary\" variant=\"meta\">\n r{state.draft.precondition.expectedRevision} → r{state.draft.precondition.expectedRevision + 1}\n </Text>\n </div>\n <StateLabel label=\"Proposal preview\" size=\"compact\" tone=\"neutral\" />\n </div>\n <Text>{state.draft.proposal.rationale}</Text>\n {state._tag === \"create-failed\" ? (\n <Text role=\"alert\" tone=\"secondary\">\n The relationship changed or the proposal was not recorded. Refresh the candidate before retrying.\n </Text>\n ) : null}\n <div className={styles.actions}>\n <Button disabled={isCreating} onClick={() => setState({ _tag: \"ready\", page: state.page })} variant=\"quiet\">\n Back\n </Button>\n <Button\n loading={isCreating}\n onClick={() => create(state.draft, state.page, state._tag === \"create-failed\" ? state.proposalId : null)}\n variant=\"primary\"\n >\n Create proposal\n </Button>\n </div>\n </Surface>\n </PickerResult>\n )\n }\n\n if (state.page.candidates.length === 0) {\n return (\n <PickerResult announce stateTag={state._tag}>\n <Text tone=\"secondary\">No incomplete relationships need an owner decision.</Text>\n </PickerResult>\n )\n }\n return (\n <PickerResult stateTag={state._tag}>\n <div className={styles.candidates}>\n <div className={styles.candidateHeader}>\n <Text tone=\"secondary\">\n {state.page.candidates.length}\n {state.page.truncated ? \"+\" : \"\"} incomplete relationship\n {state.page.candidates.length === 1 ? \"\" : \"s\"}\n </Text>\n <Button onClick={() => setState({ _tag: \"idle\" })} variant=\"quiet\">\n Close\n </Button>\n </div>\n {state.page.candidates.map((candidate) => (\n <button\n className={styles.candidate}\n key={candidate.relationship.relationshipId}\n onClick={() => select(candidate, state.page)}\n type=\"button\"\n >\n <span>\n <strong>{candidateTitle(candidate)}</strong>\n <small>{candidate.explanation}</small>\n </span>\n <span aria-hidden=\"true\">→</span>\n </button>\n ))}\n </div>\n </PickerResult>\n )\n}\n","import * as BrowserCrypto from \"@effect/platform-browser/BrowserCrypto\"\nimport * as Crypto from \"effect/Crypto\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\"\n\nimport { makeControlCenterApiClient } from \"../../api/client.js\"\nimport type {\n ApplyRelationshipRepairProposalResponse,\n RelationshipRepairProposalList\n} from \"../../api/deliveryGraph.js\"\nimport type {\n EnvironmentId,\n RelationshipRepairProposalId,\n RelationshipRepairReviewId,\n ReleaseId\n} from \"../../domain/identifiers.js\"\nimport { RelationshipRepairReviewId as RelationshipRepairReviewIdSchema } from \"../../domain/identifiers.js\"\nimport type { RelationshipRepairProposal, RelationshipRepairReviewDecision } from \"../../domain/relationshipRepair.js\"\nimport { makeAuthenticatedMutationClient } from \"../authenticatedMutationClient.js\"\n\n/** Generate a browser-native UUID v7 without weakening the public identifier contract. */\nexport const makeRelationshipRepairReviewId = Effect.gen(function*() {\n const cryptoService = yield* Crypto.Crypto\n const uuid = yield* cryptoService.randomUUIDv7\n return yield* Schema.decodeUnknownEffect(RelationshipRepairReviewIdSchema)(uuid)\n})\n\nexport interface RelationshipRepairTransport {\n readonly apply: (\n proposalId: RelationshipRepairProposalId,\n signal: AbortSignal\n ) => Promise<ApplyRelationshipRepairProposalResponse>\n readonly list: (\n releaseId: ReleaseId,\n environmentId: EnvironmentId | null,\n signal: AbortSignal\n ) => Promise<RelationshipRepairProposalList>\n readonly makeReviewId: () => Promise<RelationshipRepairReviewId>\n readonly review: (\n proposalId: RelationshipRepairProposalId,\n reviewId: RelationshipRepairReviewId,\n decision: RelationshipRepairReviewDecision,\n rationale: string,\n signal: AbortSignal\n ) => Promise<RelationshipRepairProposal>\n}\n\n/** Generated-client transport for the release repair decision ledger. */\nexport const browserRelationshipRepairTransport: RelationshipRepairTransport = {\n apply: (proposalId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.deliveryGraph.applyRepairProposal({ params: { proposalId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n list: (releaseId, environmentId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.deliveryGraph.listRepairProposals({\n params: { releaseId },\n query: environmentId === null ? {} : { environmentId }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n makeReviewId: () => Effect.runPromise(makeRelationshipRepairReviewId.pipe(Effect.provide(BrowserCrypto.layer))),\n review: (proposalId, reviewId, decision, rationale, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.deliveryGraph.reviewRepairProposal({\n params: { proposalId },\n payload: {\n reviewId,\n decision,\n rationale\n }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n )\n}\n","import * as DateTime from \"effect/DateTime\"\nimport * as Predicate from \"effect/Predicate\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport { MAXIMUM_REPAIR_PROPOSALS, type RelationshipRepairProposalList } from \"../../api/deliveryGraph.js\"\nimport type {\n EnvironmentId,\n RelationshipRepairProposalId,\n RelationshipRepairReviewId,\n ReleaseId\n} from \"../../domain/identifiers.js\"\nimport type {\n RelationshipRepairApplication,\n RelationshipRepairProposal,\n RelationshipRepairReviewDecision\n} from \"../../domain/relationshipRepair.js\"\nimport { loadReleaseEnvironmentSlices } from \"./loadReleaseEnvironmentSlices.js\"\nimport { browserRelationshipRepairTransport, type RelationshipRepairTransport } from \"./relationshipRepairTransport.js\"\n\nconst isUnauthorizedFailure = Predicate.isTagged(\"UnauthorizedApiError\")\nconst ignoreSessionExpired = (): void => undefined\n\nexport type RelationshipRepairPanelState =\n | { readonly _tag: \"idle\" }\n | { readonly _tag: \"loading\" }\n | { readonly _tag: \"failed\" }\n | {\n readonly _tag: \"ready\"\n readonly actionFailure: RelationshipRepairProposalId | null\n readonly applications: ReadonlyMap<RelationshipRepairProposalId, RelationshipRepairApplication>\n readonly busyProposalId: RelationshipRepairProposalId | null\n readonly environmentScopeKey: string\n readonly page: RelationshipRepairProposalList\n readonly releaseId: ReleaseId\n readonly sessionKey: string\n }\n\nexport interface RelationshipRepairProposalController {\n readonly apply: (proposalId: RelationshipRepairProposalId) => Promise<boolean>\n readonly retry: () => void\n readonly review: (\n proposalId: RelationshipRepairProposalId,\n decision: RelationshipRepairReviewDecision,\n rationale: string\n ) => Promise<boolean>\n readonly state: RelationshipRepairPanelState\n}\n\ninterface PendingReviewIntent {\n readonly decision: RelationshipRepairReviewDecision\n readonly rationale: string\n readonly reviewId: RelationshipRepairReviewId\n}\n\nconst proposalOrder = (left: RelationshipRepairProposal, right: RelationshipRepairProposal): number => {\n const proposedAtOrder = DateTime.Order(right.proposedAt, left.proposedAt)\n return proposedAtOrder === 0 ? right.proposalId.localeCompare(left.proposalId) : proposedAtOrder\n}\n\nconst aggregateProposalPages = (\n releaseId: ReleaseId,\n pages: ReadonlyArray<RelationshipRepairProposalList>\n): RelationshipRepairProposalList => {\n const proposalsById = new Map<RelationshipRepairProposalId, RelationshipRepairProposal>()\n const applicationsByProposalId = new Map<RelationshipRepairProposalId, RelationshipRepairApplication>()\n for (const page of pages) {\n for (const proposal of page.proposals) proposalsById.set(proposal.proposalId, proposal)\n for (const application of page.applications) {\n applicationsByProposalId.set(application.proposalId, application)\n }\n }\n const orderedProposals = [...proposalsById.values()].sort(proposalOrder)\n const proposals = orderedProposals.slice(0, MAXIMUM_REPAIR_PROPOSALS)\n const applications = proposals.flatMap((proposal): ReadonlyArray<RelationshipRepairApplication> => {\n const application = applicationsByProposalId.get(proposal.proposalId)\n return application === undefined ? [] : [application]\n })\n return {\n releaseId,\n environmentId: null,\n status: null,\n truncated: pages.some(({ truncated }) => truncated) || orderedProposals.length > MAXIMUM_REPAIR_PROPOSALS,\n proposals,\n applications\n }\n}\n\n/** Keep one release's proposal ledger current after explicit review and apply actions. */\nexport const useRelationshipRepairProposals = (\n releaseId: ReleaseId,\n environmentIds: ReadonlyArray<EnvironmentId>,\n sessionKey: string | null,\n transport: RelationshipRepairTransport = browserRelationshipRepairTransport,\n onSessionExpired: (sessionKey: string) => void = ignoreSessionExpired\n): RelationshipRepairProposalController => {\n const [requestRevision, setRequestRevision] = useState(0)\n const [state, setState] = useState<RelationshipRepairPanelState>({ _tag: \"idle\" })\n const actionAbort = useRef<AbortController | null>(null)\n const busyProposal = useRef<RelationshipRepairProposalId | null>(null)\n const pendingReviews = useRef(new Map<RelationshipRepairProposalId, PendingReviewIntent>())\n const stateRef = useRef(state)\n const environmentScopeKey = environmentIds.join(\":\")\n\n useEffect(() => {\n actionAbort.current?.abort()\n actionAbort.current = null\n busyProposal.current = null\n pendingReviews.current.clear()\n if (sessionKey === null) {\n setState({ _tag: \"idle\" })\n return\n }\n const abort = new AbortController()\n setState({ _tag: \"loading\" })\n loadReleaseEnvironmentSlices(\n environmentIds,\n (environmentId) => transport.list(releaseId, environmentId, abort.signal)\n ).then(\n (pages) => {\n if (!abort.signal.aborted) {\n const page = aggregateProposalPages(releaseId, pages)\n setState({\n _tag: \"ready\",\n actionFailure: null,\n applications: new Map(page.applications.map((application) => [application.proposalId, application])),\n busyProposalId: null,\n environmentScopeKey,\n page,\n releaseId,\n sessionKey\n })\n }\n },\n (failure) => {\n if (!abort.signal.aborted) {\n if (isUnauthorizedFailure(failure)) onSessionExpired(sessionKey)\n setState({ _tag: \"failed\" })\n }\n }\n )\n return () => abort.abort()\n }, [environmentScopeKey, onSessionExpired, releaseId, requestRevision, sessionKey, transport])\n\n useEffect(() => () => actionAbort.current?.abort(), [])\n\n const currentState = state._tag === \"ready\" &&\n (state.environmentScopeKey !== environmentScopeKey ||\n state.releaseId !== releaseId ||\n state.sessionKey !== sessionKey)\n ? { _tag: \"loading\" } satisfies RelationshipRepairPanelState\n : state\n stateRef.current = currentState\n\n const beginAction = useCallback((proposalId: RelationshipRepairProposalId): AbortController | null => {\n if (stateRef.current._tag !== \"ready\" || busyProposal.current !== null) return null\n const abort = new AbortController()\n busyProposal.current = proposalId\n actionAbort.current?.abort()\n actionAbort.current = abort\n setState((current) =>\n current._tag === \"ready\"\n ? { ...current, actionFailure: null, busyProposalId: proposalId }\n : current\n )\n return abort\n }, [])\n\n const finishAction = useCallback((abort: AbortController): boolean => {\n if (actionAbort.current !== abort) return false\n actionAbort.current = null\n busyProposal.current = null\n return true\n }, [])\n\n const review = useCallback(async (\n proposalId: RelationshipRepairProposalId,\n decision: RelationshipRepairReviewDecision,\n rationale: string\n ): Promise<boolean> => {\n const abort = beginAction(proposalId)\n if (abort === null) return false\n try {\n const pending = pendingReviews.current.get(proposalId)\n const intent = pending?.decision === decision && pending.rationale === rationale\n ? pending\n : { decision, rationale, reviewId: await transport.makeReviewId() }\n pendingReviews.current.set(proposalId, intent)\n const proposal = await transport.review(proposalId, intent.reviewId, decision, rationale, abort.signal)\n if (!finishAction(abort) || abort.signal.aborted) return false\n pendingReviews.current.delete(proposalId)\n setState((current) =>\n current._tag !== \"ready\" || abort.signal.aborted\n ? current\n : {\n ...current,\n busyProposalId: null,\n page: {\n ...current.page,\n proposals: current.page.proposals.map((item) => item.proposalId === proposalId ? proposal : item)\n }\n }\n )\n return true\n } catch {\n if (!abort.signal.aborted && finishAction(abort)) {\n setState((current) =>\n current._tag === \"ready\"\n ? { ...current, actionFailure: proposalId, busyProposalId: null }\n : current\n )\n }\n return false\n }\n }, [beginAction, finishAction, transport])\n\n const apply = useCallback(async (proposalId: RelationshipRepairProposalId): Promise<boolean> => {\n const abort = beginAction(proposalId)\n if (abort === null) return false\n try {\n const result = await transport.apply(proposalId, abort.signal)\n if (!finishAction(abort) || abort.signal.aborted) return false\n setState((current) => {\n if (current._tag !== \"ready\" || abort.signal.aborted) return current\n const applications = new Map(current.applications)\n applications.set(proposalId, result.application)\n return { ...current, applications, busyProposalId: null }\n })\n return true\n } catch {\n if (!abort.signal.aborted && finishAction(abort)) {\n setState((current) =>\n current._tag === \"ready\"\n ? { ...current, actionFailure: proposalId, busyProposalId: null }\n : current\n )\n }\n return false\n }\n }, [beginAction, finishAction, transport])\n\n return {\n apply,\n retry: useCallback(() => setRequestRevision((revision) => revision + 1), []),\n review,\n state: currentState\n }\n}\n",".root,\n.ledger,\n.proposal,\n.proposalHeader,\n.decision,\n.reviewEvidence,\n.reviewForm,\n.loading,\n.panelStack {\n display: grid;\n}\n\n.reviewEvidence {\n gap: var(--rly-space-4);\n padding: var(--rly-space-12) var(--rly-space-16);\n border-inline-start: var(--rly-space-4) solid var(--rly-color-border-2);\n background: var(--rly-color-surface-1);\n}\n\n.root,\n.loading,\n.panelStack {\n gap: var(--rly-space-24);\n}\n\n.header,\n.proposalHeader,\n.peopleTrace,\n.actions,\n.agentIdentity {\n align-items: center;\n display: flex;\n}\n\n.header,\n.proposalHeader {\n justify-content: space-between;\n}\n\n.header {\n gap: var(--rly-space-24);\n}\n\n.header > div {\n display: grid;\n gap: var(--rly-space-4);\n}\n\n.ledger {\n gap: var(--rly-space-12);\n}\n\n.proposal {\n gap: var(--rly-space-20);\n overflow: hidden;\n padding: var(--rly-space-24);\n}\n\n.proposalHeader {\n gap: var(--rly-space-16);\n}\n\n.decision {\n gap: var(--rly-space-4);\n}\n\n.decision strong {\n font: var(--rly-type-section-title-weight) var(--rly-type-section-title-size) /\n var(--rly-type-section-title-line-height) var(--rly-type-section-title-font);\n letter-spacing: var(--rly-type-section-title-tracking);\n text-transform: capitalize;\n}\n\n.decision code {\n color: var(--rly-color-text-2);\n font: var(--rly-type-code-weight) var(--rly-type-code-size) / var(--rly-type-code-line-height)\n var(--rly-type-code-font);\n}\n\n.rationale {\n max-inline-size: 58ch;\n}\n\n.peopleTrace {\n flex-wrap: wrap;\n gap: var(--rly-space-12);\n}\n\n.traceArrow {\n color: var(--rly-color-text-3);\n font: var(--rly-type-code-weight) var(--rly-type-code-size) / 1 var(--rly-type-code-font);\n}\n\n.agentIdentity {\n gap: var(--rly-space-8);\n}\n\n.agentGlyph {\n align-items: center;\n background: var(--rly-color-surface-3);\n border-radius: 50%;\n color: var(--rly-color-agent);\n display: inline-flex;\n block-size: var(--rly-space-24);\n inline-size: var(--rly-space-24);\n justify-content: center;\n}\n\n.agentIdentity > span:last-child {\n display: grid;\n}\n\n.agentIdentity strong,\n.agentIdentity small {\n font: var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height)\n var(--rly-type-meta-font);\n}\n\n.agentIdentity small {\n color: var(--rly-color-text-2);\n}\n\n.reviewForm {\n border-block-start: 1px solid var(--rly-color-border-1);\n gap: var(--rly-space-16);\n padding-block-start: var(--rly-space-20);\n}\n\n.actions {\n flex-wrap: wrap;\n gap: var(--rly-space-8);\n}\n\n.actionFailure {\n margin-block: var(--rly-space-4);\n}\n\n.status:focus {\n border-radius: var(--rly-radius-control);\n}\n\n.srOnly {\n block-size: 1px;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n inline-size: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n}\n\n@media (max-width: 40rem) {\n .header,\n .proposalHeader {\n align-items: flex-start;\n flex-direction: column;\n }\n\n .proposal {\n padding: var(--rly-space-20);\n }\n\n .traceArrow {\n display: none;\n }\n\n .peopleTrace {\n align-items: flex-start;\n flex-direction: column;\n }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .reviewForm {\n animation: reveal-review 160ms ease-out both;\n }\n}\n\n@keyframes reveal-review {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n}\n","import { Person, type RlyPerson } from \"@knpkv/rly/patterns\"\nimport { Button, Field, Skeleton, StateLabel, StatePanel, Surface, Text } from \"@knpkv/rly/primitives\"\nimport * as DateTime from \"effect/DateTime\"\nimport { type ReactElement, useEffect, useRef, useState } from \"react\"\n\nimport type { SessionSummary } from \"../../api/session.js\"\nimport type { Actor } from \"../../domain/actors.js\"\nimport type {\n RelationshipRepairApplication,\n RelationshipRepairProposal,\n RelationshipRepairReviewDecision\n} from \"../../domain/relationshipRepair.js\"\nimport type { RelationshipRepairProposalId } from \"../../domain/identifiers.js\"\nimport { type BrowserSessionState, useBrowserSession } from \"../BrowserSession.js\"\nimport type { PortfolioReleasePresentation } from \"../portfolio/presentPortfolio.js\"\nimport { RelationshipRepairCandidatePicker } from \"./RelationshipRepairCandidatePicker.js\"\nimport { type RelationshipRepairPanelState, useRelationshipRepairProposals } from \"./useRelationshipRepairProposals.js\"\nimport type { RelationshipRepairTransport } from \"./relationshipRepairTransport.js\"\nimport styles from \"./RelationshipRepairPanel.module.css\"\n\nconst ignoreSessionExpired = (): void => undefined\n\ninterface RelationshipRepairPanelViewProps {\n readonly mutationsEnabled: boolean\n readonly onApply: (proposalId: RelationshipRepairProposalId) => Promise<boolean>\n readonly onRetry: () => void\n readonly onReview: (\n proposalId: RelationshipRepairProposalId,\n decision: RelationshipRepairReviewDecision,\n rationale: string\n ) => Promise<boolean>\n readonly release: PortfolioReleasePresentation\n readonly session: SessionSummary\n readonly state: RelationshipRepairPanelState\n}\n\nconst shortId = (id: string): string => id.slice(-6)\n\nconst isSameActor = (left: Actor, right: Actor): boolean =>\n left._tag === right._tag &&\n (left._tag === \"human\"\n ? right._tag === \"human\" && left.personId === right.personId\n : right._tag === \"agent\" && left.agentId === right.agentId)\n\nconst actorPerson = (\n actor: Extract<Actor, { readonly _tag: \"human\" }>,\n release: PortfolioReleasePresentation,\n role: string\n): RlyPerson => {\n const collaborator = release.collaborators.find(({ id }) => id.startsWith(`${actor.personId}:`))\n return collaborator === undefined\n ? { id: actor.personId, name: `Person ${shortId(actor.personId)}`, role }\n : { ...collaborator, role }\n}\n\nconst ActorIdentity = ({\n actor,\n release,\n role\n}: {\n readonly actor: Actor\n readonly release: PortfolioReleasePresentation\n readonly role: string\n}): ReactElement =>\n actor._tag === \"human\" ? (\n <Person person={actorPerson(actor, release, role)} size=\"compact\" />\n ) : (\n <div className={styles.agentIdentity}>\n <span aria-hidden=\"true\" className={styles.agentGlyph}>\n ✦\n </span>\n <span>\n <strong>Agent {shortId(actor.agentId)}</strong>\n <small>{role}</small>\n </span>\n </div>\n )\n\nconst statusPresentation = (\n proposal: RelationshipRepairProposal,\n application: RelationshipRepairApplication | undefined\n): { readonly label: string; readonly tone: \"caution\" | \"critical\" | \"positive\" } => {\n if (application !== undefined) return { label: `Applied · r${application.appliedRevision}`, tone: \"positive\" }\n switch (proposal.status) {\n case \"pending\":\n return { label: \"Needs review\", tone: \"caution\" }\n case \"approved\":\n return { label: \"Ready to apply\", tone: \"positive\" }\n case \"rejected\":\n return { label: \"Rejected\", tone: \"critical\" }\n }\n}\n\nconst formattedTime = (timestamp: RelationshipRepairProposal[\"proposedAt\"]): string =>\n DateTime.formatUtc(timestamp, {\n day: \"2-digit\",\n hour: \"2-digit\",\n hour12: false,\n locale: \"en-GB\",\n minute: \"2-digit\",\n month: \"short\"\n })\n\ninterface ProposalRowProps {\n readonly actionFailed: boolean\n readonly application: RelationshipRepairApplication | undefined\n readonly isBusy: boolean\n readonly isGloballyBusy: boolean\n readonly mutationsEnabled: boolean\n readonly onApply: RelationshipRepairPanelViewProps[\"onApply\"]\n readonly onRetry: RelationshipRepairPanelViewProps[\"onRetry\"]\n readonly onReview: RelationshipRepairPanelViewProps[\"onReview\"]\n readonly proposal: RelationshipRepairProposal\n readonly release: PortfolioReleasePresentation\n readonly session: SessionSummary\n}\n\nconst ProposalRow = ({\n actionFailed,\n application,\n isBusy,\n isGloballyBusy,\n mutationsEnabled,\n onApply,\n onRetry,\n onReview,\n proposal,\n release,\n session\n}: ProposalRowProps): ReactElement => {\n const [isReviewing, setIsReviewing] = useState(false)\n const [rationale, setRationale] = useState(\"\")\n const [announcement, setAnnouncement] = useState<string | null>(null)\n const statusRef = useRef<HTMLDivElement>(null)\n const status = statusPresentation(proposal, application)\n const canReview =\n mutationsEnabled &&\n proposal.status === \"pending\" &&\n (session.permission === \"workspace-owner\" || session.permission === \"workspace-approver\") &&\n !isSameActor(proposal.origin.actor, session.actor)\n const canApply =\n mutationsEnabled &&\n proposal.status === \"approved\" &&\n application === undefined &&\n session.permission === \"workspace-owner\"\n const reviewRationale = rationale.trim()\n\n const review = async (decision: RelationshipRepairReviewDecision): Promise<void> => {\n if (reviewRationale.length === 0) return\n const recorded = await onReview(proposal.proposalId, decision, reviewRationale)\n if (!recorded) return\n setIsReviewing(false)\n setRationale(\"\")\n setAnnouncement(decision === \"approved\" ? \"Proposal approved.\" : \"Proposal rejected.\")\n }\n\n const apply = async (): Promise<void> => {\n const recorded = await onApply(proposal.proposalId)\n if (recorded) setAnnouncement(\"Repair applied.\")\n }\n\n useEffect(() => {\n if (announcement !== null) statusRef.current?.focus()\n }, [announcement])\n\n return (\n <Surface as=\"article\" className={styles.proposal} padding=\"none\" tone=\"secondary\">\n <header className={styles.proposalHeader}>\n <div className={styles.decision}>\n <strong>\n {proposal.disposition[0]?.toLocaleUpperCase(\"en-US\")}\n {proposal.disposition.slice(1)}\n </strong>\n <code>\n r{proposal.expectedRevision} → r{proposal.expectedRevision + 1}\n </code>\n </div>\n <div className={styles.status} ref={statusRef} tabIndex={announcement === null ? undefined : -1}>\n <StateLabel label={status.label} size=\"compact\" tone={status.tone} />\n <span aria-live=\"polite\" className={styles.srOnly}>\n {announcement ?? \"\"}\n </span>\n </div>\n </header>\n\n <Text className={styles.rationale} variant=\"body-large\">\n {proposal.rationale}\n </Text>\n\n <div className={styles.peopleTrace}>\n <ActorIdentity\n actor={proposal.origin.actor}\n release={release}\n role={`Proposed · ${formattedTime(proposal.proposedAt)}`}\n />\n {proposal.review === null ? null : (\n <>\n <span aria-hidden=\"true\" className={styles.traceArrow}>\n →\n </span>\n <ActorIdentity\n actor={proposal.review.origin.actor}\n release={release}\n role={`${proposal.review.decision === \"approved\" ? \"Approved\" : \"Rejected\"} · ${formattedTime(proposal.review.reviewedAt)}`}\n />\n </>\n )}\n {application === undefined ? null : (\n <>\n <span aria-hidden=\"true\" className={styles.traceArrow}>\n →\n </span>\n <ActorIdentity\n actor={application.origin.actor}\n release={release}\n role={`Applied revision ${application.appliedRevision} · ${formattedTime(application.appliedAt)}`}\n />\n </>\n )}\n </div>\n\n {proposal.review === null ? null : (\n <div className={styles.reviewEvidence}>\n <Text as=\"strong\" variant=\"label\">\n Review note\n </Text>\n <Text tone=\"secondary\">{proposal.review.rationale}</Text>\n </div>\n )}\n\n {actionFailed ? (\n <StatePanel\n action={<Button onClick={onRetry}>Reload decisions</Button>}\n announce=\"assertive\"\n className={styles.actionFailure}\n description=\"The proposal may have changed. Reload the release decisions before trying again.\"\n title=\"Action not recorded\"\n tone=\"caution\"\n />\n ) : null}\n\n {isReviewing && canReview ? (\n <form className={styles.reviewForm} onSubmit={(event) => event.preventDefault()}>\n <Field description=\"Stored with the immutable decision.\" label=\"Review note\" required>\n {(controlProps) => (\n <textarea\n {...controlProps}\n autoFocus\n maxLength={1_000}\n onChange={(event) => setRationale(event.currentTarget.value)}\n value={rationale}\n />\n )}\n </Field>\n <div className={styles.actions}>\n <Button\n disabled={reviewRationale.length === 0 || isGloballyBusy}\n loading={isBusy}\n onClick={() => void review(\"rejected\")}\n variant=\"quiet\"\n >\n Reject\n </Button>\n <Button\n disabled={reviewRationale.length === 0 || isGloballyBusy}\n loading={isBusy}\n onClick={() => void review(\"approved\")}\n variant=\"primary\"\n >\n Approve\n </Button>\n </div>\n </form>\n ) : (\n <div className={styles.actions}>\n {canReview ? (\n <Button disabled={isGloballyBusy} onClick={() => setIsReviewing(true)}>\n Review proposal\n </Button>\n ) : null}\n {canApply ? (\n <Button\n disabled={isGloballyBusy && !isBusy}\n loading={isBusy}\n onClick={() => void apply()}\n variant=\"primary\"\n >\n Apply repair\n </Button>\n ) : null}\n {proposal.status === \"pending\" && isSameActor(proposal.origin.actor, session.actor) ? (\n <Text tone=\"tertiary\" variant=\"meta\">\n Another owner or approver must review.\n </Text>\n ) : null}\n </div>\n )}\n </Surface>\n )\n}\n\nconst LoadingPanel = (): ReactElement => (\n <div aria-label=\"Loading release decisions\" className={styles.loading} role=\"status\">\n <Skeleton decorative={false} height=\"1.5rem\" label=\"Loading release decisions\" width=\"12rem\" />\n <Skeleton decorative height=\"11rem\" variant=\"block\" />\n </div>\n)\n\n/** Render the exact, human-attributed decision ledger for one release. */\nexport const RelationshipRepairPanelView = ({\n mutationsEnabled,\n onApply,\n onRetry,\n onReview,\n release,\n session,\n state\n}: RelationshipRepairPanelViewProps): ReactElement => {\n if (state._tag === \"idle\" || state._tag === \"loading\") return <LoadingPanel />\n if (state._tag === \"failed\") {\n return (\n <StatePanel\n action={<Button onClick={onRetry}>Try again</Button>}\n description=\"Control Center could not read the governed decisions for this release.\"\n title=\"Release decisions unavailable\"\n tone=\"caution\"\n />\n )\n }\n if (state.page.proposals.length === 0) {\n return (\n <StatePanel\n description=\"No relationship repair is waiting for review or application.\"\n title=\"No repair decisions\"\n />\n )\n }\n\n return (\n <div className={styles.root}>\n <header className={styles.header}>\n <div>\n <Text as=\"h3\" variant=\"card-title\">\n Repair decisions\n </Text>\n <Text tone=\"secondary\">One compact ledger from proposal to human decision to applied revision.</Text>\n </div>\n <StateLabel\n label={`${state.page.proposals.length}${state.page.truncated ? \"+\" : \"\"} decision${state.page.proposals.length === 1 ? \"\" : \"s\"}`}\n size=\"compact\"\n tone=\"neutral\"\n />\n </header>\n <div className={styles.ledger}>\n {state.page.proposals.map((proposal) => (\n <ProposalRow\n actionFailed={state.actionFailure === proposal.proposalId}\n application={state.applications.get(proposal.proposalId)}\n isBusy={state.busyProposalId === proposal.proposalId}\n isGloballyBusy={state.busyProposalId !== null}\n key={proposal.proposalId}\n mutationsEnabled={mutationsEnabled}\n onApply={onApply}\n onRetry={onRetry}\n onReview={onReview}\n proposal={proposal}\n release={release}\n session={session}\n />\n ))}\n </div>\n </div>\n )\n}\n\nconst sessionScopeKey = (session: SessionSummary): string => {\n const actorId = session.actor._tag === \"human\" ? session.actor.personId : session.actor.agentId\n return `${session.sessionId}:${session.workspaceId}:${session.permission}:${session.actor._tag}:${actorId}`\n}\n\ninterface RelationshipRepairSessionAccess {\n readonly mutationsEnabled: boolean\n readonly session: SessionSummary | null\n}\n\n/** Cookie-authenticated reads survive storage failure; mutation controls do not. */\nexport const relationshipRepairSessionAccess = (state: BrowserSessionState): RelationshipRepairSessionAccess => {\n switch (state._tag) {\n case \"authenticated\":\n return { mutationsEnabled: true, session: state.session }\n case \"storage-unavailable\":\n return { mutationsEnabled: false, session: state.session }\n case \"anonymous\":\n case \"blocked\":\n case \"checking\":\n case \"unavailable\":\n return { mutationsEnabled: false, session: null }\n }\n}\n\n/** Render the repair ledger from an explicit browser-session state. */\nexport const RelationshipRepairPanelContent = ({\n browserSessionState,\n onSessionExpired = ignoreSessionExpired,\n release,\n transport\n}: {\n readonly browserSessionState: BrowserSessionState\n readonly onSessionExpired?: (sessionKey: string) => void\n readonly release: PortfolioReleasePresentation\n readonly transport?: RelationshipRepairTransport\n}): ReactElement => {\n const access = relationshipRepairSessionAccess(browserSessionState)\n const controller = useRelationshipRepairProposals(\n release.id,\n release.targetEnvironmentIds,\n access.session?.sessionId ?? null,\n transport,\n onSessionExpired\n )\n if (access.session === null) return <LoadingPanel />\n return (\n <div className={styles.panelStack}>\n <RelationshipRepairPanelView\n mutationsEnabled={access.mutationsEnabled}\n onApply={controller.apply}\n onRetry={controller.retry}\n onReview={controller.review}\n release={release}\n session={access.session}\n state={controller.state}\n />\n {access.mutationsEnabled ? (\n <RelationshipRepairCandidatePicker\n environmentIds={release.targetEnvironmentIds}\n key={`${release.id}:${release.targetEnvironmentIds.join(\":\")}:${sessionScopeKey(access.session)}`}\n onCreated={controller.retry}\n releaseId={release.id}\n session={access.session}\n />\n ) : null}\n </div>\n )\n}\n\n/** Connect one full release view to its authenticated repair-proposal ledger. */\nexport const RelationshipRepairPanel = ({\n release\n}: {\n readonly release: PortfolioReleasePresentation\n}): ReactElement => {\n const browserSession = useBrowserSession()\n return (\n <RelationshipRepairPanelContent\n browserSessionState={browserSession.state}\n onSessionExpired={browserSession.invalidateSession}\n release={release}\n />\n )\n}\n",".state {\n display: grid;\n min-block-size: 60dvh;\n place-items: center;\n}\n\n.state a,\n.back,\n.releaseAction {\n color: inherit;\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n}\n\n.releaseAction {\n display: inline-flex;\n min-block-size: var(--rly-space-48);\n align-items: center;\n justify-content: center;\n padding-inline: var(--rly-space-24);\n border-radius: var(--rly-radius-control);\n background: var(--rly-color-action-background);\n color: var(--rly-color-action-foreground);\n font-size: var(--rly-type-body-large-size);\n text-decoration: none;\n}\n\n.releaseAction:focus-visible {\n outline: 2px solid var(--rly-color-focus);\n outline-offset: var(--rly-space-4);\n}\n\n.previewDetails,\n.evidence,\n.full,\n.fullHeader,\n.fullTitle,\n.section {\n display: grid;\n}\n\n.previewDetails,\n.evidence {\n gap: var(--rly-space-16);\n}\n\n.evidenceHeading,\n.fullIdentity {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--rly-space-16);\n}\n\n.evidenceHeading > div {\n display: grid;\n gap: var(--rly-space-4);\n}\n\n.full {\n gap: clamp(4rem, 9vw, 8rem);\n}\n\n.fullHeader {\n gap: var(--rly-space-32);\n}\n\n.fullTitle {\n gap: var(--rly-space-12);\n}\n\n.fullTitle h1 {\n max-inline-size: 12ch;\n outline: none;\n overflow-wrap: anywhere;\n text-wrap: balance;\n}\n\n.section {\n gap: var(--rly-space-24);\n}\n\n@media (max-width: 40rem) {\n .full {\n gap: var(--rly-space-64);\n }\n\n .fullHeader {\n gap: var(--rly-space-24);\n }\n}\n","import {\n AgentContextButton,\n FreshnessStamp,\n PeopleStrip,\n ReleasePreview,\n ReleaseRelay,\n ServiceMark,\n StageRail,\n Verdict\n} from \"@knpkv/rly/patterns\"\nimport { Button, StateLabel, StatePanel, Surface, Text } from \"@knpkv/rly/primitives\"\nimport { type ReactElement, useEffect, useRef, useState } from \"react\"\nimport { Link, useLocation, useNavigate, useOutletContext, useParams, useViewTransitionState } from \"react-router\"\n\nimport { PortfolioOverviewView } from \"../portfolio/PortfolioOverview.js\"\nimport type { PortfolioReleasePresentation } from \"../portfolio/presentPortfolio.js\"\nimport type { WorkspaceReleaseOutletContext } from \"./WorkspaceReleaseLayout.js\"\nimport {\n decodeReleaseRouteId,\n readReleaseOrigin,\n releaseActiveWorkPath,\n releaseAgentPath,\n resolveReleaseOrigin,\n releaseFullPath,\n releaseOriginHref,\n releaseParentPath,\n releasePreviewPath,\n releaseTransitionNames,\n workspaceItemsPath\n} from \"./releaseRoutes.js\"\nimport styles from \"./ReleaseRoute.module.css\"\nimport { useCompactReleasePreview, usePrefersReducedReleaseMotion } from \"./useCompactReleasePreview.js\"\nimport { RelationshipRepairPanel } from \"./RelationshipRepairPanel.js\"\nimport { ReleaseWorkset } from \"./ReleaseWorkset.js\"\n\ninterface ReleaseRouteSelection {\n readonly release: PortfolioReleasePresentation\n readonly releaseId: NonNullable<ReturnType<typeof decodeReleaseRouteId>>\n}\n\nconst selectRelease = (\n context: WorkspaceReleaseOutletContext,\n routeReleaseId: string | undefined\n): ReleaseRouteSelection | null => {\n const releaseId = decodeReleaseRouteId(routeReleaseId)\n if (releaseId === null || context.controller.state._tag !== \"ready\") return null\n const release = context.controller.state.portfolio.releases.find((candidate) => candidate.id === releaseId)\n return release === undefined ? null : { release, releaseId }\n}\n\nconst ReleaseNotFound = ({ workspaceId }: Pick<WorkspaceReleaseOutletContext, \"workspaceId\">): ReactElement => {\n const stateRef = useRef<HTMLElement>(null)\n useEffect(() => stateRef.current?.focus(), [])\n return (\n <section className={styles.state} data-release-not-found=\"\" ref={stateRef} tabIndex={-1}>\n <StatePanel\n action={<Link to={releaseParentPath(workspaceId)}>Return to workspace overview</Link>}\n description=\"This release does not exist in the current workspace snapshot. It may have been removed or the address may be incorrect.\"\n title=\"Release not found\"\n />\n </section>\n )\n}\n\nconst ReleaseRouteLoading = ({ context }: { readonly context: WorkspaceReleaseOutletContext }): ReactElement => {\n const stateRef = useRef<HTMLDivElement>(null)\n useEffect(() => stateRef.current?.querySelector<HTMLElement>(\"#portfolio-title\")?.focus(), [])\n return (\n <div ref={stateRef}>\n <PortfolioOverviewView\n onPreviewRelease={() => undefined}\n onRetry={context.controller.onRetry}\n state={context.controller.state}\n />\n </div>\n )\n}\n\nexport const ReleaseAction = ({ release }: { readonly release: PortfolioReleasePresentation }): ReactElement => {\n const context = useOutletContext<WorkspaceReleaseOutletContext>()\n const location = useLocation()\n const action = (() => {\n switch (release.readinessVerdict) {\n case \"blocked\":\n return { label: \"Review blocker\", to: releaseActiveWorkPath(context.workspaceId, release.id) }\n case \"held\":\n return { label: \"Repair missing links\", to: `${releaseFullPath(context.workspaceId, release.id)}#release-work` }\n case \"ready\":\n return {\n label: \"Review ship evidence\",\n to: `${releaseFullPath(context.workspaceId, release.id)}#release-evidence`\n }\n case \"deploying\":\n return { label: \"Open deployment\", to: `${releaseFullPath(context.workspaceId, release.id)}#release-work` }\n case \"building\":\n return { label: \"Open build\", to: `${releaseFullPath(context.workspaceId, release.id)}#release-work` }\n case \"shipped\":\n return {\n label: \"View release record\",\n to: `${releaseFullPath(context.workspaceId, release.id)}#release-evidence`\n }\n case \"unknown\":\n return null\n }\n })()\n return action === null ? (\n <Button disabled size=\"principal\" stretch variant=\"primary\">\n Readiness evidence required\n </Button>\n ) : (\n <Link className={styles.releaseAction} state={location.state} to={action.to}>\n {action.label}\n </Link>\n )\n}\n\nexport const ReleaseEvidence = ({ release }: { readonly release: PortfolioReleasePresentation }): ReactElement => (\n <Surface as=\"section\" className={styles.evidence} padding=\"compact\" tone=\"secondary\">\n <div className={styles.evidenceHeading}>\n {release.source.service === null ? null : <ServiceMark service={release.source.service} />}\n <div>\n <Text as=\"h2\" variant=\"card-title\">\n {release.source.displayName}\n </Text>\n <Text tone=\"secondary\" variant=\"meta\">\n Source evidence\n </Text>\n </div>\n </div>\n <StateLabel label={release.source.healthLabel} size=\"compact\" tone={release.source.healthTone} />\n {release.source.warning === null ? (\n <Text tone=\"secondary\">Detailed evidence is not evaluated in the tracer snapshot.</Text>\n ) : (\n <Text tone=\"secondary\">{release.source.warning}</Text>\n )}\n </Surface>\n)\n\nconst releaseContextLabel = (release: PortfolioReleasePresentation): string =>\n `${release.serviceName} · ${release.version} · ${release.relay.codename} · ${release.id}`\n\nexport const ReleaseAgentEntry = ({ release }: { readonly release: PortfolioReleasePresentation }): ReactElement => {\n const context = useOutletContext<WorkspaceReleaseOutletContext>()\n const location = useLocation()\n const navigate = useNavigate()\n const prefersReducedMotion = usePrefersReducedReleaseMotion()\n return (\n <AgentContextButton\n actionLabel=\"Ask about this release\"\n agentName=\"Relay\"\n context={releaseContextLabel(release)}\n onClick={() =>\n navigate(releaseAgentPath(context.workspaceId, release.id), {\n state: location.state,\n viewTransition: !prefersReducedMotion\n })\n }\n />\n )\n}\n\nconst CompleteCollaborators = ({ release }: { readonly release: PortfolioReleasePresentation }): ReactElement =>\n release.collaborators.length === 0 ? (\n <StatePanel\n description=\"Assign an owner or approver before a governed release action can proceed.\"\n title=\"No release collaborators assigned\"\n />\n ) : (\n <PeopleStrip\n aria-label={`All ${release.serviceName} release collaborators`}\n expanded\n limit={release.collaborators.length}\n onExpandedChange={() => undefined}\n people={release.collaborators}\n />\n )\n\ntype PreviewExit = \"origin\" | null\n\nconst ReleasePreviewContent = ({ selection }: { readonly selection: ReleaseRouteSelection }): ReactElement => {\n const context = useOutletContext<WorkspaceReleaseOutletContext>()\n const isCompact = useCompactReleasePreview()\n const prefersReducedMotion = usePrefersReducedReleaseMotion()\n const location = useLocation()\n const navigate = useNavigate()\n const [exit, setExit] = useState<PreviewExit>(null)\n const [isOpen, setIsOpen] = useState(true)\n const resolvedOrigin = resolveReleaseOrigin(location.state, context.workspaceId, selection.releaseId)\n const originHref = releaseOriginHref(resolvedOrigin.origin)\n const fullPath = releaseFullPath(context.workspaceId, selection.releaseId)\n const agentPath = releaseAgentPath(context.workspaceId, selection.releaseId)\n const previewPath = releasePreviewPath(context.workspaceId, selection.releaseId)\n const isPreviewTransitioning = useViewTransitionState(previewPath)\n const isFullTransitioning = useViewTransitionState(fullPath)\n const isAgentTransitioning = useViewTransitionState(agentPath)\n const transitionNames =\n isPreviewTransitioning || isFullTransitioning || isAgentTransitioning\n ? releaseTransitionNames(selection.releaseId)\n : undefined\n\n useEffect(() => {\n if (isOpen || exit === null) return\n navigate(originHref, { replace: true })\n }, [context.workspaceId, exit, isOpen, navigate, originHref, selection.releaseId])\n\n const requestOrigin = (): void => {\n context.requestReleaseFocus(selection.releaseId)\n setExit(\"origin\")\n setIsOpen(false)\n }\n\n return (\n <ReleasePreview\n agentEntry={<ReleaseAgentEntry release={selection.release} />}\n collaborators={<CompleteCollaborators release={selection.release} />}\n entryMotion={resolvedOrigin.isStored ? \"external\" : \"intrinsic\"}\n evidence={<ReleaseEvidence release={selection.release} />}\n onOpenChange={(open) => {\n if (!open) requestOrigin()\n }}\n onOpenFullView={() => navigate(fullPath, { state: location.state, viewTransition: !prefersReducedMotion })}\n open={isOpen}\n openFullViewLabel={`Open ${selection.release.relay.codename} full view`}\n presentation={isCompact ? \"sheet\" : \"dialog\"}\n primaryAction={<ReleaseAction release={selection.release} />}\n release={selection.release.release}\n stages={<StageRail heading=\"Release stages\" stages={selection.release.stages} />}\n {...(transitionNames === undefined ? {} : { transitionNames })}\n workset={\n <div className={styles.previewDetails}>\n <ReleaseWorkset release={selection.release} workspaceId={context.workspaceId} />\n </div>\n }\n />\n )\n}\n\n/** Render the canonical release preview over its still-mounted workspace origin. */\nexport const ReleasePreviewRoute = (): ReactElement => {\n const context = useOutletContext<WorkspaceReleaseOutletContext>()\n const params = useParams()\n if (context.controller.state._tag !== \"ready\") return <ReleaseRouteLoading context={context} />\n const selection = selectRelease(context, params.releaseId)\n return selection === null ? (\n <ReleaseNotFound workspaceId={context.workspaceId} />\n ) : (\n <ReleasePreviewContent selection={selection} />\n )\n}\n\nconst FullRelease = ({ selection }: { readonly selection: ReleaseRouteSelection }): ReactElement => {\n const context = useOutletContext<WorkspaceReleaseOutletContext>()\n const location = useLocation()\n const headingRef = useRef<HTMLHeadingElement>(null)\n const origin = readReleaseOrigin(location.state, context.workspaceId, selection.releaseId)\n const originLabel = origin.pathname === workspaceItemsPath(context.workspaceId) ? \"Back to items\" : \"Back to overview\"\n const release = selection.release\n const fullPath = releaseFullPath(context.workspaceId, selection.releaseId)\n const agentPath = releaseAgentPath(context.workspaceId, selection.releaseId)\n const isFullTransitioning = useViewTransitionState(fullPath)\n const isAgentTransitioning = useViewTransitionState(agentPath)\n const transitionNames =\n isFullTransitioning || isAgentTransitioning ? releaseTransitionNames(selection.releaseId) : undefined\n\n useEffect(() => headingRef.current?.focus(), [])\n\n return (\n <article className={styles.full} data-release-full-id={release.id}>\n <header className={styles.fullHeader}>\n <Link className={styles.back} to={releaseOriginHref(origin)}>\n {originLabel}\n </Link>\n <div className={styles.fullIdentity}>\n <ReleaseRelay\n algorithm={release.relay.algorithm}\n codename={release.relay.codename}\n data-rly-release-transition-name={transitionNames?.relay}\n data-rly-release-transition-part=\"relay\"\n size=\"hero\"\n style={transitionNames === undefined ? undefined : { viewTransitionName: transitionNames.relay }}\n symbolIndices={release.relay.symbolIndices}\n />\n {release.source.freshnessDateTime === null || release.source.freshnessTime === null ? (\n <FreshnessStamp state={release.source.freshness} />\n ) : (\n <FreshnessStamp\n dateTime={release.source.freshnessDateTime}\n state={release.source.freshness}\n time={release.source.freshnessTime}\n />\n )}\n </div>\n <div className={styles.fullTitle}>\n <Text as=\"h1\" id=\"release-title\" ref={headingRef} tabIndex={-1} variant=\"verdict\">\n {release.serviceName}\n </Text>\n <Text\n as=\"code\"\n data-rly-release-transition-name={transitionNames?.version}\n data-rly-release-transition-part=\"version\"\n style={transitionNames === undefined ? undefined : { viewTransitionName: transitionNames.version }}\n tone=\"secondary\"\n variant=\"code\"\n >\n {release.version}\n </Text>\n </div>\n <Verdict\n data-rly-release-transition-name={transitionNames?.verdict}\n data-rly-release-transition-part=\"verdict\"\n reason={release.readinessReason}\n style={transitionNames === undefined ? undefined : { viewTransitionName: transitionNames.verdict }}\n tone={release.release.tone}\n verdict={release.release.verdict}\n />\n <ReleaseAction release={release} />\n </header>\n\n <StageRail heading=\"Build, verify, production\" stages={release.stages} />\n <section aria-labelledby=\"release-people\" className={styles.section}>\n <Text as=\"h2\" id=\"release-people\" variant=\"section-title\">\n People\n </Text>\n <CompleteCollaborators release={release} />\n </section>\n <section aria-labelledby=\"release-work-title\" className={styles.section} id=\"release-work\">\n <Text as=\"h2\" id=\"release-work-title\" variant=\"section-title\">\n Delivery relationships\n </Text>\n <ReleaseWorkset release={release} workspaceId={context.workspaceId} />\n <RelationshipRepairPanel release={release} />\n </section>\n <section aria-labelledby=\"release-evidence-title\" className={styles.section} id=\"release-evidence\">\n <Text as=\"h2\" id=\"release-evidence-title\" variant=\"section-title\">\n Evidence\n </Text>\n <ReleaseEvidence release={release} />\n </section>\n <section aria-labelledby=\"release-agent\" className={styles.section}>\n <Text as=\"h2\" id=\"release-agent\" variant=\"section-title\">\n Release agent\n </Text>\n <ReleaseAgentEntry release={release} />\n </section>\n </article>\n )\n}\n\n/** Render an exact release at its canonical full route without selecting a fallback entity. */\nexport const ReleaseFullRoute = (): ReactElement => {\n const context = useOutletContext<WorkspaceReleaseOutletContext>()\n const params = useParams()\n if (context.controller.state._tag !== \"ready\") return <ReleaseRouteLoading context={context} />\n const selection = selectRelease(context, params.releaseId)\n return selection === null ? (\n <ReleaseNotFound workspaceId={context.workspaceId} />\n ) : (\n <FullRelease selection={selection} />\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ ._candidates_nbx6f_1,._draft_nbx6f_2{display:grid}._candidates_nbx6f_1{gap:var(--rly-space-8)}._candidateHeader_nbx6f_10,._draftHeader_nbx6f_11,._actions_nbx6f_12{justify-content:space-between;align-items:center;display:flex}._candidate_nbx6f_1{border:1px solid var(--rly-color-border-1);border-radius:var(--rly-radius-control);color:var(--rly-color-text-1);cursor:pointer;font:inherit;align-items:center;gap:var(--rly-space-16);padding:var(--rly-space-16);text-align:start;background:0 0;justify-content:space-between;display:flex}._candidate_nbx6f_1:hover,._candidate_nbx6f_1:focus-visible{background:var(--rly-color-surface-2);border-color:var(--rly-color-border-2);outline:none}._candidate_nbx6f_1>span:first-child{gap:var(--rly-space-4);display:grid}._candidate_nbx6f_1 strong{font:var(--rly-type-body-weight) var(--rly-type-body-size) / var(--rly-type-body-line-height) var(--rly-type-body-font);text-transform:capitalize}._candidate_nbx6f_1 small{color:var(--rly-color-text-2);font:var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height) var(--rly-type-meta-font)}._draft_nbx6f_2{gap:var(--rly-space-16);padding:var(--rly-space-20)}._draftHeader_nbx6f_11{gap:var(--rly-space-16)}._actions_nbx6f_12{justify-content:flex-end;gap:var(--rly-space-8)}@media (prefers-reduced-motion:no-preference){._draft_nbx6f_2{animation:.16s ease-out both _reveal-draft_nbx6f_1}}@keyframes _reveal-draft_nbx6f_1{0%{opacity:0;transform:translateY(-4px)}}._root_1x4wx_1,._ledger_1x4wx_2,._proposal_1x4wx_3,._proposalHeader_1x4wx_4,._decision_1x4wx_5,._reviewEvidence_1x4wx_6,._reviewForm_1x4wx_7,._loading_1x4wx_8,._panelStack_1x4wx_9{display:grid}._reviewEvidence_1x4wx_6{gap:var(--rly-space-4);padding:var(--rly-space-12) var(--rly-space-16);border-inline-start:var(--rly-space-4) solid var(--rly-color-border-2);background:var(--rly-color-surface-1)}._root_1x4wx_1,._loading_1x4wx_8,._panelStack_1x4wx_9{gap:var(--rly-space-24)}._header_1x4wx_26,._proposalHeader_1x4wx_4,._peopleTrace_1x4wx_28,._actions_1x4wx_29,._agentIdentity_1x4wx_30{align-items:center;display:flex}._header_1x4wx_26,._proposalHeader_1x4wx_4{justify-content:space-between}._header_1x4wx_26{gap:var(--rly-space-24)}._header_1x4wx_26>div{gap:var(--rly-space-4);display:grid}._ledger_1x4wx_2{gap:var(--rly-space-12)}._proposal_1x4wx_3{gap:var(--rly-space-20);padding:var(--rly-space-24);overflow:hidden}._proposalHeader_1x4wx_4{gap:var(--rly-space-16)}._decision_1x4wx_5{gap:var(--rly-space-4)}._decision_1x4wx_5 strong{font:var(--rly-type-section-title-weight) var(--rly-type-section-title-size) / var(--rly-type-section-title-line-height) var(--rly-type-section-title-font);letter-spacing:var(--rly-type-section-title-tracking);text-transform:capitalize}._decision_1x4wx_5 code{color:var(--rly-color-text-2);font:var(--rly-type-code-weight) var(--rly-type-code-size) / var(--rly-type-code-line-height) var(--rly-type-code-font)}._rationale_1x4wx_80{max-inline-size:58ch}._peopleTrace_1x4wx_28{gap:var(--rly-space-12);flex-wrap:wrap}._traceArrow_1x4wx_89{color:var(--rly-color-text-3);font:var(--rly-type-code-weight) var(--rly-type-code-size) / 1 var(--rly-type-code-font)}._agentIdentity_1x4wx_30{gap:var(--rly-space-8)}._agentGlyph_1x4wx_98{background:var(--rly-color-surface-3);color:var(--rly-color-agent);block-size:var(--rly-space-24);inline-size:var(--rly-space-24);border-radius:50%;justify-content:center;align-items:center;display:inline-flex}._agentIdentity_1x4wx_30>span:last-child{display:grid}._agentIdentity_1x4wx_30 strong,._agentIdentity_1x4wx_30 small{font:var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height) var(--rly-type-meta-font)}._agentIdentity_1x4wx_30 small{color:var(--rly-color-text-2)}._reviewForm_1x4wx_7{border-block-start:1px solid var(--rly-color-border-1);gap:var(--rly-space-16);padding-block-start:var(--rly-space-20)}._actions_1x4wx_29{gap:var(--rly-space-8);flex-wrap:wrap}._actionFailure_1x4wx_134{margin-block:var(--rly-space-4)}._status_1x4wx_138:focus{border-radius:var(--rly-radius-control)}._srOnly_1x4wx_142{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}@media (width<=40rem){._header_1x4wx_26,._proposalHeader_1x4wx_4{flex-direction:column;align-items:flex-start}._proposal_1x4wx_3{padding:var(--rly-space-20)}._traceArrow_1x4wx_89{display:none}._peopleTrace_1x4wx_28{flex-direction:column;align-items:flex-start}}@media (prefers-reduced-motion:no-preference){._reviewForm_1x4wx_7{animation:.16s ease-out both _reveal-review_1x4wx_1}}@keyframes _reveal-review_1x4wx_1{0%{opacity:0;transform:translateY(-4px)}}._state_1mg2y_1{place-items:center;min-block-size:60dvh;display:grid}._state_1mg2y_1 a,._back_1mg2y_8,._releaseAction_1mg2y_9{color:inherit;font:var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height) var(--rly-type-label-font)}._releaseAction_1mg2y_9{min-block-size:var(--rly-space-48);padding-inline:var(--rly-space-24);border-radius:var(--rly-radius-control);background:var(--rly-color-action-background);color:var(--rly-color-action-foreground);font-size:var(--rly-type-body-large-size);justify-content:center;align-items:center;text-decoration:none;display:inline-flex}._releaseAction_1mg2y_9:focus-visible{outline:2px solid var(--rly-color-focus);outline-offset:var(--rly-space-4)}._previewDetails_1mg2y_33,._evidence_1mg2y_34,._full_1mg2y_35,._fullHeader_1mg2y_36,._fullTitle_1mg2y_37,._section_1mg2y_38{display:grid}._previewDetails_1mg2y_33,._evidence_1mg2y_34{gap:var(--rly-space-16)}._evidenceHeading_1mg2y_47,._fullIdentity_1mg2y_48{justify-content:space-between;align-items:center;gap:var(--rly-space-16);flex-wrap:wrap;display:flex}._evidenceHeading_1mg2y_47>div{gap:var(--rly-space-4);display:grid}._full_1mg2y_35{gap:clamp(4rem,9vw,8rem)}._fullHeader_1mg2y_36{gap:var(--rly-space-32)}._fullTitle_1mg2y_37{gap:var(--rly-space-12)}._fullTitle_1mg2y_37 h1{overflow-wrap:anywhere;text-wrap:balance;outline:none;max-inline-size:12ch}._section_1mg2y_38{gap:var(--rly-space-24)}@media (width<=40rem){._full_1mg2y_35{gap:var(--rly-space-64)}._fullHeader_1mg2y_36{gap:var(--rly-space-24)}}
@@ -0,0 +1 @@
1
+ ._body_ahahc_1,._loading_ahahc_2,._content_ahahc_3,._summary_ahahc_4,._section_ahahc_5,._history_ahahc_6,._evidence_ahahc_7,._evidenceCard_ahahc_8,._claims_ahahc_9{display:grid}._integrity_ahahc_13{align-items:flex-start;gap:var(--rly-space-8);display:flex}._integrity_ahahc_13 p{margin:0}._body_ahahc_1,._content_ahahc_3,._loading_ahahc_2{gap:var(--rly-space-20)}._content_ahahc_3,._summary_ahahc_4,._section_ahahc_5,._evidenceCard_ahahc_8{gap:var(--rly-space-12)}._summary_ahahc_4,._evidenceCard_ahahc_8{padding:var(--rly-space-16);border:1px solid var(--rly-color-border-1);border-radius:var(--rly-radius-group);background:var(--rly-color-surface-2)}._summaryHeading_ahahc_44,._sectionHeading_ahahc_45,._historyHeading_ahahc_46,._evidenceHeading_ahahc_47,._tags_ahahc_48{justify-content:space-between;align-items:center;gap:var(--rly-space-8);flex-wrap:wrap;display:flex}._tags_ahahc_48{justify-content:flex-end}._summary_ahahc_4 h3,._section_ahahc_5 h3,._evidenceCard_ahahc_8 h4,._summary_ahahc_4 p,._history_ahahc_6 p,._facts_ahahc_65 dd{margin:0}._facts_ahahc_65{gap:var(--rly-space-12);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;display:grid}._facts_ahahc_65 div{min-width:0}._facts_ahahc_65 dt{color:var(--rly-color-text-2);font:var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height) var(--rly-type-meta-font)}._facts_ahahc_65 dd{overflow-wrap:anywhere}._history_ahahc_6,._claims_ahahc_9{gap:var(--rly-space-8);margin:0;padding:0;list-style:none}._history_ahahc_6 li,._claims_ahahc_9 li{gap:var(--rly-space-4);padding:var(--rly-space-12);border-block-start:1px solid var(--rly-color-border-1);display:grid}._history_ahahc_6 li:first-child,._claims_ahahc_9 li:first-child{border-block-start:0}._claims_ahahc_9 li{grid-template-columns:minmax(8rem,auto) minmax(0,1fr)}@media (width<=36rem){._facts_ahahc_65,._claims_ahahc_9 li{grid-template-columns:minmax(0,1fr)}}._root_1y5sp_1,._loading_1y5sp_2,._context_1y5sp_3,._contextGroup_1y5sp_4,._selected_1y5sp_5,._selectedFacts_1y5sp_6,._trace_1y5sp_7,._traceList_1y5sp_8,._runbooks_1y5sp_9,._runbook_1y5sp_9{display:grid}._root_1y5sp_1,._loading_1y5sp_2{gap:var(--rly-space-16)}._context_1y5sp_3{align-items:start;gap:var(--rly-space-24);padding:var(--rly-space-16) var(--rly-space-20);border:1px solid var(--rly-color-border-1);border-radius:var(--rly-radius-group);background:var(--rly-color-surface-2);grid-template-columns:repeat(2,minmax(0,1fr)) auto}._contextGroup_1y5sp_4,._runbook_1y5sp_9{gap:var(--rly-space-4)}._contextHeading_1y5sp_34,._tags_1y5sp_35{align-items:center;gap:var(--rly-space-8);flex-wrap:wrap;display:flex}._contextGroup_1y5sp_4 h3{margin:0}._selected_1y5sp_5{gap:var(--rly-space-12);padding:var(--rly-space-16);border:1px solid var(--rly-color-border-2);border-radius:var(--rly-radius-group);background:var(--rly-color-surface-1);grid-column:1/-1}._selected_1y5sp_5 h3,._selected_1y5sp_5 p,._selectedFacts_1y5sp_6 dd{margin:0}._selectedHeading_1y5sp_61{align-items:center;gap:var(--rly-space-8);flex-wrap:wrap;display:flex}._selectedFacts_1y5sp_6{gap:var(--rly-space-12);grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));margin:0}._selectedFacts_1y5sp_6 div{min-width:0}._selectedFacts_1y5sp_6 dt{color:var(--rly-color-text-2);font:var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height) var(--rly-type-meta-font)}._selectedFacts_1y5sp_6 dd{overflow-wrap:anywhere}._trace_1y5sp_7{gap:var(--rly-space-8);border-block-start:1px solid var(--rly-color-border-1);padding-block-start:var(--rly-space-12)}._traceHeading_1y5sp_94,._traceRelation_1y5sp_95{align-items:center;gap:var(--rly-space-8);flex-wrap:wrap;display:flex}._traceHeading_1y5sp_94{justify-content:space-between}._traceHeading_1y5sp_94 h4,._traceConnection_1y5sp_107 p{margin:0}._traceList_1y5sp_8{gap:var(--rly-space-4);margin:0;padding:0;list-style:none}._traceList_1y5sp_8 li{align-items:center;gap:var(--rly-space-12);min-width:0;padding:var(--rly-space-8) var(--rly-space-12);border-radius:var(--rly-radius-control);background:var(--rly-color-surface-2);grid-template-columns:auto minmax(10rem,1fr) auto auto auto;display:grid}._traceConnection_1y5sp_107{min-width:0}._traceConnection_1y5sp_107 a{color:var(--rly-color-text-1);overflow-wrap:anywhere;-webkit-text-decoration-color:var(--rly-color-border-2);text-decoration-color:var(--rly-color-border-2);text-underline-offset:var(--rly-space-2)}._traceDetails_1y5sp_140{color:var(--rly-color-text-1);font:var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height) var(--rly-type-label-font);text-underline-offset:var(--rly-space-2)}._traceDetails_1y5sp_140:focus-visible,._traceConnection_1y5sp_107 a:focus-visible{border-radius:var(--rly-radius-tag);outline:2px solid var(--rly-color-focus);outline-offset:var(--rly-space-2)}._runbooks_1y5sp_9{gap:var(--rly-space-8)}._runbook_1y5sp_9{color:inherit;-webkit-text-decoration-color:var(--rly-color-border-2);text-decoration-color:var(--rly-color-border-2);text-underline-offset:var(--rly-space-2)}._runbook_1y5sp_9 span{color:var(--rly-color-text-2);font:var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height) var(--rly-type-meta-font)}._runbook_1y5sp_9:focus-visible{border-radius:var(--rly-radius-tag);outline:2px solid var(--rly-color-focus);outline-offset:var(--rly-space-2)}@media (width<=48rem){._context_1y5sp_3{grid-template-columns:minmax(0,1fr)}._traceList_1y5sp_8 li{grid-template-columns:auto minmax(0,1fr)}._traceRelation_1y5sp_95,._traceList_1y5sp_8 li>span,._traceDetails_1y5sp_140{grid-column:2}}
@@ -0,0 +1,2 @@
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-n5LQ9ujS.js";import{E as r,a as i,h as a,i as o,n as s,r as c,t as l,w as u}from"./Dialog-DwSIPb-B-DVn37afM.js";import{c as d,i as f,o as p,s as m}from"./index-DLoOV6Hp.js";import{r as h,v as g}from"./patterns-DEbg7R-A-Cw0A2uKS.js";import{D as _,Ft as v,J as y,P as b,Rt as x,dt as S,i as C,j as w,m as T,ot as E,pt as D,st as O,t as k,v as ee,zt as A}from"./client-OmvShYdC.js";import{n as j}from"./workspaceEntityPaths-xAl2jRFm.js";import{n as M,t as te}from"./WorkspaceEntityLink-BRifdJHn.js";var N=e(t(),1),ne=(e,t,n,r)=>`/w/${e}/releases/${t}?object=${encodeURIComponent(n)}&relationship=${encodeURIComponent(r)}#release-work`,P=e=>{let t=e.toLocaleLowerCase(`en-US`);return[`blocked`,`changes requested`,`failed`,`rejected`,`rolled back`,`stopped`,`superseded`].some(e=>t.includes(e))?`critical`:[`approved`,`closed`,`current`,`done`,`merged`,`not required`,`passed`,`ready`,`resolved`,`succeeded`].some(e=>t.includes(e))?`positive`:[`deploying`,`in progress`,`in review`,`pending`,`queued`,`requested`,`running`,`verifying`].some(e=>t.includes(e))?`progress`:`neutral`},F=e=>{switch(e){case`not-requested`:return`Review not requested`;case`requested`:return`Review requested`;case`changes-requested`:return`Changes requested`;case`approved`:return`Approved`;case`merged`:return`Merged`}},I=e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`,L=e=>e.split(`-`).map(e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`).join(` `),re=e=>{switch(e){case`issue`:return`jira`;case`pull-request`:return`codecommit`;case`page`:return`confluence`;case`pipeline-execution`:case`deployment`:return`codepipeline`;case`time-entry`:return`clockify`}},ie=e=>{switch(e._tag){case`issue`:return e.status;case`pull-request`:return F(e.reviewState);case`page`:case`deployment`:return L(e.status);case`pipeline-execution`:return I(e.status);case`time-entry`:return L(e.approvalState)}},ae=e=>{switch(e._tag){case`issue`:return[{label:`Priority`,value:e.priority??`Not set`},{label:`Estimate`,value:e.estimatePoints===null?`Not set`:`${e.estimatePoints} points`}];case`pull-request`:return[{label:`Repository`,value:e.repository},{label:`Branch`,value:`${e.sourceBranch} → ${e.targetBranch}`},{label:`Revision`,value:e.headRevision}];case`page`:return[{label:`Space`,value:e.spaceKey},{label:`Revision`,value:e.revision}];case`pipeline-execution`:return[{label:`Pipeline`,value:e.pipelineName},{label:`Execution`,value:e.executionId},{label:`Revision`,value:e.triggerRevision}];case`deployment`:return[{label:`Environment`,value:e.environmentId},{label:`Revision`,value:e.revision}];case`time-entry`:return[{label:`Duration`,value:`${e.durationMinutes} minutes`},{label:`Billing`,value:e.billable?`Billable`:`Non-billable`}]}},R=e=>{let t=ie(e.details);return{facts:ae(e.details),id:e.entityId,kind:e.entityType,label:e.displayKey,service:re(e.entityType),status:t,title:e.title,tone:P(t)}},z=(e,t)=>{if(t===null)return null;let n=e.entityProjections.find(({projection:e})=>e.entityState===`present`&&e.entityId===t)?.projection;return n===void 0?null:R(n)},B=e=>e.lifecycle._tag!==`missing`&&e.lifecycle._tag!==`rejected`&&e.lifecycle._tag!==`superseded`,oe=e=>{switch(e.sourceNodeKind===`release`?e.targetNodeKind:e.sourceNodeKind){case`issue`:return`jira`;case`page`:return`confluence`;case`pipeline-execution`:case`deployment`:return`codepipeline`;case`time-entry`:return`clockify`;case`pull-request`:case`release`:case`environment`:return`codecommit`}return`codecommit`},V=e=>{let t=new Map(e.entityProjections.map(({projection:e})=>[e.entityId,e]));return new Map(e.nodes.flatMap(e=>{if(e.resolution._tag!==`resolved`||e.resolution.target._tag!==`entity`)return[];let n=t.get(e.resolution.target.entityId);return n===void 0?[]:[[e.nodeId,n]]}))},se=e=>{switch(e){case`missing`:case`rejected`:return`critical`;case`governed`:case`verified`:return`positive`;case`inferred`:case`proposed`:return`progress`;case`superseded`:return`neutral`}},ce=e=>{switch(e._tag){case`confirmed`:return`Confirmed`;case`inferred`:return`Inferred ${String(Math.round(e.score*100))}%`;case`unknown`:return`Confidence unknown`}},le=(e,t,n,r)=>{let i=r.get(n);if(i!==void 0){let e=R(i);return{href:i.entityState===`present`?j(t,i.entityId):null,kind:e.kind,label:e.label,service:e.service,title:i.entityState===`present`?e.title:`${e.title} · Deleted`}}let a=e.nodes.find(e=>e.nodeId===n);if(a?.resolution._tag===`missing`)return{href:null,kind:a.endpointKind,label:a.resolution.missingKey,service:null,title:`Missing ${L(a.endpointKind)}`};if(a?.resolution._tag===`resolved`&&a.resolution.target._tag===`release`){let t=a.resolution.target.releaseId===e.releaseId;return{href:null,kind:`release`,label:`Release ${a.resolution.target.releaseId.slice(-6)}`,service:null,title:t?`Current release context`:`Connected release`}}return a?.resolution._tag===`resolved`&&a.resolution.target._tag===`environment`?{href:null,kind:`environment`,label:`Environment ${a.resolution.target.environmentId.slice(-6)}`,service:null,title:`Delivery environment`}:{href:null,kind:`unknown`,label:n.slice(-6),service:null,title:`Unresolved graph node`}},ue=(e,t,n)=>{let r=z(e,n);if(r===null||n===null)return null;let i=new Set(e.nodes.flatMap(e=>e.resolution._tag===`resolved`&&e.resolution.target._tag===`entity`&&e.resolution.target.entityId===n?[e.nodeId]:[])),a=V(e);return{relationships:e.relationships.flatMap(n=>{let o=i.has(n.sourceNodeId)?`outgoing`:i.has(n.targetNodeId)?`incoming`:null;if(o===null)return[];let s=o===`outgoing`?n.targetNodeId:n.sourceNodeId;return[{confidence:ce(n.confidence),detailsHref:ne(t,e.releaseId,r.id,n.relationshipId),direction:o,evidenceCount:n.evidenceClaimIds.length,id:n.relationshipId,kind:n.kind,lifecycle:L(n.lifecycle._tag),other:le(e,t,s,a),tone:se(n.lifecycle._tag)}]}).sort((e,t)=>e.kind.localeCompare(t.kind)||e.other.label.localeCompare(t.other.label)||e.id.localeCompare(t.id)),truncated:e.truncated}},de=(e,t,n)=>{if(n===null||t===null||z(e,t)===null)return null;let r=new Set(e.nodes.flatMap(e=>e.resolution._tag===`resolved`&&e.resolution.target._tag===`entity`&&e.resolution.target.entityId===t?[e.nodeId]:[])),i=null;for(let t of e.relationships)t.relationshipId===n&&(r.has(t.sourceNodeId)||r.has(t.targetNodeId))&&(i===null||t.revision>i.revision)&&(i=t);return i},H=(e,t)=>{if(t===null)return[];let n=new Map(e.evidenceClaims.map(e=>[e.evidenceClaimId,e]));return t.evidenceClaimIds.flatMap(e=>{let t=n.get(e);return t===void 0?[]:[t]})},fe=(e,t)=>{let n=new Set;for(let r of H(e,t))n.add(r.evidenceId);return[...n].sort((e,t)=>e.localeCompare(t))},pe=(e,t)=>{let n=new Map(e.nodes.map(e=>[e.nodeId,e]));return new Set(e.relationships.flatMap(r=>{if(r.kind!==`documented-by`||r.sourceNodeKind!==`release`||r.targetNodeKind!==`page`||!B(r))return[];let i=n.get(r.sourceNodeId),a=t.get(r.targetNodeId);return i?.resolution._tag===`resolved`&&i.resolution.target._tag===`release`&&i.resolution.target.releaseId===e.releaseId&&a?.details._tag===`page`?[a.entityId]:[]}))},me=(e,t)=>{let n=e.sourceNodeKind===`issue`?t.get(e.sourceNodeId):e.targetNodeKind===`issue`?t.get(e.targetNodeId):void 0;return n?.details._tag===`issue`&&e.sourceNodeKind===`pull-request`?`${n.details.key} has no CodeCommit pull request`:`Missing ${e.sourceNodeKind} → ${e.targetNodeKind} relationship`},he=(e,t,n)=>{let r=V(e),i=pe(e,r),a=e=>j(t,e.entityId),o=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`issue`&&e.details._tag===`issue`&&e.entityState===`present`),s=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`pull-request`&&e.details._tag===`pull-request`&&e.entityState===`present`),c=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`pipeline-execution`&&e.details._tag===`pipeline-execution`&&e.entityState===`present`),l=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`page`&&e.details._tag===`page`&&e.entityState===`present`&&i.has(e.entityId));return{jiraItems:o.map(e=>({id:e.entityId,key:e.details.key,title:e.title,state:e.details.status,tone:P(e.details.status),href:a(e)})),pullRequestGroups:s.map(t=>{let n=new Set(Array.from(r).flatMap(([e,n])=>n.entityId===t.entityId?[e]:[])),i=Array.from(new Set(e.relationships.flatMap(e=>{if(e.kind!==`implements`||!n.has(e.sourceNodeId)||!B(e))return[];let t=r.get(e.targetNodeId);return t?.details._tag===`issue`?[t.details.key]:[]}))),o=F(t.details.reviewState);return{id:t.entityId,title:t.title,reference:t.displayKey,state:o,tone:P(o),href:a(t),linkedJiraKeys:i}}),gaps:e.relationships.flatMap(e=>e.lifecycle._tag===`missing`?[{id:e.relationshipId,label:me(e,r),reason:e.lifecycle.reason,service:oe(e)}]:[]),pipelines:c.map(e=>{let t=I(e.details.status);return{id:e.entityId,title:e.title,reference:e.displayKey,state:t,tone:P(t),href:a(e),stages:n}}),runbooks:l.map(e=>({href:a(e),id:e.entityId,reference:e.displayKey,state:e.details.status,title:e.title})),truncated:e.truncated}},U={body:`_body_ahahc_1`,loading:`_loading_ahahc_2`,content:`_content_ahahc_3`,summary:`_summary_ahahc_4`,section:`_section_ahahc_5`,history:`_history_ahahc_6`,evidence:`_evidence_ahahc_7`,evidenceCard:`_evidenceCard_ahahc_8`,claims:`_claims_ahahc_9`,integrity:`_integrity_ahahc_13`,summaryHeading:`_summaryHeading_ahahc_44`,sectionHeading:`_sectionHeading_ahahc_45`,historyHeading:`_historyHeading_ahahc_46`,evidenceHeading:`_evidenceHeading_ahahc_47`,tags:`_tags_ahahc_48`,facts:`_facts_ahahc_65`},ge=A(`UnauthorizedApiError`),_e={load:(e,t,n)=>D(O(function*(){let n=yield*k(),r=yield*n.deliveryGraph.relationshipHistory({params:{relationshipId:e}});return{evidence:yield*E(t,e=>n.deliveryGraph.evidence({params:{evidenceId:e}}),{concurrency:4}),history:r}}).pipe(S(C)),{signal:n})},ve=(e,t,n,r,i=_e)=>{let[a,o]=(0,N.useState)(0),[s,c]=(0,N.useState)({_tag:`idle`}),l=t.join(`:`),u=(0,N.useRef)(t);(0,N.useEffect)(()=>{u.current=t},[t]),(0,N.useEffect)(()=>{if(e===null||n===null){c({_tag:`idle`});return}let t=new AbortController;return c({_tag:`loading`,evidenceKey:l,relationshipId:e,sessionKey:n}),i.load(e,u.current,t.signal).then(r=>{t.signal.aborted||c({_tag:`ready`,details:r,evidenceKey:l,relationshipId:e,sessionKey:n})},i=>{t.signal.aborted||(ge(i)&&r(n),c({_tag:`failed`,evidenceKey:l,relationshipId:e,sessionKey:n}))}),()=>t.abort()},[l,r,e,a,n,i]);let d=e===null||n===null?{_tag:`idle`}:s._tag===`idle`||s.relationshipId!==e||s.sessionKey!==n||s.evidenceKey!==l?{_tag:`loading`,evidenceKey:l,relationshipId:e,sessionKey:n}:s;return{retry:(0,N.useCallback)(()=>o(e=>e+1),[]),state:d}},W=n(),G=e=>e.split(`-`).map(e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`).join(` `),K=e=>y(e,{day:`2-digit`,hour:`2-digit`,hour12:!1,locale:`en-GB`,minute:`2-digit`,month:`short`,year:`numeric`}),q=e=>{switch(e._tag){case`human`:return`Human · ${e.personId.slice(-6)}`;case`agent`:return`Agent · ${e.agentId.slice(-6)}`;case`system`:return`System · ${e.component}`}},ye=e=>{switch(e._tag){case`plugin`:return`Plugin source · ${e.pluginConnectionId.slice(-6)}`;case`human`:return`Human decision · ${e.personId.slice(-6)}`;case`agent`:return`Agent proposal · ${e.agentId.slice(-6)}`;case`rule`:return`Rule · ${e.ruleId} v${String(e.ruleVersion)}`}},be=e=>{switch(e.confidence._tag){case`confirmed`:return`Confirmed by immutable evidence.`;case`inferred`:case`unknown`:return e.confidence.rationale}},xe=e=>{switch(e.confidence._tag){case`confirmed`:return`Confirmed`;case`inferred`:return`Inferred ${String(Math.round(e.confidence.score*100))}%`;case`unknown`:return`Confidence unknown`}},J=e=>{switch(e.lifecycle._tag){case`missing`:case`rejected`:return`critical`;case`governed`:case`verified`:return`positive`;case`inferred`:case`proposed`:return`progress`;case`superseded`:return`neutral`}},Se=e=>e.scope===null?`Workspace`:e.scope._tag===`release`?`Release · ${e.scope.releaseId.slice(-6)}`:`Environment · ${e.scope.environmentId.slice(-6)}`,Ce=e=>{switch(e.freshness._tag){case`current`:return`positive`;case`stale`:return`caution`;case`missing`:case`unavailable`:return`critical`}},we=e=>{switch(e.lifecycle._tag){case`missing`:case`rejected`:case`superseded`:return e.lifecycle.reason;case`governed`:case`inferred`:case`proposed`:case`verified`:return null}},Y=e=>{switch(e._tag){case`plugin`:return`Plugin · ${e.pluginConnectionId.slice(-6)}`;case`human`:return`Human · ${e.personId.slice(-6)}`;case`agent`:return`Agent · ${e.agentId.slice(-6)}`;case`system`:return`System · ${e.component}`}},Te=e=>{switch(e.value._tag){case`flag`:return e.value.value?`Yes`:`No`;case`state`:case`revision`:return e.value.value;case`reference`:return`Node ${e.value.targetNodeId.slice(-6)}`}},Ee=({claims:e,inspection:t,relationship:n})=>{let r=new Set(n.evidenceClaimIds),i=e.filter(({evidenceClaimId:e,evidenceId:n})=>n===t.evidence.evidenceId&&r.has(e)),a=t.evidence;return(0,W.jsxs)(`article`,{className:U.evidenceCard,children:[(0,W.jsxs)(`div`,{className:U.evidenceHeading,children:[(0,W.jsxs)(f,{as:`h4`,variant:`label`,children:[`Evidence `,a.evidenceId.slice(-6)]}),(0,W.jsx)(c,{label:G(a.freshness._tag),size:`compact`,tone:Ce(a)})]}),(0,W.jsxs)(`dl`,{className:U.facts,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Observed`}),(0,W.jsx)(`dd`,{children:K(a.observedAt)})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Source`}),(0,W.jsx)(`dd`,{children:Y(a.attribution)})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Verified by`}),(0,W.jsx)(`dd`,{children:Y(a.verifier)})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Retention`}),(0,W.jsxs)(`dd`,{children:[G(a.retention.classification),a.retention.legalHold?` · Legal hold`:``]})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Valid until`}),(0,W.jsx)(`dd`,{children:a.validUntil===null?`No expiry recorded`:K(a.validUntil)})]})]}),i.length===0?(0,W.jsx)(f,{tone:`secondary`,variant:`meta`,children:`No referenced claim was returned for this observation.`}):(0,W.jsx)(`ul`,{className:U.claims,children:i.map(e=>(0,W.jsxs)(`li`,{children:[(0,W.jsx)(f,{as:`span`,variant:`label`,children:G(e.predicate)}),(0,W.jsx)(f,{as:`span`,tone:`secondary`,children:Te(e)})]},e.evidenceClaimId))})]})},De=e=>{let t=0;for(let n of e)t=Math.max(t,n.revision);return t>e.length?`${String(e.length)} of ${String(t)} revisions`:`${String(e.length)} revision${e.length===1?``:`s`}`},Oe=({claims:e,evidenceIds:t,onClose:n,onSessionExpired:r,relationship:a,sessionKey:u,transport:d})=>{let p=ve(a?.relationshipId??null,t,u,r,d),m=a===null?`Relationship details`:`${G(a.kind)} relationship`,h=a===null||e.length===a.evidenceClaimIds.length;return(0,W.jsx)(o.Root,{onOpenChange:e=>{e||n()},open:a!==null,children:(0,W.jsx)(o.Content,{closeLabel:`Close ${m}`,description:`Immutable delivery history and the evidence used to establish this connection.`,title:m,children:(0,W.jsx)(o.Body,{className:U.body,children:a===null||p.state._tag===`idle`||p.state._tag===`loading`?(0,W.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading relationship details`,className:U.loading,children:[(0,W.jsx)(i,{height:`7rem`}),(0,W.jsx)(i,{height:`12rem`})]}):p.state._tag===`failed`?(0,W.jsx)(s,{action:(0,W.jsx)(l,{onClick:p.retry,children:`Try again`}),description:`The selected relationship remains unchanged. Its history could not be loaded.`,title:`Relationship details unavailable`,tone:`caution`}):(0,W.jsxs)(`div`,{className:U.content,children:[(0,W.jsxs)(`section`,{"aria-labelledby":`relationship-summary-title`,className:U.summary,children:[(0,W.jsxs)(`div`,{className:U.summaryHeading,children:[(0,W.jsxs)(f,{as:`h3`,id:`relationship-summary-title`,variant:`section-title`,children:[a.sourceNodeKind,` → `,a.targetNodeKind]}),(0,W.jsxs)(`div`,{className:U.tags,children:[(0,W.jsx)(c,{label:G(a.lifecycle._tag),size:`compact`,tone:J(a)}),(0,W.jsx)(c,{label:xe(a),size:`compact`,tone:`neutral`})]})]}),(0,W.jsx)(f,{tone:`secondary`,children:be(a)}),(0,W.jsxs)(`dl`,{className:U.facts,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Revision`}),(0,W.jsx)(`dd`,{children:String(a.revision)})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Recorded by`}),(0,W.jsx)(`dd`,{children:q(a.recordedBy)})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Origin`}),(0,W.jsx)(`dd`,{children:ye(a.provenance)})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Scope`}),(0,W.jsx)(`dd`,{children:Se(a)})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:`Recorded`}),(0,W.jsx)(`dd`,{children:K(a.recordedAt)})]})]})]}),(0,W.jsxs)(`section`,{"aria-labelledby":`relationship-history-title`,className:U.section,children:[(0,W.jsxs)(`div`,{className:U.sectionHeading,children:[(0,W.jsx)(f,{as:`h3`,id:`relationship-history-title`,variant:`label`,children:`History`}),(0,W.jsx)(c,{label:De(p.state.details.history.revisions),size:`compact`,tone:`neutral`})]}),p.state.details.history.revisions.length===0?(0,W.jsx)(f,{tone:`secondary`,children:`No immutable ledger revisions were returned.`}):(0,W.jsx)(`ol`,{className:U.history,children:p.state.details.history.revisions.map(e=>{let t=we(e);return(0,W.jsxs)(`li`,{children:[(0,W.jsxs)(`div`,{className:U.historyHeading,children:[(0,W.jsxs)(f,{as:`span`,variant:`label`,children:[`Revision `,String(e.revision)]}),(0,W.jsx)(c,{label:G(e.lifecycle._tag),size:`compact`,tone:J(e)})]}),(0,W.jsxs)(f,{tone:`secondary`,variant:`meta`,children:[q(e.recordedBy),` ·`,` `,K(e.recordedAt)]}),t===null?null:(0,W.jsx)(f,{tone:`secondary`,children:t})]},`${e.relationshipId}:${String(e.revision)}`)})})]}),(0,W.jsxs)(`section`,{"aria-labelledby":`relationship-evidence-title`,className:U.section,children:[(0,W.jsxs)(`div`,{className:U.sectionHeading,children:[(0,W.jsx)(f,{as:`h3`,id:`relationship-evidence-title`,variant:`label`,children:`Evidence`}),(0,W.jsx)(c,{label:`${String(p.state.details.evidence.length)} observation${p.state.details.evidence.length===1?``:`s`}`,size:`compact`,tone:`neutral`})]}),h?null:(0,W.jsxs)(`div`,{className:U.integrity,children:[(0,W.jsx)(c,{label:`Evidence incomplete`,size:`compact`,tone:`critical`}),(0,W.jsx)(f,{tone:`secondary`,children:`One or more referenced claims are missing from the release slice. Refresh before relying on this relationship.`})]}),p.state.details.evidence.length===0?(0,W.jsx)(f,{tone:`secondary`,children:`No immutable evidence is attached to this relationship revision.`}):(0,W.jsx)(`div`,{className:U.evidence,children:p.state.details.evidence.map(t=>(0,W.jsx)(Ee,{claims:e,inspection:t,relationship:a},t.evidence.evidenceId))})]})]})})})})},ke=w({relationshipDetailOrigin:w({_tag:_(`relationship-detail-origin/v1`),objectId:T,relationshipId:ee})}),Ae=(e,t,n)=>({...x(e)?e:{},relationshipDetailOrigin:{_tag:`relationship-detail-origin/v1`,objectId:t,relationshipId:n}}),je=(e,t,n)=>{let r=b(ke)(e);return v(r)&&r.value.relationshipDetailOrigin.objectId===t&&r.value.relationshipDetailOrigin.relationshipId===n},Me=(e,t,n,r)=>{if(je(t.state,n,r)){e(-1);return}let i=new URLSearchParams(t.search);i.delete(`relationship`),e({hash:t.hash,pathname:t.pathname,search:i.size===0?``:`?${i.toString()}`},{replace:!0,state:t.state})},X={root:`_root_1y5sp_1`,loading:`_loading_1y5sp_2`,context:`_context_1y5sp_3`,contextGroup:`_contextGroup_1y5sp_4`,selected:`_selected_1y5sp_5`,selectedFacts:`_selectedFacts_1y5sp_6`,trace:`_trace_1y5sp_7`,traceList:`_traceList_1y5sp_8`,runbooks:`_runbooks_1y5sp_9`,runbook:`_runbook_1y5sp_9`,contextHeading:`_contextHeading_1y5sp_34`,tags:`_tags_1y5sp_35`,selectedHeading:`_selectedHeading_1y5sp_61`,traceHeading:`_traceHeading_1y5sp_94`,traceRelation:`_traceRelation_1y5sp_95`,traceConnection:`_traceConnection_1y5sp_107`,traceDetails:`_traceDetails_1y5sp_140`},Z=async(e,t)=>{let n=[null,...e],r=[],i=0,a=!1,o=async()=>{for(;!a&&i<n.length;){let e=i;i+=1;let o=n[e];if(o===void 0)return;try{r.push({index:e,value:await t(o)})}catch(e){throw a=!0,e}}},s=Math.min(4,n.length);return await Promise.all(Array.from({length:s},()=>o())),r.sort((e,t)=>e.index-t.index).map(({value:e})=>e)},Q=500,Ne=(e,t)=>{let n=new Map,r=new Map,i=new Map,a=new Map;for(let e of t){for(let t of e.nodes)n.set(t.nodeId,t);for(let t of e.entityProjections)r.set(t.projection.entityId,t);for(let t of e.evidenceClaims)i.set(t.evidenceClaimId,t);for(let t of e.evidenceItems)a.set(t.evidenceId,t)}let o=new Map,s=new Map,c=new Map,l=new Map,u=new Map,d=t.some(e=>e.truncated);for(let e of t.flatMap(({relationships:e})=>e)){let t=`${e.relationshipId}:${String(e.revision)}`;if(c.has(t))continue;let f=[n.get(e.sourceNodeId),n.get(e.targetNodeId)];if(f.some(e=>e===void 0)){d=!0;continue}let p=f.filter(e=>e!==void 0),m=p.filter(e=>e.resolution._tag===`resolved`&&e.resolution.target._tag===`entity`),h=m.flatMap(e=>{if(e.resolution._tag!==`resolved`||e.resolution.target._tag!==`entity`)return[];let t=r.get(e.resolution.target.entityId);return t===void 0?[]:[t]}),g=e.evidenceClaimIds.flatMap(e=>{let t=i.get(e);return t===void 0?[]:[t]}),_=new Set(g.map(({evidenceId:e})=>e)),v=[..._].flatMap(e=>{let t=a.get(e);return t===void 0?[]:[t]}),y=h.length!==m.length||g.length!==e.evidenceClaimIds.length||v.length!==_.size,b=p.filter(({nodeId:e})=>!o.has(e)).length,x=h.filter(({projection:e})=>!s.has(e.entityId)).length,S=g.filter(({evidenceClaimId:e})=>!l.has(e)).length,C=v.filter(({evidenceId:e})=>!u.has(e)).length,w=c.size===Q||o.size+b>Q||s.size+x>Q||l.size+S>Q||u.size+C>Q;if(y||w){d=!0;continue}c.set(t,e);for(let e of p)o.set(e.nodeId,e);for(let e of h)s.set(e.projection.entityId,e);for(let e of g)l.set(e.evidenceClaimId,e);for(let e of v)u.set(e.evidenceId,e)}return{releaseId:e,environmentId:null,truncated:d,nodes:[...o.values()],entityProjections:[...s.values()],relationships:[...c.values()],evidenceClaims:[...l.values()],evidenceItems:[...u.values()]}},Pe=A(`UnauthorizedApiError`),Fe=async(e,t,n,r)=>Z(t,t=>r.load(e,t,n)),Ie={load:(e,t,n)=>D(O(function*(){return yield*(yield*k()).deliveryGraph.releaseSlice({params:{releaseId:e},query:t===null?{}:{environmentId:t}})}).pipe(S(C)),{signal:n})},Le=(e,t,n,r,i=Ie)=>{let[a,o]=(0,N.useState)(0),[s,c]=(0,N.useState)({_tag:`idle`}),l=t.join(`:`);(0,N.useEffect)(()=>{if(n===null){c({_tag:`idle`});return}let a=new AbortController;return c({_tag:`loading`,environmentScopeKey:l,releaseId:e,sessionKey:n}),Fe(e,t,a.signal,i).then(t=>{a.signal.aborted||c({_tag:`ready`,environmentScopeKey:l,inspection:Ne(e,t),releaseId:e,sessionKey:n})},t=>{a.signal.aborted||(Pe(t)&&r(n),c({_tag:`failed`,environmentScopeKey:l,releaseId:e,sessionKey:n}))}),()=>a.abort()},[l,r,e,a,n,i]);let u=n===null?{_tag:`idle`}:s._tag===`idle`||s.releaseId!==e||s.sessionKey!==n||s.environmentScopeKey!==l?{_tag:`loading`,environmentScopeKey:l,releaseId:e,sessionKey:n}:s;return{retry:(0,N.useCallback)(()=>o(e=>e+1),[]),state:u}},Re=()=>(0,W.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading release work`,className:X.loading,children:[(0,W.jsx)(i,{height:`3rem`}),(0,W.jsx)(i,{height:`15rem`})]}),ze=({linkLocation:e,selectedObject:t,trace:n})=>(0,W.jsxs)(`section`,{"aria-label":`Selected ${t.kind} ${t.label}`,className:X.selected,children:[(0,W.jsxs)(`div`,{className:X.selectedHeading,children:[(0,W.jsx)(g,{service:t.service,size:`compact`}),(0,W.jsxs)(f,{as:`p`,variant:`label`,children:[`Selected object · `,t.label]}),(0,W.jsx)(c,{label:t.status,size:`compact`,tone:t.tone})]}),(0,W.jsx)(f,{as:`h3`,variant:`section-title`,children:t.title}),(0,W.jsx)(f,{tone:`secondary`,variant:`meta`,children:t.kind}),(0,W.jsx)(`dl`,{className:X.selectedFacts,children:t.facts.map(e=>(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:e.label}),(0,W.jsx)(`dd`,{children:e.value})]},e.label))}),n===void 0?null:(0,W.jsxs)(`div`,{className:X.trace,children:[(0,W.jsxs)(`div`,{className:X.traceHeading,children:[(0,W.jsx)(f,{as:`h4`,variant:`label`,children:`Delivery trace`}),(0,W.jsx)(c,{label:`${n.relationships.length} relationship${n.relationships.length===1?``:`s`}${n.truncated?`+`:``}`,size:`compact`,tone:n.truncated?`caution`:`neutral`})]}),n.relationships.length===0?(0,W.jsx)(f,{tone:`secondary`,children:`No relationship touches this object in the current release slice.`}):(0,W.jsx)(`ul`,{className:X.traceList,children:n.relationships.map(n=>(0,W.jsxs)(`li`,{children:[n.other.service===null?null:(0,W.jsx)(g,{service:n.other.service,size:`compact`}),(0,W.jsxs)(`div`,{className:X.traceConnection,children:[(0,W.jsxs)(f,{as:`p`,variant:`label`,children:[n.direction===`incoming`?`From`:`To`,` `,n.other.label]}),n.other.href===null?(0,W.jsx)(f,{tone:`secondary`,children:n.other.title}):(0,W.jsx)(a,{state:e===void 0?void 0:M(n.other.href,e),to:n.other.href,children:n.other.title})]}),(0,W.jsxs)(`div`,{className:X.traceRelation,children:[(0,W.jsx)(f,{as:`span`,tone:`secondary`,variant:`meta`,children:n.kind}),(0,W.jsx)(c,{label:n.lifecycle,size:`compact`,tone:n.tone})]}),(0,W.jsxs)(f,{as:`span`,tone:`secondary`,variant:`meta`,children:[n.confidence,` · `,n.evidenceCount,` evidence claim`,n.evidenceCount===1?``:`s`]}),(0,W.jsx)(a,{"aria-label":`Details for ${n.kind} ${n.direction} relationship with ${n.other.label}`,className:X.traceDetails,state:Ae(e?.state,t.id,n.id),to:n.detailsHref,children:`Details`})]},n.id))})]})]}),$=p,Be=({release:e,workspaceId:t})=>{let n=m(),i=u(),o=r(),p=$(n.state),_=Le(e.id,e.targetEnvironmentIds,p,n.invalidateSession);if(p===null||_.state._tag===`idle`||_.state._tag===`loading`)return(0,W.jsx)(Re,{});if(_.state._tag===`failed`)return(0,W.jsx)(s,{action:(0,W.jsx)(l,{onClick:_.retry,children:`Try again`}),description:`Control Center could not read the delivery graph for this release. Saved release facts remain unchanged.`,title:`Release work unavailable`,tone:`caution`});let v=he(_.state.inspection,t,e.stages),y=new URLSearchParams(i.search),b=y.get(`object`),x=y.get(`relationship`),S=z(_.state.inspection,b),C=ue(_.state.inspection,t,b),w=de(_.state.inspection,b,x),T=fe(_.state.inspection,w),E=H(_.state.inspection,w);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:X.root,children:[(0,W.jsxs)(`div`,{className:X.context,children:[(0,W.jsxs)(`div`,{className:X.contextGroup,children:[(0,W.jsx)(f,{as:`h3`,variant:`label`,children:`Environment`}),e.targetEnvironmentIds.length===0?(0,W.jsx)(f,{tone:`secondary`,children:`No target environment recorded.`}):(0,W.jsx)(`div`,{className:X.tags,children:e.targetEnvironmentIds.map(e=>(0,W.jsx)(c,{label:`Unknown target · ${e.slice(-4)}`,size:`compact`,title:`Environment ${e}; provider metadata unavailable`,tone:`neutral`},e))})]}),(0,W.jsxs)(`div`,{className:X.contextGroup,children:[(0,W.jsxs)(`div`,{className:X.contextHeading,children:[(0,W.jsx)(g,{service:`confluence`,size:`compact`}),(0,W.jsx)(f,{as:`h3`,variant:`label`,children:`Runbook`})]}),v.runbooks.length===0?(0,W.jsx)(f,{tone:`secondary`,children:`No runbook linked.`}):(0,W.jsx)(`div`,{className:X.runbooks,children:v.runbooks.map(e=>(0,W.jsxs)(a,{className:X.runbook,state:M(e.href,i),to:e.href,children:[(0,W.jsx)(`strong`,{children:e.title}),(0,W.jsx)(`span`,{children:e.reference})]},e.id))})]}),v.truncated?(0,W.jsx)(c,{label:`Bounded view · more records exist`,size:`compact`,tone:`caution`}):null,S===null||C===null?null:(0,W.jsx)(ze,{linkLocation:i,selectedObject:S,trace:C})]}),(0,W.jsx)(d,{component:te,children:(0,W.jsx)(h,{gaps:v.gaps,heading:`${e.serviceName} release work`,jiraItems:v.jiraItems,pipelines:v.pipelines,pullRequestGroups:v.pullRequestGroups})})]}),(0,W.jsx)(Oe,{claims:E,evidenceIds:T,onClose:()=>{S===null||w===null||Me(o,i,S.id,w.relationshipId)},onSessionExpired:n.invalidateSession,relationship:w,sessionKey:p})]})};export{$ as n,Z as r,Be as t};
2
+ //# sourceMappingURL=ReleaseWorkset-BhGacsgb.js.map