code-coordinator 0.5.136__tar.gz → 0.5.140__tar.gz

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 (866) hide show
  1. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/SOURCES.txt +4 -0
  4. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/scm_file_list.json +4 -0
  5. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agent.py +42 -0
  7. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agent_app.py +70 -0
  8. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/release.py +161 -26
  9. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/drive.py +71 -10
  10. code_coordinator-0.5.140/coord/reconcile_tick.py +65 -0
  11. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/AGENT_OPERATIONS.md +42 -0
  12. code_coordinator-0.5.140/tests/acceptance/ms-65/board_tabs_close_2283.rs +1049 -0
  13. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/manifest.yml +120 -0
  14. code_coordinator-0.5.140/tests/test_agent_drive_queue_reconcile_2373.py +157 -0
  15. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_drive.py +118 -7
  16. code_coordinator-0.5.140/tests/test_reconcile_tick.py +82 -0
  17. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_cordon_2101.py +160 -0
  18. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/dialogs.rs +28 -0
  19. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/escalation.rs +365 -0
  20. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/mod.rs +13 -0
  21. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/tests/acceptance.rs +1 -0
  22. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.claude/commands/board.md +0 -0
  23. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.claude/commands/complete-session.md +0 -0
  24. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.claude/commands/coordinator.md +0 -0
  25. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.githooks/_lib.sh +0 -0
  26. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.githooks/post-checkout +0 -0
  27. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.githooks/post-commit +0 -0
  28. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.githooks/post-merge +0 -0
  29. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/coord-ci-acceptance.yml +0 -0
  31. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/auto-release.yml +0 -0
  32. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/cargo-test.yml +0 -0
  33. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/publish.yml +0 -0
  34. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/release-tui.yml +0 -0
  35. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/test.yml +0 -0
  36. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.gitignore +0 -0
  37. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/CLAUDE.md +0 -0
  38. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/GOAL.md +0 -0
  39. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/LICENSE +0 -0
  40. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/MANIFEST.in +0 -0
  41. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/README.md +0 -0
  42. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/dependency_links.txt +0 -0
  43. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/entry_points.txt +0 -0
  44. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/requires.txt +0 -0
  45. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/top_level.txt +0 -0
  46. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/__init__.py +0 -0
  47. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/_board_mapping.py +0 -0
  48. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/acceptance.py +0 -0
  49. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/acceptance_drivers.py +0 -0
  50. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agent_update.py +0 -0
  51. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agents/opencode/.gitignore +0 -0
  52. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agents/opencode/agents/work.md +0 -0
  53. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agents/opencode/routing.jsonc +0 -0
  54. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/audit.py +0 -0
  55. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/auto_loop.py +0 -0
  56. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/block_log.py +0 -0
  57. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/board_bool_guard.py +0 -0
  58. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/cargo_cache.py +0 -0
  64. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/ci_github.py +0 -0
  65. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/ci_store.py +0 -0
  66. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/claim.py +0 -0
  67. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/cli.py +0 -0
  68. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/client.py +0 -0
  69. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/__init__.py +0 -0
  70. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/_common.py +0 -0
  71. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/acceptance.py +0 -0
  72. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/agent_ops.py +0 -0
  73. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/audit.py +0 -0
  74. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/dispatch.py +0 -0
  76. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/dispatch_workers.py +0 -0
  77. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/drive_queue.py +0 -0
  79. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/gate_a.py +0 -0
  80. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/gates.py +0 -0
  81. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/issues.py +0 -0
  82. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/lifecycle.py +0 -0
  83. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/merge.py +0 -0
  84. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/milestone.py +0 -0
  85. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/plan_followup.py +0 -0
  86. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/plans.py +0 -0
  87. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/portal.py +0 -0
  88. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/terminal.py +0 -0
  96. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/test_gate.py +0 -0
  97. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/tui.py +0 -0
  98. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/comments.py +0 -0
  99. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/config.py +0 -0
  100. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/config_reload.py +0 -0
  101. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/conflict_fix.py +0 -0
  102. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dao.py +0 -0
  103. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/__init__.py +0 -0
  104. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/fixture.py +0 -0
  105. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/index.html +0 -0
  106. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/server.py +0 -0
  107. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/terminal.py +0 -0
  108. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/.gitignore +0 -0
  109. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/components.json +0 -0
  110. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
  111. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  112. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
  113. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
  114. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  115. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  116. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  117. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  118. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  119. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/index.html +0 -0
  120. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  121. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/sw.js +0 -0
  122. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  123. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  124. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  125. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  126. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  127. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  128. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  129. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  130. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  131. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  132. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/eslint.config.js +0 -0
  133. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/index.html +0 -0
  134. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  135. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/package-lock.json +0 -0
  136. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/package.json +0 -0
  137. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  138. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/playwright.config.ts +0 -0
  139. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/postcss.config.js +0 -0
  140. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  141. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  142. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  143. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/App.tsx +0 -0
  144. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/api/client.ts +0 -0
  145. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  146. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  147. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  148. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  149. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  150. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  151. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  152. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  153. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  154. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  155. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  156. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  157. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  158. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  159. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  160. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  161. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  162. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  163. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  164. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  165. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  166. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  167. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  168. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  169. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  170. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  171. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  172. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  173. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  174. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  175. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  176. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  177. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  178. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  179. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  180. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/index.css +0 -0
  181. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  182. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  183. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/main.tsx +0 -0
  184. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  185. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  186. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  187. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  188. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  189. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  190. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  191. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  192. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  193. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  194. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  195. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  196. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  197. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  198. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  199. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  200. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  201. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  202. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  203. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  204. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  205. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  206. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  207. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/tailwind.config.js +0 -0
  208. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/tsconfig.json +0 -0
  209. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  210. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/vite.config.ts +0 -0
  211. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/db.py +0 -0
  212. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dead_end.py +0 -0
  213. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/README.md +0 -0
  214. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-agent.service +0 -0
  215. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-db-backup.service +0 -0
  216. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-db-backup.sh +0 -0
  217. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-db-backup.timer +0 -0
  218. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-drive-queue.service +0 -0
  219. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-drive-queue.timer +0 -0
  220. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-notify.service +0 -0
  221. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-notify.timer +0 -0
  222. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-release-propagate.service +0 -0
  223. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-release-propagate.timer +0 -0
  224. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-release-window.service +0 -0
  225. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-release-window.timer +0 -0
  226. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-serve.service +0 -0
  227. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-web-dist-build.service +0 -0
  228. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-web-dist-build.timer +0 -0
  229. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-web.service +0 -0
  230. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy_manifest.py +0 -0
  231. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy_units.py +0 -0
  232. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deps.py +0 -0
  233. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/diagnose.py +0 -0
  234. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dispatch.py +0 -0
  235. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dist_name.py +0 -0
  236. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/drive_queue.py +0 -0
  237. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/drive_state.py +0 -0
  238. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/events.py +0 -0
  239. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/failure_class.py +0 -0
  240. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/filelock.py +0 -0
  241. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/fleet_config_health.py +0 -0
  242. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/freshness.py +0 -0
  243. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/gate_a.py +0 -0
  244. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/gate_b.py +0 -0
  245. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/gate_snapshot.py +0 -0
  246. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/gates.py +0 -0
  247. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/github_ops.py +0 -0
  248. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/goal.py +0 -0
  249. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/graph_health.py +0 -0
  250. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/__init__.py +0 -0
  251. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/aggregate.py +0 -0
  252. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/__init__.py +0 -0
  253. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/agent_install.py +0 -0
  254. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/cargo_targets.py +0 -0
  255. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/claude_binary.py +0 -0
  256. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/deploy_lane_facts.py +0 -0
  257. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/disk.py +0 -0
  258. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/fleet_board.py +0 -0
  259. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  260. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/fleet_phantom.py +0 -0
  261. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/fleet_unit_drift.py +0 -0
  262. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/graph.py +0 -0
  263. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/graphify_cli.py +0 -0
  264. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/index_lock.py +0 -0
  265. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/plan_usage.py +0 -0
  266. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/repo_state.py +0 -0
  267. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/spawned_coord.py +0 -0
  268. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/timer_active.py +0 -0
  269. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/toolchain.py +0 -0
  270. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/unit_drift.py +0 -0
  271. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/unit_enablement.py +0 -0
  272. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/worktrees.py +0 -0
  273. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/cli.py +0 -0
  274. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/context.py +0 -0
  275. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/fleet_snapshot.py +0 -0
  276. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/models.py +0 -0
  277. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/pypi.py +0 -0
  278. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/registry.py +0 -0
  279. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/render.py +0 -0
  280. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/units.py +0 -0
  281. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/hooks.py +0 -0
  282. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/housekeeping.py +0 -0
  283. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/interactive.py +0 -0
  284. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/issue_store.py +0 -0
  285. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/liveness_auditor.py +0 -0
  286. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/machine_pause.py +0 -0
  287. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/merge_queue.py +0 -0
  288. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/milestone_chat.py +0 -0
  289. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/milestone_dispatch.py +0 -0
  290. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/milestone_gate.py +0 -0
  291. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/milestone_order.py +0 -0
  292. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/mock_author.py +0 -0
  293. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/models.py +0 -0
  294. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/network.py +0 -0
  295. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/new_issue_chat.py +0 -0
  296. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/__init__.py +0 -0
  297. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/baseline.py +0 -0
  298. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/cli.py +0 -0
  299. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/collect.py +0 -0
  300. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/digest.py +0 -0
  301. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/models.py +0 -0
  302. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/predicate.py +0 -0
  303. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/service.py +0 -0
  304. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/store.py +0 -0
  305. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/transport.py +0 -0
  306. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notify.py +0 -0
  307. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/openapi.py +0 -0
  308. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/overlap_fence.py +0 -0
  309. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/overlap_predict.py +0 -0
  310. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/parentage.py +0 -0
  311. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/parentage_github.py +0 -0
  312. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/pipeline.py +0 -0
  313. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/plan_parser.py +0 -0
  314. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/plans.py +0 -0
  315. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/platform_paths.py +0 -0
  316. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/portal_bridge.py +0 -0
  317. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/portal_store.py +0 -0
  318. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/portal_sync.py +0 -0
  319. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/pr_body_lint.py +0 -0
  320. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/prereqs.py +0 -0
  321. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/progress.py +0 -0
  322. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/__init__.py +0 -0
  323. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/base.py +0 -0
  324. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/claude.py +0 -0
  325. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/claude_pty.py +0 -0
  326. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/opencode.py +0 -0
  327. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/queue_diagnose.py +0 -0
  328. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/reconcile.py +0 -0
  329. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/refine_chat.py +0 -0
  330. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/release_cordon.py +0 -0
  331. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/release_propagate.py +0 -0
  332. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/release_verify.py +0 -0
  333. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/release_window.py +0 -0
  334. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/repo_edit.py +0 -0
  335. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/repo_onboard.py +0 -0
  336. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/reports.py +0 -0
  337. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/revalidate.py +0 -0
  338. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/review.py +0 -0
  339. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/scorecard.py +0 -0
  340. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/serve_app.py +0 -0
  341. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/skills/portal-followup/SKILL.md +0 -0
  342. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/skills/update-issue/SKILL.md +0 -0
  343. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/smoke.py +0 -0
  344. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/spend_ceiling.py +0 -0
  345. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/split_work.py +0 -0
  346. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/stage_projection.py +0 -0
  347. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/state.py +0 -0
  348. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/test_author.py +0 -0
  349. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/test_chat.py +0 -0
  350. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/test_orchestrator.py +0 -0
  351. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/test_report.py +0 -0
  352. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/tui_release.py +0 -0
  353. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/usage.py +0 -0
  354. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/usage_limits.py +0 -0
  355. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/usage_rollup.py +0 -0
  356. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/worker_events.py +0 -0
  357. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coordinator.example.yml +0 -0
  358. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-agent.service +0 -0
  359. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-db-backup.service +0 -0
  360. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-db-backup.sh +0 -0
  361. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-db-backup.timer +0 -0
  362. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-drive-queue.service +0 -0
  363. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-drive-queue.timer +0 -0
  364. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-notify.service +0 -0
  365. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-notify.timer +0 -0
  366. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-release-propagate.service +0 -0
  367. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-release-propagate.timer +0 -0
  368. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-release-window.service +0 -0
  369. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-release-window.timer +0 -0
  370. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-serve.service +0 -0
  371. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web-dist-build.service +0 -0
  372. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web-dist-build.sh +0 -0
  373. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web-dist-build.timer +0 -0
  374. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web-rollback.sh +0 -0
  375. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web.service +0 -0
  376. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/node-shim.sh +0 -0
  377. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/ARCHITECTURE.md +0 -0
  378. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/ARCH_SECURITY_GATES.md +0 -0
  379. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/COCKPIT.md +0 -0
  380. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/CONTROL_CENTER.md +0 -0
  381. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/COST_DISCIPLINE.md +0 -0
  382. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/CROSS_PLATFORM.md +0 -0
  383. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/CUSTOMER_PORTAL.md +0 -0
  384. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/DRIVE_QUEUE.md +0 -0
  385. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/EPHEMERAL_WORKERS.md +0 -0
  386. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/FORGE_MIGRATION.md +0 -0
  387. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/GRAPHIFY_SETUP.md +0 -0
  388. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/ISSUE_GUIDANCE.md +0 -0
  389. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/MAC_MINI.md +0 -0
  390. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  391. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/NOTIFIER.md +0 -0
  392. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/OPENCODE_VERIFICATION.md +0 -0
  393. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/OPERATING_GOTCHAS.md +0 -0
  394. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/ORACLE_LOOP.md +0 -0
  395. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/PHONE_WEBAPP.md +0 -0
  396. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/PIPELINE_V2.md +0 -0
  397. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/PLATFORM_EVOLUTION.md +0 -0
  398. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/SECOND_BACKEND.md +0 -0
  399. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/STORE_SERVICE.md +0 -0
  400. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  401. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/WEB_CONTROL_CENTER.md +0 -0
  402. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/WSL_WINDOWS_WORKER.md +0 -0
  403. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/README.md +0 -0
  404. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/_tokens.css +0 -0
  405. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/issue-detail.html +0 -0
  406. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/pipeline-narrow.html +0 -0
  407. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/pipeline-wide.html +0 -0
  408. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/graphify-out/.gitignore +0 -0
  409. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/install-agent.sh +0 -0
  410. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/pyproject.toml +0 -0
  411. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/audit_review_verdict_overrides.py +0 -0
  412. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  413. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/build-worker-image.sh +0 -0
  414. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/coordinator-machine.py +0 -0
  415. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/epic-down.sh +0 -0
  416. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/epic-up.sh +0 -0
  417. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/preflight.sh +0 -0
  418. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/provision-worker.sh +0 -0
  419. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  420. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  421. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/verify-github-token.sh +0 -0
  422. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/codegen.py +0 -0
  423. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/coord-test-runner.sh +0 -0
  424. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/drive-batch.sh +0 -0
  425. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/gen_board_fixture.py +0 -0
  426. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/next_release_tag.py +0 -0
  427. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/run_tests_in_populated_home.sh +0 -0
  428. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/run_tests_without_gh.sh +0 -0
  429. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/smoke_437_interactive.py +0 -0
  430. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/verify_878_review_capture.py +0 -0
  431. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/verify_release_published.py +0 -0
  432. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/verify_release_wheel.py +0 -0
  433. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/setup.cfg +0 -0
  434. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/SMOKE_SET.md +0 -0
  435. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/__init__.py +0 -0
  436. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  437. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/contract.md +0 -0
  438. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/manifest.yml +0 -0
  439. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  440. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  441. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  442. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  443. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/conftest.py +0 -0
  444. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/contract.md +0 -0
  445. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/manifest.yml +0 -0
  446. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  447. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  448. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/contract.md +0 -0
  449. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/manifest.yml +0 -0
  450. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  451. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  452. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  453. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  454. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  455. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  456. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  457. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  458. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  459. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  460. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/contract.md +0 -0
  461. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  462. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  463. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/manifest.yml +0 -0
  464. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  465. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/tsconfig.json +0 -0
  466. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  467. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/contract.md +0 -0
  468. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  469. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  470. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  471. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  472. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  473. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  474. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  475. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  476. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  477. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/conftest.py +0 -0
  478. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/board-pipeline-basic.json +0 -0
  479. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  480. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  481. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  482. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  483. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/all_pass.json +0 -0
  484. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  485. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/mixed_fail.json +0 -0
  486. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  487. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  488. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/skip.json +0 -0
  489. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/truncated.json +0 -0
  490. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  491. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  492. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  493. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  494. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  495. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  496. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  497. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  498. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_acceptance.py +0 -0
  499. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_acceptance_drivers.py +0 -0
  500. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent.py +0 -0
  501. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_api_error.py +0 -0
  502. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_app.py +0 -0
  503. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_branch_base.py +0 -0
  504. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_branch_capture.py +0 -0
  505. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_config_free_1712.py +0 -0
  506. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_deploy_units_endpoint.py +0 -0
  507. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_dirty_worktree.py +0 -0
  508. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_graph_self_heal.py +0 -0
  509. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_health_h3.py +0 -0
  510. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_idle_restart.py +0 -0
  511. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_push_failure.py +0 -0
  512. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_reap.py +0 -0
  513. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_repos_and_pull.py +0 -0
  514. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_restart_services_endpoint.py +0 -0
  515. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_startup_diagnostics.py +0 -0
  516. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_update.py +0 -0
  517. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_update_bluegreen.py +0 -0
  518. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_usage_limit.py +0 -0
  519. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_zero_commit.py +0 -0
  520. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_ambient_home_isolation.py +0 -0
  521. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_approve_reject_plan.py +0 -0
  522. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_approve_usage_gate.py +0 -0
  523. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_assignment_already_recorded_daemon.py +0 -0
  524. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_audit_log.py +0 -0
  525. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_audit_outcome.py +0 -0
  526. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_audit_query.py +0 -0
  527. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_auto_loop.py +0 -0
  528. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_auto_release_publish_2035.py +0 -0
  529. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_base_checkout_restore.py +0 -0
  530. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_block_log.py +0 -0
  531. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_cap_762.py +0 -0
  532. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_fixture.py +0 -0
  533. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_read_path.py +0 -0
  534. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_service.py +0 -0
  535. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_state.py +0 -0
  536. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_wire.py +0 -0
  537. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_brain.py +0 -0
  538. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_branch_model.py +0 -0
  539. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_bug_intake.py +0 -0
  540. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_build_worker_image_env_update.py +0 -0
  541. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cargo_cache.py +0 -0
  542. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_ci_acceptance_gate_1950.py +0 -0
  543. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_ci_parity_2091.py +0 -0
  544. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_ci_store.py +0 -0
  545. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_claim.py +0 -0
  546. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_acceptance.py +0 -0
  547. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign.py +0 -0
  548. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  549. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign_interactive_remote.py +0 -0
  550. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign_provider.py +0 -0
  551. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  552. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_audit.py +0 -0
  553. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_chat_continue.py +0 -0
  554. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_decide.py +0 -0
  555. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_diagnose_config_provenance.py +0 -0
  556. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_diagnose_graph.py +0 -0
  557. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_doctor.py +0 -0
  558. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_doctor_config_free_1801.py +0 -0
  559. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  560. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_drive.py +0 -0
  561. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_drive_queue.py +0 -0
  562. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_escalate.py +0 -0
  563. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_fix_headless_review.py +0 -0
  564. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_gate_a.py +0 -0
  565. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_install_drift.py +0 -0
  566. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_install_skills.py +0 -0
  567. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_issue_create_label.py +0 -0
  568. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_issue_reopen.py +0 -0
  569. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_merge.py +0 -0
  570. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_assign.py +0 -0
  571. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_capture.py +0 -0
  572. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_chat_add_child.py +0 -0
  573. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_dispatch.py +0 -0
  574. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_gate_b.py +0 -0
  575. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_gate_c.py +0 -0
  576. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_order.py +0 -0
  577. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  578. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_ship.py +0 -0
  579. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_network.py +0 -0
  580. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_new_issue_chat.py +0 -0
  581. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_plans.py +0 -0
  582. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_portal.py +0 -0
  583. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_pull_artifact.py +0 -0
  584. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_queue.py +0 -0
  585. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_reattach_sessions.py +0 -0
  586. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_refine_board.py +0 -0
  587. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_release_preflight.py +0 -0
  588. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_release_propagate.py +0 -0
  589. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_release_window.py +0 -0
  590. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_repo_2220.py +0 -0
  591. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_scorecard.py +0 -0
  592. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_set_review_findings.py +0 -0
  593. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_advisory_terminal.py +0 -0
  594. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_merge_queue.py +0 -0
  595. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_provider.py +0 -0
  596. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_review_finalizing.py +0 -0
  597. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_test_failed_tag.py +0 -0
  598. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_usage_limit.py +0 -0
  599. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_sync_comments_873.py +0 -0
  600. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_test_plan.py +0 -0
  601. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_track.py +0 -0
  602. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_tui_update.py +0 -0
  603. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_wait.py +0 -0
  604. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_client_base_install.py +0 -0
  605. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_comments.py +0 -0
  606. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_completion_summary.py +0 -0
  607. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config.py +0 -0
  608. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_acceptance.py +0 -0
  609. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_audit.py +0 -0
  610. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_pricing.py +0 -0
  611. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  612. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_usage_gate.py +0 -0
  613. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_conflict_fix.py +0 -0
  614. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_conflict_fix_semantic.py +0 -0
  615. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test.py +0 -0
  616. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test_runner_baseline.py +0 -0
  617. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test_runner_populated_home.py +0 -0
  618. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test_runner_routing.py +0 -0
  619. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test_runner_toolchain.py +0 -0
  620. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_web_sse_restart_live.py +0 -0
  621. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coordinator_machine.py +0 -0
  622. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cross_platform_imports.py +0 -0
  623. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dashboard.py +0 -0
  624. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dashboard_fixture.py +0 -0
  625. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dashboard_terminal.py +0 -0
  626. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dashboard_terminal_live.py +0 -0
  627. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_db.py +0 -0
  628. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dead_end.py +0 -0
  629. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_coord_db_backup.py +0 -0
  630. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_coord_web_dist.py +0 -0
  631. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_coord_web_rollback.py +0 -0
  632. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_drive_queue_unit.py +0 -0
  633. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_manifest.py +0 -0
  634. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_units_lane.py +0 -0
  635. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_web_unit.py +0 -0
  636. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deps.py +0 -0
  637. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_diagnose.py +0 -0
  638. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dispatch.py +0 -0
  639. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dispatch_target_validation.py +0 -0
  640. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dist_name.py +0 -0
  641. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_done_housekeeping.py +0 -0
  642. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_drive_queue.py +0 -0
  643. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_drive_state.py +0 -0
  644. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_drive_tmux.py +0 -0
  645. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_epic_up_capability_detection.py +0 -0
  646. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  647. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_epic_up_image_provenance.py +0 -0
  648. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_errors.py +0 -0
  649. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_events.py +0 -0
  650. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_failure_class.py +0 -0
  651. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_filelock.py +0 -0
  652. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  653. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_fix_of_force_override.py +0 -0
  654. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_fleet_config_health.py +0 -0
  655. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_fleet_health_probes.py +0 -0
  656. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_fleet_health_snapshot.py +0 -0
  657. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_freshness.py +0 -0
  658. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gate_a.py +0 -0
  659. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gate_b.py +0 -0
  660. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gate_snapshot_staleness.py +0 -0
  661. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gates.py +0 -0
  662. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  663. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_generated_types_fixture.py +0 -0
  664. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_github_ops.py +0 -0
  665. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_goal.py +0 -0
  666. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_graph_health.py +0 -0
  667. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_graph_selfheal_absent_2237.py +0 -0
  668. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_handoff.py +0 -0
  669. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_checks.py +0 -0
  670. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_cli.py +0 -0
  671. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_cli_graph.py +0 -0
  672. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_config.py +0 -0
  673. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_context.py +0 -0
  674. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_deploy_lane_facts.py +0 -0
  675. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_incident_regression.py +0 -0
  676. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_pypi.py +0 -0
  677. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_registry.py +0 -0
  678. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_timer_active.py +0 -0
  679. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_toolchain.py +0 -0
  680. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_unit_drift.py +0 -0
  681. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_unit_enablement.py +0 -0
  682. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_hooks.py +0 -0
  683. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_human_attended_437.py +0 -0
  684. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_init.py +0 -0
  685. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_integration.py +0 -0
  686. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_briefing_echo.py +0 -0
  687. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_prefill_state.py +0 -0
  688. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_session_relaunch.py +0 -0
  689. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_test_verdict_backstop.py +0 -0
  690. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_token_attribution.py +0 -0
  691. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_worktree.py +0 -0
  692. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_issue_store_seam.py +0 -0
  693. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_liveness_auditor.py +0 -0
  694. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_liveness_notify.py +0 -0
  695. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_machine_pause.py +0 -0
  696. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_merge_queue.py +0 -0
  697. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_merge_verify.py +0 -0
  698. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_chat.py +0 -0
  699. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_dispatch.py +0 -0
  700. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_gate.py +0 -0
  701. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_order.py +0 -0
  702. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_seam.py +0 -0
  703. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_mock_author.py +0 -0
  704. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_model_tiering.py +0 -0
  705. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_models.py +0 -0
  706. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_models_config_labels.py +0 -0
  707. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_needs_attention.py +0 -0
  708. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_network.py +0 -0
  709. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_new_issue_chat.py +0 -0
  710. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_next_release_tag.py +0 -0
  711. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_no_direct_gh_calls.py +0 -0
  712. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_node_shim.py +0 -0
  713. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_baseline.py +0 -0
  714. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_cli.py +0 -0
  715. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_collect.py +0 -0
  716. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_config.py +0 -0
  717. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_drive_seam.py +0 -0
  718. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_isolation.py +0 -0
  719. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_predicate.py +0 -0
  720. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_quiet_hours.py +0 -0
  721. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_service.py +0 -0
  722. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notify.py +0 -0
  723. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notify_drain.py +0 -0
  724. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_openapi.py +0 -0
  725. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_operational_defaults.py +0 -0
  726. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_overlap_fence.py +0 -0
  727. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_overlap_predict.py +0 -0
  728. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_packaged_deploy_units.py +0 -0
  729. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_parentage.py +0 -0
  730. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_paste_landed.py +0 -0
  731. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_pipeline.py +0 -0
  732. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_followup_approve_plan_command.py +0 -0
  733. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_followup_pr_command.py +0 -0
  734. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_followup_review_command.py +0 -0
  735. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_only.py +0 -0
  736. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_parser.py +0 -0
  737. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_platform_paths.py +0 -0
  738. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_portal_bridge.py +0 -0
  739. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_portal_config.py +0 -0
  740. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_portal_sync.py +0 -0
  741. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_pr_body_lint.py +0 -0
  742. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_prereqs.py +0 -0
  743. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_production_db_guard.py +0 -0
  744. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_progress.py +0 -0
  745. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_provider_seam.py +0 -0
  746. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_providers.py +0 -0
  747. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_providers_config_labels.py +0 -0
  748. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_providers_pty.py +0 -0
  749. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_quiet_hours.py +0 -0
  750. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_quiet_hours_store_2146.py +0 -0
  751. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reap_merged_sessions.py +0 -0
  752. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reap_stale_interactive_tick.py +0 -0
  753. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile.py +0 -0
  754. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_branch.py +0 -0
  755. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_completions.py +0 -0
  756. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_merges.py +0 -0
  757. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_no_agent_record.py +0 -0
  758. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_usage_limit_done.py +0 -0
  759. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_refine_chat.py +0 -0
  760. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  761. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_cordon_deadlock_2240.py +0 -0
  762. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_propagate.py +0 -0
  763. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_unified_1242.py +0 -0
  764. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_verify.py +0 -0
  765. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_window.py +0 -0
  766. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_remote_auto_prune.py +0 -0
  767. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_remote_interactive_reaper.py +0 -0
  768. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_repo_edit_2220.py +0 -0
  769. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_repo_graph_fleet_2237.py +0 -0
  770. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_repo_onboard_2220.py +0 -0
  771. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_report_result_push.py +0 -0
  772. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reports.py +0 -0
  773. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_retry.py +0 -0
  774. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_retry_advisory_1606.py +0 -0
  775. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_retry_type_1636.py +0 -0
  776. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_revalidate.py +0 -0
  777. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review.py +0 -0
  778. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_end_review_without_verdict.py +0 -0
  779. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_parse_failure_diagnostic.py +0 -0
  780. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_reaffirm.py +0 -0
  781. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_state.py +0 -0
  782. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_verdict_backstop.py +0 -0
  783. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_verdict_override_audit.py +0 -0
  784. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_verdict_relay.py +0 -0
  785. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_zero_commits.py +0 -0
  786. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_scoped_review_wiring.py +0 -0
  787. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_scorecard.py +0 -0
  788. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_serve.py +0 -0
  789. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_serve_app_board_trim.py +0 -0
  790. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_session.py +0 -0
  791. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_slice_issue_attribution.py +0 -0
  792. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_smoke.py +0 -0
  793. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_smoke_live_checkout_restore.py +0 -0
  794. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_smoke_workflow.py +0 -0
  795. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_spend_ceiling.py +0 -0
  796. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_spend_ceiling_coordinator.py +0 -0
  797. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_split.py +0 -0
  798. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_split_work.py +0 -0
  799. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_stage_projection.py +0 -0
  800. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_stalled_pipeline.py +0 -0
  801. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_state.py +0 -0
  802. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_state_review_findings_daemon.py +0 -0
  803. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_status_fleet_footer.py +0 -0
  804. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_stop_1567.py +0 -0
  805. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_stuck.py +0 -0
  806. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_terminal_command.py +0 -0
  807. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_author.py +0 -0
  808. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_chat.py +0 -0
  809. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_orchestrator.py +0 -0
  810. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_report.py +0 -0
  811. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_verdict_parsing.py +0 -0
  812. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_verdict_transcript_floor.py +0 -0
  813. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_thin_client_board_audit.py +0 -0
  814. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_thin_client_config_load_1080.py +0 -0
  815. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_thin_client_daemon_routing_906.py +0 -0
  816. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_tmux_host.py +0 -0
  817. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_tmux_session.py +0 -0
  818. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_transcript_floor.py +0 -0
  819. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_usage.py +0 -0
  820. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_usage_limits.py +0 -0
  821. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_usage_rollup.py +0 -0
  822. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_venv_live_install_2121.py +0 -0
  823. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_version_single_source.py +0 -0
  824. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_watch.py +0 -0
  825. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  826. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worker_events.py +0 -0
  827. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worker_image_pin_sync.py +0 -0
  828. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worker_safety.py +0 -0
  829. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worker_test_scoping.py +0 -0
  830. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worktree.py +0 -0
  831. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  832. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/Cargo.lock +0 -0
  833. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/Cargo.toml +0 -0
  834. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/cargo-config-local-quadraui.toml.example +0 -0
  835. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/audit.rs +0 -0
  836. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/chat.rs +0 -0
  837. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/data.rs +0 -0
  838. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/doc_tabs.rs +0 -0
  839. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/drive.rs +0 -0
  840. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/drive_queue.rs +0 -0
  841. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/events.rs +0 -0
  842. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/fixtures.rs +0 -0
  843. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/fleet_health.rs +0 -0
  844. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/fleet_sessions.rs +0 -0
  845. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/fleet_terminals.rs +0 -0
  846. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/format.rs +0 -0
  847. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/milestone_dag.rs +0 -0
  848. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/msv.rs +0 -0
  849. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/pipeline.rs +0 -0
  850. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/plans.rs +0 -0
  851. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/render.rs +0 -0
  852. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/reports.rs +0 -0
  853. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/sessions.rs +0 -0
  854. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/settings_ui.rs +0 -0
  855. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/sidebar.rs +0 -0
  856. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/terminal.rs +0 -0
  857. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/tests.rs +0 -0
  858. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/types.rs +0 -0
  859. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/workspace.rs +0 -0
  860. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/bin/gtk.rs +0 -0
  861. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/commands.rs +0 -0
  862. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/lib.rs +0 -0
  863. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/main.rs +0 -0
  864. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/settings.rs +0 -0
  865. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/tests/cli.rs +0 -0
  866. {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.136
3
+ Version: 0.5.140
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.136
3
+ Version: 0.5.140
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -112,6 +112,7 @@ coord/prereqs.py
112
112
  coord/progress.py
113
113
  coord/queue_diagnose.py
114
114
  coord/reconcile.py
115
+ coord/reconcile_tick.py
115
116
  coord/refine_chat.py
116
117
  coord/release_cordon.py
117
118
  coord/release_propagate.py
@@ -431,6 +432,7 @@ tests/test_agent_branch_capture.py
431
432
  tests/test_agent_config_free_1712.py
432
433
  tests/test_agent_deploy_units_endpoint.py
433
434
  tests/test_agent_dirty_worktree.py
435
+ tests/test_agent_drive_queue_reconcile_2373.py
434
436
  tests/test_agent_graph_self_heal.py
435
437
  tests/test_agent_health_h3.py
436
438
  tests/test_agent_idle_restart.py
@@ -682,6 +684,7 @@ tests/test_reconcile_branch.py
682
684
  tests/test_reconcile_completions.py
683
685
  tests/test_reconcile_merges.py
684
686
  tests/test_reconcile_no_agent_record.py
687
+ tests/test_reconcile_tick.py
685
688
  tests/test_reconcile_usage_limit_done.py
686
689
  tests/test_refine_chat.py
687
690
  tests/test_release_cordon_2101.py
@@ -788,6 +791,7 @@ tests/acceptance/ms-51/manifest.yml
788
791
  tests/acceptance/ms-51/tsconfig.json
789
792
  tests/acceptance/ms-51/mocks/home-active.html
790
793
  tests/acceptance/ms-65/board_tabs_2282.rs
794
+ tests/acceptance/ms-65/board_tabs_close_2283.rs
791
795
  tests/acceptance/ms-65/contract.md
792
796
  tests/acceptance/ms-65/manifest.yml
793
797
  tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
@@ -293,6 +293,7 @@
293
293
  "coord/providers/opencode.py",
294
294
  "coord/queue_diagnose.py",
295
295
  "coord/reconcile.py",
296
+ "coord/reconcile_tick.py",
296
297
  "coord/refine_chat.py",
297
298
  "coord/release_cordon.py",
298
299
  "coord/release_propagate.py",
@@ -431,6 +432,7 @@
431
432
  "tests/acceptance/ms-51/mocks/home-active.html",
432
433
  "tests/acceptance/ms-51/tsconfig.json",
433
434
  "tests/acceptance/ms-65/board_tabs_2282.rs",
435
+ "tests/acceptance/ms-65/board_tabs_close_2283.rs",
434
436
  "tests/acceptance/ms-65/contract.md",
435
437
  "tests/acceptance/ms-65/manifest.yml",
436
438
  "tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen",
@@ -473,6 +475,7 @@
473
475
  "tests/test_agent_config_free_1712.py",
474
476
  "tests/test_agent_deploy_units_endpoint.py",
475
477
  "tests/test_agent_dirty_worktree.py",
478
+ "tests/test_agent_drive_queue_reconcile_2373.py",
476
479
  "tests/test_agent_graph_self_heal.py",
477
480
  "tests/test_agent_health_h3.py",
478
481
  "tests/test_agent_idle_restart.py",
@@ -724,6 +727,7 @@
724
727
  "tests/test_reconcile_completions.py",
725
728
  "tests/test_reconcile_merges.py",
726
729
  "tests/test_reconcile_no_agent_record.py",
730
+ "tests/test_reconcile_tick.py",
727
731
  "tests/test_reconcile_usage_limit_done.py",
728
732
  "tests/test_refine_chat.py",
729
733
  "tests/test_release_cordon_2101.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.136",
2
+ "tag": "0.5.140",
3
3
  "distance": 0,
4
- "node": "g44c61fdca127a9fd4f56bc83b75d60e32e623366",
4
+ "node": "g99644043cc6f5e860c84b649e4a026a2d231dadb",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-18"
@@ -6102,6 +6102,48 @@ class AgentServer:
6102
6102
  self._local_health_cache = None
6103
6103
  return {**result.to_dict(), "repo": repo_name}
6104
6104
 
6105
+ def reconcile_drive_queue(self, *, timeout: float = 120.0) -> dict:
6106
+ """``coord drive-queue tick --reconcile-only`` — run on THIS machine
6107
+ (#2373 — ``coord release propagate``'s drain-deadline escalation
6108
+ fans this out to a host it has cordoned but that will not drain, via
6109
+ `_reconcile_launch_host` in `coord/commands/release.py`).
6110
+
6111
+ Only the machine that launched a `running` drive-queue entry can
6112
+ resolve it (the #1870 cross-host guard in
6113
+ `coord.drive_queue._reconcile_running` is keyed on a LOCAL tmux
6114
+ read); this method is that resolution, reachable over this agent's
6115
+ HTTP API instead of a human's SSH session. Full incident writeup
6116
+ (claude-coordinator#2360) and rationale: `_reconcile_launch_host`'s
6117
+ docstring and docs/AGENT_OPERATIONS.md's #2373 section.
6118
+
6119
+ Delegates to :func:`coord.reconcile_tick.run_reconcile_tick` — the
6120
+ same shared implementation `coord release propagate`'s own
6121
+ `_run_reconcile_tick` (`coord/commands/release.py`) calls, so there
6122
+ is exactly one implementation of "what a reconcile-only tick does",
6123
+ not two that can drift apart.
6124
+
6125
+ Returns ``{"ok": bool, "detail": str}``. ``ok=False`` with a
6126
+ ``no local coordinator.yml`` detail when this agent has no on-disk
6127
+ config to pass as ``--config`` — thin-client/config-free mode
6128
+ (docs/EPHEMERAL_WORKERS.md) has nothing for a queue tick to resolve
6129
+ against here. Never raises: the caller (`/drive-queue-reconcile`) is
6130
+ a best-effort self-heal step inside a larger escalation, not a gate
6131
+ that may take propagation down with it.
6132
+ """
6133
+ from coord.reconcile_tick import run_reconcile_tick # noqa: PLC0415
6134
+
6135
+ config_path = getattr(self._health_config, "path", None)
6136
+ if not config_path:
6137
+ return {
6138
+ "ok": False,
6139
+ "detail": (
6140
+ "no local coordinator.yml on this agent — cannot resolve "
6141
+ "a --config path for the tick"
6142
+ ),
6143
+ }
6144
+ ok, detail = run_reconcile_tick(config_path, timeout=timeout, detail_limit=2000)
6145
+ return {"ok": ok, "detail": detail}
6146
+
6105
6147
  def list_repos(self) -> dict[str, dict]:
6106
6148
  """Return local HEAD / branch / dirty flag for each configured repo.
6107
6149
 
@@ -1020,6 +1020,42 @@ def _openapi_spec() -> dict:
1020
1020
  },
1021
1021
  }
1022
1022
  },
1023
+ "/drive-queue-reconcile": {
1024
+ "post": {
1025
+ "summary": (
1026
+ "Run `coord drive-queue tick --reconcile-only` on this "
1027
+ "machine (#2373)"
1028
+ ),
1029
+ "description": (
1030
+ "The per-machine self-heal `coord release propagate`'s "
1031
+ "drain-deadline escalation calls before it escalates "
1032
+ "loudly: only the host that actually launched a "
1033
+ "`running` drive-queue entry can resolve the #1870 "
1034
+ "cross-host liveness guard for it. Fleet-queue-wide, "
1035
+ "not scoped to a repo."
1036
+ ),
1037
+ "requestBody": {
1038
+ "required": False,
1039
+ "content": {
1040
+ "application/json": {
1041
+ "schema": {
1042
+ "type": "object",
1043
+ "properties": {
1044
+ "timeout": {
1045
+ "type": "number",
1046
+ "description": (
1047
+ "seconds for the tick subprocess; "
1048
+ "defaults to 120."
1049
+ ),
1050
+ },
1051
+ },
1052
+ }
1053
+ }
1054
+ },
1055
+ },
1056
+ "responses": {"200": {"description": "OK (including a failed tick)"}},
1057
+ }
1058
+ },
1023
1059
  "/artifact/{repo}/{branch}": {
1024
1060
  "get": {
1025
1061
  "summary": "Manifest of stashed build artifacts for a (repo, branch) pair",
@@ -1948,6 +1984,36 @@ def build_app(
1948
1984
  result = await asyncio.to_thread(server.fix_graph, repo, timeout=timeout)
1949
1985
  return JSONResponse(result)
1950
1986
 
1987
+ async def drive_queue_reconcile(request: Request) -> JSONResponse:
1988
+ """Run ``coord drive-queue tick --reconcile-only`` on THIS machine
1989
+ (#2373). ``coord release propagate``'s drain-deadline escalation
1990
+ POSTs here — before it escalates loudly — on whichever host it has
1991
+ cordoned but that will not drain, so the one machine that can
1992
+ actually resolve the #1870 cross-host liveness ambiguity for an
1993
+ entry it launched gets asked to, automatically, instead of a human
1994
+ needing to SSH in and run this by hand (the live 2026-08-18 incident
1995
+ this closes).
1996
+
1997
+ Body: optional ``{"timeout": 120}``. No required fields, unlike
1998
+ ``/graph-fix`` — a reconcile-only tick is fleet-queue-wide, not
1999
+ scoped to one repo.
2000
+
2001
+ Runs off the event loop: the subprocess holds the drive-queue file
2002
+ lock for the length of one tick, which must never stall this
2003
+ agent's ``/health`` for the rest of the fleet.
2004
+ """
2005
+ body: dict = {}
2006
+ try:
2007
+ body = await request.json()
2008
+ except Exception:
2009
+ pass
2010
+ try:
2011
+ timeout = float(body.get("timeout", 120.0))
2012
+ except (TypeError, ValueError):
2013
+ timeout = 120.0
2014
+ result = await asyncio.to_thread(server.reconcile_drive_queue, timeout=timeout)
2015
+ return JSONResponse(result)
2016
+
1951
2017
  routes = [
1952
2018
  Route("/health", health, methods=["GET"]),
1953
2019
  Route("/status", status, methods=["GET"]),
@@ -1973,6 +2039,10 @@ def build_app(
1973
2039
  # missing graph and set core.hooksPath, on the machines that
1974
2040
  # actually run workers rather than only on the operator's laptop.
1975
2041
  Route("/graph-fix", graph_fix, methods=["POST"]),
2042
+ # #2373: `coord release propagate`'s drain-deadline escalation's
2043
+ # per-machine self-heal — resolve a `running` drive-queue entry this
2044
+ # host launched before the escalation fires loudly.
2045
+ Route("/drive-queue-reconcile", drive_queue_reconcile, methods=["POST"]),
1976
2046
  # #305: artifact stash manifest (GET /artifact/<repo>/<branch>)
1977
2047
  Route("/artifact/{repo}/{branch}", artifact_manifest, methods=["GET"]),
1978
2048
  # #207: CPU + memory snapshot for TUI sparklines
@@ -503,6 +503,77 @@ def _post(url: str, payload: dict, *, timeout: float) -> tuple[int | None, dict,
503
503
  return resp.status_code, (body if isinstance(body, dict) else {}), ""
504
504
 
505
505
 
506
+ #: #2373: default timeout for the remote-reconcile POST below. Generous, but
507
+ #: still small next to `DEFAULT_DRAIN_DEADLINE_SECONDS` (90 minutes), so a
508
+ #: wedged/unreachable agent never turns "ask before escalating" into a
509
+ #: second, longer wait before the loud message an operator is actually
510
+ #: watching for. The POST body forwards a *shorter* remote-subprocess
511
+ #: timeout (see `_RECONCILE_TIMEOUT_MARGIN_SECONDS` below) so the remote
512
+ #: agent's own tick (`AgentServer.reconcile_drive_queue`, otherwise 120s by
513
+ #: default) can never outlive this wait — without that, a tick legitimately
514
+ #: taking longer than this timeout would surface here as a misleading
515
+ #: "unreachable" even though it was still running and would have resolved
516
+ #: correctly on its own.
517
+ DEFAULT_RECONCILE_TIMEOUT_SECONDS = 30.0
518
+
519
+ #: Margin subtracted from *timeout* before it is forwarded as the remote
520
+ #: subprocess's own timeout (see `_reconcile_launch_host`) — leaves the
521
+ #: agent's HTTP handler room to marshal and return its response before
522
+ #: this side's own `httpx` deadline fires.
523
+ _RECONCILE_TIMEOUT_MARGIN_SECONDS = 5.0
524
+
525
+
526
+ def _reconcile_launch_host(
527
+ machine_host: str,
528
+ *,
529
+ agent_port: int,
530
+ timeout: float = DEFAULT_RECONCILE_TIMEOUT_SECONDS,
531
+ post=None,
532
+ ) -> tuple[bool | None, str]:
533
+ """Ask *machine_host*'s own agent to run a local reconcile-only tick
534
+ (#2373), over the same ``POST /<verb>`` HTTP pattern ``/graph-fix``
535
+ already uses for a per-machine self-heal fanned out from elsewhere.
536
+
537
+ Why this has to be a REMOTE call rather than something run locally by
538
+ whichever host happens to be executing `coord release propagate`: the
539
+ #1870 cross-host guard (`coord.drive_queue._reconcile_running`) is keyed
540
+ on a LOCAL tmux read, so only the machine that actually launched a
541
+ `running` drive-queue entry can ever resolve whether it is still alive.
542
+ A non-daemon launch host has no periodic tick of its own — confirmed
543
+ live 2026-08-18 (claude-coordinator#2360): elitebook ran only
544
+ `coord-agent.service`, dellserver's `coord-drive-queue.timer` correctly
545
+ refused to declare a foreign-host entry dead every time it ticked, and
546
+ the ambiguity sat wedging the fleet's release drain for ~17h until a
547
+ human happened to SSH in and run this exact command by hand. Routing it
548
+ through the agent HTTP API that already runs on every machine capable of
549
+ launching a drive closes that gap without a new timer unit anywhere.
550
+
551
+ Returns ``(ok, detail)``. ``ok`` is ``None`` when the call could not even
552
+ be attempted (never treated as a *failure* by the caller — see
553
+ :func:`_escalate_drain`), ``False`` on an unreachable agent or a non-200
554
+ response, ``True`` when the agent ran the tick (its own exit code, not
555
+ "and it resolved the entry" — a genuinely still-busy host is expected to
556
+ report ``ok=True`` with nothing to reconcile).
557
+
558
+ The POST body forwards a remote subprocess timeout derived from
559
+ *timeout* itself (minus `_RECONCILE_TIMEOUT_MARGIN_SECONDS`) rather than
560
+ leaving the remote agent to fall back to its own 120s default
561
+ (`AgentServer.reconcile_drive_queue`) — otherwise a tick that legitimately
562
+ takes longer than this call's own HTTP wait reports here as
563
+ `ok=False, detail="unreachable: ..."` even though it is still running and
564
+ will resolve correctly on its own, just not attributed to this call.
565
+ """
566
+ poster = post or _post
567
+ url = f"http://{machine_host}:{agent_port}/drive-queue-reconcile"
568
+ remote_timeout = max(1.0, timeout - _RECONCILE_TIMEOUT_MARGIN_SECONDS)
569
+ status, body, err = poster(url, {"timeout": remote_timeout}, timeout=timeout)
570
+ if err:
571
+ return False, f"unreachable: {err}"
572
+ if status != 200:
573
+ return False, f"HTTP {status}: {body.get('detail') or body}"
574
+ return bool(body.get("ok")), str(body.get("detail") or "")
575
+
576
+
506
577
  def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
507
578
  out: dict[str, list[str | None]] = {}
508
579
  for lane in report.lanes:
@@ -791,6 +862,11 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
791
862
  max_deferrals=cordon_max_deferrals,
792
863
  release_cooldown=cordon_cooldown,
793
864
  daemon_host=daemon_name,
865
+ # #2373: lets a blown drain deadline ask the escalated host's own
866
+ # agent to resolve the #1870 cross-host liveness ambiguity locally
867
+ # before the loud message goes out — see `_reconcile_launch_host`.
868
+ machines=getattr(config, "machines", ()) or (),
869
+ agent_port=AGENT_PORT,
794
870
  )
795
871
 
796
872
  if fully_busy and not force:
@@ -1162,6 +1238,9 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
1162
1238
  max_deferrals: int | None = None,
1163
1239
  release_cooldown: float | None = None,
1164
1240
  daemon_host: str | None = None,
1241
+ machines=None,
1242
+ agent_port: int | None = None,
1243
+ reconcile_timeout: float | None = None,
1165
1244
  ) -> dict:
1166
1245
  """Plan and apply this run's cordons. Returns the journal fragment.
1167
1246
 
@@ -1185,6 +1264,13 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
1185
1264
  pre-#2240 behaviour) rather than to a spurious release: dropping the
1186
1265
  fleet's cordon because a file could not be read is the wrong direction to
1187
1266
  fail in.
1267
+
1268
+ #2373: *machines*/*agent_port* let each :class:`~coord.release_cordon.
1269
+ DrainEscalation` ask the escalated host's OWN agent to run a local
1270
+ reconcile-only tick before the loud message goes out — see
1271
+ :func:`_reconcile_launch_host`. ``machines=None`` (a caller with no fleet
1272
+ topology, e.g. a unit test exercising `plan_cordons` output directly)
1273
+ skips the remote call entirely and escalates exactly as before #2373.
1188
1274
  """
1189
1275
  import time # noqa: PLC0415
1190
1276
 
@@ -1304,9 +1390,39 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
1304
1390
  outcome.errors.append(f"release cordon {name}: {exc}")
1305
1391
  click.echo(f" ✗ release cordon {name}: {exc}", err=True)
1306
1392
 
1393
+ machines_by_name = {m.name: m for m in (machines or ())}
1394
+ # #2373: each escalation below makes one synchronous `_reconcile_launch_host`
1395
+ # HTTP call, serially, each blocking up to ~`DEFAULT_RECONCILE_TIMEOUT_SECONDS`.
1396
+ # With multiple simultaneously-overdue hosts this adds up to N * timeout of
1397
+ # latency inside one `release propagate` invocation. Fine today — escalations
1398
+ # are rare and few at once — but if that ever stops being true, parallelize
1399
+ # this loop (e.g. a thread pool over `plan.escalations`) rather than letting
1400
+ # a single propagate call silently grow with fleet size.
1307
1401
  for escalation in plan.escalations:
1308
- _escalate_drain(escalation)
1309
- outcome.escalated.append(escalation.to_dict())
1402
+ # #2373: before the loud message, give the escalated host's OWN
1403
+ # agent one chance to resolve the ambiguity that is actually holding
1404
+ # it — see `_reconcile_launch_host`'s docstring. `machine` missing
1405
+ # from the fleet map, or no `agent_port` supplied (a caller with no
1406
+ # HTTP topology), skips the call rather than guessing an address.
1407
+ reconcile_ok: bool | None = None
1408
+ reconcile_detail = ""
1409
+ target = machines_by_name.get(escalation.machine)
1410
+ if target is not None and agent_port:
1411
+ reconcile_ok, reconcile_detail = _reconcile_launch_host(
1412
+ target.host,
1413
+ agent_port=agent_port,
1414
+ timeout=(
1415
+ DEFAULT_RECONCILE_TIMEOUT_SECONDS
1416
+ if reconcile_timeout is None
1417
+ else reconcile_timeout
1418
+ ),
1419
+ )
1420
+ _escalate_drain(escalation, reconcile_ok=reconcile_ok, reconcile_detail=reconcile_detail)
1421
+ outcome.escalated.append({
1422
+ **escalation.to_dict(),
1423
+ "reconcile_ok": reconcile_ok,
1424
+ "reconcile_detail": reconcile_detail,
1425
+ })
1310
1426
 
1311
1427
  return outcome.to_dict()
1312
1428
 
@@ -1321,7 +1437,9 @@ DRAIN_ALERT_ISSUE = 0
1321
1437
  DRAIN_ALERT_STAGE = "release-cordon"
1322
1438
 
1323
1439
 
1324
- def _escalate_drain(escalation) -> None:
1440
+ def _escalate_drain(
1441
+ escalation, *, reconcile_ok: bool | None = None, reconcile_detail: str = ""
1442
+ ) -> None:
1325
1443
  """Surface a host that will not drain — loudly, in three places.
1326
1444
 
1327
1445
  stderr (the timer's journal), the escalation table (the TUI and
@@ -1329,21 +1447,43 @@ def _escalate_drain(escalation) -> None:
1329
1447
  criterion 4 is explicitly about the surfaced MESSAGE rather than an
1330
1448
  internal state change, because a silent forever-wait is the failure this
1331
1449
  whole mechanism replaces.
1450
+
1451
+ #2373: *reconcile_ok*/*reconcile_detail* are the outcome of the remote
1452
+ reconcile-only tick `_apply_cordons` asked the escalated host's own
1453
+ agent to run just before calling this — ``None`` when that call was
1454
+ never attempted (no fleet topology / agent port available), so the
1455
+ message stays byte-identical to before #2373 in that case. When it WAS
1456
+ attempted, the outcome is folded into the same message rather than a
1457
+ second alert, so an operator reading one escalation sees both "this is
1458
+ overdue" and "here is what the self-heal attempt already found" without
1459
+ correlating two records.
1332
1460
  """
1333
- click.echo(f" ! {escalation.message}", err=True)
1461
+ reconcile_note = ""
1462
+ if reconcile_ok is not None:
1463
+ verb = "ok" if reconcile_ok else "failed"
1464
+ detail = f" ({reconcile_detail})" if reconcile_detail else ""
1465
+ reconcile_note = (
1466
+ f" — asked {escalation.machine}'s own agent to run a local "
1467
+ f"reconcile-only tick first (#2373): {verb}{detail}"
1468
+ )
1469
+ message = f"{escalation.message}{reconcile_note}"
1470
+ click.echo(f" ! {message}", err=True)
1334
1471
  try:
1335
1472
  from coord.state import record_drive_escalation # noqa: PLC0415
1336
1473
 
1474
+ gate_readings = (
1475
+ f"machine={escalation.machine} | "
1476
+ f"waited={escalation.waited_seconds:.0f}s | "
1477
+ f"deadline={escalation.deadline_seconds:.0f}s"
1478
+ )
1479
+ if reconcile_ok is not None:
1480
+ gate_readings += f" | remote_reconcile={'ok' if reconcile_ok else 'failed'}"
1337
1481
  record_drive_escalation(
1338
1482
  DRAIN_ALERT_REPO,
1339
1483
  DRAIN_ALERT_ISSUE,
1340
1484
  stage=DRAIN_ALERT_STAGE,
1341
- reason=escalation.message,
1342
- gate_readings=(
1343
- f"machine={escalation.machine} | "
1344
- f"waited={escalation.waited_seconds:.0f}s | "
1345
- f"deadline={escalation.deadline_seconds:.0f}s"
1346
- ),
1485
+ reason=message,
1486
+ gate_readings=gate_readings,
1347
1487
  proposed_command=escalation.command,
1348
1488
  )
1349
1489
  except Exception as exc: # noqa: BLE001 — the stderr line above is the
@@ -2181,24 +2321,19 @@ def _run_reconcile_tick(config_path: Path, *, runner=None) -> tuple[bool, str]:
2181
2321
  *after* the timer stopped would stay stuck ``running`` for the rest of
2182
2322
  the drain no matter how generous the deadline is — the exact deadlock
2183
2323
  #2110 fixed reconciliation to no longer require the timer for.
2324
+
2325
+ Thin wrapper around :func:`coord.reconcile_tick.run_reconcile_tick`, the
2326
+ #2373-extracted shared implementation also used by
2327
+ `AgentServer.reconcile_drive_queue` (`coord/agent.py`) — see that
2328
+ module's docstring for why there must be exactly one implementation of
2329
+ "what a reconcile-only tick does". A failure here is not fatal on its
2330
+ own: the quiescence check right after this call is the real signal a
2331
+ stuck reconcile eventually clears on a later poll, not this one call's
2332
+ job to guarantee.
2184
2333
  """
2185
- import subprocess # noqa: PLC0415
2334
+ from coord.reconcile_tick import run_reconcile_tick # noqa: PLC0415
2186
2335
 
2187
- run = runner or subprocess.run
2188
- try:
2189
- proc = run(
2190
- [sys.executable, "-m", "coord.cli", "drive-queue", "tick",
2191
- "--reconcile-only", "--config", str(config_path)],
2192
- capture_output=True, text=True, timeout=120,
2193
- )
2194
- except Exception as exc: # noqa: BLE001 — best effort; the quiescence
2195
- # check right after this call is the real signal a stuck reconcile
2196
- # eventually clears on a later poll, not this one call's job to
2197
- # guarantee.
2198
- return False, f"{type(exc).__name__}: {exc}"
2199
- ok = getattr(proc, "returncode", 1) == 0
2200
- detail = (getattr(proc, "stderr", "") or getattr(proc, "stdout", "") or "").strip()
2201
- return ok, detail[:200]
2336
+ return run_reconcile_tick(config_path, timeout=120, detail_limit=200, runner=runner)
2202
2337
 
2203
2338
 
2204
2339
  def _drain(
@@ -108,7 +108,11 @@ from coord.interactive import (
108
108
  tmux_session_alive,
109
109
  )
110
110
  from coord.dead_end import DeadEnd, detect_dead_end
111
- from coord.failure_class import classify_failure, plan_usage_limit_resume
111
+ from coord.failure_class import (
112
+ classify_failure,
113
+ environmental_backoff_secs,
114
+ plan_usage_limit_resume,
115
+ )
112
116
  from coord.models import DELIVERABLE_ANALYSIS_LABEL, POLICY_REFUSAL_MARKER
113
117
  from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
114
118
  # Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
@@ -201,6 +205,19 @@ class DriveError(Exception):
201
205
  # untruncated bytes for local, on-host debugging.
202
206
  _CAPTURED_OUTPUT_LIMIT = 4000
203
207
 
208
+ # #2360: attempt budget for a WORK-stage failure `coord.failure_class.
209
+ # classify_failure` calls environmental (a Claude API 5xx, a dropped
210
+ # connection, an overload — the module's own allow-listed signals), as
211
+ # opposed to `DriveOptions.max_work_retries` (default 1: one retry, two
212
+ # attempts total), which stays the tight budget for a genuine code defect.
213
+ # #2335: a work assignment died on an auth hiccup, its one flat retry died
214
+ # too, and the drive-queue entry sat `blocked` for ~19h — confirmed
215
+ # transient after the fact (the same machine ran dozens of clean sessions in
216
+ # that window). `max()` against `opts.max_work_retries` at the call site
217
+ # means a run configured with a bigger flat budget than this default is
218
+ # never *tightened* for the environmental case.
219
+ _ENVIRONMENTAL_WORK_RETRY_BUDGET = 5
220
+
204
221
 
205
222
  def _bounded_tail(text: str, limit: int = _CAPTURED_OUTPUT_LIMIT) -> str:
206
223
  """*text*, or its last *limit* characters if longer — the tail, because
@@ -264,6 +281,15 @@ class DriveCounters:
264
281
  """Bounds on every retry loop. Unbounded merge retries was a real bug."""
265
282
 
266
283
  work_retries: int = 0
284
+ # #2360: one-shot latch for the environmental WORK-stage backoff — the
285
+ # 1-based attempt number (`work_retries + 1`) `_decide_work` has already
286
+ # returned a backoff WAIT for. `-1` means "no backoff pending". Mirrors
287
+ # `review_fix_dispatched_for`'s shape below: without it, a board that
288
+ # hasn't changed yet (nothing was dispatched during the wait) would make
289
+ # `decide()` re-issue the SAME backoff WAIT forever instead of, once the
290
+ # sleep it already returned has elapsed, falling through to the actual
291
+ # `coord retry` for that attempt.
292
+ work_environmental_backoff_attempt: int = -1
267
293
  # ONE budget for BOTH fix arms (#1692): a failed test and a
268
294
  # request-changes review are two shapes of the same "the work needs
269
295
  # another round" loop, and a drive that spends three rounds bouncing
@@ -1507,13 +1533,25 @@ def decide(
1507
1533
 
1508
1534
  # ---- work failed: bounded retry ----------------------------------------
1509
1535
  if state.work_status == "failed":
1510
- if counters.work_retries >= opts.max_work_retries:
1511
- # #1590 part 6: name the actual cause. "failed 3 retries in: <prose>"
1512
- # sent the morning triage looking at the work even when the provider
1513
- # was the problem; the class is now stated up front.
1514
- classification = classify_failure(
1515
- failure_reason=state.work_failure_reason or None
1516
- )
1536
+ # #1590 part 6: name the actual cause. "failed 3 retries in: <prose>"
1537
+ # sent the morning triage looking at the work even when the provider
1538
+ # was the problem; the class is now stated up front.
1539
+ classification = classify_failure(
1540
+ failure_reason=state.work_failure_reason or None
1541
+ )
1542
+ # #2360: an environmental failure (already established NOT a usage
1543
+ # limit — that branch returned above) gets a wider budget than a
1544
+ # genuine code defect, reusing the same classifier the usage-limit
1545
+ # check just above already trusts. A NON-environmental failure keeps
1546
+ # today's flat `opts.max_work_retries` budget completely unchanged —
1547
+ # this is not a general increase to retry counts, only a widening
1548
+ # scoped to `classification.is_environmental`.
1549
+ budget = (
1550
+ max(opts.max_work_retries, _ENVIRONMENTAL_WORK_RETRY_BUDGET)
1551
+ if classification.is_environmental
1552
+ else opts.max_work_retries
1553
+ )
1554
+ if counters.work_retries >= budget:
1517
1555
  return _die(
1518
1556
  f"work {state.work_aid} failed {counters.work_retries} retr(ies) in: "
1519
1557
  f"{state.work_failure_reason or 'no reason recorded'}\n"
@@ -1521,12 +1559,35 @@ def decide(
1521
1559
  f" inspect: coord log {state.work_aid} --machine "
1522
1560
  f"{state.work_machine or machine}"
1523
1561
  )
1524
- counters.work_retries += 1
1562
+ attempt = counters.work_retries + 1
1563
+ if (
1564
+ classification.is_environmental
1565
+ and counters.work_environmental_backoff_attempt != attempt
1566
+ ):
1567
+ # Back off ONCE per attempt number before spending it (the same
1568
+ # `environmental_backoff_secs` exponential curve #1590/#2275
1569
+ # proved for the Test-stage worker-death path) — the latch means
1570
+ # the NEXT poll, once this sleep has actually elapsed, falls
1571
+ # through to the real `coord retry` below instead of returning
1572
+ # the same backoff WAIT forever against a board that has not
1573
+ # changed (nothing was dispatched during the wait).
1574
+ counters.work_environmental_backoff_attempt = attempt
1575
+ wait = environmental_backoff_secs(attempt)
1576
+ return Action(
1577
+ kind=WAIT,
1578
+ label=(
1579
+ f"WORK: {state.work_aid} failed environmentally — "
1580
+ f"backing off {int(wait)}s before retry {attempt}/{budget}"
1581
+ ),
1582
+ sleep_after=wait,
1583
+ warnings=(f"{classification.reason} (#2360)",),
1584
+ )
1585
+ counters.work_retries = attempt
1525
1586
  return Action(
1526
1587
  kind=RUN,
1527
1588
  label=(
1528
1589
  f"WORK: failed → coord retry {state.work_aid} "
1529
- f"(attempt {counters.work_retries}/{opts.max_work_retries})"
1590
+ f"(attempt {counters.work_retries}/{budget})"
1530
1591
  ),
1531
1592
  command=("retry", state.work_aid),
1532
1593
  error_message=f"coord retry failed for {state.work_aid}",