chainlesschain 0.162.188 → 0.162.189

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 (188) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-Brr1LVcE.js → AIOps-DbZft8w0.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-DQU74DKG.js → ActionButton-DoOZpwfN.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-CYp9178y.js → Analytics-B0J0KLTW.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-DW4SCYsW.js → AppLayout-D9eIR0qq.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-CYlD_ed1.js → Artifacts-BnZXEVeo.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-CWl1rZOi.js → Audit-X1ce4Bjn.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-BOR-LPsa.js → BackgroundAgents-BvWR-y5v.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-DLpG7j1X.js → Backup-BublSGEd.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-B35K9wdr.js → BaseInput-CR_77Hso.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-CwUJb9gB.js → Chat-DixW52tq.js} +6 -6
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-1v6aMS1m.js → ChatBubbleRenderer-DDHDpBBA.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-pi3-tPNW.js → Checkbox-CCv1C87K.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-FyNF35eL.js → Codegen-B03Cc3dd.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-tGt_JDEr.js → Col-CA06-6pU.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-CC7LonQX.js → Community-Bj881J52.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-BGXrHHjE.js → Compact-UZLTPoaL.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-DSW0TBZ8.js → Compliance-kGwzRb_0.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-Bhk7rbvE.js → Cowork-KundoYM8.js} +2 -2
  20. package/src/assets/web-panel/assets/{Cron-DxyiQ2NZ.js → Cron-BYZyoqDe.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-B2ZkxHok.js → Crosschain-BhrrppBX.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-yOJV99eJ.js → DID-CdC6EguZ.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-CKsttz7D.js → Dashboard-CcQx3J4y.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-CVFldXSL.js → Dropdown-BpijtEzQ.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-Bufv638J.js → EmailListRenderer-DfZjeZTe.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-4ncjoIjL.js → FamilyGuardDashboard-BFYSf69C.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-DsknEDoX.js → Federation-Okdi3pJm.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-Cqe5jWXA.js → FormItemContext-mH-HebKW.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-NAJaFKxc.js → GenericCardRenderer-xivV69x7.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-CszKQpnl.js → Git-1rh_YBwg.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-BXGodXi6.js → Governance-eAXkNxdY.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-CkoYuG2c.js → Inference-CS6dMVTN.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-DFlEr_T0.js → KnowledgeGraph-Bq_TnkvD.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-CVaENddA.js → Logs-KchHtiHt.js} +2 -2
  35. package/src/assets/web-panel/assets/MarkdownRenderer-TabqHW9B.js +1 -0
  36. package/src/assets/web-panel/assets/{Marketplace-CDlLT0fw.js → Marketplace-CsmGcX5X.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-DdwOyszN.js → McpTools-BaPFnnyz.js} +5 -5
  38. package/src/assets/web-panel/assets/{Memory-DKQnkKuG.js → Memory-2m-sUUf7.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-DGseqlzJ.js → MobileBridge-D5nVZBRu.js} +1 -1
  40. package/src/assets/web-panel/assets/MobileProjects-Bo8MLZvT.js +1 -0
  41. package/src/assets/web-panel/assets/{Mtc-O61Vwyli.js → Mtc-3GDvamGa.js} +6 -6
  42. package/src/assets/web-panel/assets/{MtcAudit-Dw2SyasS.js → MtcAudit-D2zGuZCH.js} +4 -4
  43. package/src/assets/web-panel/assets/{Multisig-hSu_l8kf.js → Multisig-BBVQ4t6t.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-CX1Epurr.js → NLProgramming-BIOCyOGp.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-R9xX8o8_.js → Notes-DVwBGpzc.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-jtSNLCuK.js → NotificationSettings-BDnHfIfX.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-BU2Yqq5H.js → OrderTableRenderer-C7Ek20ag.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-Pu2WO-U3.js → Organization-D3SRKaa7.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-BjnqUyFp.js → Overflow-C2B8ahyn.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-jjkvz44c.js → P2P-2iwQzG65.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-69ca_WeR.js → PdhVaultBrowser-CoPiWqMN.js} +4 -4
  52. package/src/assets/web-panel/assets/{Permissions-D4yDpivd.js → Permissions-yV5XNXo5.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-0qsL6iH1.js → PersonalDataHub-uCDJhMUF.js} +5 -5
  54. package/src/assets/web-panel/assets/{Pipeline-Cx7Ybrk2.js → Pipeline-hN7ucMOA.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-PbfR_M_V.js → Privacy-CgU0ptN4.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-CyV6Gsub.js → ProjectInit-CfYPiT6j.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-C7KZ2Wdk.js → ProjectSettings-B0A2C4nw.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-DQDjO-yK.js → Projects-BE5C0ajn.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-DyFVBBMX.js → Providers-CstQPf8W.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-CzB1BC9_.js → QrScannerModal-Co3z_ynk.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-Bk636mC1.js → QuickAsk-DMTS6pQ6.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-DoWxHIT3.js → Recommend-ETw4odUa.js} +1 -1
  63. package/src/assets/web-panel/assets/RemoteSession-B0rkE09d.js +5 -0
  64. package/src/assets/web-panel/assets/{Reputation-BucoReGG.js → Reputation-BTVqQgKq.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-DzmOdJU7.js → Row-CBKKwwtO.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-C1tK7KGU.js → RssFeed-BHUQ438I.js} +2 -2
  67. package/src/assets/web-panel/assets/{Search-CSnInOqk.js → Search-B4NqeUsF.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-dlejr15l.js → Security-BRjoYG5_.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-BioPZuNh.js → Services-CxQzu3p3.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-DWMibwpC.js → Skeleton-BKzwwmWO.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-BAAnx1B2.js → Skills-DrsFcgth.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-jWNp4hNO.js → Sla-D21tmXCH.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-y5kqKha-.js → SpeechSettings-CjyjLfp8.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-B9GNsc3e.js → SyncSettings-Cu45-tnx.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-BDBYKRen.js → Tasks-oMcILYOj.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-DRiE5eaN.js → Templates-Bh-Zcr5R.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-BGlAvExF.js → Tenant-68ns63aI.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-B8uzrbNY.js → Terminal-BLJkFykE.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-Df48iveY.js → TimelineRenderer-xcrJLq-O.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-CcmHndN6.js → Tokens-C6PpFJtf.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-DPkWxmQ2.js → Trigger-BaKA7tdM.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-DTb5a5AV.js → Trust-BzhA57Jc.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-CBmg5vch.js → UkeySign-4_U3JkIR.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-B0mZrz4O.js → VideoEditing-162AANxX.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-Bxs7_mpd.js → Wallet-B1viuql_.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-C8x3cMxU.js → WebAuthn-ZVWazhCy.js} +4 -4
  87. package/src/assets/web-panel/assets/{WorkflowEditor-DPrNznrP.js → WorkflowEditor-tzdyUk-1.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-D3bYWu7S.js → chat-DmrHNuwq.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-DY-PwMu4.js → colors-DAJ_M-PK.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-LDk10Kw6.js → compact-item-uIzmYwLs.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-C-2MZnFq.js → createContext-D_ZmuLwb.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-DIrncrV1.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-BQIBjcnB.js → hasIn-CDt_shTL.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-8JC9BJa1.js → index-BAvSmJXW.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-KFZO_lcx.js → index-BDF6EQBs.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CiTvBAr-.js → index-BHvlm0In.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-COG61sRv.js → index-BRa4kJ_S.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-lmm9p-jm.js → index-BTCXf1t-.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DTIZpPtG.js → index-Bbxjfstq.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-_HRO_cIu.js → index-Bx4d6c1k.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BRI3ngNg.js → index-ByzGvpR9.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-C3GNvExG.js → index-C16fYKFD.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D3Oq-DLL.js → index-C5WcdJH2.js} +3 -3
  104. package/src/assets/web-panel/assets/{index-L3smcoQX.js → index-CG0lY4h3.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Dh-tkpKQ.js → index-CKyd472S.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CQVb2dWp.js → index-CaelyMgF.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DY2FIrmz.js → index-CbD_WW_6.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DYyLJPlF.js → index-CcZ9xJI9.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-C7FC8cP2.js → index-CeUpKjvi.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BN-xdSWZ.js → index-Cvak6Oe2.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DSvo_bp0.js → index-CzXqvMuP.js} +1 -1
  112. package/src/assets/web-panel/assets/index-D-Swwqld.js +1 -0
  113. package/src/assets/web-panel/assets/{index-BdXnYMCZ.js → index-D4n1lGTB.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-L6qixyLc.js → index-D9OE8B3d.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-VCh5zNJo.js → index-DBFmcaCQ.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DlRYqt3S.js → index-DdUMcwRB.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-k7C_oDCO.js → index-DeGBoLQA.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-7xKu7Fns.js → index-DfSSy9uy.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CY4KnaO9.js → index-DqDSF2RW.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-HasPt4-h.js → index-DvFhhe6r.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CaslYch6.js → index-DwfvPe-j.js} +1 -1
  122. package/src/assets/web-panel/assets/index-FMZAMKy8.js +1 -0
  123. package/src/assets/web-panel/assets/{index-B5pgtZnY.js → index-FyplHuNt.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-Cz4b6Z_7.js → index-GcKOHD_c.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BI4KgcYC.js → index-OzTxFIJP.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BX2b9Orc.js → index-QsgfSZrV.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CbR6ROOa.js → index-Z8P4BexE.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BrnRO9yE.js → index-clSX4PEc.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Dd2Km97U.js → index-ifxmu8SY.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DhRt9cYJ.js → index-rS3gl_68.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-D4K1weKc.js → index-rXdwUeE3.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-Cx6D_dx2.js → index-saf3VNeP.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-zQPSHf2C.js → initDefaultProps-pmfaD-aK.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-CKCStGVk.js → motion-CaQ2CpYF.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-BufVDGYF.js → move-CkKTqNbI.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-DcaFxy5D.js → mtc-parser-Dd4xsgRI.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-EScpkGdo.js → omit-BFuA5YEs.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-72hG_qfT.js → pickAttrs-DDfxOAJc.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-CMFWiH20.js → placementArrow-Be595JCp.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-DKQHS41p.js → responsiveObserve-7byljUM3.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-QVAFHTIQ.js → slide-CTWfOTaY.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-DIz38e2G.js → statusUtils-CNZOuIxM.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-zK5cyLby.js → styleChecker-DwOcBV78.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-DhZngk62.js → useFlexGapSupport-B6MNwAO9.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-BvV2cvkg.js → useFs-CzyQjH9r.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-CRmxb9l3.js → usePersonalDataHub-Dxh3KiVA.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-CgQIbobP.js → vnode-DVfZiS5N.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-D4XrrO0R.js → zoom-BYme7fbY.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/commands/agent.js +22 -0
  151. package/src/commands/checkpoint-managed.js +1059 -0
  152. package/src/commands/checkpoint.js +3 -0
  153. package/src/commands/team-distributed.js +3324 -0
  154. package/src/commands/team.js +1130 -74
  155. package/src/data/changelog.json +13 -0
  156. package/src/lib/agent-core.js +1 -0
  157. package/src/lib/agent-team/task-lease.js +271 -3
  158. package/src/lib/agent-team/team-adjudication.js +1501 -0
  159. package/src/lib/agent-team/team-budget.js +4 -1
  160. package/src/lib/agent-team/team-control-store.js +582 -0
  161. package/src/lib/agent-team/team-distributed-queue.js +5246 -0
  162. package/src/lib/agent-team/team-process-checkpoint.js +211 -0
  163. package/src/lib/agent-team/team-runner.js +319 -22
  164. package/src/lib/agent-team/team-worktree.js +1403 -95
  165. package/src/lib/managed-checkpoint-render.js +60 -0
  166. package/src/lib/managed-tool-checkpoint.js +194 -0
  167. package/src/lib/process-execution-broker/index.js +438 -5
  168. package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +28 -1
  169. package/src/lib/process-execution-broker/linux-generic-bwrap.js +28 -4
  170. package/src/lib/process-execution-broker/platform-sandbox.js +92 -70
  171. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  172. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  173. package/src/lib/process-execution-broker/windows-sandbox.cs +284 -19
  174. package/src/lib/process-execution-broker/workspace-transaction.js +3556 -0
  175. package/src/lib/secure-file-identity.js +433 -0
  176. package/src/lib/turn-binding.js +160 -2
  177. package/src/lib/with-file-lock.js +140 -23
  178. package/src/repl/agent-repl.js +19 -1
  179. package/src/runtime/agent-core.js +366 -122
  180. package/src/runtime/headless-runner.js +12 -0
  181. package/src/runtime/headless-stream.js +3 -0
  182. package/src/runtime/policies/agent-policy.js +14 -0
  183. package/src/assets/web-panel/assets/MarkdownRenderer-7iWGwZ-r.js +0 -1
  184. package/src/assets/web-panel/assets/MobileProjects-COBbEOlj.js +0 -1
  185. package/src/assets/web-panel/assets/RemoteSession-oOVIv9wq.js +0 -5
  186. package/src/assets/web-panel/assets/devWarning-B4dXIJqD.js +0 -1
  187. package/src/assets/web-panel/assets/index-C-C7DaG6.js +0 -1
  188. package/src/assets/web-panel/assets/index-DkfWzWtd.js +0 -1
@@ -1,6 +1,19 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.162.189",
7
+ "cliVersions": ["0.162.188", "0.162.189"],
8
+ "date": "2026-07-31",
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Added — cc CLI 0.162.189: managed rollback and distributed Agent Teams closure",
13
+ "body": "> `chainlesschain` **0.162.188 → 0.162.189** (2026-07-31).\n> CLI-only release metadata; `@chainlesschain/personal-data-hub` remains\n> **0.4.57** and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Managed workspace rollback**: Process Broker-managed workspace write paths\n record durable recovery evidence, establish checkpoints at accepted\n boundaries, and apply fenced rollback after failure, cancellation, or\n timeout. `full`, `partial`, and `none` coverage outcomes remain explicit,\n while unsupported external side effects stay outside the rollback guarantee.\n- **Distributed Agent Teams authority**: local schema v6 is the current state\n authority, with v5 accepted only through CLI-owned resume migration. The\n separate distributed queue schema v1 uses queue authority digests, leases,\n and compare-and-swap fences for supported shared-filesystem coordination; it\n is not a consensus or network-partition-tolerant queue.\n- **Wall-clock lifecycle fence**: linearized `startedAt` and `observedAt`\n checks surround executor activity, active managed shell and agent work is\n aborted when the wall-clock budget expires, and commit/checkpoint publication\n is fenced so late results cannot become completed tasks. Accepted committed\n evidence instead enters explicit adjudication.\n- **CLI-owned IDE controls**: VS Code and JetBrains surfaces observe the raw\n local v6 or distributed queue v1 JSON as read-only state and route takeover,\n recovery, and adjudication through CLI-owned authority, digest, lease, and\n evidence fences.\n- **Validated implementation candidate**: candidate\n `7df6feced4670ac71d19548752d18ac4cc225025` completed the\n [CLI CI](https://github.com/chainlesschain/chainlesschain/actions/runs/30549100935),\n [CLI Strict Sandbox](https://github.com/chainlesschain/chainlesschain/actions/runs/30549100289),\n [short distributed soak](https://github.com/chainlesschain/chainlesschain/actions/runs/30549100307),\n and [long distributed soak](https://github.com/chainlesschain/chainlesschain/actions/runs/30549142504)\n gates successfully.\n- **Final release-SHA gate remains mandatory**: this version and changelog\n preparation creates a distinct final release commit. Publication still\n requires that exact final release SHA to pass the authoritative required\n matrices; candidate and local results do not authorize publication."
14
+ }
15
+ ]
16
+ },
4
17
  {
5
18
  "productVersion": null,
6
19
  "cliVersion": "0.162.188",
@@ -50,6 +50,7 @@ export {
50
50
  _anthropicThinkingParams,
51
51
  _normalizeAnthropicResponse,
52
52
  _resetFileFreshness,
53
+ _withPostEditDiagnostics,
53
54
  _getSharedCodeIntel,
54
55
  disposeSharedCodeIntel,
55
56
  emitToolHookLifecycle,
@@ -28,6 +28,11 @@ import { randomUUID } from "node:crypto";
28
28
 
29
29
  export const DEFAULT_LEASE_TTL_MS = 60000;
30
30
  export const DEFAULT_MAX_ATTEMPTS = 3;
31
+ export const ADJUDICATION_DECISIONS = Object.freeze({
32
+ RETRY: "retry",
33
+ ACCEPT: "accept",
34
+ CANCEL: "cancel",
35
+ });
31
36
 
32
37
  export class TaskLeaseRegistry {
33
38
  constructor({
@@ -423,7 +428,14 @@ export class TaskLeaseRegistry {
423
428
  */
424
429
  fail(
425
430
  key,
426
- { holder, leaseId, error = null, retryable = true, now = this._now() } = {},
431
+ {
432
+ holder,
433
+ leaseId,
434
+ error = null,
435
+ retryable = true,
436
+ adjudication = null,
437
+ now = this._now(),
438
+ } = {},
427
439
  ) {
428
440
  const id = this._byKey.get(key);
429
441
  const task = id ? this._tasks.get(id) : null;
@@ -434,6 +446,23 @@ export class TaskLeaseRegistry {
434
446
  }
435
447
  const attempts = (task.metadata?.attempts || 0) + 1;
436
448
  const willRetry = retryable !== false && attempts < this.maxAttempts;
449
+ const adjudicationRequest =
450
+ !willRetry && adjudication && typeof adjudication === "object"
451
+ ? {
452
+ required: true,
453
+ code:
454
+ adjudication.code ||
455
+ "TEAM_TASK_SIDE_EFFECT_ADJUDICATION_REQUIRED",
456
+ reason:
457
+ adjudication.reason ||
458
+ (error ? String(error) : "task outcome requires adjudication"),
459
+ evidenceDigest: adjudication.evidenceDigest || null,
460
+ requestedAt: Number.isFinite(adjudication.requestedAt)
461
+ ? adjudication.requestedAt
462
+ : now,
463
+ decision: null,
464
+ }
465
+ : task.metadata?.adjudication || null;
437
466
  const ok = this._write(task, {
438
467
  status: willRetry ? TASK_STATUS.PENDING : TASK_STATUS.CANCELLED,
439
468
  assignee: null,
@@ -442,6 +471,7 @@ export class TaskLeaseRegistry {
442
471
  lease: null,
443
472
  attempts,
444
473
  lastError: error ? String(error) : null,
474
+ ...(adjudicationRequest ? { adjudication: adjudicationRequest } : {}),
445
475
  },
446
476
  });
447
477
  if (!ok) return { ok: false, reason: "concurrent" };
@@ -529,6 +559,14 @@ export class TaskLeaseRegistry {
529
559
  if (!candidate.retry) {
530
560
  metadata.attempts = (fresh.metadata?.attempts || 0) + 1;
531
561
  metadata.lastError = String(error);
562
+ metadata.adjudication = {
563
+ required: true,
564
+ code: "TEAM_TASK_ABANDONED_ADJUDICATION_REQUIRED",
565
+ reason: String(error),
566
+ evidenceDigest: null,
567
+ requestedAt: this._now(),
568
+ decision: null,
569
+ };
532
570
  }
533
571
  if (
534
572
  this._write(fresh, {
@@ -550,6 +588,234 @@ export class TaskLeaseRegistry {
550
588
  return { reclaimed, adjudicationRequired };
551
589
  }
552
590
 
591
+ /**
592
+ * Resolve a fail-closed task after a durable human decision has been
593
+ * authenticated by the adjudication log.
594
+ *
595
+ * This is deliberately the only TaskLeaseRegistry operation allowed to move
596
+ * a CANCELLED task out of a terminal state. The generic SharedTaskList keeps
597
+ * its terminal-state invariant; this method performs a compare-by-revision
598
+ * replacement and records the exceptional transition in task history.
599
+ */
600
+ resolveAdjudication(
601
+ key,
602
+ {
603
+ decision,
604
+ decisionId,
605
+ actor = "human",
606
+ reason = null,
607
+ evidenceDigest = null,
608
+ result = null,
609
+ now = this._now(),
610
+ } = {},
611
+ ) {
612
+ const allowed = new Set(Object.values(ADJUDICATION_DECISIONS));
613
+ if (!allowed.has(decision)) {
614
+ return { ok: false, reason: "invalid_decision" };
615
+ }
616
+ if (!decisionId || typeof decisionId !== "string") {
617
+ return { ok: false, reason: "decision_id_required" };
618
+ }
619
+ const id = this._byKey.get(key);
620
+ const task = id ? this._tasks.get(id) : null;
621
+ if (!task) return { ok: false, reason: "not_found" };
622
+ const pending = task.metadata?.adjudication || null;
623
+ if (pending?.required !== true) {
624
+ const prior = pending?.decision || null;
625
+ if (prior?.id === decisionId && prior?.action === decision) {
626
+ return {
627
+ ok: true,
628
+ idempotent: true,
629
+ decision,
630
+ status: task.status,
631
+ };
632
+ }
633
+ return { ok: false, reason: "adjudication_not_required" };
634
+ }
635
+ if (task.status !== TASK_STATUS.CANCELLED) {
636
+ return { ok: false, reason: "invalid_task_state" };
637
+ }
638
+ if (pending.evidenceDigest && pending.evidenceDigest !== evidenceDigest) {
639
+ return { ok: false, reason: "evidence_mismatch" };
640
+ }
641
+
642
+ const status =
643
+ decision === ADJUDICATION_DECISIONS.RETRY
644
+ ? TASK_STATUS.PENDING
645
+ : decision === ADJUDICATION_DECISIONS.ACCEPT
646
+ ? TASK_STATUS.COMPLETED
647
+ : TASK_STATUS.CANCELLED;
648
+ const decidedAt = Number.isFinite(now) ? now : this._now();
649
+ const decisionRecord = {
650
+ id: decisionId,
651
+ action: decision,
652
+ actor: actor ? String(actor) : "human",
653
+ reason: reason == null ? null : String(reason),
654
+ evidenceDigest: evidenceDigest || pending.evidenceDigest || null,
655
+ decidedAt,
656
+ };
657
+ const snapshot = this._tasks.snapshot();
658
+ const stored = snapshot.tasks.find((candidate) => candidate.id === task.id);
659
+ if (!stored || stored.rev !== task.rev) {
660
+ return { ok: false, reason: "concurrent" };
661
+ }
662
+ stored.status = status;
663
+ stored.assignee = null;
664
+ stored.updatedAt = decidedAt;
665
+ stored.rev += 1;
666
+ stored.metadata = {
667
+ ...stored.metadata,
668
+ lease: null,
669
+ ...(decision === ADJUDICATION_DECISIONS.ACCEPT
670
+ ? {
671
+ result: result ?? {
672
+ adjudicated: true,
673
+ decisionId,
674
+ },
675
+ }
676
+ : {}),
677
+ adjudication: {
678
+ ...pending,
679
+ required: false,
680
+ decision: decisionRecord,
681
+ },
682
+ };
683
+ stored.history = [
684
+ ...(stored.history || []),
685
+ {
686
+ ts: decidedAt,
687
+ actor: decisionRecord.actor,
688
+ action: "adjudicated",
689
+ changes: ["status", "assignee", "metadata"],
690
+ decision: decisionRecord.action,
691
+ decisionId,
692
+ },
693
+ ];
694
+ this._tasks = SharedTaskList.restore(snapshot, { now: this._now });
695
+ this._rebuildIndexes();
696
+ if (status === TASK_STATUS.PENDING) {
697
+ this._enqueueIfReady(key, decidedAt);
698
+ } else if (status === TASK_STATUS.COMPLETED) {
699
+ for (const dependent of this._dependentsByKey.get(key) || []) {
700
+ this._enqueueIfReady(dependent, decidedAt);
701
+ }
702
+ }
703
+ return { ok: true, decision, status };
704
+ }
705
+
706
+ /**
707
+ * Force any recovery-ambiguous task into the fail-closed adjudication state.
708
+ * This exceptional transition is used only when durable collaboration
709
+ * evidence contradicts or weakens the registry snapshot.
710
+ */
711
+ requireAdjudication(
712
+ key,
713
+ {
714
+ code = "TEAM_TASK_SIDE_EFFECT_ADJUDICATION_REQUIRED",
715
+ reason = "task outcome requires adjudication",
716
+ evidenceDigest = null,
717
+ now = this._now(),
718
+ } = {},
719
+ ) {
720
+ const id = this._byKey.get(key);
721
+ const task = id ? this._tasks.get(id) : null;
722
+ if (!task) return { ok: false, reason: "not_found" };
723
+ if (task.metadata?.adjudication?.required === true) {
724
+ return { ok: true, idempotent: true };
725
+ }
726
+ const snapshot = this._tasks.snapshot();
727
+ const stored = snapshot.tasks.find((candidate) => candidate.id === task.id);
728
+ if (!stored || stored.rev !== task.rev) {
729
+ return { ok: false, reason: "concurrent" };
730
+ }
731
+ const requestedAt = Number.isFinite(now) ? now : this._now();
732
+ const priorStatus = stored.status;
733
+ stored.status = TASK_STATUS.CANCELLED;
734
+ stored.assignee = null;
735
+ stored.updatedAt = requestedAt;
736
+ stored.rev += 1;
737
+ stored.metadata = {
738
+ ...stored.metadata,
739
+ lease: null,
740
+ lastError: String(reason),
741
+ adjudication: {
742
+ required: true,
743
+ code: String(code),
744
+ reason: String(reason),
745
+ evidenceDigest: evidenceDigest || null,
746
+ requestedAt,
747
+ priorStatus,
748
+ decision: null,
749
+ },
750
+ };
751
+ stored.history = [
752
+ ...(stored.history || []),
753
+ {
754
+ ts: requestedAt,
755
+ actor: "recovery",
756
+ action: "adjudication-required",
757
+ changes: ["status", "assignee", "metadata"],
758
+ },
759
+ ];
760
+ this._tasks = SharedTaskList.restore(snapshot, { now: this._now });
761
+ this._rebuildIndexes();
762
+ return { ok: true, priorStatus };
763
+ }
764
+
765
+ /** Bind a pending adjudication to its immutable durable case evidence. */
766
+ bindAdjudicationCase(key, { caseId, registryDigest, sideEffectDigest } = {}) {
767
+ const id = this._byKey.get(key);
768
+ const task = id ? this._tasks.get(id) : null;
769
+ if (!task) return { ok: false, reason: "not_found" };
770
+ const adjudication = task.metadata?.adjudication || null;
771
+ if (adjudication?.required !== true) {
772
+ return { ok: false, reason: "adjudication_not_required" };
773
+ }
774
+ for (const [name, value] of Object.entries({
775
+ caseId,
776
+ registryDigest,
777
+ sideEffectDigest,
778
+ })) {
779
+ if (typeof value !== "string" || value.length === 0) {
780
+ return { ok: false, reason: `${name}_required` };
781
+ }
782
+ }
783
+ const current = adjudication.case || null;
784
+ if (current) {
785
+ if (
786
+ current.caseId === caseId &&
787
+ current.registryDigest === registryDigest &&
788
+ current.sideEffectDigest === sideEffectDigest
789
+ ) {
790
+ return { ok: true, idempotent: true, case: { ...current } };
791
+ }
792
+ return { ok: false, reason: "case_binding_conflict" };
793
+ }
794
+ const binding = { caseId, registryDigest, sideEffectDigest };
795
+ const ok = this._write(task, {
796
+ metadata: {
797
+ ...task.metadata,
798
+ adjudication: {
799
+ ...adjudication,
800
+ case: binding,
801
+ },
802
+ },
803
+ });
804
+ return ok
805
+ ? { ok: true, case: { ...binding } }
806
+ : { ok: false, reason: "concurrent" };
807
+ }
808
+
809
+ pendingAdjudications() {
810
+ return this.list()
811
+ .filter((task) => task.metadata?.adjudication?.required === true)
812
+ .map((task) => ({
813
+ key: task.key,
814
+ status: task.status,
815
+ ...task.metadata.adjudication,
816
+ }));
817
+ }
818
+
553
819
  stats({ now = this._now() } = {}) {
554
820
  const base = this._tasks.stats();
555
821
  let leased = 0;
@@ -566,6 +832,7 @@ export class TaskLeaseRegistry {
566
832
  leased,
567
833
  expiredLeases: expired,
568
834
  claimable: this.claimable({ now }).length,
835
+ adjudicationRequired: this.pendingAdjudications().length,
569
836
  };
570
837
  }
571
838
 
@@ -575,8 +842,9 @@ export class TaskLeaseRegistry {
575
842
  .list()
576
843
  .every(
577
844
  (t) =>
578
- t.status === TASK_STATUS.COMPLETED ||
579
- t.status === TASK_STATUS.CANCELLED,
845
+ (t.status === TASK_STATUS.COMPLETED ||
846
+ t.status === TASK_STATUS.CANCELLED) &&
847
+ t.metadata?.adjudication?.required !== true,
580
848
  );
581
849
  }
582
850