openplanr 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/cli/commands/artifact-design-share.d.ts +9 -0
  3. package/dist/cli/commands/artifact-design-share.d.ts.map +1 -0
  4. package/dist/cli/commands/artifact-design-share.js +200 -0
  5. package/dist/cli/commands/artifact-design-share.js.map +1 -0
  6. package/dist/cli/commands/artifact.d.ts.map +1 -1
  7. package/dist/cli/commands/artifact.js +5 -18
  8. package/dist/cli/commands/artifact.js.map +1 -1
  9. package/dist/cli/commands/ship.d.ts.map +1 -1
  10. package/dist/cli/commands/ship.js +2 -0
  11. package/dist/cli/commands/ship.js.map +1 -1
  12. package/dist/dashboard/.vite/manifest.json +2 -2
  13. package/dist/dashboard/assets/index-Cv4Vwhuw.css +2 -0
  14. package/dist/dashboard/assets/index-CvQAlBy3.js +75 -0
  15. package/dist/dashboard/assets/index-CvQAlBy3.js.map +1 -0
  16. package/dist/dashboard/dashboard-manifest.json +14 -14
  17. package/dist/dashboard/index.html +2 -2
  18. package/dist/services/design-artifact-service.d.ts +20 -1
  19. package/dist/services/design-artifact-service.d.ts.map +1 -1
  20. package/dist/services/design-artifact-service.js +137 -18
  21. package/dist/services/design-artifact-service.js.map +1 -1
  22. package/dist/services/ship-checks/contract.d.ts +3 -1
  23. package/dist/services/ship-checks/contract.d.ts.map +1 -1
  24. package/dist/services/ship-checks/contract.js +1 -1
  25. package/dist/services/ship-checks/contract.js.map +1 -1
  26. package/dist/services/ship-checks/discover.d.ts.map +1 -1
  27. package/dist/services/ship-checks/discover.js +2 -1
  28. package/dist/services/ship-checks/discover.js.map +1 -1
  29. package/dist/services/ship-checks/package-contents.d.ts +4 -0
  30. package/dist/services/ship-checks/package-contents.d.ts.map +1 -0
  31. package/dist/services/ship-checks/package-contents.js +91 -0
  32. package/dist/services/ship-checks/package-contents.js.map +1 -0
  33. package/dist/services/ship-checks/packages.d.ts +2 -0
  34. package/dist/services/ship-checks/packages.d.ts.map +1 -1
  35. package/dist/services/ship-checks/packages.js +4 -0
  36. package/dist/services/ship-checks/packages.js.map +1 -1
  37. package/dist/services/ship-checks/scope.js +2 -1
  38. package/dist/services/ship-checks/scope.js.map +1 -1
  39. package/dist/utils/splice-managed-block.js +1 -1
  40. package/dist/utils/splice-managed-block.js.map +1 -1
  41. package/docs/CLI.md +38 -1
  42. package/lib/host-packages/adapter-registry.json +5 -5
  43. package/lib/host-packages/capability-map.json +1 -1
  44. package/lib/host-packages/claude/.claude-plugin/marketplace.json +3 -3
  45. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +6 -6
  46. package/lib/host-packages/claude/openplanr/.openplanr-content.json +67 -123
  47. package/lib/host-packages/claude/openplanr/README.md +12 -12
  48. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/task-context-resolution.md +4 -4
  49. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-artifact-shell.mjs +2 -4
  50. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-document.mjs +26 -26
  51. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-handoff.mjs +850 -56
  52. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review-state-store.mjs +45 -0
  53. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +65 -74
  54. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-runtime-home.mjs +0 -1
  55. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share-cli-bridge.mjs +321 -0
  56. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs → claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-d707e49b.mjs} +762 -223
  57. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs → claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-9f6918b0.mjs} +537 -5
  58. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-design-support-0bac378d.mjs +137 -0
  59. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design.mjs +107 -37
  60. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +0 -27
  61. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +138 -133
  62. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +1 -5684
  63. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-artifact-review-ui.js +2568 -0
  64. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +10 -74
  65. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  66. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +8 -2
  67. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
  68. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +545 -4781
  69. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +219 -452
  70. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
  71. package/lib/host-packages/claude/openplanr/skills/delegate/SKILL.md +2 -1
  72. package/lib/host-packages/claude/openplanr/skills/delegate/references/integration-review.md +26 -20
  73. package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +25 -1
  74. package/lib/host-packages/claude/openplanr/skills/delegate/references/run-handoff.md +2 -2
  75. package/lib/host-packages/claude/openplanr/skills/delegate/references/worktree-custody.md +17 -9
  76. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/claude.mjs +15 -3
  77. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/codex.mjs +38 -2
  78. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/native.mjs +5 -0
  79. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/custody.mjs +217 -10
  80. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/handoff.mjs +1080 -0
  81. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/integrate.mjs +96 -201
  82. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/integration-files.mjs +3 -382
  83. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/presentation.mjs +29 -12
  84. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-contract.mjs +11 -0
  85. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-execution.mjs +1 -1
  86. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-lifecycle.mjs +14 -10
  87. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-preparation.mjs +4 -0
  88. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-record.mjs +2 -2
  89. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +14 -8
  90. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +14 -8
  91. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +14 -8
  92. package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +1 -0
  93. package/lib/host-packages/claude/openplanr/skills/investigate/references/fail-first.md +40 -0
  94. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +22 -10
  95. package/lib/host-packages/claude/openplanr/skills/ship/references/fail-first.md +40 -0
  96. package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +7 -3
  97. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +65 -121
  98. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  99. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/integration-review.md +26 -20
  100. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +25 -1
  101. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/run-handoff.md +2 -2
  102. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/worktree-custody.md +17 -9
  103. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/claude.mjs +15 -3
  104. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/codex.mjs +38 -2
  105. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/native.mjs +5 -0
  106. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/custody.mjs +217 -10
  107. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/handoff.mjs +1080 -0
  108. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/integrate.mjs +96 -201
  109. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/integration-files.mjs +3 -382
  110. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/presentation.mjs +29 -12
  111. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-contract.mjs +11 -0
  112. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-execution.mjs +1 -1
  113. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-lifecycle.mjs +14 -10
  114. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-preparation.mjs +4 -0
  115. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-record.mjs +2 -2
  116. package/lib/host-packages/cursor/openplanr/rules/planr-delegate.mdc +2 -1
  117. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +14 -8
  118. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +14 -8
  119. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +14 -8
  120. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/fail-first.md +40 -0
  121. package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +1 -0
  122. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/fail-first.md +40 -0
  123. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +7 -3
  124. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +22 -10
  125. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-artifact-shell.mjs +2 -4
  126. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-document.mjs +26 -26
  127. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-handoff.mjs +850 -56
  128. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review-state-store.mjs +45 -0
  129. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +65 -74
  130. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-runtime-home.mjs +0 -1
  131. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share-cli-bridge.mjs +321 -0
  132. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs → design-shared-artifact-support-dependencies-design-support-protocol-contracts-d707e49b.mjs} +762 -223
  133. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs → design-shared-artifact-support-protocol-contracts-9f6918b0.mjs} +537 -5
  134. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-design-support-0bac378d.mjs +137 -0
  135. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design.mjs +107 -37
  136. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +0 -27
  137. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +138 -133
  138. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +1 -5684
  139. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-artifact-review-ui.js +2568 -0
  140. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +10 -74
  141. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  142. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +8 -2
  143. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
  144. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +545 -4781
  145. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +219 -452
  146. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
  147. package/lib/host-packages/openai/.claude-plugin/marketplace.json +3 -3
  148. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +2 -2
  149. package/lib/host-packages/openai/openplanr/.openplanr-content.json +68 -124
  150. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-artifact-shell.mjs +2 -4
  151. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-document.mjs +26 -26
  152. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-handoff.mjs +850 -56
  153. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review-state-store.mjs +45 -0
  154. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +65 -74
  155. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-runtime-home.mjs +0 -1
  156. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share-cli-bridge.mjs +321 -0
  157. package/lib/host-packages/{claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs → openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-d707e49b.mjs} +762 -223
  158. package/lib/host-packages/{claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs → openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-9f6918b0.mjs} +537 -5
  159. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-design-support-0bac378d.mjs +137 -0
  160. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design.mjs +107 -37
  161. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +0 -27
  162. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +138 -133
  163. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +1 -5684
  164. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-artifact-review-ui.js +2568 -0
  165. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +10 -74
  166. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  167. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +8 -2
  168. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
  169. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +545 -4781
  170. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +219 -452
  171. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
  172. package/lib/host-packages/openai/openplanr/skills/delegate/SKILL.md +2 -1
  173. package/lib/host-packages/openai/openplanr/skills/delegate/openplanr.skill.json +1 -1
  174. package/lib/host-packages/openai/openplanr/skills/delegate/references/integration-review.md +26 -20
  175. package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +25 -1
  176. package/lib/host-packages/openai/openplanr/skills/delegate/references/run-handoff.md +2 -2
  177. package/lib/host-packages/openai/openplanr/skills/delegate/references/worktree-custody.md +17 -9
  178. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/claude.mjs +15 -3
  179. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/codex.mjs +38 -2
  180. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/native.mjs +5 -0
  181. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/custody.mjs +217 -10
  182. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/handoff.mjs +1080 -0
  183. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/integrate.mjs +96 -201
  184. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/integration-files.mjs +3 -382
  185. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/presentation.mjs +29 -12
  186. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-contract.mjs +11 -0
  187. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-execution.mjs +1 -1
  188. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-lifecycle.mjs +14 -10
  189. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-preparation.mjs +4 -0
  190. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-record.mjs +2 -2
  191. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +14 -8
  192. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +14 -8
  193. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +14 -8
  194. package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +1 -0
  195. package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +12 -1
  196. package/lib/host-packages/openai/openplanr/skills/investigate/references/fail-first.md +40 -0
  197. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +22 -10
  198. package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +12 -1
  199. package/lib/host-packages/openai/openplanr/skills/ship/references/fail-first.md +40 -0
  200. package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +7 -3
  201. package/package.json +8 -8
  202. package/dist/dashboard/assets/index-BU5fzjyz.css +0 -1
  203. package/dist/dashboard/assets/index-B_96uzCl.js +0 -572
  204. package/dist/dashboard/assets/index-B_96uzCl.js.map +0 -1
  205. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +0 -555
  206. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-compression.mjs +0 -4180
  207. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-encrypted-workspace-client.mjs +0 -647
  208. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-owner-custody.mjs +0 -129
  209. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-resource-pack.mjs +0 -698
  210. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs +0 -24
  211. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +0 -1993
  212. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-protocol-contracts-75a938cc.mjs +0 -222
  213. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs +0 -5907
  214. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-upload-spool.mjs +0 -198
  215. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-compression.js +0 -4175
  216. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/05-artifact-sharing.js +0 -65
  217. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +0 -1755
  218. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/07-artifact-sharing.js +0 -62
  219. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +0 -2633
  220. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +0 -49
  221. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +0 -108
  222. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +0 -170
  223. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +0 -97
  224. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +0 -56
  225. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/integration-transaction.mjs +0 -958
  226. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/integration-transaction.mjs +0 -958
  227. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +0 -555
  228. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-compression.mjs +0 -4180
  229. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-encrypted-workspace-client.mjs +0 -647
  230. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-owner-custody.mjs +0 -129
  231. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-resource-pack.mjs +0 -698
  232. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs +0 -24
  233. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +0 -1993
  234. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-75a938cc.mjs +0 -222
  235. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs +0 -5907
  236. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-upload-spool.mjs +0 -198
  237. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-compression.js +0 -4175
  238. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/05-artifact-sharing.js +0 -65
  239. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +0 -1755
  240. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/07-artifact-sharing.js +0 -62
  241. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +0 -2633
  242. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +0 -49
  243. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +0 -108
  244. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +0 -170
  245. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +0 -97
  246. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +0 -56
  247. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +0 -555
  248. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-compression.mjs +0 -4180
  249. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-encrypted-workspace-client.mjs +0 -647
  250. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-owner-custody.mjs +0 -129
  251. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-resource-pack.mjs +0 -698
  252. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs +0 -24
  253. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +0 -1993
  254. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-75a938cc.mjs +0 -222
  255. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs +0 -5907
  256. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-upload-spool.mjs +0 -198
  257. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/04-compression.js +0 -4175
  258. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/05-artifact-sharing.js +0 -65
  259. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +0 -1755
  260. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/07-artifact-sharing.js +0 -62
  261. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +0 -2633
  262. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +0 -49
  263. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +0 -108
  264. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +0 -170
  265. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +0 -97
  266. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +0 -56
  267. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/integration-transaction.mjs +0 -958
@@ -1,30 +1,20 @@
1
- import { createHash, randomUUID } from 'node:crypto';
1
+ import { randomUUID } from 'node:crypto';
2
2
  import { existsSync, realpathSync } from 'node:fs';
3
3
  import { lstat, readFile, rename, writeFile } from 'node:fs/promises';
4
4
  import { join, resolve, sep } from 'node:path';
5
5
  import { fileURLToPath, pathToFileURL } from 'node:url';
6
6
  import { captureFileState } from './custody.mjs';
7
+ import { integrateBranchDelta, recoverBranchApply, reviewBranchDelta } from './handoff.mjs';
7
8
  import { verifiedHelper } from './helper-snapshot.mjs';
8
9
  import { resolveSelectedChecks } from './integration-checks.mjs';
9
- import {
10
- covers,
11
- IntegrationError,
12
- rollbackWritten,
13
- sameState,
14
- treeIdentity,
15
- } from './integration-files.mjs';
16
- import {
17
- checkoutLock,
18
- integrateDelegateDelta,
19
- patchDigest,
20
- reviewDelegateDelta,
21
- } from './integration-transaction.mjs';
10
+ import { covers, git, IntegrationError } from './integration-files.mjs';
22
11
  import { implementationReport, reviewPresentation } from './presentation.mjs';
23
12
  import { cleanupAcceptedWorktree, recoverOwnedProcesses } from './run-lifecycle.mjs';
24
13
  import { readDelegateCustody, validateDelegateCapsule } from './run-preflight.mjs';
25
14
  import {
26
15
  assertRunRecordFits,
27
16
  closeRunRecord,
17
+ compactIntegrationState,
28
18
  processIdentity,
29
19
  readRunRecord,
30
20
  updateRunRecord,
@@ -33,13 +23,13 @@ import {
33
23
 
34
24
  export { discoverDelegateChecks, runDelegateChecks } from './integration-checks.mjs';
35
25
  export { IntegrationError } from './integration-files.mjs';
36
- export { integrateDelegateDelta, reviewDelegateDelta } from './integration-transaction.mjs';
37
26
 
38
27
  function publicReview(review) {
39
28
  return {
40
29
  ready: review.ready,
41
30
  changedPaths: review.changedPaths,
42
31
  violations: review.violations,
32
+ warnings: review.warnings ?? [],
43
33
  patch: review.patch.map(({ path, before, after }) => ({
44
34
  path,
45
35
  origin: review.changes?.find((change) => change.path === path)?.origin ?? 'delegate',
@@ -88,130 +78,79 @@ export async function delegateIntegrationCommand(action, input = {}) {
88
78
  });
89
79
  }
90
80
 
91
- async function writeJournal(path, value) {
92
- const bytes = Buffer.from(JSON.stringify(value));
93
- if (bytes.length > 32 * 1024 * 1024)
94
- throw new IntegrationError(
95
- 'E_INTEGRATION_JOURNAL_LIMIT',
96
- 'Integration recovery states exceed the private limit.',
97
- );
98
- const temporary = `${path}.${randomUUID()}.tmp`;
99
- await writeFile(temporary, bytes, { mode: 0o600, flag: 'wx' });
100
- await rename(temporary, path);
101
- return createHash('sha256').update(bytes).digest('hex');
81
+ async function closeIntegrated(record, runDirectory) {
82
+ const closed = await closeRunRecord(record.runId, {
83
+ disposition: 'integrated',
84
+ directory: runDirectory,
85
+ });
86
+ if (!closed.nativeSelection || closed.retainWorktree) return undefined;
87
+ try {
88
+ return await cleanupAcceptedWorktree(closed, runDirectory);
89
+ } catch (error) {
90
+ const cleanup = { status: 'failed', code: error.code ?? 'E_DELEGATE_CLEANUP' };
91
+ await updateRunRecord(record.runId, { cleanup }, { directory: runDirectory });
92
+ return cleanup;
93
+ }
102
94
  }
103
95
 
104
- async function recoverIntegration(input, record) {
96
+ async function recoverBranchIntegration(input, record) {
105
97
  const integration = record.integration;
106
98
  if (!['applying', 'interrupted'].includes(integration?.status))
107
99
  throw new IntegrationError('E_INTEGRATION_RECOVERY', 'This run has no unresolved integration.');
108
- if (integration.journalPath !== join(record.runPath, 'integration-journal.json'))
109
- throw new IntegrationError(
110
- 'E_INTEGRATION_JOURNAL',
111
- 'Integration recovery journal pointer is invalid.',
112
- );
113
- const details = await lstat(integration.journalPath);
114
- if (!details.isFile() || details.mode & 0o077 || details.size > 32 * 1024 * 1024)
115
- throw new IntegrationError('E_INTEGRATION_JOURNAL', 'Integration recovery journal is unsafe.');
116
- const bytes = await readFile(integration.journalPath);
117
- if (createHash('sha256').update(bytes).digest('hex') !== integration.journalDigest)
118
- throw new IntegrationError('E_INTEGRATION_JOURNAL', 'Integration recovery journal changed.');
119
- const journal = JSON.parse(bytes.toString('utf8'));
120
- if (journal.runId !== record.runId || journal.repositoryRoot !== record.repositoryRoot)
121
- throw new IntegrationError(
122
- 'E_INTEGRATION_JOURNAL',
123
- 'Integration recovery journal identity differs.',
124
- );
125
- const release = await checkoutLock(record.repositoryRoot);
126
- try {
127
- if (input.resolution === 'accept') {
128
- if (integration.cursor !== journal.changes.length || integration.pendingPath)
129
- throw new IntegrationError(
130
- 'E_INTEGRATION_RECOVERY_INCOMPLETE',
131
- 'Source writes did not complete; recover with rollback.',
132
- );
133
- for (const change of journal.changes) {
134
- if (!sameState(await captureFileState(record.repositoryRoot, change.path), change.after))
135
- throw new IntegrationError(
136
- 'E_INTEGRATION_RECOVERY_CONFLICT',
137
- 'Accepted source changed after interruption.',
138
- { path: change.path },
139
- );
140
- }
141
- if (
142
- record.nativeSelection &&
143
- (!journal.accepted?.candidateIdentity ||
144
- (await treeIdentity(record.repositoryRoot)) !== journal.accepted.candidateIdentity)
145
- )
146
- throw new IntegrationError(
147
- 'E_INTEGRATION_RECOVERY_CONFLICT',
148
- 'The resulting checkout differs from the verified candidate; recover with rollback and review again.',
149
- );
150
- await updateRunRecord(
151
- record.runId,
152
- { integration: { status: 'applied', at: new Date().toISOString(), ...journal.accepted } },
153
- { directory: input.runDirectory },
154
- );
155
- const closed = await closeRunRecord(record.runId, {
156
- disposition: 'integrated',
157
- directory: input.runDirectory,
158
- });
159
- let cleanup;
160
- if (closed.nativeSelection && !closed.retainWorktree) {
161
- try {
162
- cleanup = await cleanupAcceptedWorktree(closed, input.runDirectory);
163
- } catch (error) {
164
- cleanup = { status: 'failed', code: error.code ?? 'E_DELEGATE_CLEANUP' };
165
- await updateRunRecord(record.runId, { cleanup }, { directory: input.runDirectory });
166
- }
167
- }
168
- return {
169
- cleanup,
170
- runId: record.runId,
171
- status: 'completed',
172
- report: implementationReport({ status: 'completed', ...journal.accepted }, record.selector),
173
- recovered: 'accepted',
174
- };
175
- }
176
- if (input.resolution && input.resolution !== 'rollback')
177
- throw new IntegrationError(
178
- 'E_INTEGRATION_RECOVERY',
179
- 'Recovery resolution must be rollback or accept.',
180
- );
181
- const count = integration.cursor + (integration.pendingPath ? 1 : 0);
182
- const rollbackErrors = await rollbackWritten(
183
- record.repositoryRoot,
184
- journal.changes.slice(0, count),
185
- randomUUID(),
186
- );
100
+ const result = await recoverBranchApply(record, input.resolution);
101
+ const directory = { directory: input.runDirectory };
102
+ if (result.state === 'applied') {
103
+ const { status: _status, ...accepted } = integration;
104
+ const states = {};
105
+ for (const path of accepted.changedPaths)
106
+ states[path] = compactIntegrationState(await captureFileState(record.repositoryRoot, path));
187
107
  await updateRunRecord(
188
108
  record.runId,
189
- {
190
- integration: {
191
- ...integration,
192
- status: rollbackErrors.length ? 'interrupted' : 'rolled-back',
193
- rollbackErrors,
194
- },
195
- },
196
- { directory: input.runDirectory },
109
+ { integration: { ...accepted, status: 'applied', at: new Date().toISOString(), states } },
110
+ directory,
197
111
  );
112
+ await removeRestoreRef(record);
198
113
  return {
114
+ cleanup: await closeIntegrated(record, input.runDirectory),
199
115
  runId: record.runId,
200
- status: rollbackErrors.length ? 'blocked' : 'completed',
201
- recovered: rollbackErrors.length ? 'conflicts' : 'rolled-back',
202
- rollbackErrors,
203
- nextAction: rollbackErrors.length
204
- ? 'Preserve conflicting host edits and resolve the listed paths explicitly.'
205
- : 'Review the retained patch again before retrying apply.',
116
+ status: 'completed',
117
+ report: implementationReport({ status: 'completed', ...accepted }, record.selector),
118
+ recovered: 'accepted',
206
119
  };
207
- } finally {
208
- await release();
209
120
  }
121
+ await updateRunRecord(
122
+ record.runId,
123
+ {
124
+ integration: {
125
+ ...integration,
126
+ status: result.state,
127
+ restoredPaths: result.restored,
128
+ rollbackErrors: result.conflicts,
129
+ },
130
+ },
131
+ directory,
132
+ );
133
+ if (result.state === 'rolled-back') await removeRestoreRef(record);
134
+ return {
135
+ runId: record.runId,
136
+ status: result.conflicts.length ? 'blocked' : 'completed',
137
+ recovered: result.conflicts.length ? 'conflicts' : 'rolled-back',
138
+ rollbackErrors: result.conflicts,
139
+ nextAction: result.conflicts.length
140
+ ? 'Preserve conflicting host edits and resolve the listed paths explicitly.'
141
+ : 'Review the retained patch again before retrying apply.',
142
+ };
143
+ }
144
+
145
+ async function removeRestoreRef(record) {
146
+ const ref = record.integration.restoreRef;
147
+ if (ref && (await git(record.repositoryRoot, 'for-each-ref', ref)).length)
148
+ await git(record.repositoryRoot, 'update-ref', '-d', ref);
210
149
  }
211
150
 
212
151
  async function integrationCommandLocked(action, input, record) {
213
152
  record = await recoverOwnedProcesses(record, input.runDirectory);
214
- if (action === 'recover') return recoverIntegration(input, record);
153
+ if (action === 'recover') return recoverBranchIntegration(input, record);
215
154
  if (['applying', 'interrupted'].includes(record.integration?.status))
216
155
  throw new IntegrationError(
217
156
  'E_RUN_INTEGRATION_RECOVERY',
@@ -274,7 +213,7 @@ async function integrationCommandLocked(action, input, record) {
274
213
  preservePaths: input.preservePaths,
275
214
  };
276
215
  if (action === 'review') {
277
- const observed = await reviewDelegateDelta(common);
216
+ const observed = await reviewBranchDelta(common);
278
217
  if (observed.ready)
279
218
  await updateRunRecord(
280
219
  input.runId,
@@ -282,7 +221,7 @@ async function integrationCommandLocked(action, input, record) {
282
221
  verificationMutations:
283
222
  record.verification?.mutatedPaths ?? record.verificationMutations ?? [],
284
223
  reviewedPatch: {
285
- digest: patchDigest(observed),
224
+ digest: observed.tip,
286
225
  at: new Date().toISOString(),
287
226
  scopePaths,
288
227
  },
@@ -332,9 +271,29 @@ async function integrationCommandLocked(action, input, record) {
332
271
  const verificationProcess = await processIdentity();
333
272
  const evidencePath = join(record.runPath, `verification-${randomUUID()}.json`);
334
273
  let verification;
335
- const result = await integrateDelegateDelta({
274
+ const result = await integrateBranchDelta({
336
275
  ...common,
337
- capsule,
276
+ patchPath: join(record.runPath, 'patch.diff'),
277
+ onApplying: async (accepted) => {
278
+ const placeholder = { kind: 'file', mode: 0o644, digest: '0'.repeat(64) };
279
+ const current = await readRunRecord(record.runId, { directory: input.runDirectory });
280
+ assertRunRecordFits({
281
+ ...current,
282
+ integration: {
283
+ status: 'applied',
284
+ ...accepted,
285
+ states: Object.fromEntries(accepted.changedPaths.map((path) => [path, placeholder])),
286
+ },
287
+ status: 'closed',
288
+ disposition: 'integrated',
289
+ closedAt: new Date().toISOString(),
290
+ });
291
+ await updateRunRecord(
292
+ record.runId,
293
+ { integration: { status: 'applying', phase: 'source-write', ...accepted } },
294
+ { directory: input.runDirectory },
295
+ );
296
+ },
338
297
  checks: input.checks,
339
298
  preparation: input.preparation,
340
299
  baselineComparison: input.baselineComparison === true,
@@ -362,53 +321,6 @@ async function integrationCommandLocked(action, input, record) {
362
321
  generators: input.generators,
363
322
  timeoutMs: input.timeoutMs,
364
323
  reviewedDigest: record.reviewedPatch.digest,
365
- beforeApply: async ({ changes, ...accepted }) => {
366
- const current = await readRunRecord(record.runId, { directory: input.runDirectory });
367
- assertRunRecordFits({
368
- ...current,
369
- integration: { status: 'applied', ...accepted },
370
- status: 'closed',
371
- disposition: 'integrated',
372
- closedAt: new Date().toISOString(),
373
- });
374
- const journalPath = join(record.runPath, 'integration-journal.json');
375
- const journalDigest = await writeJournal(journalPath, {
376
- schemaVersion: '1.0.0',
377
- runId: record.runId,
378
- repositoryRoot: record.repositoryRoot,
379
- changes,
380
- accepted,
381
- });
382
- await updateRunRecord(
383
- record.runId,
384
- {
385
- integration: {
386
- status: 'applying',
387
- phase: 'source-write',
388
- journalPath,
389
- journalDigest,
390
- changedPaths: accepted.changedPaths,
391
- cursor: 0,
392
- pendingPath: null,
393
- },
394
- },
395
- { directory: input.runDirectory },
396
- );
397
- },
398
- onProgress: async (path, phase) => {
399
- const current = await readRunRecord(record.runId, { directory: input.runDirectory });
400
- await updateRunRecord(
401
- record.runId,
402
- {
403
- integration: {
404
- ...current.integration,
405
- cursor: current.integration.cursor + (phase === 'after' ? 1 : 0),
406
- pendingPath: phase === 'before' ? path : null,
407
- },
408
- },
409
- { directory: input.runDirectory },
410
- );
411
- },
412
324
  onAccepted: async (integration) =>
413
325
  updateRunRecord(
414
326
  input.runId,
@@ -417,18 +329,13 @@ async function integrationCommandLocked(action, input, record) {
417
329
  },
418
330
  { directory: input.runDirectory },
419
331
  ),
420
- onRolledBack: async ({ rollbackErrors, code }) => {
332
+ onRolledBack: async ({ code }) => {
421
333
  const current = await readRunRecord(record.runId, { directory: input.runDirectory });
422
334
  if (current.integration?.status !== 'applying') return;
423
335
  await updateRunRecord(
424
336
  record.runId,
425
337
  {
426
- integration: {
427
- ...current.integration,
428
- status: rollbackErrors.length ? 'interrupted' : 'rolled-back',
429
- rollbackErrors,
430
- code,
431
- },
338
+ integration: { ...current.integration, status: 'rolled-back', rollbackErrors: [], code },
432
339
  },
433
340
  { directory: input.runDirectory },
434
341
  );
@@ -442,32 +349,20 @@ async function integrationCommandLocked(action, input, record) {
442
349
  checks: result.checks ?? [],
443
350
  verification: verification ?? null,
444
351
  generatedPaths: result.generatedPaths ?? [],
352
+ unselectedDirtyPaths: result.unselectedDirtyPaths ?? [],
353
+ unselectedDirtyCount: result.unselectedDirtyCount ?? 0,
445
354
  generators: result.generators ?? [],
446
355
  code: result.code ?? null,
447
356
  rollbackErrors: result.rollbackErrors ?? [],
448
357
  nextAction: result.nextAction,
449
358
  };
450
359
  if (result.status === 'completed') {
451
- const closed = await closeRunRecord(input.runId, {
452
- disposition: 'integrated',
453
- directory: input.runDirectory,
454
- });
455
- if (closed.nativeSelection && !closed.retainWorktree) {
456
- try {
457
- output.cleanup = await cleanupAcceptedWorktree(closed, input.runDirectory);
458
- } catch (error) {
459
- output.cleanup = { status: 'failed', code: error.code ?? 'E_DELEGATE_CLEANUP' };
460
- output.violations.push({
461
- code: output.cleanup.code,
462
- message: 'Integration succeeded; owned worktree cleanup needs attention.',
463
- });
464
- await updateRunRecord(
465
- input.runId,
466
- { cleanup: output.cleanup },
467
- { directory: input.runDirectory },
468
- );
469
- }
470
- }
360
+ output.cleanup = await closeIntegrated(record, input.runDirectory);
361
+ if (output.cleanup?.status === 'failed')
362
+ output.violations.push({
363
+ code: output.cleanup.code,
364
+ message: 'Integration succeeded; owned worktree cleanup needs attention.',
365
+ });
471
366
  }
472
367
  return {
473
368
  ...output,