code-coordinator 0.5.84__tar.gz → 0.5.85__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 (830) hide show
  1. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/SOURCES.txt +1 -0
  4. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/scm_file_list.json +1 -0
  5. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/auto_loop.py +10 -2
  7. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/release.py +121 -2
  8. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/status.py +45 -1
  9. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/machine_pause.py +77 -5
  10. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/release_cordon.py +359 -7
  11. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/release_propagate.py +104 -11
  12. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/review.py +24 -6
  13. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/AGENT_OPERATIONS.md +50 -0
  14. code_coordinator-0.5.85/tests/test_release_cordon_deadlock_2240.py +1016 -0
  15. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.claude/commands/board.md +0 -0
  16. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.claude/commands/complete-session.md +0 -0
  17. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.claude/commands/coordinator.md +0 -0
  18. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.githooks/_lib.sh +0 -0
  19. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.githooks/post-checkout +0 -0
  20. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.githooks/post-commit +0 -0
  21. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.githooks/post-merge +0 -0
  22. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  23. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/coord-ci-acceptance.yml +0 -0
  24. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/auto-release.yml +0 -0
  25. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/cargo-test.yml +0 -0
  26. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/publish.yml +0 -0
  27. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/release-tui.yml +0 -0
  28. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.github/workflows/test.yml +0 -0
  29. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/.gitignore +0 -0
  30. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/CLAUDE.md +0 -0
  31. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/GOAL.md +0 -0
  32. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/LICENSE +0 -0
  33. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/MANIFEST.in +0 -0
  34. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/README.md +0 -0
  35. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/dependency_links.txt +0 -0
  36. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/entry_points.txt +0 -0
  37. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/requires.txt +0 -0
  38. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/code_coordinator.egg-info/top_level.txt +0 -0
  39. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/__init__.py +0 -0
  40. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/_board_mapping.py +0 -0
  41. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/acceptance.py +0 -0
  42. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/acceptance_drivers.py +0 -0
  43. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agent.py +0 -0
  44. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agent_app.py +0 -0
  45. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agent_update.py +0 -0
  46. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agents/opencode/.gitignore +0 -0
  47. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agents/opencode/agents/work.md +0 -0
  48. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/agents/opencode/routing.jsonc +0 -0
  49. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/audit.py +0 -0
  50. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/board_bool_guard.py +0 -0
  51. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/ci_github.py +0 -0
  58. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/client.py +0 -0
  62. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/__init__.py +0 -0
  63. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/_common.py +0 -0
  64. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/acceptance.py +0 -0
  65. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/agent_ops.py +0 -0
  66. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/audit.py +0 -0
  67. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/chat.py +0 -0
  68. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/dispatch.py +0 -0
  69. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/dispatch_workers.py +0 -0
  70. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/drive.py +0 -0
  71. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/drive_queue.py +0 -0
  72. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/gate_a.py +0 -0
  73. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/gates.py +0 -0
  74. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/issues.py +0 -0
  75. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/lifecycle.py +0 -0
  76. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/merge.py +0 -0
  77. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/milestone.py +0 -0
  78. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/plan_followup.py +0 -0
  79. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/plans.py +0 -0
  80. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/portal.py +0 -0
  81. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/repo.py +0 -0
  82. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/report.py +0 -0
  83. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/review.py +0 -0
  84. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/scorecard.py +0 -0
  85. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/sessions.py +0 -0
  86. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/setup.py +0 -0
  87. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/terminal.py +0 -0
  88. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/test_gate.py +0 -0
  89. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/commands/tui.py +0 -0
  90. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/comments.py +0 -0
  91. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/config.py +0 -0
  92. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/conflict_fix.py +0 -0
  93. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dao.py +0 -0
  94. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/__init__.py +0 -0
  95. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/fixture.py +0 -0
  96. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/index.html +0 -0
  97. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/server.py +0 -0
  98. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/terminal.py +0 -0
  99. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/.gitignore +0 -0
  100. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/components.json +0 -0
  101. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
  102. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
  103. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
  104. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
  105. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
  106. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
  107. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  108. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  109. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
  110. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/index.html +0 -0
  111. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
  112. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/sw.js +0 -0
  113. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
  114. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
  115. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
  116. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
  117. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
  118. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
  119. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
  120. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
  121. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
  122. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
  123. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/eslint.config.js +0 -0
  124. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/index.html +0 -0
  125. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
  126. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/package-lock.json +0 -0
  127. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/package.json +0 -0
  128. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
  129. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/playwright.config.ts +0 -0
  130. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/postcss.config.js +0 -0
  131. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  132. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  133. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
  134. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/App.tsx +0 -0
  135. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/api/client.ts +0 -0
  136. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/api/generated.ts +0 -0
  137. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
  138. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
  139. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
  140. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
  141. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
  142. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
  143. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
  144. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
  145. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
  146. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
  147. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
  148. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
  149. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
  150. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
  151. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
  152. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
  153. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
  154. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
  155. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
  156. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
  157. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
  158. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
  159. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
  160. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
  161. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
  162. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
  163. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
  164. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
  165. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
  166. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
  167. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
  168. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
  169. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
  170. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
  171. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/index.css +0 -0
  172. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
  173. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
  174. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/main.tsx +0 -0
  175. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
  176. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
  177. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
  178. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
  179. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
  180. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
  181. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
  182. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
  183. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
  184. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
  185. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
  186. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
  187. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
  188. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
  189. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
  190. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
  191. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
  192. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
  193. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
  194. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
  195. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
  196. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/test-setup.ts +0 -0
  197. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
  198. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/tailwind.config.js +0 -0
  199. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/tsconfig.json +0 -0
  200. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/tsconfig.node.json +0 -0
  201. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dashboard/webapp/vite.config.ts +0 -0
  202. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/db.py +0 -0
  203. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dead_end.py +0 -0
  204. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/README.md +0 -0
  205. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-agent.service +0 -0
  206. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-db-backup.service +0 -0
  207. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-db-backup.sh +0 -0
  208. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-db-backup.timer +0 -0
  209. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-drive-queue.service +0 -0
  210. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-drive-queue.timer +0 -0
  211. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-notify.service +0 -0
  212. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-notify.timer +0 -0
  213. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-release-propagate.service +0 -0
  214. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-release-propagate.timer +0 -0
  215. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-release-window.service +0 -0
  216. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-release-window.timer +0 -0
  217. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-serve.service +0 -0
  218. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-web-dist-build.service +0 -0
  219. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-web-dist-build.timer +0 -0
  220. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy/coord-web.service +0 -0
  221. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy_manifest.py +0 -0
  222. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deploy_units.py +0 -0
  223. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/deps.py +0 -0
  224. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/diagnose.py +0 -0
  225. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dispatch.py +0 -0
  226. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/dist_name.py +0 -0
  227. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/drive.py +0 -0
  228. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/drive_queue.py +0 -0
  229. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/drive_state.py +0 -0
  230. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/events.py +0 -0
  231. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/failure_class.py +0 -0
  232. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/filelock.py +0 -0
  233. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/fleet_config_health.py +0 -0
  234. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/freshness.py +0 -0
  235. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/gate_a.py +0 -0
  236. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/gate_b.py +0 -0
  237. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/gate_snapshot.py +0 -0
  238. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/gates.py +0 -0
  239. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/github_ops.py +0 -0
  240. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/goal.py +0 -0
  241. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/graph_health.py +0 -0
  242. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/__init__.py +0 -0
  243. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/aggregate.py +0 -0
  244. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/__init__.py +0 -0
  245. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/agent_install.py +0 -0
  246. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/cargo_targets.py +0 -0
  247. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/claude_binary.py +0 -0
  248. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/deploy_lane_facts.py +0 -0
  249. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/disk.py +0 -0
  250. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/fleet_board.py +0 -0
  251. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  252. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/fleet_phantom.py +0 -0
  253. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/fleet_unit_drift.py +0 -0
  254. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/graph.py +0 -0
  255. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/graphify_cli.py +0 -0
  256. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/plan_usage.py +0 -0
  257. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/repo_state.py +0 -0
  258. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/spawned_coord.py +0 -0
  259. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/timer_active.py +0 -0
  260. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/toolchain.py +0 -0
  261. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/unit_drift.py +0 -0
  262. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/unit_enablement.py +0 -0
  263. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/checks/worktrees.py +0 -0
  264. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/cli.py +0 -0
  265. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/context.py +0 -0
  266. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/fleet_snapshot.py +0 -0
  267. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/models.py +0 -0
  268. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/pypi.py +0 -0
  269. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/registry.py +0 -0
  270. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/render.py +0 -0
  271. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/health/units.py +0 -0
  272. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/hooks.py +0 -0
  273. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/housekeeping.py +0 -0
  274. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/interactive.py +0 -0
  275. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/issue_store.py +0 -0
  276. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/liveness_auditor.py +0 -0
  277. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/merge_queue.py +0 -0
  278. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/milestone_chat.py +0 -0
  279. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/milestone_dispatch.py +0 -0
  280. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/milestone_gate.py +0 -0
  281. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/milestone_order.py +0 -0
  282. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/mock_author.py +0 -0
  283. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/models.py +0 -0
  284. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/network.py +0 -0
  285. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/new_issue_chat.py +0 -0
  286. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/__init__.py +0 -0
  287. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/baseline.py +0 -0
  288. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/cli.py +0 -0
  289. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/collect.py +0 -0
  290. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/digest.py +0 -0
  291. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/models.py +0 -0
  292. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/predicate.py +0 -0
  293. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/service.py +0 -0
  294. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/store.py +0 -0
  295. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notifier/transport.py +0 -0
  296. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/notify.py +0 -0
  297. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/openapi.py +0 -0
  298. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/overlap_fence.py +0 -0
  299. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/parentage.py +0 -0
  300. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/parentage_github.py +0 -0
  301. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/pipeline.py +0 -0
  302. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/plan_parser.py +0 -0
  303. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/plans.py +0 -0
  304. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/platform_paths.py +0 -0
  305. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/portal_bridge.py +0 -0
  306. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/pr_body_lint.py +0 -0
  307. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/prereqs.py +0 -0
  308. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/progress.py +0 -0
  309. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/__init__.py +0 -0
  310. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/base.py +0 -0
  311. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/claude.py +0 -0
  312. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/claude_pty.py +0 -0
  313. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/providers/opencode.py +0 -0
  314. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/reconcile.py +0 -0
  315. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/refine_chat.py +0 -0
  316. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/release_verify.py +0 -0
  317. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/release_window.py +0 -0
  318. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/repo_edit.py +0 -0
  319. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/repo_onboard.py +0 -0
  320. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/reports.py +0 -0
  321. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/revalidate.py +0 -0
  322. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/scorecard.py +0 -0
  323. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/serve_app.py +0 -0
  324. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/skills/update-issue/SKILL.md +0 -0
  325. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/smoke.py +0 -0
  326. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/spend_ceiling.py +0 -0
  327. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/split_work.py +0 -0
  328. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/stage_projection.py +0 -0
  329. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/state.py +0 -0
  330. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/test_author.py +0 -0
  331. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/test_chat.py +0 -0
  332. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/test_orchestrator.py +0 -0
  333. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/test_report.py +0 -0
  334. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/tui_release.py +0 -0
  335. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/usage.py +0 -0
  336. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/usage_limits.py +0 -0
  337. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/usage_rollup.py +0 -0
  338. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coord/worker_events.py +0 -0
  339. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/coordinator.example.yml +0 -0
  340. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-agent.service +0 -0
  341. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-db-backup.service +0 -0
  342. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-db-backup.sh +0 -0
  343. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-db-backup.timer +0 -0
  344. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-drive-queue.service +0 -0
  345. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-drive-queue.timer +0 -0
  346. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-notify.service +0 -0
  347. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-notify.timer +0 -0
  348. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-release-propagate.service +0 -0
  349. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-release-propagate.timer +0 -0
  350. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-release-window.service +0 -0
  351. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-release-window.timer +0 -0
  352. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-serve.service +0 -0
  353. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web-dist-build.service +0 -0
  354. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web-dist-build.sh +0 -0
  355. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web-dist-build.timer +0 -0
  356. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web-rollback.sh +0 -0
  357. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/coord-web.service +0 -0
  358. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/deploy/node-shim.sh +0 -0
  359. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/ARCHITECTURE.md +0 -0
  360. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/ARCH_SECURITY_GATES.md +0 -0
  361. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/COCKPIT.md +0 -0
  362. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/CONTROL_CENTER.md +0 -0
  363. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/COST_DISCIPLINE.md +0 -0
  364. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/CROSS_PLATFORM.md +0 -0
  365. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/CUSTOMER_PORTAL.md +0 -0
  366. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/DRIVE_QUEUE.md +0 -0
  367. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/EPHEMERAL_WORKERS.md +0 -0
  368. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/FORGE_MIGRATION.md +0 -0
  369. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/GRAPHIFY_SETUP.md +0 -0
  370. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/ISSUE_GUIDANCE.md +0 -0
  371. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/MAC_MINI.md +0 -0
  372. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  373. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/NOTIFIER.md +0 -0
  374. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/OPENCODE_VERIFICATION.md +0 -0
  375. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/OPERATING_GOTCHAS.md +0 -0
  376. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/ORACLE_LOOP.md +0 -0
  377. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/PHONE_WEBAPP.md +0 -0
  378. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/PIPELINE_V2.md +0 -0
  379. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/PLATFORM_EVOLUTION.md +0 -0
  380. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/SECOND_BACKEND.md +0 -0
  381. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/STORE_SERVICE.md +0 -0
  382. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  383. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/WEB_CONTROL_CENTER.md +0 -0
  384. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/README.md +0 -0
  385. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/_tokens.css +0 -0
  386. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/issue-detail.html +0 -0
  387. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/pipeline-narrow.html +0 -0
  388. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/docs/mocks/web/pipeline-wide.html +0 -0
  389. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/graphify-out/.gitignore +0 -0
  390. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/install-agent.sh +0 -0
  391. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/pyproject.toml +0 -0
  392. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/audit_review_verdict_overrides.py +0 -0
  393. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  394. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/build-worker-image.sh +0 -0
  395. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/coordinator-machine.py +0 -0
  396. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/epic-down.sh +0 -0
  397. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/epic-up.sh +0 -0
  398. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/preflight.sh +0 -0
  399. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/provision-worker.sh +0 -0
  400. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  401. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  402. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/azure-workers/verify-github-token.sh +0 -0
  403. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/codegen.py +0 -0
  404. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/coord-test-runner.sh +0 -0
  405. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/drive-batch.sh +0 -0
  406. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/gen_board_fixture.py +0 -0
  407. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/next_release_tag.py +0 -0
  408. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/run_tests_in_populated_home.sh +0 -0
  409. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/run_tests_without_gh.sh +0 -0
  410. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/smoke_437_interactive.py +0 -0
  411. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/verify_878_review_capture.py +0 -0
  412. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/verify_release_published.py +0 -0
  413. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/scripts/verify_release_wheel.py +0 -0
  414. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/setup.cfg +0 -0
  415. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/SMOKE_SET.md +0 -0
  416. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/__init__.py +0 -0
  417. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  418. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/contract.md +0 -0
  419. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/manifest.yml +0 -0
  420. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  421. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  422. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  423. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  424. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/conftest.py +0 -0
  425. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/contract.md +0 -0
  426. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/manifest.yml +0 -0
  427. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  428. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  429. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/contract.md +0 -0
  430. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/manifest.yml +0 -0
  431. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  432. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  433. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  434. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  435. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  436. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  437. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  438. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  439. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  440. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  441. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/contract.md +0 -0
  442. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  443. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  444. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/manifest.yml +0 -0
  445. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  446. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-51/tsconfig.json +0 -0
  447. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  448. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/conftest.py +0 -0
  449. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/board-pipeline-basic.json +0 -0
  450. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  451. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  452. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  453. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/all_pass.json +0 -0
  454. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  455. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/mixed_fail.json +0 -0
  456. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  457. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  458. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/skip.json +0 -0
  459. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/playwright/truncated.json +0 -0
  460. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  461. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  462. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  463. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  464. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  465. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  466. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  467. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  468. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_acceptance.py +0 -0
  469. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_acceptance_drivers.py +0 -0
  470. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent.py +0 -0
  471. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_api_error.py +0 -0
  472. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_app.py +0 -0
  473. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_branch_base.py +0 -0
  474. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_branch_capture.py +0 -0
  475. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_config_free_1712.py +0 -0
  476. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_deploy_units_endpoint.py +0 -0
  477. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_dirty_worktree.py +0 -0
  478. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_graph_self_heal.py +0 -0
  479. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_health_h3.py +0 -0
  480. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_idle_restart.py +0 -0
  481. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_push_failure.py +0 -0
  482. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_reap.py +0 -0
  483. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_repos_and_pull.py +0 -0
  484. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_restart_services_endpoint.py +0 -0
  485. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_startup_diagnostics.py +0 -0
  486. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_update.py +0 -0
  487. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_update_bluegreen.py +0 -0
  488. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_usage_limit.py +0 -0
  489. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_agent_zero_commit.py +0 -0
  490. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_ambient_home_isolation.py +0 -0
  491. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_approve_reject_plan.py +0 -0
  492. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_approve_usage_gate.py +0 -0
  493. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_assignment_already_recorded_daemon.py +0 -0
  494. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_audit_log.py +0 -0
  495. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_audit_outcome.py +0 -0
  496. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_audit_query.py +0 -0
  497. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_auto_loop.py +0 -0
  498. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_auto_release_publish_2035.py +0 -0
  499. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_base_checkout_restore.py +0 -0
  500. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_cap_762.py +0 -0
  501. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_fixture.py +0 -0
  502. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_read_path.py +0 -0
  503. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_service.py +0 -0
  504. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_state.py +0 -0
  505. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_board_wire.py +0 -0
  506. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_brain.py +0 -0
  507. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_branch_model.py +0 -0
  508. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_bug_intake.py +0 -0
  509. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_build_worker_image_env_update.py +0 -0
  510. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cargo_cache.py +0 -0
  511. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_ci_acceptance_gate_1950.py +0 -0
  512. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_ci_parity_2091.py +0 -0
  513. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_ci_store.py +0 -0
  514. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_claim.py +0 -0
  515. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_acceptance.py +0 -0
  516. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign.py +0 -0
  517. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  518. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign_interactive_remote.py +0 -0
  519. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign_provider.py +0 -0
  520. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  521. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_audit.py +0 -0
  522. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_chat_continue.py +0 -0
  523. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_diagnose_config_provenance.py +0 -0
  524. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_diagnose_graph.py +0 -0
  525. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_doctor.py +0 -0
  526. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_doctor_config_free_1801.py +0 -0
  527. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  528. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_drive.py +0 -0
  529. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_drive_queue.py +0 -0
  530. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_escalate.py +0 -0
  531. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_fix_headless_review.py +0 -0
  532. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_gate_a.py +0 -0
  533. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_install_drift.py +0 -0
  534. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_install_skills.py +0 -0
  535. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_issue_create_label.py +0 -0
  536. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_issue_reopen.py +0 -0
  537. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_merge.py +0 -0
  538. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_assign.py +0 -0
  539. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_capture.py +0 -0
  540. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_chat_add_child.py +0 -0
  541. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_dispatch.py +0 -0
  542. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_gate_b.py +0 -0
  543. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_gate_c.py +0 -0
  544. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_order.py +0 -0
  545. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  546. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_milestone_ship.py +0 -0
  547. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_network.py +0 -0
  548. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_new_issue_chat.py +0 -0
  549. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_plans.py +0 -0
  550. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_portal.py +0 -0
  551. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_pull_artifact.py +0 -0
  552. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_queue.py +0 -0
  553. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_reattach_sessions.py +0 -0
  554. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_refine_board.py +0 -0
  555. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_release_preflight.py +0 -0
  556. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_release_propagate.py +0 -0
  557. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_release_window.py +0 -0
  558. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_repo_2220.py +0 -0
  559. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_scorecard.py +0 -0
  560. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_set_review_findings.py +0 -0
  561. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_advisory_terminal.py +0 -0
  562. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_merge_queue.py +0 -0
  563. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_provider.py +0 -0
  564. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_review_finalizing.py +0 -0
  565. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_test_failed_tag.py +0 -0
  566. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_status_usage_limit.py +0 -0
  567. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_sync_comments_873.py +0 -0
  568. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_test_plan.py +0 -0
  569. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_track.py +0 -0
  570. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_tui_update.py +0 -0
  571. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cli_wait.py +0 -0
  572. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_client_base_install.py +0 -0
  573. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_comments.py +0 -0
  574. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_completion_summary.py +0 -0
  575. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config.py +0 -0
  576. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config_acceptance.py +0 -0
  577. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config_audit.py +0 -0
  578. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config_pricing.py +0 -0
  579. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_config_usage_gate.py +0 -0
  580. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_conflict_fix.py +0 -0
  581. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_conflict_fix_semantic.py +0 -0
  582. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_test.py +0 -0
  583. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_test_runner_baseline.py +0 -0
  584. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_test_runner_routing.py +0 -0
  585. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_test_runner_toolchain.py +0 -0
  586. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coord_web_sse_restart_live.py +0 -0
  587. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_coordinator_machine.py +0 -0
  588. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_cross_platform_imports.py +0 -0
  589. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dashboard.py +0 -0
  590. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dashboard_fixture.py +0 -0
  591. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dashboard_terminal.py +0 -0
  592. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dashboard_terminal_live.py +0 -0
  593. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_db.py +0 -0
  594. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dead_end.py +0 -0
  595. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_coord_db_backup.py +0 -0
  596. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_coord_web_dist.py +0 -0
  597. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_coord_web_rollback.py +0 -0
  598. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_drive_queue_unit.py +0 -0
  599. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_manifest.py +0 -0
  600. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_units_lane.py +0 -0
  601. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deploy_web_unit.py +0 -0
  602. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_deps.py +0 -0
  603. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_diagnose.py +0 -0
  604. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dispatch.py +0 -0
  605. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dispatch_target_validation.py +0 -0
  606. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_dist_name.py +0 -0
  607. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_done_housekeeping.py +0 -0
  608. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_drive.py +0 -0
  609. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_drive_queue.py +0 -0
  610. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_drive_state.py +0 -0
  611. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_drive_tmux.py +0 -0
  612. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_epic_up_capability_detection.py +0 -0
  613. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  614. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_epic_up_image_provenance.py +0 -0
  615. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_errors.py +0 -0
  616. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_events.py +0 -0
  617. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_failure_class.py +0 -0
  618. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_filelock.py +0 -0
  619. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  620. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_fix_of_force_override.py +0 -0
  621. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_fleet_config_health.py +0 -0
  622. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_fleet_health_probes.py +0 -0
  623. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_fleet_health_snapshot.py +0 -0
  624. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_freshness.py +0 -0
  625. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gate_a.py +0 -0
  626. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gate_b.py +0 -0
  627. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gate_snapshot_staleness.py +0 -0
  628. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gates.py +0 -0
  629. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  630. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_generated_types_fixture.py +0 -0
  631. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_github_ops.py +0 -0
  632. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_goal.py +0 -0
  633. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_graph_health.py +0 -0
  634. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_graph_selfheal_absent_2237.py +0 -0
  635. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_handoff.py +0 -0
  636. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_checks.py +0 -0
  637. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_cli.py +0 -0
  638. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_cli_graph.py +0 -0
  639. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_config.py +0 -0
  640. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_context.py +0 -0
  641. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_deploy_lane_facts.py +0 -0
  642. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_incident_regression.py +0 -0
  643. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_pypi.py +0 -0
  644. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_registry.py +0 -0
  645. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_timer_active.py +0 -0
  646. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_toolchain.py +0 -0
  647. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_unit_drift.py +0 -0
  648. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_health_unit_enablement.py +0 -0
  649. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_hooks.py +0 -0
  650. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_human_attended_437.py +0 -0
  651. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_init.py +0 -0
  652. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_integration.py +0 -0
  653. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_briefing_echo.py +0 -0
  654. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_prefill_state.py +0 -0
  655. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_session_relaunch.py +0 -0
  656. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_test_verdict_backstop.py +0 -0
  657. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_token_attribution.py +0 -0
  658. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_interactive_worktree.py +0 -0
  659. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_issue_store_seam.py +0 -0
  660. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_liveness_auditor.py +0 -0
  661. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_liveness_notify.py +0 -0
  662. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_machine_pause.py +0 -0
  663. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_merge_queue.py +0 -0
  664. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_merge_verify.py +0 -0
  665. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_chat.py +0 -0
  666. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_dispatch.py +0 -0
  667. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_gate.py +0 -0
  668. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_order.py +0 -0
  669. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_milestone_seam.py +0 -0
  670. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_mock_author.py +0 -0
  671. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_model_tiering.py +0 -0
  672. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_models.py +0 -0
  673. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_models_config_labels.py +0 -0
  674. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_needs_attention.py +0 -0
  675. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_network.py +0 -0
  676. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_new_issue_chat.py +0 -0
  677. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_next_release_tag.py +0 -0
  678. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_no_direct_gh_calls.py +0 -0
  679. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_node_shim.py +0 -0
  680. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_baseline.py +0 -0
  681. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_cli.py +0 -0
  682. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_collect.py +0 -0
  683. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_config.py +0 -0
  684. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_drive_seam.py +0 -0
  685. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_isolation.py +0 -0
  686. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_predicate.py +0 -0
  687. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_quiet_hours.py +0 -0
  688. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notifier_service.py +0 -0
  689. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notify.py +0 -0
  690. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_notify_drain.py +0 -0
  691. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_openapi.py +0 -0
  692. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_operational_defaults.py +0 -0
  693. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_overlap_fence.py +0 -0
  694. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_packaged_deploy_units.py +0 -0
  695. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_parentage.py +0 -0
  696. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_paste_landed.py +0 -0
  697. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_pipeline.py +0 -0
  698. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_followup_approve_plan_command.py +0 -0
  699. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_followup_pr_command.py +0 -0
  700. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_followup_review_command.py +0 -0
  701. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_only.py +0 -0
  702. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_plan_parser.py +0 -0
  703. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_platform_paths.py +0 -0
  704. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_portal_bridge.py +0 -0
  705. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_portal_config.py +0 -0
  706. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_pr_body_lint.py +0 -0
  707. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_prereqs.py +0 -0
  708. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_production_db_guard.py +0 -0
  709. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_progress.py +0 -0
  710. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_provider_seam.py +0 -0
  711. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_providers.py +0 -0
  712. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_providers_config_labels.py +0 -0
  713. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_providers_pty.py +0 -0
  714. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_quiet_hours.py +0 -0
  715. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_quiet_hours_store_2146.py +0 -0
  716. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reap_merged_sessions.py +0 -0
  717. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reap_stale_interactive_tick.py +0 -0
  718. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reconcile_branch.py +0 -0
  719. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reconcile_completions.py +0 -0
  720. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reconcile_merges.py +0 -0
  721. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reconcile_usage_limit_done.py +0 -0
  722. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_refine_chat.py +0 -0
  723. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_cordon_2101.py +0 -0
  724. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_propagate.py +0 -0
  725. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_unified_1242.py +0 -0
  726. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_verify.py +0 -0
  727. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_release_window.py +0 -0
  728. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_remote_auto_prune.py +0 -0
  729. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_remote_interactive_reaper.py +0 -0
  730. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_repo_edit_2220.py +0 -0
  731. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_repo_graph_fleet_2237.py +0 -0
  732. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_repo_onboard_2220.py +0 -0
  733. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_report_result_push.py +0 -0
  734. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_reports.py +0 -0
  735. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_retry.py +0 -0
  736. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_retry_advisory_1606.py +0 -0
  737. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_retry_type_1636.py +0 -0
  738. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_revalidate.py +0 -0
  739. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review.py +0 -0
  740. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_end_review_without_verdict.py +0 -0
  741. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_parse_failure_diagnostic.py +0 -0
  742. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_reaffirm.py +0 -0
  743. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_state.py +0 -0
  744. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_verdict_backstop.py +0 -0
  745. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_verdict_override_audit.py +0 -0
  746. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_verdict_relay.py +0 -0
  747. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_review_zero_commits.py +0 -0
  748. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_scoped_review_wiring.py +0 -0
  749. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_scorecard.py +0 -0
  750. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_serve.py +0 -0
  751. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_serve_app_board_trim.py +0 -0
  752. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_session.py +0 -0
  753. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_slice_issue_attribution.py +0 -0
  754. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_smoke.py +0 -0
  755. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_smoke_live_checkout_restore.py +0 -0
  756. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_smoke_workflow.py +0 -0
  757. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_spend_ceiling.py +0 -0
  758. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_spend_ceiling_coordinator.py +0 -0
  759. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_split.py +0 -0
  760. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_split_work.py +0 -0
  761. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_stage_projection.py +0 -0
  762. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_stalled_pipeline.py +0 -0
  763. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_state.py +0 -0
  764. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_state_review_findings_daemon.py +0 -0
  765. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_status_fleet_footer.py +0 -0
  766. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_stop_1567.py +0 -0
  767. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_stuck.py +0 -0
  768. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_terminal_command.py +0 -0
  769. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_author.py +0 -0
  770. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_chat.py +0 -0
  771. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_orchestrator.py +0 -0
  772. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_report.py +0 -0
  773. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_verdict_parsing.py +0 -0
  774. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_test_verdict_transcript_floor.py +0 -0
  775. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_thin_client_board_audit.py +0 -0
  776. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_thin_client_config_load_1080.py +0 -0
  777. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_thin_client_daemon_routing_906.py +0 -0
  778. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_tmux_host.py +0 -0
  779. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_tmux_session.py +0 -0
  780. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_transcript_floor.py +0 -0
  781. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_usage.py +0 -0
  782. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_usage_limits.py +0 -0
  783. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_usage_rollup.py +0 -0
  784. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_venv_live_install_2121.py +0 -0
  785. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_version_single_source.py +0 -0
  786. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_watch.py +0 -0
  787. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worker_events.py +0 -0
  788. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worker_image_pin_sync.py +0 -0
  789. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worker_safety.py +0 -0
  790. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worker_test_scoping.py +0 -0
  791. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worktree.py +0 -0
  792. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  793. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/Cargo.lock +0 -0
  794. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/Cargo.toml +0 -0
  795. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/cargo-config-local-quadraui.toml.example +0 -0
  796. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/audit.rs +0 -0
  797. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/chat.rs +0 -0
  798. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/data.rs +0 -0
  799. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/dialogs.rs +0 -0
  800. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/drive.rs +0 -0
  801. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/drive_queue.rs +0 -0
  802. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/escalation.rs +0 -0
  803. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/events.rs +0 -0
  804. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/fixtures.rs +0 -0
  805. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/fleet_health.rs +0 -0
  806. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/fleet_sessions.rs +0 -0
  807. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/fleet_terminals.rs +0 -0
  808. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/format.rs +0 -0
  809. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/milestone_dag.rs +0 -0
  810. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/mod.rs +0 -0
  811. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/msv.rs +0 -0
  812. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/pipeline.rs +0 -0
  813. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/plans.rs +0 -0
  814. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/render.rs +0 -0
  815. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/reports.rs +0 -0
  816. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/sessions.rs +0 -0
  817. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/settings_ui.rs +0 -0
  818. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/sidebar.rs +0 -0
  819. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/terminal.rs +0 -0
  820. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/tests.rs +0 -0
  821. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/types.rs +0 -0
  822. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/app/workspace.rs +0 -0
  823. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/bin/gtk.rs +0 -0
  824. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/commands.rs +0 -0
  825. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/lib.rs +0 -0
  826. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/main.rs +0 -0
  827. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/src/settings.rs +0 -0
  828. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/tests/acceptance.rs +0 -0
  829. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/tui/tests/cli.rs +0 -0
  830. {code_coordinator-0.5.84 → code_coordinator-0.5.85}/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.84
3
+ Version: 0.5.85
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.84
3
+ Version: 0.5.85
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
@@ -668,6 +668,7 @@ tests/test_reconcile_merges.py
668
668
  tests/test_reconcile_usage_limit_done.py
669
669
  tests/test_refine_chat.py
670
670
  tests/test_release_cordon_2101.py
671
+ tests/test_release_cordon_deadlock_2240.py
671
672
  tests/test_release_propagate.py
672
673
  tests/test_release_unified_1242.py
673
674
  tests/test_release_verify.py
@@ -698,6 +698,7 @@
698
698
  "tests/test_reconcile_usage_limit_done.py",
699
699
  "tests/test_refine_chat.py",
700
700
  "tests/test_release_cordon_2101.py",
701
+ "tests/test_release_cordon_deadlock_2240.py",
701
702
  "tests/test_release_propagate.py",
702
703
  "tests/test_release_unified_1242.py",
703
704
  "tests/test_release_verify.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.84",
2
+ "tag": "0.5.85",
3
3
  "distance": 0,
4
- "node": "g9d455921f6488cf863cf829624bf9cd29658a2f4",
4
+ "node": "g87a8be6dfe549ad5607352dbdda991a3ed87f1fd",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-14"
@@ -958,8 +958,16 @@ def _dispatch_fix(
958
958
  machine = next(
959
959
  (m for m in config.machines if m.name == work.machine_name), None
960
960
  )
961
- from coord.machine_pause import paused_set
962
- paused = paused_set(config.machines)
961
+ # #2240: the pause set here is `follow_on_paused_set()`, NOT `paused_set()`
962
+ # a fix leg is the tail of work that is already running (dispatched
963
+ # after a `request-changes` review verdict on a row that has not gone
964
+ # anywhere new), so a release cordon ("route no NEW work here") must not
965
+ # filter its host out. This is the same fix as `coord/review.py`'s
966
+ # reviewer-selection change; leaving this call on `paused_set()` would
967
+ # reproduce the fleet-wide deadlock for the fix leg instead of the
968
+ # review leg. Explicit pauses and quiet hours still apply.
969
+ from coord.machine_pause import follow_on_paused_set
970
+ paused = follow_on_paused_set(config.machines)
963
971
  if (
964
972
  machine is None
965
973
  or not machine.can_work_on(work.repo_name)
@@ -506,6 +506,17 @@ def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
506
506
  @click.option("--drain-deadline", default=None, type=float,
507
507
  help="Seconds a host may fail to drain before the cordon "
508
508
  "escalates loudly (default 5400).")
509
+ @click.option("--cordon-max-deferrals", default=None, type=int,
510
+ help="#2240: consecutive DEFERRED runs that may hold a cordon "
511
+ "for the same target before it is released outright "
512
+ "(default 2). A cordon that has failed to produce a window "
513
+ "twice running is not draining anything — it is blocking "
514
+ "the review dispatch it is waiting for. 0 disables the "
515
+ "bound and re-arms the deadlock.")
516
+ @click.option("--cordon-cooldown", default=None, type=float,
517
+ help="Seconds after a #2240 release before cordoning may resume "
518
+ "(default 1800). Without it the next run re-cordons — the "
519
+ "hosts are still behind — and the deadlock re-arms.")
509
520
  @click.option("--json", "as_json", is_flag=True, help="Emit the propagation record as JSON.")
510
521
  def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions are elsewhere
511
522
  config_path: Path,
@@ -522,6 +533,8 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
522
533
  cordon_after: int | None,
523
534
  cordon_ttl: float | None,
524
535
  drain_deadline: float | None,
536
+ cordon_max_deferrals: int | None,
537
+ cordon_cooldown: float | None,
525
538
  as_json: bool,
526
539
  ) -> None:
527
540
  """One propagation attempt. Exit 0 on deferral, 1 on red, 2 on rollback.
@@ -559,6 +572,16 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
559
572
  run that defers without cordoning is a run that will defer again in 20
560
573
  minutes for exactly the same reason, which is how the fleet sat eleven
561
574
  releases behind for a day with elitebook idle and rollable throughout.
575
+
576
+ #2240: and a deferral is not passive either. The cordon it leaves behind
577
+ is what blocks the review dispatch that would let the between-legs entry
578
+ finish, and that unfinished entry is what defers the next run — four
579
+ cycles, 70 minutes, three idle machines. So the cordon now has a bound
580
+ that nothing else has to be running for: ``--cordon-max-deferrals``
581
+ consecutive deferrals for one target and every cordon is dropped, with
582
+ ``--cordon-cooldown`` seconds before any may be set again. The counter
583
+ lives in the propagation journal, because the process holding it is
584
+ restarted by the roll it gates.
562
585
  """
563
586
  import json as _json # noqa: PLC0415
564
587
  import time # noqa: PLC0415
@@ -686,6 +709,9 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
686
709
  ttl_seconds=cordon_ttl,
687
710
  drain_deadline=drain_deadline,
688
711
  dry_run=dry_run,
712
+ state_dir=state_dir,
713
+ max_deferrals=cordon_max_deferrals,
714
+ release_cooldown=cordon_cooldown,
689
715
  )
690
716
 
691
717
  if fully_busy and not force:
@@ -1042,7 +1068,7 @@ def _oldest_version(versions: list[str | None]) -> str | None:
1042
1068
  return min(readable, key=_key)
1043
1069
 
1044
1070
 
1045
- def _apply_cordons(
1071
+ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
1046
1072
  *,
1047
1073
  hosts: list[str],
1048
1074
  report,
@@ -1053,6 +1079,9 @@ def _apply_cordons(
1053
1079
  ttl_seconds: float | None,
1054
1080
  drain_deadline: float | None,
1055
1081
  dry_run: bool,
1082
+ state_dir: Path | None = None,
1083
+ max_deferrals: int | None = None,
1084
+ release_cooldown: float | None = None,
1056
1085
  ) -> dict:
1057
1086
  """Plan and apply this run's cordons. Returns the journal fragment.
1058
1087
 
@@ -1060,16 +1089,27 @@ def _apply_cordons(
1060
1089
  error and the roll continues on its existing (quiescence-based) rules.
1061
1090
  Failing the whole propagation because the cordon could not be renewed
1062
1091
  would make #2101's fix strictly worse than not having it.
1092
+
1093
+ #2240: *state_dir* is where the propagation journal lives, and the journal
1094
+ is where "how many runs in a row has this cordon now deferred?" is stored
1095
+ — the process holding the answer in memory is restarted by the roll it is
1096
+ gating, so an in-memory counter would reset exactly when the deadlock is
1097
+ at its worst. An unreadable journal degrades to "no pressure" (the
1098
+ pre-#2240 behaviour) rather than to a spurious release: dropping the
1099
+ fleet's cordon because a file could not be read is the wrong direction to
1100
+ fail in.
1063
1101
  """
1064
1102
  import time # noqa: PLC0415
1065
1103
 
1066
1104
  from coord import release_cordon as rc # noqa: PLC0415
1105
+ from coord import release_propagate as rp # noqa: PLC0415
1067
1106
  from coord.machine_pause import ( # noqa: PLC0415
1068
1107
  clear_cordon,
1069
1108
  cordons as read_cordons,
1070
1109
  set_cordon,
1071
1110
  )
1072
1111
 
1112
+ now = time.time()
1073
1113
  outcome = rc.CordonOutcome()
1074
1114
  try:
1075
1115
  existing = read_cordons()
@@ -1077,11 +1117,31 @@ def _apply_cordons(
1077
1117
  outcome.errors.append(f"could not read the cordon store: {exc}")
1078
1118
  return outcome.to_dict()
1079
1119
 
1120
+ pressure = rc.DeferralPressure()
1121
+ if state_dir is not None:
1122
+ try:
1123
+ pressure = rc.deferral_pressure(
1124
+ rp.read_records(state_dir), target_version=target_version
1125
+ )
1126
+ except Exception as exc: # noqa: BLE001 — see docstring
1127
+ outcome.errors.append(f"could not read the propagation journal: {exc}")
1128
+ outcome.pressure = pressure.to_dict()
1129
+
1130
+ # #2240 review: resolved once and journaled on every run (not just a
1131
+ # releasing one) via `outcome.max_deferrals`, so `deferral_pressure()`
1132
+ # can read the operator's actual `--cordon-max-deferrals` back out of
1133
+ # the newest record instead of `describe_deferral_pressure()` callers
1134
+ # silently assuming `DEFAULT_MAX_DEFERRALS`.
1135
+ resolved_max_deferrals = (
1136
+ rc.DEFAULT_MAX_DEFERRALS if max_deferrals is None else max_deferrals
1137
+ )
1138
+ outcome.max_deferrals = resolved_max_deferrals
1139
+
1080
1140
  plan = rc.plan_cordons(
1081
1141
  target_version=target_version,
1082
1142
  host_versions=_python_lane_versions(report, hosts, target_version),
1083
1143
  existing=existing,
1084
- now=time.time(),
1144
+ now=now,
1085
1145
  ttl_seconds=(
1086
1146
  rc.DEFAULT_TTL_SECONDS if ttl_seconds is None else ttl_seconds
1087
1147
  ),
@@ -1095,9 +1155,23 @@ def _apply_cordons(
1095
1155
  ),
1096
1156
  busy_reasons=busy_reasons,
1097
1157
  enabled=enabled,
1158
+ pressure=pressure,
1159
+ max_deferrals=resolved_max_deferrals,
1160
+ release_cooldown=(
1161
+ rc.DEFAULT_RELEASE_COOLDOWN_SECONDS
1162
+ if release_cooldown is None
1163
+ else release_cooldown
1164
+ ),
1098
1165
  )
1099
1166
  for line in plan.render():
1100
1167
  click.echo(line)
1168
+ outcome.cooling_seconds = plan.cooling_seconds
1169
+ if plan.released is not None:
1170
+ outcome.released = plan.released.to_dict()
1171
+ # stderr as well as stdout: on the timer host this line IS the
1172
+ # operator's only notice that the fleet just spent 40 minutes
1173
+ # cordoned for nothing, and the timer's journal is stderr.
1174
+ click.echo(f"warning: {plan.released.message}", err=True)
1101
1175
  if dry_run:
1102
1176
  # `--dry-run` promises to change nothing, cordon store included. The
1103
1177
  # plan above is still printed, so a dry run answers "and what would
@@ -1126,6 +1200,20 @@ def _apply_cordons(
1126
1200
  outcome.errors.append(f"uncordon {name}: {exc}")
1127
1201
  click.echo(f" ✗ uncordon {name}: {exc}", err=True)
1128
1202
 
1203
+ if plan.released is not None:
1204
+ # #2240: stamped even when every clear_cordon() below fails or finds
1205
+ # nothing — `released_at` is what resets the counter and starts the
1206
+ # cooldown, and a release the journal does not record is a release
1207
+ # that happens again on the very next tick, forever.
1208
+ outcome.released_at = now
1209
+ for name in plan.released.hosts:
1210
+ try:
1211
+ if clear_cordon(name):
1212
+ outcome.uncordoned.append(name)
1213
+ except Exception as exc: # noqa: BLE001 — see docstring
1214
+ outcome.errors.append(f"release cordon {name}: {exc}")
1215
+ click.echo(f" ✗ release cordon {name}: {exc}", err=True)
1216
+
1129
1217
  for escalation in plan.escalations:
1130
1218
  _escalate_drain(escalation)
1131
1219
  outcome.escalated.append(escalation.to_dict())
@@ -1829,6 +1917,27 @@ def release_cordon(
1829
1917
  f"[{record.age(now) / 60.0:.0f}m draining, lapses in "
1830
1918
  f"{remaining:.0f}m, owner={record.owner}]{overdue}"
1831
1919
  )
1920
+ # #2240: the same stall count `coord status` appends, on the surface an
1921
+ # operator reaches for once they have noticed the fleet is quiet. The
1922
+ # journal is a local file (the propagate timer's host); no journal → no
1923
+ # line, never a fabricated one.
1924
+ target = next(
1925
+ (c.target_version for c in active.values() if c.target_version), None
1926
+ )
1927
+ try:
1928
+ pressure = rc.deferral_pressure(
1929
+ _read_propagation_records(), target_version=target
1930
+ )
1931
+ except Exception: # noqa: BLE001 — a listing must not fail on the journal
1932
+ pressure = rc.DeferralPressure()
1933
+ if pressure.consecutive:
1934
+ click.echo(
1935
+ f"\n! {rc.describe_deferral_pressure(pressure)}: these cordons "
1936
+ "have not produced a rollable window. A cordon that has failed "
1937
+ "twice running is blocking the work it is waiting for (#2240) — "
1938
+ f"`coord release propagate` releases it by itself after "
1939
+ f"{rc.DEFAULT_MAX_DEFERRALS}."
1940
+ )
1832
1941
  click.echo(
1833
1942
  f"\nclear one with `coord release cordon --clear <machine>` "
1834
1943
  f"(default lifetime {rc.DEFAULT_TTL_SECONDS / 60:.0f}m — a cordon "
@@ -1836,6 +1945,16 @@ def release_cordon(
1836
1945
  )
1837
1946
 
1838
1947
 
1948
+ def _read_propagation_records() -> list[dict]:
1949
+ """The propagation journal, or ``[]`` when this host does not have one."""
1950
+ from coord import release_propagate as rp # noqa: PLC0415
1951
+
1952
+ try:
1953
+ return rp.read_records(_state_dir())
1954
+ except Exception: # noqa: BLE001 — see every caller: never load-bearing
1955
+ return []
1956
+
1957
+
1839
1958
  @release_group.command(
1840
1959
  "rollback",
1841
1960
  help=(
@@ -18,6 +18,43 @@ if TYPE_CHECKING:
18
18
  from coord.config import Config
19
19
 
20
20
 
21
+ def _cordon_stall_suffix(cordons: dict) -> str:
22
+ """The " (deferred N runs — NOT DRAINING)" tag for a stalled cordon (#2240).
23
+
24
+ `coord status` renders "CORDONED: DRAINING FOR V0.5.77" for a fleet that
25
+ is upgrading itself in thirty seconds and for one that has been unable to
26
+ dispatch anything for seventy minutes, identically. That is the whole
27
+ observability half of #2240: "nothing surfaced it either — `coord status`
28
+ shows `CORDONED: DRAINING FOR V0.5.77`, which reads as normal in-progress
29
+ behaviour rather than a 70-minute stall."
30
+
31
+ The count lives in the propagation journal, which is a file on whichever
32
+ host runs the propagate timer. A thin client has no such file, so this
33
+ degrades to "" — a missing journal must never turn a normal drain into a
34
+ reported stall, and the surface it is missing from is precisely the one
35
+ that is not running the loop.
36
+ """
37
+ if not cordons:
38
+ return ""
39
+ from coord import release_cordon as rc # noqa: PLC0415
40
+ from coord import release_propagate as rp # noqa: PLC0415
41
+ from coord.commands.release import _state_dir # noqa: PLC0415
42
+
43
+ target = next(
44
+ (getattr(c, "target_version", None) for c in cordons.values()
45
+ if getattr(c, "target_version", None)),
46
+ None,
47
+ )
48
+ try:
49
+ pressure = rc.deferral_pressure(
50
+ rp.read_records(_state_dir()), target_version=target
51
+ )
52
+ except Exception: # noqa: BLE001 — a status render must never fail on this
53
+ return ""
54
+ described = rc.describe_deferral_pressure(pressure)
55
+ return f" ({described})" if described else ""
56
+
57
+
21
58
  def _live_advisory_entries(
22
59
  entries: list[dict],
23
60
  cfg: "Config",
@@ -144,6 +181,11 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
144
181
  )
145
182
  paused = paused_set(cfg.machines)
146
183
  cordons = fetch_cordons()
184
+ # #2240: how many consecutive propagate runs this cordon has now failed to
185
+ # produce a window for. Computed once, appended to every cordoned
186
+ # machine's label below — "draining" and "deadlocked" must not render the
187
+ # same, which is why the 70-minute stall was invisible.
188
+ cordon_stall = _cordon_stall_suffix(cordons)
147
189
  quiet_windows = effective_quiet_hours(cfg.machines)
148
190
 
149
191
  statuses = check_all(machines, timeout=timeout)
@@ -211,7 +253,9 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
211
253
  # #2101 trap E: name the version it is draining for, so a stopped
212
254
  # machine reads as "the fleet is upgrading itself" rather than as
213
255
  # a mystery.
214
- label = f"{pause_state.detail.upper()} {label}"
256
+ # #2240: ...and say when it has stopped being that, so it does
257
+ # not read as normal in-progress behaviour for an hour.
258
+ label = f"{pause_state.detail.upper()}{cordon_stall} — {label}"
215
259
  elif pause_state is not None and pause_state.kind == "hand":
216
260
  label = f"PAUSED — {label}"
217
261
  elif pause_state is not None and pause_state.kind == "quiet":
@@ -76,6 +76,26 @@ else:
76
76
  for a cordon to lapse; the live loop renews on every run while the host is
77
77
  still behind (#2101 trap B).
78
78
 
79
+ #2240: A CORDON MEANS "NO NEW WORK", AND A FOLLOW-ON LEG IS NOT NEW WORK.
80
+ Folding cordons into the one `paused_set()` is what made #2101 buildable, but
81
+ it also gave a cordon a reach a *drain* must not have. Observed 2026-08-14:
82
+ the fleet cordoned to drain for v0.5.77; an entry that had finished Work and
83
+ Test needed its REVIEW dispatched; `pick_reviewer_machine` filtered every
84
+ cordoned host out of `paused_set()` and returned "no eligible reviewer
85
+ machine configured"; the entry therefore stayed `running` forever; a
86
+ perpetually-running entry defers the roll; a deferred roll leaves the cordon
87
+ up. Four cycles, 70 minutes, three idle machines, no exit without a human.
88
+
89
+ The cordon was blocking the completion of the very work it was waiting to
90
+ drain. So `paused_set(..., include_cordons=False)` — reached through
91
+ `follow_on_paused_set()` — is the set a dispatch consults when it is
92
+ finishing work already in flight rather than starting new work. It still
93
+ honours explicit `coord pause` and quiet hours: those are an operator's or a
94
+ policy's decision about a machine and mean what they say. A cordon is this
95
+ fleet's own drain asking a host to go idle, and refusing to dispatch the leg
96
+ that would make it idle is self-defeating (a `--merge-of`/review dispatch
97
+ onto a cordoned host is what the drain WANTS — it is what ends the work).
98
+
79
99
  #2146: OPERATOR-SET quiet hours. #1862's window can only be declared in
80
100
  `coordinator.yml`, which on a thin client is a read-only cache that is
81
101
  re-fetched and overwritten on essentially every command, and on the daemon
@@ -142,7 +162,10 @@ def _state_path() -> Path:
142
162
 
143
163
 
144
164
  def paused_set(
145
- machines: Sequence["Machine"] | None = None, *, now: datetime | None = None,
165
+ machines: Sequence["Machine"] | None = None,
166
+ *,
167
+ now: datetime | None = None,
168
+ include_cordons: bool = True,
146
169
  ) -> set[str]:
147
170
  """Read the current set of paused machine names (#1563: daemon-aware).
148
171
 
@@ -160,16 +183,54 @@ def paused_set(
160
183
  call site) to fold quiet hours into the LOCAL computation — the daemon's
161
184
  own in-process tick-loop calls (no board service configured for
162
185
  itself), and any solo/local use with no daemon at all.
186
+
187
+ *include_cordons* (#2240) is False only for a dispatch that FINISHES work
188
+ already in flight — see `follow_on_paused_set()`, which is the name every
189
+ caller should use, and the module docstring for the 70-minute fleet-wide
190
+ deadlock that made this necessary. It never widens the set: explicit
191
+ pauses and quiet hours are untouched, and a cordon read that fails is
192
+ left IN (a cordon we could not resolve stays a pause, the same direction
193
+ every other read here fails in).
163
194
  """
164
195
  svc = _resolve_service()
165
196
  if svc is not None:
166
197
  from coord.client import fetch_paused_machines # noqa: PLC0415
167
198
 
168
199
  try:
169
- return fetch_paused_machines(svc)
200
+ names = fetch_paused_machines(svc)
170
201
  except Exception: # noqa: BLE001 — fail-soft read, see module docstring
171
202
  return set()
172
- return local_paused_set(machines, now=now)
203
+ if include_cordons:
204
+ return names
205
+ # The daemon publishes ONE union (`local_paused_set`), so the cordon
206
+ # half has to be subtracted here from its own endpoint — a second
207
+ # round trip, paid only on the follow-on path, rather than a second
208
+ # union the daemon would have to learn to publish.
209
+ try:
210
+ return names - set(cordons())
211
+ except Exception: # noqa: BLE001 — see docstring: cordons stay paused
212
+ return names
213
+ return local_paused_set(machines, now=now, include_cordons=include_cordons)
214
+
215
+
216
+ def follow_on_paused_set(
217
+ machines: Sequence["Machine"] | None = None, *, now: datetime | None = None,
218
+ ) -> set[str]:
219
+ """The pause set for a dispatch that COMPLETES in-flight work (#2240).
220
+
221
+ `paused_set()` minus release cordons. Use this — and only this — for a
222
+ review / smoke / fix leg of an assignment that is already running: a
223
+ cordon means "route no NEW work here", and the tail of the work the
224
+ cordon is explicitly waiting to drain is not new work. Blocking it is
225
+ self-defeating in the precise way #2240 observed, because the entry can
226
+ then never finish, so the host never drains, so the cordon never lifts,
227
+ so the roll defers and re-cordons.
228
+
229
+ Everything else still applies: an explicit `coord pause` and a quiet-hours
230
+ window both mean "this machine is unavailable, full stop", and neither is
231
+ this fleet's own drain talking to itself.
232
+ """
233
+ return paused_set(machines, now=now, include_cordons=False)
173
234
 
174
235
 
175
236
  def is_paused(
@@ -259,7 +320,10 @@ def _resolve_service(): # -> coord.client.ServiceConfig | None
259
320
 
260
321
 
261
322
  def local_paused_set(
262
- machines: Sequence["Machine"] | None = None, *, now: datetime | None = None,
323
+ machines: Sequence["Machine"] | None = None,
324
+ *,
325
+ now: datetime | None = None,
326
+ include_cordons: bool = True,
263
327
  ) -> set[str]:
264
328
  """The local, effective paused-machine set: explicit pauses UNION any
265
329
  machine currently inside its quiet-hours window (#1862) UNION any machine
@@ -279,8 +343,16 @@ def local_paused_set(
279
343
  the daemon's `/pause` endpoint handler calls (passing `config.machines`
280
344
  so quiet hours apply), and what `paused_set()` itself falls through to
281
345
  when no board service is configured.
346
+
347
+ *include_cordons* (#2240) drops the cordon half for a dispatch that
348
+ finishes work already in flight — see `follow_on_paused_set()`. The
349
+ daemon's own `/pause` handler must never pass it: what that endpoint
350
+ publishes is the full routing set, and the subtraction is the caller's
351
+ decision to make, per dispatch.
282
352
  """
283
- effective = _explicit_paused_set() | cordoned_names(now=_epoch(now))
353
+ effective = _explicit_paused_set()
354
+ if include_cordons:
355
+ effective |= cordoned_names(now=_epoch(now))
284
356
  if not machines:
285
357
  return effective
286
358
  return effective | _quiet_covered_names(machines, now=now)