@knpkv/control-center 0.9.4 → 0.9.5

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 (248) hide show
  1. package/dist/client/.vite/manifest.json +406 -406
  2. package/dist/client/assets/ActiveWorkPage-CeWw2uZl.js +2 -0
  3. package/dist/client/assets/ActiveWorkPage-CeWw2uZl.js.map +1 -0
  4. package/dist/client/assets/{AgentPage-YiYORLod.js → AgentPage-BAy7IgjJ.js} +3 -3
  5. package/dist/client/assets/AgentPage-BAy7IgjJ.js.map +1 -0
  6. package/dist/client/assets/{AtlassianOAuthCallbackPage-PfsrTytb.js → AtlassianOAuthCallbackPage-DDCTmcmB.js} +2 -2
  7. package/dist/client/assets/AtlassianOAuthCallbackPage-DDCTmcmB.js.map +1 -0
  8. package/dist/client/assets/{AuthorizedSharePage-BCwnILXF.js → AuthorizedSharePage-BZPfotuK.js} +2 -2
  9. package/dist/client/assets/AuthorizedSharePage-BZPfotuK.js.map +1 -0
  10. package/dist/client/assets/{BrowserSessionHydrator-BAb76EvO.js → BrowserSessionHydrator-B3yI9F2z.js} +2 -2
  11. package/dist/client/assets/{BrowserSessionHydrator-BAb76EvO.js.map → BrowserSessionHydrator-B3yI9F2z.js.map} +1 -1
  12. package/dist/client/assets/{CommandSearch-BSVXQfjF.js → CommandSearch-BrwiVFBI.js} +2 -2
  13. package/dist/client/assets/{CommandSearch-BSVXQfjF.js.map → CommandSearch-BrwiVFBI.js.map} +1 -1
  14. package/dist/client/assets/Domain-DH_T_LJ8.js.map +1 -1
  15. package/dist/client/assets/{ItemsPage-BzinDuxs.js → ItemsPage-CYmo7Dkm.js} +2 -2
  16. package/dist/client/assets/ItemsPage-CYmo7Dkm.js.map +1 -0
  17. package/dist/client/assets/{OpenPullRequestPage-BABGk9v2.js → OpenPullRequestPage-BcwTerpY.js} +2 -2
  18. package/dist/client/assets/OpenPullRequestPage-BcwTerpY.js.map +1 -0
  19. package/dist/client/assets/{Pages-Bfn7_LhJ.js → Pages-Cj24BSjm.js} +2 -2
  20. package/dist/client/assets/{Pages-Bfn7_LhJ.js.map → Pages-Cj24BSjm.js.map} +1 -1
  21. package/dist/client/assets/{PairPage-4meDmW_A.js → PairPage-JhivkRf1.js} +2 -2
  22. package/dist/client/assets/PairPage-JhivkRf1.js.map +1 -0
  23. package/dist/client/assets/PortfolioOverview-C0RZCx6V.js +2 -0
  24. package/dist/client/assets/PortfolioOverview-C0RZCx6V.js.map +1 -0
  25. package/dist/client/assets/{PullRequestReviewPanel-68vgbLzs.js → PullRequestReviewPanel-BeYAld4m.js} +4 -4
  26. package/dist/client/assets/{PullRequestReviewPanel-68vgbLzs.js.map → PullRequestReviewPanel-BeYAld4m.js.map} +1 -1
  27. package/dist/client/assets/ReleaseRoute-1bUQCSJi.js +2 -0
  28. package/dist/client/assets/ReleaseRoute-1bUQCSJi.js.map +1 -0
  29. package/dist/client/assets/{ReleaseWorkset-DcI6qwPE.js → ReleaseWorkset-DGufwIFe.js} +2 -2
  30. package/dist/client/assets/ReleaseWorkset-DGufwIFe.js.map +1 -0
  31. package/dist/client/assets/{ReviewSuggestionOverview-kNqjbwKQ.js → ReviewSuggestionOverview-CfU-Ynzq.js} +2 -2
  32. package/dist/client/assets/{ReviewSuggestionOverview-kNqjbwKQ.js.map → ReviewSuggestionOverview-CfU-Ynzq.js.map} +1 -1
  33. package/dist/client/assets/{ReviewSuggestionPublicationSurface-BtoYEprT.js → ReviewSuggestionPublicationSurface-DA-3PPs_.js} +2 -2
  34. package/dist/client/assets/ReviewSuggestionPublicationSurface-DA-3PPs_.js.map +1 -0
  35. package/dist/client/assets/{ServicesPage-DihUx1kr.js → ServicesPage-6G9OTRDn.js} +2 -2
  36. package/dist/client/assets/ServicesPage-6G9OTRDn.js.map +1 -0
  37. package/dist/client/assets/{TimelinePage-DyluBeEt.js → TimelinePage-D6YUtggO.js} +2 -2
  38. package/dist/client/assets/TimelinePage-D6YUtggO.js.map +1 -0
  39. package/dist/client/assets/{WorkspaceEntityLink-DjonIGqM.js → WorkspaceEntityLink-BqUurz8P.js} +2 -2
  40. package/dist/client/assets/{WorkspaceEntityLink-DjonIGqM.js.map → WorkspaceEntityLink-BqUurz8P.js.map} +1 -1
  41. package/dist/client/assets/{WorkspaceEntityRoute-DUVwW5WN.js → WorkspaceEntityRoute-CfupCFGN.js} +4 -4
  42. package/dist/client/assets/{WorkspaceEntityRoute-DUVwW5WN.js.map → WorkspaceEntityRoute-CfupCFGN.js.map} +1 -1
  43. package/dist/client/assets/{WorkspaceHomeLink-DSGM8jZK.js → WorkspaceHomeLink-DkAnxFk1.js} +2 -2
  44. package/dist/client/assets/{WorkspaceHomeLink-DSGM8jZK.js.map → WorkspaceHomeLink-DkAnxFk1.js.map} +1 -1
  45. package/dist/client/assets/{WorkspacePullRequestDetails-Z3MfihsH.js → WorkspacePullRequestDetails-SexYOZUB.js} +3 -3
  46. package/dist/client/assets/{WorkspacePullRequestDetails-Z3MfihsH.js.map → WorkspacePullRequestDetails-SexYOZUB.js.map} +1 -1
  47. package/dist/client/assets/{WorkspaceReleaseLayout-S6XHWEwh.js → WorkspaceReleaseLayout-J_IWrKc9.js} +2 -2
  48. package/dist/client/assets/{WorkspaceReleaseLayout-S6XHWEwh.js.map → WorkspaceReleaseLayout-J_IWrKc9.js.map} +1 -1
  49. package/dist/client/assets/{WorkspaceSettingsPage-Dn_eDC3m.js → WorkspaceSettingsPage-CFB0X_Oz.js} +2 -2
  50. package/dist/client/assets/WorkspaceSettingsPage-CFB0X_Oz.js.map +1 -0
  51. package/dist/client/assets/{angular-html-B-gwpVlh-DEM_d4RI.js → angular-html-B-gwpVlh-BHk2rITT.js} +2 -2
  52. package/dist/client/assets/{angular-html-B-gwpVlh-DEM_d4RI.js.map → angular-html-B-gwpVlh-BHk2rITT.js.map} +1 -1
  53. package/dist/client/assets/{angular-ts-BdaH9qH_-6UMLodBB.js → angular-ts-BdaH9qH_-DDpR3-gU.js} +2 -2
  54. package/dist/client/assets/{angular-ts-BdaH9qH_-6UMLodBB.js.map → angular-ts-BdaH9qH_-DDpR3-gU.js.map} +1 -1
  55. package/dist/client/assets/{apl-BLTDDucx-DIkkahEc.js → apl-BLTDDucx-C5lAAuBL.js} +2 -2
  56. package/dist/client/assets/{apl-BLTDDucx-DIkkahEc.js.map → apl-BLTDDucx-C5lAAuBL.js.map} +1 -1
  57. package/dist/client/assets/{astro-CM3EIsEH-D5DYxAYu.js → astro-CM3EIsEH-C-4mMpDY.js} +2 -2
  58. package/dist/client/assets/{astro-CM3EIsEH-D5DYxAYu.js.map → astro-CM3EIsEH-C-4mMpDY.js.map} +1 -1
  59. package/dist/client/assets/{blade-BuLZ1b4i-CBKkB_Nt.js → blade-BuLZ1b4i-Bo26Vrie.js} +2 -2
  60. package/dist/client/assets/{blade-BuLZ1b4i-CBKkB_Nt.js.map → blade-BuLZ1b4i-Bo26Vrie.js.map} +1 -1
  61. package/dist/client/assets/{c-BOe7FNWg-C15nlYFX.js → c-BOe7FNWg-Bn-hh2gC.js} +2 -2
  62. package/dist/client/assets/{c-BOe7FNWg-C15nlYFX.js.map → c-BOe7FNWg-Bn-hh2gC.js.map} +1 -1
  63. package/dist/client/assets/{chapel-DS426I0C-DoL0pgIr.js → chapel-DS426I0C-DZfMl2AF.js} +2 -2
  64. package/dist/client/assets/{chapel-DS426I0C-DoL0pgIr.js.map → chapel-DS426I0C-DZfMl2AF.js.map} +1 -1
  65. package/dist/client/assets/{cobol-D88xw2SU-DlPiznQQ.js → cobol-D88xw2SU-Dszzocsd.js} +2 -2
  66. package/dist/client/assets/{cobol-D88xw2SU-DlPiznQQ.js.map → cobol-D88xw2SU-Dszzocsd.js.map} +1 -1
  67. package/dist/client/assets/{coffee-9O-pYXz5-QB78c27T.js → coffee-9O-pYXz5-B-EAY7Cr.js} +2 -2
  68. package/dist/client/assets/{coffee-9O-pYXz5-QB78c27T.js.map → coffee-9O-pYXz5-B-EAY7Cr.js.map} +1 -1
  69. package/dist/client/assets/{controlCenterRelayDock-CDyCPu8u.js → controlCenterRelayDock-Bq4z8Xad.js} +3 -3
  70. package/dist/client/assets/{controlCenterRelayDock-CDyCPu8u.js.map → controlCenterRelayDock-Bq4z8Xad.js.map} +1 -1
  71. package/dist/client/assets/{controlCenterRelayDockChrome-BWLgzJhc.js → controlCenterRelayDockChrome-M45VQcSE.js} +2 -2
  72. package/dist/client/assets/{controlCenterRelayDockChrome-BWLgzJhc.js.map → controlCenterRelayDockChrome-M45VQcSE.js.map} +1 -1
  73. package/dist/client/assets/{cpp-CPk7VU6o-XEasjJQb.js → cpp-CPk7VU6o-B1PTCDWN.js} +2 -2
  74. package/dist/client/assets/{cpp-CPk7VU6o-XEasjJQb.js.map → cpp-CPk7VU6o-B1PTCDWN.js.map} +1 -1
  75. package/dist/client/assets/{crystal-CRftOMVe-Cl7VOKqv.js → crystal-CRftOMVe-3NFSGC4Y.js} +2 -2
  76. package/dist/client/assets/{crystal-CRftOMVe-Cl7VOKqv.js.map → crystal-CRftOMVe-3NFSGC4Y.js.map} +1 -1
  77. package/dist/client/assets/{css-DKjIhbA_-BqYkMclh.js → css-DKjIhbA_-BZzy1gno.js} +2 -2
  78. package/dist/client/assets/{css-DKjIhbA_-BqYkMclh.js.map → css-DKjIhbA_-BZzy1gno.js.map} +1 -1
  79. package/dist/client/assets/{diff-c2VIds2u.js → diff-CuvBMVEl.js} +3 -3
  80. package/dist/client/assets/{diff-c2VIds2u.js.map → diff-CuvBMVEl.js.map} +1 -1
  81. package/dist/client/assets/{edge-CZci3foK-CcvbLJND.js → edge-CZci3foK-BdZTWeOq.js} +2 -2
  82. package/dist/client/assets/{edge-CZci3foK-CcvbLJND.js.map → edge-CZci3foK-BdZTWeOq.js.map} +1 -1
  83. package/dist/client/assets/{elixir-BFbWRTPN-DCo1tsYk.js → elixir-BFbWRTPN-BSsfSNAc.js} +2 -2
  84. package/dist/client/assets/{elixir-BFbWRTPN-DCo1tsYk.js.map → elixir-BFbWRTPN-BSsfSNAc.js.map} +1 -1
  85. package/dist/client/assets/{elm-BFCSOEGh-KAuEEkOS.js → elm-BFCSOEGh-B7etdM00.js} +2 -2
  86. package/dist/client/assets/{elm-BFCSOEGh-KAuEEkOS.js.map → elm-BFCSOEGh-B7etdM00.js.map} +1 -1
  87. package/dist/client/assets/{erb-C0EkZJvn-3O5TlDRJ.js → erb-C0EkZJvn-BUpElafA.js} +2 -2
  88. package/dist/client/assets/{erb-C0EkZJvn-3O5TlDRJ.js.map → erb-C0EkZJvn-BUpElafA.js.map} +1 -1
  89. package/dist/client/assets/{git-rebase-DBDs07B2-BKfziPiX.js → git-rebase-DBDs07B2-3YW7dddl.js} +2 -2
  90. package/dist/client/assets/{git-rebase-DBDs07B2-BKfziPiX.js.map → git-rebase-DBDs07B2-3YW7dddl.js.map} +1 -1
  91. package/dist/client/assets/{glimmer-js-oqYt1Bty-oOPiIwDh.js → glimmer-js-oqYt1Bty-Q18N5198.js} +2 -2
  92. package/dist/client/assets/{glimmer-js-oqYt1Bty-oOPiIwDh.js.map → glimmer-js-oqYt1Bty-Q18N5198.js.map} +1 -1
  93. package/dist/client/assets/{glimmer-ts-CjmgbZTn-C8gjUbKN.js → glimmer-ts-CjmgbZTn-DflPUBBN.js} +2 -2
  94. package/dist/client/assets/{glimmer-ts-CjmgbZTn-C8gjUbKN.js.map → glimmer-ts-CjmgbZTn-DflPUBBN.js.map} +1 -1
  95. package/dist/client/assets/{glsl-BqUMGrwT-5PoVKbXD.js → glsl-BqUMGrwT-DZSnNyRQ.js} +2 -2
  96. package/dist/client/assets/{glsl-BqUMGrwT-5PoVKbXD.js.map → glsl-BqUMGrwT-DZSnNyRQ.js.map} +1 -1
  97. package/dist/client/assets/{graphql-CEJryLGF-Bx3HP-fV.js → graphql-CEJryLGF-BxoDC-bv.js} +2 -2
  98. package/dist/client/assets/{graphql-CEJryLGF-Bx3HP-fV.js.map → graphql-CEJryLGF-BxoDC-bv.js.map} +1 -1
  99. package/dist/client/assets/{hack-DwBIwaGr-C2bRI1k_.js → hack-DwBIwaGr-BD9UbS9V.js} +2 -2
  100. package/dist/client/assets/{hack-DwBIwaGr-C2bRI1k_.js.map → hack-DwBIwaGr-BD9UbS9V.js.map} +1 -1
  101. package/dist/client/assets/{haml-BgD6GFV2-C-E92qmq.js → haml-BgD6GFV2-tYRnxnkA.js} +2 -2
  102. package/dist/client/assets/{haml-BgD6GFV2-C-E92qmq.js.map → haml-BgD6GFV2-tYRnxnkA.js.map} +1 -1
  103. package/dist/client/assets/{handlebars-DAEAtsmp-B3Qkz-fG.js → handlebars-DAEAtsmp-CzuHoTaP.js} +2 -2
  104. package/dist/client/assets/{handlebars-DAEAtsmp-B3Qkz-fG.js.map → handlebars-DAEAtsmp-CzuHoTaP.js.map} +1 -1
  105. package/dist/client/assets/{html-B63qAdeQ-mzUq7RfB.js → html-B63qAdeQ-BvgXBi7v.js} +2 -2
  106. package/dist/client/assets/{html-B63qAdeQ-mzUq7RfB.js.map → html-B63qAdeQ-BvgXBi7v.js.map} +1 -1
  107. package/dist/client/assets/{html-derivative-DliF0Izh-DKttJgx1.js → html-derivative-DliF0Izh-BdazZa_A.js} +2 -2
  108. package/dist/client/assets/{html-derivative-DliF0Izh-DKttJgx1.js.map → html-derivative-DliF0Izh-BdazZa_A.js.map} +1 -1
  109. package/dist/client/assets/{http-BPdteiK2-BzL978Ty.js → http-BPdteiK2-DscIPq9Z.js} +2 -2
  110. package/dist/client/assets/{http-BPdteiK2-BzL978Ty.js.map → http-BPdteiK2-DscIPq9Z.js.map} +1 -1
  111. package/dist/client/assets/{hurl-y6bQoMbn-VmDIgNNg.js → hurl-y6bQoMbn-BniTWOKW.js} +2 -2
  112. package/dist/client/assets/{hurl-y6bQoMbn-VmDIgNNg.js.map → hurl-y6bQoMbn-BniTWOKW.js.map} +1 -1
  113. package/dist/client/assets/{index-BHQ_NP1r.js → index-DlDEYM2e.js} +3 -3
  114. package/dist/client/assets/{index-BHQ_NP1r.js.map → index-DlDEYM2e.js.map} +1 -1
  115. package/dist/client/assets/index-vGJLpF-N.css +1 -0
  116. package/dist/client/assets/{java-HDTZqoJ--r_CiLO3G.js → java-HDTZqoJ--DonfC-m-.js} +2 -2
  117. package/dist/client/assets/{java-HDTZqoJ--r_CiLO3G.js.map → java-HDTZqoJ--DonfC-m-.js.map} +1 -1
  118. package/dist/client/assets/{javascript-B8-PXjxO-D8IL8RVw.js → javascript-B8-PXjxO-DrojTnjU.js} +2 -2
  119. package/dist/client/assets/{javascript-B8-PXjxO-D8IL8RVw.js.map → javascript-B8-PXjxO-DrojTnjU.js.map} +1 -1
  120. package/dist/client/assets/{jinja-Li2helwk-iQ5WpNSs.js → jinja-Li2helwk-Bn7ViII1.js} +2 -2
  121. package/dist/client/assets/{jinja-Li2helwk-iQ5WpNSs.js.map → jinja-Li2helwk-Bn7ViII1.js.map} +1 -1
  122. package/dist/client/assets/{jison-D4pd2L4r-CnB2TCTC.js → jison-D4pd2L4r-CURwtPm2.js} +2 -2
  123. package/dist/client/assets/{jison-D4pd2L4r-CnB2TCTC.js.map → jison-D4pd2L4r-CURwtPm2.js.map} +1 -1
  124. package/dist/client/assets/{json-CHeq_08V-BzfhDAQG.js → json-CHeq_08V-DGJ-08B3.js} +2 -2
  125. package/dist/client/assets/{json-CHeq_08V-BzfhDAQG.js.map → json-CHeq_08V-DGJ-08B3.js.map} +1 -1
  126. package/dist/client/assets/{jsx-CTDAtxCE-BHaCLB5C.js → jsx-CTDAtxCE-B7AjYoF3.js} +2 -2
  127. package/dist/client/assets/{jsx-CTDAtxCE-BHaCLB5C.js.map → jsx-CTDAtxCE-B7AjYoF3.js.map} +1 -1
  128. package/dist/client/assets/{julia-B8HGxjvO-DUNXU97h.js → julia-B8HGxjvO-CX2HXF0x.js} +2 -2
  129. package/dist/client/assets/{julia-B8HGxjvO-DUNXU97h.js.map → julia-B8HGxjvO-CX2HXF0x.js.map} +1 -1
  130. package/dist/client/assets/{just-C1IY8eCo-CwcMki68.js → just-C1IY8eCo-194MeSWx.js} +2 -2
  131. package/dist/client/assets/{just-C1IY8eCo-CwcMki68.js.map → just-C1IY8eCo-194MeSWx.js.map} +1 -1
  132. package/dist/client/assets/{latex-CWjLpLhK-C2bYvB1V.js → latex-CWjLpLhK-CJV_bAR4.js} +2 -2
  133. package/dist/client/assets/{latex-CWjLpLhK-C2bYvB1V.js.map → latex-CWjLpLhK-CJV_bAR4.js.map} +1 -1
  134. package/dist/client/assets/{liquid-DO0vm52w-5ftSWtSQ.js → liquid-DO0vm52w-C-oH3gBH.js} +2 -2
  135. package/dist/client/assets/{liquid-DO0vm52w-5ftSWtSQ.js.map → liquid-DO0vm52w-C-oH3gBH.js.map} +1 -1
  136. package/dist/client/assets/{lua-rOZn354j-BFEal9UY.js → lua-rOZn354j-CWNr0VLI.js} +2 -2
  137. package/dist/client/assets/{lua-rOZn354j-BFEal9UY.js.map → lua-rOZn354j-CWNr0VLI.js.map} +1 -1
  138. package/dist/client/assets/{marko-CiZdnOV9-VE4QpTYR.js → marko-CiZdnOV9-D1oeBgJ5.js} +2 -2
  139. package/dist/client/assets/{marko-CiZdnOV9-VE4QpTYR.js.map → marko-CiZdnOV9-D1oeBgJ5.js.map} +1 -1
  140. package/dist/client/assets/{mdc-D1ADfxGi-DASKK9_I.js → mdc-D1ADfxGi-DDe8MjBS.js} +2 -2
  141. package/dist/client/assets/{mdc-D1ADfxGi-DASKK9_I.js.map → mdc-D1ADfxGi-DDe8MjBS.js.map} +1 -1
  142. package/dist/client/assets/{nginx-8KXIzHX2-OWn8Z957.js → nginx-8KXIzHX2-76JDQPWv.js} +2 -2
  143. package/dist/client/assets/{nginx-8KXIzHX2-OWn8Z957.js.map → nginx-8KXIzHX2-76JDQPWv.js.map} +1 -1
  144. package/dist/client/assets/{nim-CbBDSJf5-DzS23snq.js → nim-CbBDSJf5-Bg0Tpvlj.js} +2 -2
  145. package/dist/client/assets/{nim-CbBDSJf5-DzS23snq.js.map → nim-CbBDSJf5-Bg0Tpvlj.js.map} +1 -1
  146. package/dist/client/assets/{org-BlnOvN6p-mzfee9SX.js → org-BlnOvN6p-CpQvn0Ms.js} +2 -2
  147. package/dist/client/assets/{org-BlnOvN6p-mzfee9SX.js.map → org-BlnOvN6p-CpQvn0Ms.js.map} +1 -1
  148. package/dist/client/assets/patterns-CJ4c7F5A.js +2 -0
  149. package/dist/client/assets/patterns-CJ4c7F5A.js.map +1 -0
  150. package/dist/client/assets/{perl-CntHWu4k-C3Q6THHX.js → perl-CntHWu4k-R8g6ivQx.js} +2 -2
  151. package/dist/client/assets/{perl-CntHWu4k-C3Q6THHX.js.map → perl-CntHWu4k-R8g6ivQx.js.map} +1 -1
  152. package/dist/client/assets/{php-VF06KE26-uqmHEtRE.js → php-VF06KE26-qz2OohxQ.js} +2 -2
  153. package/dist/client/assets/{php-VF06KE26-uqmHEtRE.js.map → php-VF06KE26-qz2OohxQ.js.map} +1 -1
  154. package/dist/client/assets/primitives-Dj-qYrUZ-BIf5RLs4.js +2 -0
  155. package/dist/client/assets/primitives-Dj-qYrUZ-BIf5RLs4.js.map +1 -0
  156. package/dist/client/assets/{pug-DeZwH1tK-Dy2R8X_Z.js → pug-DeZwH1tK-hE7p1XRn.js} +2 -2
  157. package/dist/client/assets/{pug-DeZwH1tK-Dy2R8X_Z.js.map → pug-DeZwH1tK-hE7p1XRn.js.map} +1 -1
  158. package/dist/client/assets/{pullRequestReviewThreadReplay-Dhslqjta.js → pullRequestReviewThreadReplay-D-FuOlQ0.js} +2 -2
  159. package/dist/client/assets/{pullRequestReviewThreadReplay-Dhslqjta.js.map → pullRequestReviewThreadReplay-D-FuOlQ0.js.map} +1 -1
  160. package/dist/client/assets/{qml-CQhAR2tt-CkperL57.js → qml-CQhAR2tt-Blcerr_b.js} +2 -2
  161. package/dist/client/assets/{qml-CQhAR2tt-CkperL57.js.map → qml-CQhAR2tt-Blcerr_b.js.map} +1 -1
  162. package/dist/client/assets/{r-CGShpgkr-BeuwoEHJ.js → r-CGShpgkr-Bu3ifplH.js} +2 -2
  163. package/dist/client/assets/{r-CGShpgkr-BeuwoEHJ.js.map → r-CGShpgkr-Bu3ifplH.js.map} +1 -1
  164. package/dist/client/assets/{razor-CgB2QCs6-C9kZAmAY.js → razor-CgB2QCs6-C0YckD9e.js} +2 -2
  165. package/dist/client/assets/{razor-CgB2QCs6-C9kZAmAY.js.map → razor-CgB2QCs6-C0YckD9e.js.map} +1 -1
  166. package/dist/client/assets/{regexp-go_CdRjx-BvThUXwF.js → regexp-go_CdRjx-FwuQxSe1.js} +2 -2
  167. package/dist/client/assets/{regexp-go_CdRjx-BvThUXwF.js.map → regexp-go_CdRjx-FwuQxSe1.js.map} +1 -1
  168. package/dist/client/assets/{releaseRoutes-D04aOk03.js → releaseRoutes-Bpw_kfZI.js} +2 -2
  169. package/dist/client/assets/{releaseRoutes-D04aOk03.js.map → releaseRoutes-Bpw_kfZI.js.map} +1 -1
  170. package/dist/client/assets/{rst-CbWMI8ou-B_CNFtWj.js → rst-CbWMI8ou-_a-jzVR0.js} +2 -2
  171. package/dist/client/assets/{rst-CbWMI8ou-B_CNFtWj.js.map → rst-CbWMI8ou-_a-jzVR0.js.map} +1 -1
  172. package/dist/client/assets/{ruby-DsGwIs06-BNNoCsny.js → ruby-DsGwIs06-CvuKCvaN.js} +2 -2
  173. package/dist/client/assets/{ruby-DsGwIs06-BNNoCsny.js.map → ruby-DsGwIs06-CvuKCvaN.js.map} +1 -1
  174. package/dist/client/assets/{sas-DjxN8J4Z-DQwiaVY0.js → sas-DjxN8J4Z-6vMiHBWz.js} +2 -2
  175. package/dist/client/assets/{sas-DjxN8J4Z-DQwiaVY0.js.map → sas-DjxN8J4Z-6vMiHBWz.js.map} +1 -1
  176. package/dist/client/assets/{scss-bkiiULjK-BdNohiDl.js → scss-bkiiULjK-RWkdLi31.js} +2 -2
  177. package/dist/client/assets/{scss-bkiiULjK-BdNohiDl.js.map → scss-bkiiULjK-RWkdLi31.js.map} +1 -1
  178. package/dist/client/assets/{shellscript-Cuh1SIPr-CH9Y9Zzx.js → shellscript-Cuh1SIPr-xep8lhFb.js} +2 -2
  179. package/dist/client/assets/{shellscript-Cuh1SIPr-CH9Y9Zzx.js.map → shellscript-Cuh1SIPr-xep8lhFb.js.map} +1 -1
  180. package/dist/client/assets/{shellsession-C4UOwxb7-BVPXZqFb.js → shellsession-C4UOwxb7-B2Mjt8G4.js} +2 -2
  181. package/dist/client/assets/{shellsession-C4UOwxb7-BVPXZqFb.js.map → shellsession-C4UOwxb7-B2Mjt8G4.js.map} +1 -1
  182. package/dist/client/assets/{soy-CeGFXpLT-bVeC_qdu.js → soy-CeGFXpLT-DB96q8ji.js} +2 -2
  183. package/dist/client/assets/{soy-CeGFXpLT-bVeC_qdu.js.map → soy-CeGFXpLT-DB96q8ji.js.map} +1 -1
  184. package/dist/client/assets/{sql-qDYmMTO1-DRMw6L4F.js → sql-qDYmMTO1-Dp7sA9Pq.js} +2 -2
  185. package/dist/client/assets/{sql-qDYmMTO1-DRMw6L4F.js.map → sql-qDYmMTO1-Dp7sA9Pq.js.map} +1 -1
  186. package/dist/client/assets/{stata-Dzus_rwP-DcGzBrZt.js → stata-Dzus_rwP-Bk81H3oK.js} +2 -2
  187. package/dist/client/assets/{stata-Dzus_rwP-DcGzBrZt.js.map → stata-Dzus_rwP-Bk81H3oK.js.map} +1 -1
  188. package/dist/client/assets/{surrealql-DmTrf8uR-BGVhamzy.js → surrealql-DmTrf8uR-BAVDL68E.js} +2 -2
  189. package/dist/client/assets/{surrealql-DmTrf8uR-BGVhamzy.js.map → surrealql-DmTrf8uR-BAVDL68E.js.map} +1 -1
  190. package/dist/client/assets/{svelte-CWlRonoS-d0HsRKWL.js → svelte-CWlRonoS-g4MbXmCf.js} +2 -2
  191. package/dist/client/assets/{svelte-CWlRonoS-d0HsRKWL.js.map → svelte-CWlRonoS-g4MbXmCf.js.map} +1 -1
  192. package/dist/client/assets/{templ-EuFg1gKs-BBJ25IwK.js → templ-EuFg1gKs-B9lc3TqB.js} +2 -2
  193. package/dist/client/assets/{templ-EuFg1gKs-BBJ25IwK.js.map → templ-EuFg1gKs-B9lc3TqB.js.map} +1 -1
  194. package/dist/client/assets/{tex-Cbbx1SXS-Dh8M7x1F.js → tex-Cbbx1SXS-DPEKlVuI.js} +2 -2
  195. package/dist/client/assets/{tex-Cbbx1SXS-Dh8M7x1F.js.map → tex-Cbbx1SXS-DPEKlVuI.js.map} +1 -1
  196. package/dist/client/assets/{ts-tags-DOHpIWV2-DXabLRoX.js → ts-tags-DOHpIWV2-DN6mmSGx.js} +2 -2
  197. package/dist/client/assets/{ts-tags-DOHpIWV2-DXabLRoX.js.map → ts-tags-DOHpIWV2-DN6mmSGx.js.map} +1 -1
  198. package/dist/client/assets/{tsx-DmRL3u_2-Cn0tVC2C.js → tsx-DmRL3u_2-DulNQGwe.js} +2 -2
  199. package/dist/client/assets/{tsx-DmRL3u_2-Cn0tVC2C.js.map → tsx-DmRL3u_2-DulNQGwe.js.map} +1 -1
  200. package/dist/client/assets/{twig-BzcHspK1-BW8kSayf.js → twig-BzcHspK1-j95wbDo4.js} +2 -2
  201. package/dist/client/assets/{twig-BzcHspK1-BW8kSayf.js.map → twig-BzcHspK1-j95wbDo4.js.map} +1 -1
  202. package/dist/client/assets/{typescript-BYTx4UxO-XIX20smz.js → typescript-BYTx4UxO-C2eU2nTQ.js} +2 -2
  203. package/dist/client/assets/{typescript-BYTx4UxO-XIX20smz.js.map → typescript-BYTx4UxO-C2eU2nTQ.js.map} +1 -1
  204. package/dist/client/assets/{typst-BrfC91e7-BTQczO73.js → typst-BrfC91e7-Bry73qoG.js} +2 -2
  205. package/dist/client/assets/{typst-BrfC91e7-BTQczO73.js.map → typst-BrfC91e7-Bry73qoG.js.map} +1 -1
  206. package/dist/client/assets/{useWorkspaceDefaultLanding-DygvrKuK.js → useWorkspaceDefaultLanding-DPM3tzSI.js} +2 -2
  207. package/dist/client/assets/{useWorkspaceDefaultLanding-DygvrKuK.js.map → useWorkspaceDefaultLanding-DPM3tzSI.js.map} +1 -1
  208. package/dist/client/assets/{vue-B92PIQFm-Bo7Ratnf.js → vue-B92PIQFm-_KBJBFm9.js} +2 -2
  209. package/dist/client/assets/{vue-B92PIQFm-Bo7Ratnf.js.map → vue-B92PIQFm-_KBJBFm9.js.map} +1 -1
  210. package/dist/client/assets/{vue-html-EDHI-aeE-DZaGT8SW.js → vue-html-EDHI-aeE-Cx5Qo046.js} +2 -2
  211. package/dist/client/assets/{vue-html-EDHI-aeE-DZaGT8SW.js.map → vue-html-EDHI-aeE-Cx5Qo046.js.map} +1 -1
  212. package/dist/client/assets/{vue-vine-CmMdgoEY-D5tBNukX.js → vue-vine-CmMdgoEY-CDgVVhf3.js} +2 -2
  213. package/dist/client/assets/{vue-vine-CmMdgoEY-D5tBNukX.js.map → vue-vine-CmMdgoEY-CDgVVhf3.js.map} +1 -1
  214. package/dist/client/assets/{workspaceEntityRoutes-FAiial9O.js → workspaceEntityRoutes-Cc_RtLvy.js} +2 -2
  215. package/dist/client/assets/{workspaceEntityRoutes-FAiial9O.js.map → workspaceEntityRoutes-Cc_RtLvy.js.map} +1 -1
  216. package/dist/client/assets/{workspaceScrollCapture-AJpPgzgz.js → workspaceScrollCapture-Dg3Pebh8.js} +2 -2
  217. package/dist/client/assets/{workspaceScrollCapture-AJpPgzgz.js.map → workspaceScrollCapture-Dg3Pebh8.js.map} +1 -1
  218. package/dist/client/assets/{xml-Bz9Nzp99-Bj4-GEHY.js → xml-Bz9Nzp99-bfRaCa2x.js} +2 -2
  219. package/dist/client/assets/{xml-Bz9Nzp99-Bj4-GEHY.js.map → xml-Bz9Nzp99-bfRaCa2x.js.map} +1 -1
  220. package/dist/client/assets/{xsl-D0pOnfMq-9186FOf_.js → xsl-D0pOnfMq-BaQuui65.js} +2 -2
  221. package/dist/client/assets/{xsl-D0pOnfMq-9186FOf_.js.map → xsl-D0pOnfMq-BaQuui65.js.map} +1 -1
  222. package/dist/client/assets/{yaml-DKDHNCIP-ISipY-zA.js → yaml-DKDHNCIP-B5ot5BQr.js} +2 -2
  223. package/dist/client/assets/{yaml-DKDHNCIP-ISipY-zA.js.map → yaml-DKDHNCIP-B5ot5BQr.js.map} +1 -1
  224. package/dist/client/index.html +2 -2
  225. package/dist/server/assets/controlCenterApi-CIz0g85O.js.map +1 -1
  226. package/package.json +8 -8
  227. package/dist/client/assets/ActiveWorkPage-BxSGZWS_.js +0 -2
  228. package/dist/client/assets/ActiveWorkPage-BxSGZWS_.js.map +0 -1
  229. package/dist/client/assets/AgentPage-YiYORLod.js.map +0 -1
  230. package/dist/client/assets/AtlassianOAuthCallbackPage-PfsrTytb.js.map +0 -1
  231. package/dist/client/assets/AuthorizedSharePage-BCwnILXF.js.map +0 -1
  232. package/dist/client/assets/ItemsPage-BzinDuxs.js.map +0 -1
  233. package/dist/client/assets/OpenPullRequestPage-BABGk9v2.js.map +0 -1
  234. package/dist/client/assets/PairPage-4meDmW_A.js.map +0 -1
  235. package/dist/client/assets/PortfolioOverview-BRB_qe4T.js +0 -2
  236. package/dist/client/assets/PortfolioOverview-BRB_qe4T.js.map +0 -1
  237. package/dist/client/assets/ReleaseRoute-D1srSd83.js +0 -2
  238. package/dist/client/assets/ReleaseRoute-D1srSd83.js.map +0 -1
  239. package/dist/client/assets/ReleaseWorkset-DcI6qwPE.js.map +0 -1
  240. package/dist/client/assets/ReviewSuggestionPublicationSurface-BtoYEprT.js.map +0 -1
  241. package/dist/client/assets/ServicesPage-DihUx1kr.js.map +0 -1
  242. package/dist/client/assets/TimelinePage-DyluBeEt.js.map +0 -1
  243. package/dist/client/assets/WorkspaceSettingsPage-Dn_eDC3m.js.map +0 -1
  244. package/dist/client/assets/index-BZ52pCV1.css +0 -1
  245. package/dist/client/assets/patterns-D0U0WCQS.js +0 -2
  246. package/dist/client/assets/patterns-D0U0WCQS.js.map +0 -1
  247. package/dist/client/assets/primitives-CjQX0eVM-BPKvllZ_.js +0 -2
  248. package/dist/client/assets/primitives-CjQX0eVM-BPKvllZ_.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-Cvdyeg_0.js";import{m as n,p as r,s as i,u as a}from"./hooks-CGvBGjhq.js";import{a as o,d as s,i as c,r as l,v as u}from"./Dialog-_t9OodCK-CzkLh9VB.js";import{t as d}from"./jsx-runtime-NZYk81nU.js";import{D as f,_ as p,b as m,d as h,f as g,h as _,m as v,p as y,w as b}from"./index-DlDEYM2e.js";import{d as x,g as S,h as C,m as w,n as T,p as E,r as D,s as O,y as ee}from"./patterns-CJ4c7F5A.js";import{n as k,t as A}from"./primitives-Dj-qYrUZ-BIf5RLs4.js";import{Ei as j,Hr as te,Ka as ne,Kn as M,Kr as re,Si as N,mi as P,nn as ie,rn as ae}from"./agent-api-0YXZd1ag.js";import{n as oe,t as se}from"./BrowserCrypto-BBWJ9Dbb.js";import{a as F,t as I}from"./client-C9AVNoed.js";import{a as ce,c as le,l as ue,n as de,s as fe}from"./releaseRoutes-Bpw_kfZI.js";import{PortfolioOverviewView as pe}from"./PortfolioOverview-C0RZCx6V.js";import{t as L}from"./authenticatedMutationClient-DHk0N1_5.js";import{r as R,t as z}from"./ReleaseWorkset-DGufwIFe.js";import{n as B,t as me}from"./useCompactReleasePreview-DC_UpEvU.js";var V=e(t(),1),he=P(function*(){let e=yield*(yield*oe).randomUUIDv7;return yield*M(ie)(e)}),ge={create:(e,t,n,r)=>j(P(function*(){return yield*(yield*L).deliveryGraph.createRepairProposal({params:{releaseId:e,relationshipId:t.precondition.relationshipId},payload:{proposalId:n,environmentId:t.candidate.impact.environmentId,expectedRevision:t.precondition.expectedRevision,disposition:t.proposal.disposition,rationale:t.proposal.rationale}})}).pipe(N(F)),{signal:r}),draft:(e,t,n,r,i)=>j(P(function*(){return yield*(yield*I()).deliveryGraph.repairProposalDraft({params:{releaseId:e,relationshipId:n},query:t===null?{revision:r}:{environmentId:t,revision:r}})}).pipe(N(F)),{signal:i}),list:(e,t,n)=>j(P(function*(){return yield*(yield*I()).deliveryGraph.repairCandidates({params:{releaseId:e},query:t===null?{}:{environmentId:t}})}).pipe(N(F)),{signal:n}),makeProposalId:()=>j(he.pipe(N(se)))},H={candidates:`_candidates_nbx6f_1`,draft:`_draft_nbx6f_2`,candidateHeader:`_candidateHeader_nbx6f_10`,draftHeader:`_draftHeader_nbx6f_11`,actions:`_actions_nbx6f_12`,candidate:`_candidate_nbx6f_1`,"reveal-draft":`_reveal-draft_nbx6f_1`},U=d(),W=e=>e.replaceAll(`-`,` `),_e=e=>`${W(e.relationship.sourceNodeKind)} → ${W(e.relationship.targetNodeKind)}`,ve=(e,t)=>{let n=new Set,r=[];for(let e of t.flatMap(e=>e.candidates)){let t=`${e.relationship.relationshipId}:${e.relationship.revision}`;n.has(t)||(n.add(t),r.push(e))}return{releaseId:e,environmentId:null,truncated:t.some(({truncated:e})=>e)||r.length>500,candidates:r.slice(0,500)}},G=({announce:e=!1,children:t,stateTag:n})=>{let r=(0,V.useRef)(null);return(0,V.useEffect)(()=>r.current?.focus(),[n]),(0,U.jsx)(`div`,{"aria-live":e?`polite`:void 0,ref:r,role:e?`status`:void 0,tabIndex:-1,children:t})},ye=({environmentIds:e,onCreated:t,releaseId:n,session:r,transport:i=ge})=>{let[a,o]=(0,V.useState)({_tag:`idle`}),c=(0,V.useRef)(null),d=r.actor._tag===`human`?r.actor.personId:r.actor.agentId,f=`${r.sessionId}:${r.workspaceId}:${r.permission}:${r.actor._tag}:${d}`,p=e.join(`:`);if((0,V.useEffect)(()=>(c.current?.abort(),c.current=null,o({_tag:`idle`}),()=>c.current?.abort()),[f,p,n]),r.permission!==`workspace-owner`)return null;let m=async(e,t,n)=>{c.current?.abort();let r=new AbortController;c.current=r;try{let n=await e(r.signal);!r.signal.aborted&&c.current===r&&t(n)}catch{!r.signal.aborted&&c.current===r&&n()}finally{c.current===r&&(c.current=null)}},h=()=>{o({_tag:`loading`}),m(t=>R(e,e=>i.list(n,e,t)),e=>o({_tag:`ready`,page:ve(n,e)}),()=>o({_tag:`load-failed`}))},g=(e,t)=>{o({_tag:`drafting`,page:t}),m(t=>i.draft(n,e.impact.environmentId,e.relationship.relationshipId,e.relationship.revision,t),e=>o({_tag:`draft`,draft:e,page:t}),()=>o({_tag:`draft-failed`,candidate:e,page:t}))},_=t=>{o({_tag:`loading`}),m(t=>R(e,e=>i.list(n,e,t)),e=>{let r=ve(n,e),i=r.candidates.find(e=>e.relationship.relationshipId===t.relationship.relationshipId);if(i===void 0){o({_tag:`ready`,page:r});return}g(i,r)},()=>o({_tag:`load-failed`}))},v=(e,r,a=null)=>{c.current?.abort();let s=new AbortController;c.current=s,o({_tag:`creating`,draft:e,page:r,proposalId:a}),(async()=>{let l=a;try{if(l??=await i.makeProposalId(),s.signal.aborted||c.current!==s||(o({_tag:`creating`,draft:e,page:r,proposalId:l}),await i.create(n,e,l,s.signal),s.signal.aborted||c.current!==s))return;o({_tag:`created`}),t()}catch{!s.signal.aborted&&c.current===s&&o({_tag:`create-failed`,draft:e,page:r,proposalId:l})}finally{c.current===s&&(c.current=null)}})()};if(a._tag===`idle`)return(0,U.jsx)(s,{onClick:h,children:`Find repair candidates`});if(a._tag===`loading`)return(0,U.jsx)(G,{announce:!0,stateTag:a._tag,children:(0,U.jsx)(A,{tone:`secondary`,children:`Finding incomplete relationships…`})});if(a._tag===`load-failed`)return(0,U.jsx)(G,{stateTag:a._tag,children:(0,U.jsx)(l,{action:(0,U.jsx)(s,{onClick:h,children:`Try again`}),announce:`assertive`,description:`Candidate discovery did not change the release.`,title:`Could not find candidates`,tone:`caution`})});if(a._tag===`created`)return(0,U.jsx)(G,{announce:!0,stateTag:a._tag,children:(0,U.jsx)(u,{label:`Proposal created`,tone:`positive`})});if(a._tag===`drafting`)return(0,U.jsx)(G,{announce:!0,stateTag:a._tag,children:(0,U.jsx)(A,{tone:`secondary`,children:`Preparing an exact proposal…`})});if(a._tag===`draft-failed`)return(0,U.jsx)(G,{stateTag:a._tag,children:(0,U.jsx)(l,{action:(0,U.jsx)(s,{onClick:()=>_(a.candidate),children:`Refresh candidate`}),announce:`assertive`,description:`The relationship may have changed since discovery.`,title:`Candidate is stale`,tone:`caution`})});if(a._tag===`draft`||a._tag===`creating`||a._tag===`create-failed`){let e=a._tag===`creating`;return(0,U.jsx)(G,{announce:e,stateTag:a._tag,children:(0,U.jsxs)(k,{as:`section`,className:H.draft,padding:`none`,tone:`secondary`,children:[(0,U.jsxs)(`div`,{className:H.draftHeader,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsxs)(A,{as:`h4`,variant:`card-title`,children:[W(a.draft.proposal.disposition),` relationship`]}),(0,U.jsxs)(A,{tone:`tertiary`,variant:`meta`,children:[`r`,a.draft.precondition.expectedRevision,` → r`,a.draft.precondition.expectedRevision+1]})]}),(0,U.jsx)(u,{label:`Proposal preview`,size:`compact`,tone:`neutral`})]}),(0,U.jsx)(A,{children:a.draft.proposal.rationale}),a._tag===`create-failed`?(0,U.jsx)(A,{role:`alert`,tone:`secondary`,children:`The relationship changed or the proposal was not recorded. Refresh the candidate before retrying.`}):null,(0,U.jsxs)(`div`,{className:H.actions,children:[(0,U.jsx)(s,{disabled:e,onClick:()=>o({_tag:`ready`,page:a.page}),variant:`quiet`,children:`Back`}),(0,U.jsx)(s,{loading:e,onClick:()=>v(a.draft,a.page,a._tag===`create-failed`?a.proposalId:null),variant:`primary`,children:`Create proposal`})]})]})})}return a.page.candidates.length===0?(0,U.jsx)(G,{announce:!0,stateTag:a._tag,children:(0,U.jsx)(A,{tone:`secondary`,children:`No incomplete relationships need an owner decision.`})}):(0,U.jsx)(G,{stateTag:a._tag,children:(0,U.jsxs)(`div`,{className:H.candidates,children:[(0,U.jsxs)(`div`,{className:H.candidateHeader,children:[(0,U.jsxs)(A,{tone:`secondary`,children:[a.page.candidates.length,a.page.truncated?`+`:``,` incomplete relationship`,a.page.candidates.length===1?``:`s`]}),(0,U.jsx)(s,{onClick:()=>o({_tag:`idle`}),variant:`quiet`,children:`Close`})]}),a.page.candidates.map(e=>(0,U.jsxs)(`button`,{className:H.candidate,onClick:()=>g(e,a.page),type:`button`,children:[(0,U.jsxs)(`span`,{children:[(0,U.jsx)(`strong`,{children:_e(e)}),(0,U.jsx)(`small`,{children:e.explanation})]}),(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`→`})]},e.relationship.relationshipId))]})})},be=P(function*(){let e=yield*(yield*oe).randomUUIDv7;return yield*M(ae)(e)}),xe={apply:(e,t)=>j(P(function*(){return yield*(yield*L).deliveryGraph.applyRepairProposal({params:{proposalId:e}})}).pipe(N(F)),{signal:t}),list:(e,t,n)=>j(P(function*(){return yield*(yield*I()).deliveryGraph.listRepairProposals({params:{releaseId:e},query:t===null?{}:{environmentId:t}})}).pipe(N(F)),{signal:n}),makeReviewId:()=>j(be.pipe(N(se))),review:(e,t,n,r,i)=>j(P(function*(){return yield*(yield*L).deliveryGraph.reviewRepairProposal({params:{proposalId:e},payload:{reviewId:t,decision:n,rationale:r}})}).pipe(N(F)),{signal:i})},Se=ne(`UnauthorizedApiError`),Ce=()=>void 0,we=(e,t)=>{let n=te(t.proposedAt,e.proposedAt);return n===0?t.proposalId.localeCompare(e.proposalId):n},Te=(e,t)=>{let n=new Map,r=new Map;for(let e of t){for(let t of e.proposals)n.set(t.proposalId,t);for(let t of e.applications)r.set(t.proposalId,t)}let i=[...n.values()].sort(we),a=i.slice(0,128),o=a.flatMap(e=>{let t=r.get(e.proposalId);return t===void 0?[]:[t]});return{releaseId:e,environmentId:null,status:null,truncated:t.some(({truncated:e})=>e)||i.length>128,proposals:a,applications:o}},Ee=(e,t,n,r=xe,i=Ce)=>{let[a,o]=(0,V.useState)(0),[s,c]=(0,V.useState)({_tag:`idle`}),l=(0,V.useRef)(null),u=(0,V.useRef)(null),d=(0,V.useRef)(new Map),f=(0,V.useRef)(s),p=t.join(`:`);(0,V.useEffect)(()=>{if(l.current?.abort(),l.current=null,u.current=null,d.current.clear(),n===null){c({_tag:`idle`});return}let a=new AbortController;return c({_tag:`loading`}),R(t,t=>r.list(e,t,a.signal)).then(t=>{if(!a.signal.aborted){let r=Te(e,t);c({_tag:`ready`,actionFailure:null,applications:new Map(r.applications.map(e=>[e.proposalId,e])),busyProposalId:null,environmentScopeKey:p,page:r,releaseId:e,sessionKey:n})}},e=>{a.signal.aborted||(Se(e)&&i(n),c({_tag:`failed`}))}),()=>a.abort()},[p,i,e,a,n,r]),(0,V.useEffect)(()=>()=>l.current?.abort(),[]);let m=s._tag===`ready`&&(s.environmentScopeKey!==p||s.releaseId!==e||s.sessionKey!==n)?{_tag:`loading`}:s;f.current=m;let h=(0,V.useCallback)(e=>{if(f.current._tag!==`ready`||u.current!==null)return null;let t=new AbortController;return u.current=e,l.current?.abort(),l.current=t,c(t=>t._tag===`ready`?{...t,actionFailure:null,busyProposalId:e}:t),t},[]),g=(0,V.useCallback)(e=>l.current===e&&(l.current=null,u.current=null,!0),[]),_=(0,V.useCallback)(async(e,t,n)=>{let i=h(e);if(i===null)return!1;try{let a=d.current.get(e),o=a?.decision===t&&a.rationale===n?a:{decision:t,rationale:n,reviewId:await r.makeReviewId()};d.current.set(e,o);let s=await r.review(e,o.reviewId,t,n,i.signal);return!g(i)||i.signal.aborted?!1:(d.current.delete(e),c(t=>t._tag!==`ready`||i.signal.aborted?t:{...t,busyProposalId:null,page:{...t.page,proposals:t.page.proposals.map(t=>t.proposalId===e?s:t)}}),!0)}catch{return!i.signal.aborted&&g(i)&&c(t=>t._tag===`ready`?{...t,actionFailure:e,busyProposalId:null}:t),!1}},[h,g,r]);return{apply:(0,V.useCallback)(async e=>{let t=h(e);if(t===null)return!1;try{let n=await r.apply(e,t.signal);return!g(t)||t.signal.aborted?!1:(c(r=>{if(r._tag!==`ready`||t.signal.aborted)return r;let i=new Map(r.applications);return i.set(e,n.application),{...r,applications:i,busyProposalId:null}}),!0)}catch{return!t.signal.aborted&&g(t)&&c(t=>t._tag===`ready`?{...t,actionFailure:e,busyProposalId:null}:t),!1}},[h,g,r]),retry:(0,V.useCallback)(()=>o(e=>e+1),[]),review:_,state:m}},K={root:`_root_1x4wx_1`,ledger:`_ledger_1x4wx_2`,proposal:`_proposal_1x4wx_3`,proposalHeader:`_proposalHeader_1x4wx_4`,decision:`_decision_1x4wx_5`,reviewEvidence:`_reviewEvidence_1x4wx_6`,reviewForm:`_reviewForm_1x4wx_7`,loading:`_loading_1x4wx_8`,panelStack:`_panelStack_1x4wx_9`,header:`_header_1x4wx_26`,peopleTrace:`_peopleTrace_1x4wx_28`,actions:`_actions_1x4wx_29`,agentIdentity:`_agentIdentity_1x4wx_30`,rationale:`_rationale_1x4wx_80`,traceArrow:`_traceArrow_1x4wx_89`,agentGlyph:`_agentGlyph_1x4wx_98`,actionFailure:`_actionFailure_1x4wx_134`,status:`_status_1x4wx_138`,srOnly:`_srOnly_1x4wx_142`,"reveal-review":`_reveal-review_1x4wx_1`},De=()=>void 0,Oe=e=>e.slice(-6),ke=(e,t)=>e._tag===t._tag&&(e._tag===`human`?t._tag===`human`&&e.personId===t.personId:t._tag===`agent`&&e.agentId===t.agentId),Ae=(e,t,n)=>{let r=t.collaborators.find(({id:t})=>t.startsWith(`${e.personId}:`));return r===void 0?{id:e.personId,name:`Person ${Oe(e.personId)}`,role:n}:{...r,role:n}},q=({actor:e,release:t,role:n})=>e._tag===`human`?(0,U.jsx)(O,{person:Ae(e,t,n),size:`compact`}):(0,U.jsxs)(`div`,{className:K.agentIdentity,children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:K.agentGlyph,children:`✦`}),(0,U.jsxs)(`span`,{children:[(0,U.jsxs)(`strong`,{children:[`Agent `,Oe(e.agentId)]}),(0,U.jsx)(`small`,{children:n})]})]}),je=(e,t)=>{if(t!==void 0)return{label:`Applied · r${t.appliedRevision}`,tone:`positive`};switch(e.status){case`pending`:return{label:`Needs review`,tone:`caution`};case`approved`:return{label:`Ready to apply`,tone:`positive`};case`rejected`:return{label:`Rejected`,tone:`critical`}}},J=e=>re(e,{day:`2-digit`,hour:`2-digit`,hour12:!1,locale:`en-GB`,minute:`2-digit`,month:`short`}),Me=({actionFailed:e,application:t,isBusy:n,isGloballyBusy:r,mutationsEnabled:i,onApply:a,onRetry:o,onReview:d,proposal:f,release:p,session:m})=>{let[h,g]=(0,V.useState)(!1),[_,v]=(0,V.useState)(``),[y,b]=(0,V.useState)(null),x=(0,V.useRef)(null),S=je(f,t),C=i&&f.status===`pending`&&(m.permission===`workspace-owner`||m.permission===`workspace-approver`)&&!ke(f.origin.actor,m.actor),w=i&&f.status===`approved`&&t===void 0&&m.permission===`workspace-owner`,T=_.trim(),E=async e=>{T.length!==0&&await d(f.proposalId,e,T)&&(g(!1),v(``),b(e===`approved`?`Proposal approved.`:`Proposal rejected.`))},D=async()=>{await a(f.proposalId)&&b(`Repair applied.`)};return(0,V.useEffect)(()=>{y!==null&&x.current?.focus()},[y]),(0,U.jsxs)(k,{as:`article`,className:K.proposal,padding:`none`,tone:`secondary`,children:[(0,U.jsxs)(`header`,{className:K.proposalHeader,children:[(0,U.jsxs)(`div`,{className:K.decision,children:[(0,U.jsxs)(`strong`,{children:[f.disposition[0]?.toLocaleUpperCase(`en-US`),f.disposition.slice(1)]}),(0,U.jsxs)(`code`,{children:[`r`,f.expectedRevision,` → r`,f.expectedRevision+1]})]}),(0,U.jsxs)(`div`,{className:K.status,ref:x,tabIndex:y===null?void 0:-1,children:[(0,U.jsx)(u,{label:S.label,size:`compact`,tone:S.tone}),(0,U.jsx)(`span`,{"aria-live":`polite`,className:K.srOnly,children:y??``})]})]}),(0,U.jsx)(A,{className:K.rationale,variant:`body-large`,children:f.rationale}),(0,U.jsxs)(`div`,{className:K.peopleTrace,children:[(0,U.jsx)(q,{actor:f.origin.actor,release:p,role:`Proposed · ${J(f.proposedAt)}`}),f.review===null?null:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:K.traceArrow,children:`→`}),(0,U.jsx)(q,{actor:f.review.origin.actor,release:p,role:`${f.review.decision===`approved`?`Approved`:`Rejected`} · ${J(f.review.reviewedAt)}`})]}),t===void 0?null:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:K.traceArrow,children:`→`}),(0,U.jsx)(q,{actor:t.origin.actor,release:p,role:`Applied revision ${t.appliedRevision} · ${J(t.appliedAt)}`})]})]}),f.review===null?null:(0,U.jsxs)(`div`,{className:K.reviewEvidence,children:[(0,U.jsx)(A,{as:`strong`,variant:`label`,children:`Review note`}),(0,U.jsx)(A,{tone:`secondary`,children:f.review.rationale})]}),e?(0,U.jsx)(l,{action:(0,U.jsx)(s,{onClick:o,children:`Reload decisions`}),announce:`assertive`,className:K.actionFailure,description:`The proposal may have changed. Reload the release decisions before trying again.`,title:`Action not recorded`,tone:`caution`}):null,h&&C?(0,U.jsxs)(`form`,{className:K.reviewForm,onSubmit:e=>e.preventDefault(),children:[(0,U.jsx)(c,{description:`Stored with the immutable decision.`,label:`Review note`,required:!0,children:e=>(0,U.jsx)(`textarea`,{...e,autoFocus:!0,maxLength:1e3,onChange:e=>v(e.currentTarget.value),value:_})}),(0,U.jsxs)(`div`,{className:K.actions,children:[(0,U.jsx)(s,{disabled:T.length===0||r,loading:n,onClick:()=>void E(`rejected`),variant:`quiet`,children:`Reject`}),(0,U.jsx)(s,{disabled:T.length===0||r,loading:n,onClick:()=>void E(`approved`),variant:`primary`,children:`Approve`})]})]}):(0,U.jsxs)(`div`,{className:K.actions,children:[C?(0,U.jsx)(s,{disabled:r,onClick:()=>g(!0),children:`Review proposal`}):null,w?(0,U.jsx)(s,{disabled:r&&!n,loading:n,onClick:()=>void D(),variant:`primary`,children:`Apply repair`}):null,f.status===`pending`&&ke(f.origin.actor,m.actor)?(0,U.jsx)(A,{tone:`tertiary`,variant:`meta`,children:`Another owner or approver must review.`}):null]})]})},Ne=()=>(0,U.jsxs)(`div`,{"aria-label":`Loading release decisions`,className:K.loading,role:`status`,children:[(0,U.jsx)(o,{decorative:!1,height:`1.5rem`,label:`Loading release decisions`,width:`12rem`}),(0,U.jsx)(o,{decorative:!0,height:`11rem`,variant:`block`})]}),Pe=({mutationsEnabled:e,onApply:t,onRetry:n,onReview:r,release:i,session:a,state:o})=>o._tag===`idle`||o._tag===`loading`?(0,U.jsx)(Ne,{}):o._tag===`failed`?(0,U.jsx)(l,{action:(0,U.jsx)(s,{onClick:n,children:`Try again`}),description:`Control Center could not read the governed decisions for this release.`,title:`Release decisions unavailable`,tone:`caution`}):o.page.proposals.length===0?(0,U.jsx)(l,{description:`No relationship repair is waiting for review or application.`,title:`No repair decisions`}):(0,U.jsxs)(`div`,{className:K.root,children:[(0,U.jsxs)(`header`,{className:K.header,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(A,{as:`h3`,variant:`card-title`,children:`Repair decisions`}),(0,U.jsx)(A,{tone:`secondary`,children:`One compact ledger from proposal to human decision to applied revision.`})]}),(0,U.jsx)(u,{label:`${o.page.proposals.length}${o.page.truncated?`+`:``} decision${o.page.proposals.length===1?``:`s`}`,size:`compact`,tone:`neutral`})]}),(0,U.jsx)(`div`,{className:K.ledger,children:o.page.proposals.map(s=>(0,U.jsx)(Me,{actionFailed:o.actionFailure===s.proposalId,application:o.applications.get(s.proposalId),isBusy:o.busyProposalId===s.proposalId,isGloballyBusy:o.busyProposalId!==null,mutationsEnabled:e,onApply:t,onRetry:n,onReview:r,proposal:s,release:i,session:a},s.proposalId))})]}),Fe=e=>{let t=e.actor._tag===`human`?e.actor.personId:e.actor.agentId;return`${e.sessionId}:${e.workspaceId}:${e.permission}:${e.actor._tag}:${t}`},Ie=e=>{switch(e._tag){case`authenticated`:return{mutationsEnabled:!0,session:e.session};case`storage-unavailable`:return{mutationsEnabled:!1,session:e.session};case`anonymous`:case`blocked`:case`checking`:case`unavailable`:return{mutationsEnabled:!1,session:null}}},Le=({browserSessionState:e,onSessionExpired:t=De,release:n,transport:r})=>{let i=Ie(e),a=Ee(n.id,n.targetEnvironmentIds,i.session?.sessionId??null,r,t);return i.session===null?(0,U.jsx)(Ne,{}):(0,U.jsxs)(`div`,{className:K.panelStack,children:[(0,U.jsx)(Pe,{mutationsEnabled:i.mutationsEnabled,onApply:a.apply,onRetry:a.retry,onReview:a.review,release:n,session:i.session,state:a.state}),i.mutationsEnabled?(0,U.jsx)(ye,{environmentIds:n.targetEnvironmentIds,onCreated:a.retry,releaseId:n.id,session:i.session},`${n.id}:${n.targetEnvironmentIds.join(`:`)}:${Fe(i.session)}`):null]})},Re=({release:e})=>{let t=m();return(0,U.jsx)(Le,{browserSessionState:t.state,onSessionExpired:t.invalidateSession,release:e})},Y={state:`_state_1mg2y_1`,back:`_back_1mg2y_8`,releaseAction:`_releaseAction_1mg2y_9`,previewDetails:`_previewDetails_1mg2y_33`,evidence:`_evidence_1mg2y_34`,full:`_full_1mg2y_35`,fullHeader:`_fullHeader_1mg2y_36`,fullTitle:`_fullTitle_1mg2y_37`,section:`_section_1mg2y_38`,evidenceHeading:`_evidenceHeading_1mg2y_47`,fullIdentity:`_fullIdentity_1mg2y_48`},ze=(e,t)=>{let n=de(t);if(n===null||e.controller.state._tag!==`ready`)return null;let r=e.controller.state.portfolio.releases.find(e=>e.id===n);return r===void 0?null:{release:r,releaseId:n}},Be=({workspaceId:e})=>{let t=(0,V.useRef)(null);return(0,V.useEffect)(()=>t.current?.focus(),[]),(0,U.jsx)(`section`,{className:Y.state,"data-release-not-found":``,ref:t,tabIndex:-1,children:(0,U.jsx)(l,{action:(0,U.jsx)(b,{to:v(e),children:`Return to workspace overview`}),description:`This release does not exist in the current workspace snapshot. It may have been removed or the address may be incorrect.`,title:`Release not found`})})},X=({context:e})=>{let t=(0,V.useRef)(null);return(0,V.useEffect)(()=>t.current?.querySelector(`#portfolio-title`)?.focus(),[]),(0,U.jsx)(`div`,{ref:t,children:(0,U.jsx)(pe,{onPreviewRelease:()=>void 0,onRetry:e.controller.onRetry,state:e.controller.state})})},Z=({release:e})=>{let t=r(),n=i(),a=(()=>{switch(e.readinessVerdict){case`blocked`:return{label:`Review blocker`,to:h(t.workspaceId,e.id)};case`held`:return{label:`Repair missing links`,to:`${y(t.workspaceId,e.id)}#release-work`};case`ready`:return{label:`Review ship evidence`,to:`${y(t.workspaceId,e.id)}#release-evidence`};case`deploying`:return{label:`Open deployment`,to:`${y(t.workspaceId,e.id)}#release-work`};case`building`:return{label:`Open build`,to:`${y(t.workspaceId,e.id)}#release-work`};case`shipped`:return{label:`View release record`,to:`${y(t.workspaceId,e.id)}#release-evidence`};case`unknown`:return null}})();return a===null?(0,U.jsx)(s,{disabled:!0,size:`principal`,stretch:!0,variant:`primary`,children:`Readiness evidence required`}):(0,U.jsx)(b,{className:Y.releaseAction,state:n.state,to:a.to,children:a.label})},Q=({release:e})=>(0,U.jsxs)(k,{as:`section`,className:Y.evidence,padding:`compact`,tone:`secondary`,children:[(0,U.jsxs)(`div`,{className:Y.evidenceHeading,children:[e.source.service===null?null:(0,U.jsx)(ee,{service:e.source.service}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(A,{as:`h2`,variant:`card-title`,children:e.source.displayName}),(0,U.jsx)(A,{tone:`secondary`,variant:`meta`,children:`Source evidence`})]})]}),(0,U.jsx)(u,{label:e.source.healthLabel,size:`compact`,tone:e.source.healthTone}),e.source.warning===null?(0,U.jsx)(A,{tone:`secondary`,children:`Detailed evidence is not evaluated in the tracer snapshot.`}):(0,U.jsx)(A,{tone:`secondary`,children:e.source.warning})]}),Ve=e=>`${e.serviceName} · ${e.version} · ${e.relay.codename} · ${e.id}`,$=({release:e})=>{let t=r(),n=i(),o=a(),s=B();return(0,U.jsx)(C,{actionLabel:`Ask about this release`,agentName:`Relay`,context:Ve(e),onClick:()=>o(g(t.workspaceId,e.id),{state:n.state,viewTransition:!s})})},He=({release:e})=>e.collaborators.length===0?(0,U.jsx)(l,{description:`Assign an owner or approver before a governed release action can proceed.`,title:`No release collaborators assigned`}):(0,U.jsx)(T,{"aria-label":`All ${e.serviceName} release collaborators`,expanded:!0,limit:e.collaborators.length,onExpandedChange:()=>void 0,people:e.collaborators}),Ue=({selection:e})=>{let t=r(),n=me(),o=B(),s=i(),c=a(),[l,u]=(0,V.useState)(null),[d,p]=(0,V.useState)(!0),m=ue(s.state,t.workspaceId,e.releaseId),h=fe(m.origin),v=y(t.workspaceId,e.releaseId),b=g(t.workspaceId,e.releaseId),S=_(t.workspaceId,e.releaseId),C=f(S),w=f(v),T=f(b),D=C||w||T?le(e.releaseId):void 0;(0,V.useEffect)(()=>{d||l===null||c(h,{replace:!0})},[t.workspaceId,l,d,c,h,e.releaseId]);let O=()=>{t.requestReleaseFocus(e.releaseId),u(`origin`),p(!1)};return(0,U.jsx)(x,{agentEntry:(0,U.jsx)($,{release:e.release}),collaborators:(0,U.jsx)(He,{release:e.release}),entryMotion:m.isStored?`external`:`intrinsic`,evidence:(0,U.jsx)(Q,{release:e.release}),onOpenChange:e=>{e||O()},onOpenFullView:()=>c(v,{state:s.state,viewTransition:!o}),open:d,openFullViewLabel:`Open ${e.release.relay.codename} full view`,presentation:n?`sheet`:`dialog`,primaryAction:(0,U.jsx)(Z,{release:e.release}),release:e.release.release,stages:(0,U.jsx)(E,{heading:`Release stages`,stages:e.release.stages}),...D===void 0?{}:{transitionNames:D},workset:(0,U.jsx)(`div`,{className:Y.previewDetails,children:(0,U.jsx)(z,{release:e.release,workspaceId:t.workspaceId})})})},We=()=>{let e=r(),t=n();if(e.controller.state._tag!==`ready`)return(0,U.jsx)(X,{context:e});let i=ze(e,t.releaseId);return i===null?(0,U.jsx)(Be,{workspaceId:e.workspaceId}):(0,U.jsx)(Ue,{selection:i})},Ge=({selection:e})=>{let t=r(),n=i(),a=(0,V.useRef)(null),o=ce(n.state,t.workspaceId,e.releaseId),s=o.pathname===p(t.workspaceId)?`Back to items`:`Back to overview`,c=e.release,l=y(t.workspaceId,e.releaseId),u=g(t.workspaceId,e.releaseId),d=f(l),m=f(u),h=d||m?le(e.releaseId):void 0;return(0,V.useEffect)(()=>a.current?.focus(),[]),(0,U.jsxs)(`article`,{className:Y.full,"data-release-full-id":c.id,children:[(0,U.jsxs)(`header`,{className:Y.fullHeader,children:[(0,U.jsx)(b,{className:Y.back,to:fe(o),children:s}),(0,U.jsxs)(`div`,{className:Y.fullIdentity,children:[(0,U.jsx)(S,{algorithm:c.relay.algorithm,codename:c.relay.codename,"data-rly-release-transition-name":h?.relay,"data-rly-release-transition-part":`relay`,size:`hero`,style:h===void 0?void 0:{viewTransitionName:h.relay},symbolIndices:c.relay.symbolIndices}),c.source.freshnessDateTime===null||c.source.freshnessTime===null?(0,U.jsx)(D,{state:c.source.freshness}):(0,U.jsx)(D,{dateTime:c.source.freshnessDateTime,state:c.source.freshness,time:c.source.freshnessTime})]}),(0,U.jsxs)(`div`,{className:Y.fullTitle,children:[(0,U.jsx)(A,{as:`h1`,id:`release-title`,ref:a,tabIndex:-1,variant:`verdict`,children:c.serviceName}),(0,U.jsx)(A,{as:`code`,"data-rly-release-transition-name":h?.version,"data-rly-release-transition-part":`version`,style:h===void 0?void 0:{viewTransitionName:h.version},tone:`secondary`,variant:`code`,children:c.version})]}),(0,U.jsx)(w,{"data-rly-release-transition-name":h?.verdict,"data-rly-release-transition-part":`verdict`,reason:c.readinessReason,style:h===void 0?void 0:{viewTransitionName:h.verdict},tone:c.release.tone,verdict:c.release.verdict}),(0,U.jsx)(Z,{release:c})]}),(0,U.jsx)(E,{heading:`Build, verify, production`,stages:c.stages}),(0,U.jsxs)(`section`,{"aria-labelledby":`release-people`,className:Y.section,children:[(0,U.jsx)(A,{as:`h2`,id:`release-people`,variant:`section-title`,children:`People`}),(0,U.jsx)(He,{release:c})]}),(0,U.jsxs)(`section`,{"aria-labelledby":`release-work-title`,className:Y.section,id:`release-work`,children:[(0,U.jsx)(A,{as:`h2`,id:`release-work-title`,variant:`section-title`,children:`Delivery relationships`}),(0,U.jsx)(z,{release:c,workspaceId:t.workspaceId}),(0,U.jsx)(Re,{release:c})]}),(0,U.jsxs)(`section`,{"aria-labelledby":`release-evidence-title`,className:Y.section,id:`release-evidence`,children:[(0,U.jsx)(A,{as:`h2`,id:`release-evidence-title`,variant:`section-title`,children:`Evidence`}),(0,U.jsx)(Q,{release:c})]}),(0,U.jsxs)(`section`,{"aria-labelledby":`release-agent`,className:Y.section,children:[(0,U.jsx)(A,{as:`h2`,id:`release-agent`,variant:`section-title`,children:`Release agent`}),(0,U.jsx)($,{release:c})]})]})},Ke=()=>{let e=r(),t=n();if(e.controller.state._tag!==`ready`)return(0,U.jsx)(X,{context:e});let i=ze(e,t.releaseId);return i===null?(0,U.jsx)(Be,{workspaceId:e.workspaceId}):(0,U.jsx)(Ge,{selection:i})};export{Z as ReleaseAction,$ as ReleaseAgentEntry,Q as ReleaseEvidence,Ke as ReleaseFullRoute,We as ReleasePreviewRoute,Re as t};
2
+ //# sourceMappingURL=ReleaseRoute-1bUQCSJi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReleaseRoute-1bUQCSJi.js","names":["Effect.gen","Crypto.Crypto","Schema.decodeUnknownEffect","RelationshipRepairProposalIdSchema","Effect.runPromise","Effect.provide","FetchHttpClient.layer","BrowserCrypto.layer","actions","useRef","useState","Button","Text","StatePanel","StateLabel","Surface","styles","Effect.gen","Crypto.Crypto","Schema.decodeUnknownEffect","RelationshipRepairReviewIdSchema","Effect.runPromise","Effect.provide","FetchHttpClient.layer","BrowserCrypto.layer","Predicate.isTagged","ignoreSessionExpired","DateTime.Order","useState","useRef","useCallback","Person","styles","DateTime.formatUtc","useState","useRef","Surface","StateLabel","Text","_Fragment","StatePanel","Button","Field","Skeleton","useRef","styles","StatePanel","Button","Surface","ServiceMark","Text","StateLabel","AgentContextButton","PeopleStrip","useState","ReleasePreview","StageRail","ReleaseRelay","FreshnessStamp","Verdict","__toESM","useParams","useOutletContext","useLocation","useNavigate","Le","V","Je","He","ve","require_jsx_runtime","useViewTransitionState","workspaceItemsPath","useBrowserSession","releaseActiveWorkPath","releaseAgentPath","releasePreviewPath","releaseParentPath","releaseFullPath","Link","cr","or","me","ht","Ke","gr","L","P","z","z$1","se","runPromise","Order","isTagged","decodeUnknownEffect","formatUtc","provide","gen","RelationshipRepairProposalId","RelationshipRepairReviewId","Crypto","layer","layer$1","makeControlCenterApiClient","readReleaseOrigin","releaseTransitionNames","resolveReleaseOrigin","decodeReleaseRouteId","releaseOriginHref","makeAuthenticatedMutationClient","loadReleaseEnvironmentSlices","ReleaseWorkset","usePrefersReducedReleaseMotion","useCompactReleasePreview","import_react","require_react","makeRelationshipRepairProposalId","uuid","browserRelationshipRepairCandidateTransport","draft","environmentId","RelationshipRepairCandidatePicker_module_default","import_jsx_runtime","titleCase","value","candidateTitle","candidate","aggregateCandidatePages","seen","candidates","pages","page","identity","truncated","PickerResult","result","stateTag","announce","RelationshipRepairCandidatePicker","state","setState","request","actorId","session","authorityScope","environmentScopeKey","environmentIds","releaseId","run","abort","effect","onSuccess","onFailure","discover","transport","signal","select","refreshCandidate","item","staleCandidate","create","pendingProposalId","proposalId","onCreated","isCreating","makeRelationshipRepairReviewId","browserRelationshipRepairTransport","isUnauthorizedFailure","ignoreSessionExpired$1","proposalOrder","proposedAtOrder","right","left","aggregateProposalPages","proposalsById","applicationsByProposalId","proposal","application","orderedProposals","proposals","applications","useRelationshipRepairProposals","requestRevision","setRequestRevision","actionAbort","busyProposal","pendingReviews","stateRef","sessionKey","failure","onSessionExpired","currentState","beginAction","current","finishAction","review","pending","intent","decision","rationale","revision","RelationshipRepairPanel_module_default","ignoreSessionExpired","shortId","id","isSameActor","actorPerson","collaborator","release","actor","ActorIdentity","role","statusPresentation","formattedTime","timestamp","ProposalRow","isReviewing","setIsReviewing","setRationale","announcement","setAnnouncement","statusRef","status","canReview","mutationsEnabled","canApply","reviewRationale","onReview","apply","onApply","actionFailed","onRetry","event","controlProps","isGloballyBusy","isBusy","LoadingPanel","RelationshipRepairPanelView","sessionScopeKey","relationshipRepairSessionAccess","RelationshipRepairPanelContent","access","browserSessionState","controller","RelationshipRepairPanel","browserSession","ReleaseRoute_module_default","selectRelease","routeReleaseId","context","ReleaseNotFound","workspaceId","ReleaseRouteLoading","PortfolioOverviewView","ReleaseAction","location","action","ReleaseEvidence","releaseContextLabel","ReleaseAgentEntry","navigate","prefersReducedMotion","CompleteCollaborators","ReleasePreviewContent","isCompact","exit","setExit","isOpen","setIsOpen","resolvedOrigin","selection","originHref","fullPath","agentPath","previewPath","isPreviewTransitioning","isFullTransitioning","isAgentTransitioning","transitionNames","requestOrigin","open","ReleasePreviewRoute","params","FullRelease","headingRef","origin","originLabel","ReleaseFullRoute"],"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 FetchHttpClient from \"effect/http/FetchHttpClient\"\nimport * as Schema from \"effect/Schema\"\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 FetchHttpClient from \"effect/http/FetchHttpClient\"\nimport * as Schema from \"effect/Schema\"\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 {\n Button,\n Field,\n type RlyStateTone,\n Skeleton,\n StateLabel,\n StatePanel,\n Surface,\n Text\n} 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\ninterface RepairStatusPresentation {\n readonly label: string\n readonly tone: RlyStateTone\n}\n\nconst statusPresentation = (\n proposal: RelationshipRepairProposal,\n application: RelationshipRepairApplication | undefined\n): RepairStatusPresentation => {\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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"}
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-Cvdyeg_0.js";import{s as n,u as r}from"./hooks-CGvBGjhq.js";import{a as i,d as a,f as o,r as s,v as c}from"./Dialog-_t9OodCK-CzkLh9VB.js";import{t as l}from"./jsx-runtime-NZYk81nU.js";import{b as u,w as d,x as f,y as p}from"./index-BHQ_NP1r.js";import{n as m,p as h}from"./patterns-D0U0WCQS.js";import{n as g}from"./primitives-CjQX0eVM-BPKvllZ_.js";import{Dn as _,Ei as v,Ka as y,Kr as b,Kt as x,Nn as S,Oa as C,Si as w,Wa as ee,mi as T,pi as te,qn as ne,tn as re}from"./agent-api-0YXZd1ag.js";import{a as E,t as D}from"./client-C9AVNoed.js";import{n as O}from"./workspaceEntityPaths-xAl2jRFm.js";import{n as k,t as A}from"./workspaceScrollCapture-AJpPgzgz.js";import{r as ie,t as j}from"./confluenceTasks-DElhwVeZ.js";import{n as M,t as ae}from"./WorkspaceEntityLink-DjonIGqM.js";var N=e(t(),1),oe=e=>e._tag!==`missing`&&e._tag!==`rejected`&&e._tag!==`superseded`,se=e=>/(?:^|[\s_-])(?:approval|approve)(?:$|[\s_-])/iu.test(e)||/release[\s_-]*gate/iu.test(e),ce=e=>{let t=new Map(e.nodes.map(e=>[e.nodeId,e])),n=new Map(e.entityProjections.map(({projection:e})=>[e.entityId,e])),r=new Set(e.relationships.flatMap(e=>{if(e.kind!==`delivered-by`||e.sourceNodeKind!==`pull-request`||e.targetNodeKind!==`pipeline-execution`||!oe(e.lifecycle))return[];let n=t.get(e.sourceNodeId),r=t.get(e.targetNodeId);return n?.resolution._tag===`resolved`&&n.resolution.target._tag===`entity`&&r?.resolution._tag===`resolved`&&r.resolution.target._tag===`entity`?[r.resolution.target.entityId]:[]})),i=0,a=[];for(let e of r){let t=n.get(e),r=t?.details;if(t?.entityState!==`present`||t.entityType!==`pipeline-execution`||r?._tag!==`pipeline-execution`){i+=1;continue}let o=new Set((r.actions??[]).flatMap(e=>e.category?.toLocaleLowerCase(`en-US`)===`approval`||e.provider?.toLocaleLowerCase(`en-US`)===`manual`?[e.stageName]:[])),s=(r.stages??[]).filter(e=>o.has(e.name)||se(e.name)),c=s.some(e=>{if(e.status!==`running`)return!1;let t=(r.actions??[]).filter(t=>t.stageName===e.name&&(t.category?.toLocaleLowerCase(`en-US`)===`approval`||t.provider?.toLocaleLowerCase(`en-US`)===`manual`));return t.length===0||t.some(({status:e})=>e===`running`)});a.push({entityId:e,pipelineName:r.pipelineName,state:s.length===0?`missing`:c?`waiting`:`not-waiting`})}return{affected:r.size,gates:a,missing:a.filter(({state:e})=>e===`missing`).length,notWaiting:a.filter(({state:e})=>e===`not-waiting`).length,ready:!e.truncated&&i===0&&a.every(({state:e})=>e===`waiting`),unverifiablePipelines:i,waiting:a.filter(({state:e})=>e===`waiting`).length}},le=(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=>{switch(e.reviewState){case`approved`:case`changes-requested`:case`merged`:return F(e.reviewState);case`not-requested`:case`requested`:return e.lifecycle===`merged`?`Merged`:e.lifecycle===`closed`?`Closed`:F(e.reviewState)}},L=e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`,R=e=>e.split(`-`).map(e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`).join(` `),ue=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`}},de=e=>{switch(e._tag){case`issue`:return e.status;case`pull-request`:return I(e);case`page`:case`deployment`:return R(e.status);case`pipeline-execution`:return L(e.status);case`time-entry`:return R(e.approvalState)}},fe=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`}]}},z=e=>{let t=de(e.details);return{facts:fe(e.details),id:e.entityId,kind:e.entityType,label:e.displayKey,service:ue(e.entityType),status:t,title:e.title,tone:P(t)}},B=(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:z(n)},V=e=>e.lifecycle._tag!==`missing`&&e.lifecycle._tag!==`rejected`&&e.lifecycle._tag!==`superseded`,pe=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`},H=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]]}))},me=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`}},he=e=>{switch(e._tag){case`confirmed`:return`Confirmed`;case`inferred`:return`Inferred ${String(Math.round(e.score*100))}%`;case`unknown`:return`Confidence unknown`}},ge=(e,t,n,r)=>{let i=r.get(n);if(i!==void 0){let e=z(i);return{href:i.entityState===`present`?O(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 ${R(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`}},_e=(e,t,n)=>{let r=B(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=H(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:he(n.confidence),detailsHref:le(t,e.releaseId,r.id,n.relationshipId),direction:o,evidenceCount:n.evidenceClaimIds.length,id:n.relationshipId,kind:n.kind,lifecycle:R(n.lifecycle._tag),other:ge(e,t,s,a),tone:me(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}},ve=(e,t,n)=>{if(n===null||t===null||B(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},U=(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]})},ye=(e,t)=>{let n=new Set;for(let r of U(e,t))n.add(r.evidenceId);return[...n].sort((e,t)=>e.localeCompare(t))},be=(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`||!V(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]:[]}))},xe=(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`},Se=(e,t)=>{let n=H(e),r=be(e,n),i=e=>O(t,e.entityId),a=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`issue`&&e.details._tag===`issue`&&e.entityState===`present`),o=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`pull-request`&&e.details._tag===`pull-request`&&e.entityState===`present`),s=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`pipeline-execution`&&e.details._tag===`pipeline-execution`&&e.entityState===`present`),c=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`page`&&e.details._tag===`page`&&e.entityState===`present`&&r.has(e.entityId)),l=c.flatMap(e=>e.details.contentState===`loaded`?j(e.details.content?.markdown??``).tasks.flatMap(t=>t.checked?[]:[{id:`${e.entityId}:confluence-task:${String(t.lineNumber)}`,label:t.label,reason:`Confluence task on ${e.title} is not complete.`,service:`confluence`}]):[{id:`${e.entityId}:confluence-tasks-unavailable`,label:`${e.title} tasks are not synchronized`,reason:`Release readiness cannot be verified until the Confluence page body is synchronized.`,service:`confluence`}]),u=ce(e),d=u.gates.flatMap(e=>e.state===`waiting`?[]:[{id:`${e.entityId}:release-approval-gate`,label:e.state===`missing`?`${e.pipelineName} has no release approval gate`:`${e.pipelineName} is not waiting for Stage approval`,reason:e.state===`missing`?`Every pipeline delivering this release must contain an observed manual approval stage.`:`The affected pipeline must wait at its manual approval stage before release publication.`,service:`codepipeline`}]),f=u.unverifiablePipelines===0?[]:[{id:`release-pipelines-unverifiable`,label:`Affected pipeline approval state is unavailable`,reason:`Release readiness cannot be verified until every affected pipeline is synchronized.`,service:`codepipeline`}];return{jiraItems:a.map(e=>({id:e.entityId,key:e.details.key,title:e.title,state:e.details.status,tone:P(e.details.status),href:i(e)})),pullRequestGroups:o.map(t=>{let r=new Set(Array.from(n).flatMap(([e,n])=>n.entityId===t.entityId?[e]:[])),a=Array.from(new Set(e.relationships.flatMap(e=>{if(e.kind!==`implements`||!r.has(e.sourceNodeId)||!V(e))return[];let t=n.get(e.targetNodeId);return t?.details._tag===`issue`?[t.details.key]:[]}))),o=I(t.details);return{id:t.entityId,title:t.title,reference:t.displayKey,state:o,tone:P(o),href:i(t),linkedJiraKeys:a}}),gaps:[...e.relationships.flatMap(e=>e.lifecycle._tag===`missing`?[{id:e.relationshipId,label:xe(e,n),reason:e.lifecycle.reason,service:pe(e)}]:[]),...l,...d,...f],pipelines:s.map(e=>{let t=L(e.details.status);return{id:e.entityId,title:e.title,reference:e.displayKey,state:t,tone:P(t),href:i(e),stages:ie(e.details.stages)}}),runbooks:c.map(e=>{let t=j(e.details.content?.markdown??``);return{completedTasks:t.completed,href:i(e),id:e.entityId,reference:e.displayKey,state:e.details.status,title:e.title,totalTasks:t.total}}),truncated:e.truncated}},W={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`},Ce=y(`UnauthorizedApiError`),we={load:(e,t,n)=>v(T(function*(){let n=yield*D(),r=yield*n.deliveryGraph.relationshipHistory({params:{relationshipId:e}});return{evidence:yield*te(t,e=>n.deliveryGraph.evidence({params:{evidenceId:e}}),{concurrency:4}),history:r}}).pipe(w(E)),{signal:n})},Te=(e,t,n,r,i=we)=>{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||(Ce(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}},G=l(),K=e=>e.split(`-`).map(e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`).join(` `),q=e=>b(e,{day:`2-digit`,hour:`2-digit`,hour12:!1,locale:`en-GB`,minute:`2-digit`,month:`short`,year:`numeric`}),J=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}`}},Ee=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)}`}},De=e=>{switch(e.confidence._tag){case`confirmed`:return`Confirmed by immutable evidence.`;case`inferred`:case`unknown`:return e.confidence.rationale}},Oe=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`}},Y=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`}},ke=e=>e.scope===null?`Workspace`:e.scope._tag===`release`?`Release · ${e.scope.releaseId.slice(-6)}`:`Environment · ${e.scope.environmentId.slice(-6)}`,Ae=e=>{switch(e.freshness._tag){case`current`:return`positive`;case`stale`:return`caution`;case`missing`:case`unavailable`:return`critical`}},je=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}},X=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}`}},Me=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)}`}},Ne=({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,G.jsxs)(`article`,{className:W.evidenceCard,children:[(0,G.jsxs)(`div`,{className:W.evidenceHeading,children:[(0,G.jsxs)(g,{as:`h4`,variant:`label`,children:[`Evidence `,a.evidenceId.slice(-6)]}),(0,G.jsx)(c,{label:K(a.freshness._tag),size:`compact`,tone:Ae(a)})]}),(0,G.jsxs)(`dl`,{className:W.facts,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Observed`}),(0,G.jsx)(`dd`,{children:q(a.observedAt)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Source`}),(0,G.jsx)(`dd`,{children:X(a.attribution)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Verified by`}),(0,G.jsx)(`dd`,{children:X(a.verifier)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Retention`}),(0,G.jsxs)(`dd`,{children:[K(a.retention.classification),a.retention.legalHold?` · Legal hold`:``]})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Valid until`}),(0,G.jsx)(`dd`,{children:a.validUntil===null?`No expiry recorded`:q(a.validUntil)})]})]}),i.length===0?(0,G.jsx)(g,{tone:`secondary`,variant:`meta`,children:`No referenced claim was returned for this observation.`}):(0,G.jsx)(`ul`,{className:W.claims,children:i.map(e=>(0,G.jsxs)(`li`,{children:[(0,G.jsx)(g,{as:`span`,variant:`label`,children:K(e.predicate)}),(0,G.jsx)(g,{as:`span`,tone:`secondary`,children:Me(e)})]},e.evidenceClaimId))})]})},Pe=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`}`},Fe=({claims:e,evidenceIds:t,onClose:n,onSessionExpired:r,relationship:l,sessionKey:u,transport:d})=>{let f=Te(l?.relationshipId??null,t,u,r,d),p=l===null?`Relationship details`:`${K(l.kind)} relationship`,m=l===null||e.length===l.evidenceClaimIds.length;return(0,G.jsx)(o.Root,{onOpenChange:e=>{e||n()},open:l!==null,children:(0,G.jsx)(o.Content,{closeLabel:`Close ${p}`,description:`Immutable delivery history and the evidence used to establish this connection.`,title:p,children:(0,G.jsx)(o.Body,{className:W.body,children:l===null||f.state._tag===`idle`||f.state._tag===`loading`?(0,G.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading relationship details`,className:W.loading,children:[(0,G.jsx)(i,{height:`7rem`}),(0,G.jsx)(i,{height:`12rem`})]}):f.state._tag===`failed`?(0,G.jsx)(s,{action:(0,G.jsx)(a,{onClick:f.retry,children:`Try again`}),description:`The selected relationship remains unchanged. Its history could not be loaded.`,title:`Relationship details unavailable`,tone:`caution`}):(0,G.jsxs)(`div`,{className:W.content,children:[(0,G.jsxs)(`section`,{"aria-labelledby":`relationship-summary-title`,className:W.summary,children:[(0,G.jsxs)(`div`,{className:W.summaryHeading,children:[(0,G.jsxs)(g,{as:`h3`,id:`relationship-summary-title`,variant:`section-title`,children:[l.sourceNodeKind,` → `,l.targetNodeKind]}),(0,G.jsxs)(`div`,{className:W.tags,children:[(0,G.jsx)(c,{label:K(l.lifecycle._tag),size:`compact`,tone:Y(l)}),(0,G.jsx)(c,{label:Oe(l),size:`compact`,tone:`neutral`})]})]}),(0,G.jsx)(g,{tone:`secondary`,children:De(l)}),(0,G.jsxs)(`dl`,{className:W.facts,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Revision`}),(0,G.jsx)(`dd`,{children:String(l.revision)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Recorded by`}),(0,G.jsx)(`dd`,{children:J(l.recordedBy)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Origin`}),(0,G.jsx)(`dd`,{children:Ee(l.provenance)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Scope`}),(0,G.jsx)(`dd`,{children:ke(l)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Recorded`}),(0,G.jsx)(`dd`,{children:q(l.recordedAt)})]})]})]}),(0,G.jsxs)(`section`,{"aria-labelledby":`relationship-history-title`,className:W.section,children:[(0,G.jsxs)(`div`,{className:W.sectionHeading,children:[(0,G.jsx)(g,{as:`h3`,id:`relationship-history-title`,variant:`label`,children:`History`}),(0,G.jsx)(c,{label:Pe(f.state.details.history.revisions),size:`compact`,tone:`neutral`})]}),f.state.details.history.revisions.length===0?(0,G.jsx)(g,{tone:`secondary`,children:`No immutable ledger revisions were returned.`}):(0,G.jsx)(`ol`,{className:W.history,children:f.state.details.history.revisions.map(e=>{let t=je(e);return(0,G.jsxs)(`li`,{children:[(0,G.jsxs)(`div`,{className:W.historyHeading,children:[(0,G.jsxs)(g,{as:`span`,variant:`label`,children:[`Revision `,String(e.revision)]}),(0,G.jsx)(c,{label:K(e.lifecycle._tag),size:`compact`,tone:Y(e)})]}),(0,G.jsxs)(g,{tone:`secondary`,variant:`meta`,children:[J(e.recordedBy),` ·`,` `,q(e.recordedAt)]}),t===null?null:(0,G.jsx)(g,{tone:`secondary`,children:t})]},`${e.relationshipId}:${String(e.revision)}`)})})]}),(0,G.jsxs)(`section`,{"aria-labelledby":`relationship-evidence-title`,className:W.section,children:[(0,G.jsxs)(`div`,{className:W.sectionHeading,children:[(0,G.jsx)(g,{as:`h3`,id:`relationship-evidence-title`,variant:`label`,children:`Evidence`}),(0,G.jsx)(c,{label:`${String(f.state.details.evidence.length)} observation${f.state.details.evidence.length===1?``:`s`}`,size:`compact`,tone:`neutral`})]}),m?null:(0,G.jsxs)(`div`,{className:W.integrity,children:[(0,G.jsx)(c,{label:`Evidence incomplete`,size:`compact`,tone:`critical`}),(0,G.jsx)(g,{tone:`secondary`,children:`One or more referenced claims are missing from the release slice. Refresh before relying on this relationship.`})]}),f.state.details.evidence.length===0?(0,G.jsx)(g,{tone:`secondary`,children:`No immutable evidence is attached to this relationship revision.`}):(0,G.jsx)(`div`,{className:W.evidence,children:f.state.details.evidence.map(t=>(0,G.jsx)(Ne,{claims:e,inspection:t,relationship:l},t.evidence.evidenceId))})]})]})})})})},Ie=S({_tag:_(`relationship-detail-origin/v1`),objectId:x,relationshipId:re}),Le=S({relationshipDetailOrigin:Ie}),Re=(e,t,n)=>({...ee(e)&&e,relationshipDetailOrigin:{_tag:`relationship-detail-origin/v1`,objectId:t,relationshipId:n}}),ze=(e,t,n)=>{let r=ne(Le)(e);return C(r)&&r.value.relationshipDetailOrigin.objectId===t&&r.value.relationshipDetailOrigin.relationshipId===n},Be=(e,t,n,r)=>{if(ze(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})},Z={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`},Ve=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,He=(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()]}},Ue=y(`UnauthorizedApiError`),We=async(e,t,n,r)=>Ve(t,t=>r.load(e,t,n)),Ge={load:(e,t,n)=>v(T(function*(){return yield*(yield*D()).deliveryGraph.releaseSlice({params:{releaseId:e},query:t===null?{}:{environmentId:t}})}).pipe(w(E)),{signal:n})},Ke=(e,t,n,r,i=Ge)=>{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}),We(e,t,a.signal,i).then(t=>{a.signal.aborted||c({_tag:`ready`,environmentScopeKey:l,inspection:He(e,t),releaseId:e,sessionKey:n})},t=>{a.signal.aborted||(Ue(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}},qe=()=>(0,G.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading release work`,className:Z.loading,children:[(0,G.jsx)(i,{height:`3rem`}),(0,G.jsx)(i,{height:`15rem`})]}),Je=({linkLocation:e,selectedObject:t,trace:n})=>(0,G.jsxs)(`section`,{"aria-label":`Selected ${t.kind} ${t.label}`,className:Z.selected,children:[(0,G.jsxs)(`div`,{className:Z.selectedHeading,children:[(0,G.jsx)(m,{service:t.service,size:`compact`}),(0,G.jsxs)(g,{as:`p`,variant:`label`,children:[`Selected object · `,t.label]}),(0,G.jsx)(c,{label:t.status,size:`compact`,tone:t.tone})]}),(0,G.jsx)(g,{as:`h3`,variant:`section-title`,children:t.title}),(0,G.jsx)(g,{tone:`secondary`,variant:`meta`,children:t.kind}),(0,G.jsx)(`dl`,{className:Z.selectedFacts,children:t.facts.map(e=>(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:e.label}),(0,G.jsx)(`dd`,{children:e.value})]},e.label))}),n===void 0?null:(0,G.jsxs)(`div`,{className:Z.trace,children:[(0,G.jsxs)(`div`,{className:Z.traceHeading,children:[(0,G.jsx)(g,{as:`h4`,variant:`label`,children:`Delivery trace`}),(0,G.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,G.jsx)(g,{tone:`secondary`,children:`No relationship touches this object in the current release slice.`}):(0,G.jsx)(`ul`,{className:Z.traceList,children:n.relationships.map(n=>(0,G.jsxs)(`li`,{children:[n.other.service===null?null:(0,G.jsx)(m,{service:n.other.service,size:`compact`}),(0,G.jsxs)(`div`,{className:Z.traceConnection,children:[(0,G.jsxs)(g,{as:`p`,variant:`label`,children:[n.direction===`incoming`?`From`:`To`,` `,n.other.label]}),n.other.href===null?(0,G.jsx)(g,{tone:`secondary`,children:n.other.title}):(0,G.jsx)(d,{onClick:t=>{let r=n.other.href;e!==void 0&&r!==null&&M(r,e)!==void 0&&k(t,t.currentTarget.target)&&A(e,r)},state:e===void 0?void 0:M(n.other.href,e),to:n.other.href,children:n.other.title})]}),(0,G.jsxs)(`div`,{className:Z.traceRelation,children:[(0,G.jsx)(g,{as:`span`,tone:`secondary`,variant:`meta`,children:n.kind}),(0,G.jsx)(c,{label:n.lifecycle,size:`compact`,tone:n.tone})]}),(0,G.jsxs)(g,{as:`span`,tone:`secondary`,variant:`meta`,children:[n.confidence,` · `,n.evidenceCount,` evidence claim`,n.evidenceCount===1?``:`s`]}),(0,G.jsx)(d,{"aria-label":`Details for ${n.kind} ${n.direction} relationship with ${n.other.label}`,className:Z.traceDetails,state:Re(e?.state,t.id,n.id),to:n.detailsHref,children:`Details`})]},n.id))})]})]}),$=p,Ye=({release:e,workspaceId:t})=>{let i=u(),o=n(),l=r(),p=$(i.state),_=Ke(e.id,e.targetEnvironmentIds,p,i.invalidateSession);if(p===null||_.state._tag===`idle`||_.state._tag===`loading`)return(0,G.jsx)(qe,{});if(_.state._tag===`failed`)return(0,G.jsx)(s,{action:(0,G.jsx)(a,{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=Se(_.state.inspection,t),y=new URLSearchParams(o.search),b=y.get(`object`),x=y.get(`relationship`),S=B(_.state.inspection,b),C=_e(_.state.inspection,t,b),w=ve(_.state.inspection,b,x),ee=ye(_.state.inspection,w),T=U(_.state.inspection,w);return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:Z.root,children:[(0,G.jsxs)(`div`,{className:Z.context,children:[(0,G.jsxs)(`div`,{className:Z.contextGroup,children:[(0,G.jsx)(g,{as:`h3`,variant:`label`,children:`Environment`}),e.targetEnvironmentIds.length===0?(0,G.jsx)(g,{tone:`secondary`,children:`No target environment recorded.`}):(0,G.jsx)(`div`,{className:Z.tags,children:e.targetEnvironmentIds.map(e=>(0,G.jsx)(c,{label:`Unknown target · ${e.slice(-4)}`,size:`compact`,title:`Environment ${e}; provider metadata unavailable`,tone:`neutral`},e))})]}),(0,G.jsxs)(`div`,{className:Z.contextGroup,children:[(0,G.jsxs)(`div`,{className:Z.contextHeading,children:[(0,G.jsx)(m,{service:`confluence`,size:`compact`}),(0,G.jsx)(g,{as:`h3`,variant:`label`,children:`Runbook`})]}),v.runbooks.length===0?(0,G.jsx)(g,{tone:`secondary`,children:`No runbook linked.`}):(0,G.jsx)(`div`,{className:Z.runbooks,children:v.runbooks.map(e=>(0,G.jsxs)(d,{className:Z.runbook,onClick:t=>{M(e.href,o)!==void 0&&k(t,t.currentTarget.target)&&A(o,e.href)},state:M(e.href,o),to:e.href,children:[(0,G.jsx)(`strong`,{children:e.title}),(0,G.jsxs)(`span`,{children:[e.reference,e.totalTasks===0?``:` · ${String(e.completedTasks)}/${String(e.totalTasks)} tasks`]})]},e.id))})]}),v.truncated?(0,G.jsx)(c,{label:`Bounded view · more records exist`,size:`compact`,tone:`caution`}):null,S===null||C===null?null:(0,G.jsx)(Je,{linkLocation:o,selectedObject:S,trace:C})]}),(0,G.jsx)(f,{component:ae,children:(0,G.jsx)(h,{gaps:v.gaps,heading:`${e.serviceName} release work`,jiraItems:v.jiraItems,pipelines:v.pipelines,pullRequestGroups:v.pullRequestGroups})})]}),(0,G.jsx)(Fe,{claims:T,evidenceIds:ee,onClose:()=>{S!==null&&w!==null&&Be(l,o,S.id,w.relationshipId)},onSessionExpired:i.invalidateSession,relationship:w,sessionKey:p})]})};export{$ as n,Ve as r,Ye as t};
2
- //# sourceMappingURL=ReleaseWorkset-DcI6qwPE.js.map
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-Cvdyeg_0.js";import{s as n,u as r}from"./hooks-CGvBGjhq.js";import{a as i,d as a,f as o,r as s,v as c}from"./Dialog-_t9OodCK-CzkLh9VB.js";import{t as l}from"./jsx-runtime-NZYk81nU.js";import{b as u,w as d,x as f,y as p}from"./index-DlDEYM2e.js";import{i as m,y as h}from"./patterns-CJ4c7F5A.js";import{t as g}from"./primitives-Dj-qYrUZ-BIf5RLs4.js";import{Dn as _,Ei as v,Ka as y,Kr as b,Kt as x,Nn as S,Oa as C,Si as w,Wa as ee,mi as T,pi as te,qn as ne,tn as re}from"./agent-api-0YXZd1ag.js";import{a as E,t as D}from"./client-C9AVNoed.js";import{n as O}from"./workspaceEntityPaths-xAl2jRFm.js";import{n as k,t as A}from"./workspaceScrollCapture-Dg3Pebh8.js";import{r as ie,t as j}from"./confluenceTasks-DElhwVeZ.js";import{n as M,t as ae}from"./WorkspaceEntityLink-BqUurz8P.js";var N=e(t(),1),oe=e=>e._tag!==`missing`&&e._tag!==`rejected`&&e._tag!==`superseded`,se=e=>/(?:^|[\s_-])(?:approval|approve)(?:$|[\s_-])/iu.test(e)||/release[\s_-]*gate/iu.test(e),ce=e=>{let t=new Map(e.nodes.map(e=>[e.nodeId,e])),n=new Map(e.entityProjections.map(({projection:e})=>[e.entityId,e])),r=new Set(e.relationships.flatMap(e=>{if(e.kind!==`delivered-by`||e.sourceNodeKind!==`pull-request`||e.targetNodeKind!==`pipeline-execution`||!oe(e.lifecycle))return[];let n=t.get(e.sourceNodeId),r=t.get(e.targetNodeId);return n?.resolution._tag===`resolved`&&n.resolution.target._tag===`entity`&&r?.resolution._tag===`resolved`&&r.resolution.target._tag===`entity`?[r.resolution.target.entityId]:[]})),i=0,a=[];for(let e of r){let t=n.get(e),r=t?.details;if(t?.entityState!==`present`||t.entityType!==`pipeline-execution`||r?._tag!==`pipeline-execution`){i+=1;continue}let o=new Set((r.actions??[]).flatMap(e=>e.category?.toLocaleLowerCase(`en-US`)===`approval`||e.provider?.toLocaleLowerCase(`en-US`)===`manual`?[e.stageName]:[])),s=(r.stages??[]).filter(e=>o.has(e.name)||se(e.name)),c=s.some(e=>{if(e.status!==`running`)return!1;let t=(r.actions??[]).filter(t=>t.stageName===e.name&&(t.category?.toLocaleLowerCase(`en-US`)===`approval`||t.provider?.toLocaleLowerCase(`en-US`)===`manual`));return t.length===0||t.some(({status:e})=>e===`running`)});a.push({entityId:e,pipelineName:r.pipelineName,state:s.length===0?`missing`:c?`waiting`:`not-waiting`})}return{affected:r.size,gates:a,missing:a.filter(({state:e})=>e===`missing`).length,notWaiting:a.filter(({state:e})=>e===`not-waiting`).length,ready:!e.truncated&&i===0&&a.every(({state:e})=>e===`waiting`),unverifiablePipelines:i,waiting:a.filter(({state:e})=>e===`waiting`).length}},le=(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=>{switch(e.reviewState){case`approved`:case`changes-requested`:case`merged`:return F(e.reviewState);case`not-requested`:case`requested`:return e.lifecycle===`merged`?`Merged`:e.lifecycle===`closed`?`Closed`:F(e.reviewState)}},L=e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`,R=e=>e.split(`-`).map(e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`).join(` `),ue=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`}},de=e=>{switch(e._tag){case`issue`:return e.status;case`pull-request`:return I(e);case`page`:case`deployment`:return R(e.status);case`pipeline-execution`:return L(e.status);case`time-entry`:return R(e.approvalState)}},fe=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`}]}},z=e=>{let t=de(e.details);return{facts:fe(e.details),id:e.entityId,kind:e.entityType,label:e.displayKey,service:ue(e.entityType),status:t,title:e.title,tone:P(t)}},B=(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:z(n)},V=e=>e.lifecycle._tag!==`missing`&&e.lifecycle._tag!==`rejected`&&e.lifecycle._tag!==`superseded`,pe=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`},H=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]]}))},me=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`}},he=e=>{switch(e._tag){case`confirmed`:return`Confirmed`;case`inferred`:return`Inferred ${String(Math.round(e.score*100))}%`;case`unknown`:return`Confidence unknown`}},ge=(e,t,n,r)=>{let i=r.get(n);if(i!==void 0){let e=z(i);return{href:i.entityState===`present`?O(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 ${R(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`}},_e=(e,t,n)=>{let r=B(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=H(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:he(n.confidence),detailsHref:le(t,e.releaseId,r.id,n.relationshipId),direction:o,evidenceCount:n.evidenceClaimIds.length,id:n.relationshipId,kind:n.kind,lifecycle:R(n.lifecycle._tag),other:ge(e,t,s,a),tone:me(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}},ve=(e,t,n)=>{if(n===null||t===null||B(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},U=(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]})},ye=(e,t)=>{let n=new Set;for(let r of U(e,t))n.add(r.evidenceId);return[...n].sort((e,t)=>e.localeCompare(t))},be=(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`||!V(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]:[]}))},xe=(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`},Se=(e,t)=>{let n=H(e),r=be(e,n),i=e=>O(t,e.entityId),a=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`issue`&&e.details._tag===`issue`&&e.entityState===`present`),o=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`pull-request`&&e.details._tag===`pull-request`&&e.entityState===`present`),s=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`pipeline-execution`&&e.details._tag===`pipeline-execution`&&e.entityState===`present`),c=e.entityProjections.map(({projection:e})=>e).filter(e=>e.entityType===`page`&&e.details._tag===`page`&&e.entityState===`present`&&r.has(e.entityId)),l=c.flatMap(e=>e.details.contentState===`loaded`?j(e.details.content?.markdown??``).tasks.flatMap(t=>t.checked?[]:[{id:`${e.entityId}:confluence-task:${String(t.lineNumber)}`,label:t.label,reason:`Confluence task on ${e.title} is not complete.`,service:`confluence`}]):[{id:`${e.entityId}:confluence-tasks-unavailable`,label:`${e.title} tasks are not synchronized`,reason:`Release readiness cannot be verified until the Confluence page body is synchronized.`,service:`confluence`}]),u=ce(e),d=u.gates.flatMap(e=>e.state===`waiting`?[]:[{id:`${e.entityId}:release-approval-gate`,label:e.state===`missing`?`${e.pipelineName} has no release approval gate`:`${e.pipelineName} is not waiting for Stage approval`,reason:e.state===`missing`?`Every pipeline delivering this release must contain an observed manual approval stage.`:`The affected pipeline must wait at its manual approval stage before release publication.`,service:`codepipeline`}]),f=u.unverifiablePipelines===0?[]:[{id:`release-pipelines-unverifiable`,label:`Affected pipeline approval state is unavailable`,reason:`Release readiness cannot be verified until every affected pipeline is synchronized.`,service:`codepipeline`}];return{jiraItems:a.map(e=>({id:e.entityId,key:e.details.key,title:e.title,state:e.details.status,tone:P(e.details.status),href:i(e)})),pullRequestGroups:o.map(t=>{let r=new Set(Array.from(n).flatMap(([e,n])=>n.entityId===t.entityId?[e]:[])),a=Array.from(new Set(e.relationships.flatMap(e=>{if(e.kind!==`implements`||!r.has(e.sourceNodeId)||!V(e))return[];let t=n.get(e.targetNodeId);return t?.details._tag===`issue`?[t.details.key]:[]}))),o=I(t.details);return{id:t.entityId,title:t.title,reference:t.displayKey,state:o,tone:P(o),href:i(t),linkedJiraKeys:a}}),gaps:[...e.relationships.flatMap(e=>e.lifecycle._tag===`missing`?[{id:e.relationshipId,label:xe(e,n),reason:e.lifecycle.reason,service:pe(e)}]:[]),...l,...d,...f],pipelines:s.map(e=>{let t=L(e.details.status);return{id:e.entityId,title:e.title,reference:e.displayKey,state:t,tone:P(t),href:i(e),stages:ie(e.details.stages)}}),runbooks:c.map(e=>{let t=j(e.details.content?.markdown??``);return{completedTasks:t.completed,href:i(e),id:e.entityId,reference:e.displayKey,state:e.details.status,title:e.title,totalTasks:t.total}}),truncated:e.truncated}},W={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`},Ce=y(`UnauthorizedApiError`),we={load:(e,t,n)=>v(T(function*(){let n=yield*D(),r=yield*n.deliveryGraph.relationshipHistory({params:{relationshipId:e}});return{evidence:yield*te(t,e=>n.deliveryGraph.evidence({params:{evidenceId:e}}),{concurrency:4}),history:r}}).pipe(w(E)),{signal:n})},Te=(e,t,n,r,i=we)=>{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||(Ce(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}},G=l(),K=e=>e.split(`-`).map(e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`).join(` `),q=e=>b(e,{day:`2-digit`,hour:`2-digit`,hour12:!1,locale:`en-GB`,minute:`2-digit`,month:`short`,year:`numeric`}),J=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}`}},Ee=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)}`}},De=e=>{switch(e.confidence._tag){case`confirmed`:return`Confirmed by immutable evidence.`;case`inferred`:case`unknown`:return e.confidence.rationale}},Oe=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`}},Y=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`}},ke=e=>e.scope===null?`Workspace`:e.scope._tag===`release`?`Release · ${e.scope.releaseId.slice(-6)}`:`Environment · ${e.scope.environmentId.slice(-6)}`,Ae=e=>{switch(e.freshness._tag){case`current`:return`positive`;case`stale`:return`caution`;case`missing`:case`unavailable`:return`critical`}},je=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}},X=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}`}},Me=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)}`}},Ne=({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,G.jsxs)(`article`,{className:W.evidenceCard,children:[(0,G.jsxs)(`div`,{className:W.evidenceHeading,children:[(0,G.jsxs)(g,{as:`h4`,variant:`label`,children:[`Evidence `,a.evidenceId.slice(-6)]}),(0,G.jsx)(c,{label:K(a.freshness._tag),size:`compact`,tone:Ae(a)})]}),(0,G.jsxs)(`dl`,{className:W.facts,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Observed`}),(0,G.jsx)(`dd`,{children:q(a.observedAt)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Source`}),(0,G.jsx)(`dd`,{children:X(a.attribution)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Verified by`}),(0,G.jsx)(`dd`,{children:X(a.verifier)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Retention`}),(0,G.jsxs)(`dd`,{children:[K(a.retention.classification),a.retention.legalHold?` · Legal hold`:``]})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Valid until`}),(0,G.jsx)(`dd`,{children:a.validUntil===null?`No expiry recorded`:q(a.validUntil)})]})]}),i.length===0?(0,G.jsx)(g,{tone:`secondary`,variant:`meta`,children:`No referenced claim was returned for this observation.`}):(0,G.jsx)(`ul`,{className:W.claims,children:i.map(e=>(0,G.jsxs)(`li`,{children:[(0,G.jsx)(g,{as:`span`,variant:`label`,children:K(e.predicate)}),(0,G.jsx)(g,{as:`span`,tone:`secondary`,children:Me(e)})]},e.evidenceClaimId))})]})},Pe=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`}`},Fe=({claims:e,evidenceIds:t,onClose:n,onSessionExpired:r,relationship:l,sessionKey:u,transport:d})=>{let f=Te(l?.relationshipId??null,t,u,r,d),p=l===null?`Relationship details`:`${K(l.kind)} relationship`,m=l===null||e.length===l.evidenceClaimIds.length;return(0,G.jsx)(o.Root,{onOpenChange:e=>{e||n()},open:l!==null,children:(0,G.jsx)(o.Content,{closeLabel:`Close ${p}`,description:`Immutable delivery history and the evidence used to establish this connection.`,title:p,children:(0,G.jsx)(o.Body,{className:W.body,children:l===null||f.state._tag===`idle`||f.state._tag===`loading`?(0,G.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading relationship details`,className:W.loading,children:[(0,G.jsx)(i,{height:`7rem`}),(0,G.jsx)(i,{height:`12rem`})]}):f.state._tag===`failed`?(0,G.jsx)(s,{action:(0,G.jsx)(a,{onClick:f.retry,children:`Try again`}),description:`The selected relationship remains unchanged. Its history could not be loaded.`,title:`Relationship details unavailable`,tone:`caution`}):(0,G.jsxs)(`div`,{className:W.content,children:[(0,G.jsxs)(`section`,{"aria-labelledby":`relationship-summary-title`,className:W.summary,children:[(0,G.jsxs)(`div`,{className:W.summaryHeading,children:[(0,G.jsxs)(g,{as:`h3`,id:`relationship-summary-title`,variant:`section-title`,children:[l.sourceNodeKind,` → `,l.targetNodeKind]}),(0,G.jsxs)(`div`,{className:W.tags,children:[(0,G.jsx)(c,{label:K(l.lifecycle._tag),size:`compact`,tone:Y(l)}),(0,G.jsx)(c,{label:Oe(l),size:`compact`,tone:`neutral`})]})]}),(0,G.jsx)(g,{tone:`secondary`,children:De(l)}),(0,G.jsxs)(`dl`,{className:W.facts,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Revision`}),(0,G.jsx)(`dd`,{children:String(l.revision)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Recorded by`}),(0,G.jsx)(`dd`,{children:J(l.recordedBy)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Origin`}),(0,G.jsx)(`dd`,{children:Ee(l.provenance)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Scope`}),(0,G.jsx)(`dd`,{children:ke(l)})]}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:`Recorded`}),(0,G.jsx)(`dd`,{children:q(l.recordedAt)})]})]})]}),(0,G.jsxs)(`section`,{"aria-labelledby":`relationship-history-title`,className:W.section,children:[(0,G.jsxs)(`div`,{className:W.sectionHeading,children:[(0,G.jsx)(g,{as:`h3`,id:`relationship-history-title`,variant:`label`,children:`History`}),(0,G.jsx)(c,{label:Pe(f.state.details.history.revisions),size:`compact`,tone:`neutral`})]}),f.state.details.history.revisions.length===0?(0,G.jsx)(g,{tone:`secondary`,children:`No immutable ledger revisions were returned.`}):(0,G.jsx)(`ol`,{className:W.history,children:f.state.details.history.revisions.map(e=>{let t=je(e);return(0,G.jsxs)(`li`,{children:[(0,G.jsxs)(`div`,{className:W.historyHeading,children:[(0,G.jsxs)(g,{as:`span`,variant:`label`,children:[`Revision `,String(e.revision)]}),(0,G.jsx)(c,{label:K(e.lifecycle._tag),size:`compact`,tone:Y(e)})]}),(0,G.jsxs)(g,{tone:`secondary`,variant:`meta`,children:[J(e.recordedBy),` ·`,` `,q(e.recordedAt)]}),t===null?null:(0,G.jsx)(g,{tone:`secondary`,children:t})]},`${e.relationshipId}:${String(e.revision)}`)})})]}),(0,G.jsxs)(`section`,{"aria-labelledby":`relationship-evidence-title`,className:W.section,children:[(0,G.jsxs)(`div`,{className:W.sectionHeading,children:[(0,G.jsx)(g,{as:`h3`,id:`relationship-evidence-title`,variant:`label`,children:`Evidence`}),(0,G.jsx)(c,{label:`${String(f.state.details.evidence.length)} observation${f.state.details.evidence.length===1?``:`s`}`,size:`compact`,tone:`neutral`})]}),m?null:(0,G.jsxs)(`div`,{className:W.integrity,children:[(0,G.jsx)(c,{label:`Evidence incomplete`,size:`compact`,tone:`critical`}),(0,G.jsx)(g,{tone:`secondary`,children:`One or more referenced claims are missing from the release slice. Refresh before relying on this relationship.`})]}),f.state.details.evidence.length===0?(0,G.jsx)(g,{tone:`secondary`,children:`No immutable evidence is attached to this relationship revision.`}):(0,G.jsx)(`div`,{className:W.evidence,children:f.state.details.evidence.map(t=>(0,G.jsx)(Ne,{claims:e,inspection:t,relationship:l},t.evidence.evidenceId))})]})]})})})})},Ie=S({_tag:_(`relationship-detail-origin/v1`),objectId:x,relationshipId:re}),Le=S({relationshipDetailOrigin:Ie}),Re=(e,t,n)=>({...ee(e)&&e,relationshipDetailOrigin:{_tag:`relationship-detail-origin/v1`,objectId:t,relationshipId:n}}),ze=(e,t,n)=>{let r=ne(Le)(e);return C(r)&&r.value.relationshipDetailOrigin.objectId===t&&r.value.relationshipDetailOrigin.relationshipId===n},Be=(e,t,n,r)=>{if(ze(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})},Z={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`},Ve=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,He=(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()]}},Ue=y(`UnauthorizedApiError`),We=async(e,t,n,r)=>Ve(t,t=>r.load(e,t,n)),Ge={load:(e,t,n)=>v(T(function*(){return yield*(yield*D()).deliveryGraph.releaseSlice({params:{releaseId:e},query:t===null?{}:{environmentId:t}})}).pipe(w(E)),{signal:n})},Ke=(e,t,n,r,i=Ge)=>{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}),We(e,t,a.signal,i).then(t=>{a.signal.aborted||c({_tag:`ready`,environmentScopeKey:l,inspection:He(e,t),releaseId:e,sessionKey:n})},t=>{a.signal.aborted||(Ue(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}},qe=()=>(0,G.jsxs)(`div`,{"aria-busy":`true`,"aria-label":`Loading release work`,className:Z.loading,children:[(0,G.jsx)(i,{height:`3rem`}),(0,G.jsx)(i,{height:`15rem`})]}),Je=({linkLocation:e,selectedObject:t,trace:n})=>(0,G.jsxs)(`section`,{"aria-label":`Selected ${t.kind} ${t.label}`,className:Z.selected,children:[(0,G.jsxs)(`div`,{className:Z.selectedHeading,children:[(0,G.jsx)(h,{service:t.service,size:`compact`}),(0,G.jsxs)(g,{as:`p`,variant:`label`,children:[`Selected object · `,t.label]}),(0,G.jsx)(c,{label:t.status,size:`compact`,tone:t.tone})]}),(0,G.jsx)(g,{as:`h3`,variant:`section-title`,children:t.title}),(0,G.jsx)(g,{tone:`secondary`,variant:`meta`,children:t.kind}),(0,G.jsx)(`dl`,{className:Z.selectedFacts,children:t.facts.map(e=>(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`dt`,{children:e.label}),(0,G.jsx)(`dd`,{children:e.value})]},e.label))}),n===void 0?null:(0,G.jsxs)(`div`,{className:Z.trace,children:[(0,G.jsxs)(`div`,{className:Z.traceHeading,children:[(0,G.jsx)(g,{as:`h4`,variant:`label`,children:`Delivery trace`}),(0,G.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,G.jsx)(g,{tone:`secondary`,children:`No relationship touches this object in the current release slice.`}):(0,G.jsx)(`ul`,{className:Z.traceList,children:n.relationships.map(n=>(0,G.jsxs)(`li`,{children:[n.other.service===null?null:(0,G.jsx)(h,{service:n.other.service,size:`compact`}),(0,G.jsxs)(`div`,{className:Z.traceConnection,children:[(0,G.jsxs)(g,{as:`p`,variant:`label`,children:[n.direction===`incoming`?`From`:`To`,` `,n.other.label]}),n.other.href===null?(0,G.jsx)(g,{tone:`secondary`,children:n.other.title}):(0,G.jsx)(d,{onClick:t=>{let r=n.other.href;e!==void 0&&r!==null&&M(r,e)!==void 0&&k(t,t.currentTarget.target)&&A(e,r)},state:e===void 0?void 0:M(n.other.href,e),to:n.other.href,children:n.other.title})]}),(0,G.jsxs)(`div`,{className:Z.traceRelation,children:[(0,G.jsx)(g,{as:`span`,tone:`secondary`,variant:`meta`,children:n.kind}),(0,G.jsx)(c,{label:n.lifecycle,size:`compact`,tone:n.tone})]}),(0,G.jsxs)(g,{as:`span`,tone:`secondary`,variant:`meta`,children:[n.confidence,` · `,n.evidenceCount,` evidence claim`,n.evidenceCount===1?``:`s`]}),(0,G.jsx)(d,{"aria-label":`Details for ${n.kind} ${n.direction} relationship with ${n.other.label}`,className:Z.traceDetails,state:Re(e?.state,t.id,n.id),to:n.detailsHref,children:`Details`})]},n.id))})]})]}),$=p,Ye=({release:e,workspaceId:t})=>{let i=u(),o=n(),l=r(),p=$(i.state),_=Ke(e.id,e.targetEnvironmentIds,p,i.invalidateSession);if(p===null||_.state._tag===`idle`||_.state._tag===`loading`)return(0,G.jsx)(qe,{});if(_.state._tag===`failed`)return(0,G.jsx)(s,{action:(0,G.jsx)(a,{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=Se(_.state.inspection,t),y=new URLSearchParams(o.search),b=y.get(`object`),x=y.get(`relationship`),S=B(_.state.inspection,b),C=_e(_.state.inspection,t,b),w=ve(_.state.inspection,b,x),ee=ye(_.state.inspection,w),T=U(_.state.inspection,w);return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:Z.root,children:[(0,G.jsxs)(`div`,{className:Z.context,children:[(0,G.jsxs)(`div`,{className:Z.contextGroup,children:[(0,G.jsx)(g,{as:`h3`,variant:`label`,children:`Environment`}),e.targetEnvironmentIds.length===0?(0,G.jsx)(g,{tone:`secondary`,children:`No target environment recorded.`}):(0,G.jsx)(`div`,{className:Z.tags,children:e.targetEnvironmentIds.map(e=>(0,G.jsx)(c,{label:`Unknown target · ${e.slice(-4)}`,size:`compact`,title:`Environment ${e}; provider metadata unavailable`,tone:`neutral`},e))})]}),(0,G.jsxs)(`div`,{className:Z.contextGroup,children:[(0,G.jsxs)(`div`,{className:Z.contextHeading,children:[(0,G.jsx)(h,{service:`confluence`,size:`compact`}),(0,G.jsx)(g,{as:`h3`,variant:`label`,children:`Runbook`})]}),v.runbooks.length===0?(0,G.jsx)(g,{tone:`secondary`,children:`No runbook linked.`}):(0,G.jsx)(`div`,{className:Z.runbooks,children:v.runbooks.map(e=>(0,G.jsxs)(d,{className:Z.runbook,onClick:t=>{M(e.href,o)!==void 0&&k(t,t.currentTarget.target)&&A(o,e.href)},state:M(e.href,o),to:e.href,children:[(0,G.jsx)(`strong`,{children:e.title}),(0,G.jsxs)(`span`,{children:[e.reference,e.totalTasks===0?``:` · ${String(e.completedTasks)}/${String(e.totalTasks)} tasks`]})]},e.id))})]}),v.truncated?(0,G.jsx)(c,{label:`Bounded view · more records exist`,size:`compact`,tone:`caution`}):null,S===null||C===null?null:(0,G.jsx)(Je,{linkLocation:o,selectedObject:S,trace:C})]}),(0,G.jsx)(f,{component:ae,children:(0,G.jsx)(m,{gaps:v.gaps,heading:`${e.serviceName} release work`,jiraItems:v.jiraItems,pipelines:v.pipelines,pullRequestGroups:v.pullRequestGroups})})]}),(0,G.jsx)(Fe,{claims:T,evidenceIds:ee,onClose:()=>{S!==null&&w!==null&&Be(l,o,S.id,w.relationshipId)},onSessionExpired:i.invalidateSession,relationship:w,sessionKey:p})]})};export{$ as n,Ve as r,Ye as t};
2
+ //# sourceMappingURL=ReleaseWorkset-DGufwIFe.js.map